当前位置: 首页>>代码示例>>PHP>>正文


PHP Inline::parseScalar方法代码示例

本文整理汇总了PHP中Symfony\Component\Yaml\Inline::parseScalar方法的典型用法代码示例。如果您正苦于以下问题:PHP Inline::parseScalar方法的具体用法?PHP Inline::parseScalar怎么用?PHP Inline::parseScalar使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Symfony\Component\Yaml\Inline的用法示例。


在下文中一共展示了Inline::parseScalar方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: parse

 /**
  * Parses a YAML string to a PHP value.
  *
  * @param string $value A YAML string
  *
  * @return mixed  A PHP value
  *
  * @throws ParseException If the YAML is not valid
  */
 public function parse($value)
 {
     $this->currentLineNb = -1;
     $this->currentLine = '';
     $this->lines = explode("\n", $this->cleanup($value));
     if (function_exists('mb_detect_encoding') && false === mb_detect_encoding($value, 'UTF-8', true)) {
         throw new ParseException('The YAML value does not appear to be valid UTF-8.');
     }
     if (function_exists('mb_internal_encoding') && (int) ini_get('mbstring.func_overload') & 2) {
         $mbEncoding = mb_internal_encoding();
         mb_internal_encoding('UTF-8');
     }
     $data = array();
     $context = null;
     while ($this->moveToNextLine()) {
         if ($this->isCurrentLineEmpty()) {
             continue;
         }
         // tab?
         if ("\t" === $this->currentLine[0]) {
             throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
         }
         $isRef = $isInPlace = $isProcessed = false;
         if (preg_match('#^\\-((?P<leadspaces>\\s+)(?P<value>.+?))?\\s*$#u', $this->currentLine, $values)) {
             if ($context && 'mapping' == $context) {
                 throw new ParseException('You cannot define a sequence item when in a mapping');
             }
             $context = 'sequence';
             if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#u', $values['value'], $matches)) {
                 $isRef = $matches['ref'];
                 $values['value'] = $matches['value'];
             }
             // array
             if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
                 $c = $this->getRealCurrentLineNb() + 1;
                 $parser = new Parser($c);
                 $parser->refs =& $this->refs;
                 $data[] = $parser->parse($this->getNextEmbedBlock());
             } else {
                 if (isset($values['leadspaces']) && ' ' == $values['leadspaces'] && preg_match('#^(?P<key>' . Inline::REGEX_QUOTED_STRING . '|[^ \'"\\{\\[].*?) *\\:(\\s+(?P<value>.+?))?\\s*$#u', $values['value'], $matches)) {
                     // this is a compact notation element, add to next block and parse
                     $c = $this->getRealCurrentLineNb();
                     $parser = new Parser($c);
                     $parser->refs =& $this->refs;
                     $block = $values['value'];
                     if (!$this->isNextLineIndented()) {
                         $block .= "\n" . $this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2);
                     }
                     $data[] = $parser->parse($block);
                 } else {
                     $data[] = $this->parseValue($values['value']);
                 }
             }
         } elseif (preg_match('#^(?P<key>' . Inline::REGEX_QUOTED_STRING . '|[^ \'"\\[\\{].*?) *\\:(\\s+(?P<value>.+?))?\\s*$#u', $this->currentLine, $values)) {
             if ($context && 'sequence' == $context) {
                 throw new ParseException('You cannot define a mapping item when in a sequence');
             }
             $context = 'mapping';
             try {
                 $key = Inline::parseScalar($values['key']);
             } catch (ParseException $e) {
                 $e->setParsedLine($this->getRealCurrentLineNb() + 1);
                 $e->setSnippet($this->currentLine);
                 throw $e;
             }
             if ('<<' === $key) {
                 if (isset($values['value']) && 0 === strpos($values['value'], '*')) {
                     $isInPlace = substr($values['value'], 1);
                     if (!array_key_exists($isInPlace, $this->refs)) {
                         throw new ParseException(sprintf('Reference "%s" does not exist.', $isInPlace), $this->getRealCurrentLineNb() + 1, $this->currentLine);
                     }
                 } else {
                     if (isset($values['value']) && $values['value'] !== '') {
                         $value = $values['value'];
                     } else {
                         $value = $this->getNextEmbedBlock();
                     }
                     $c = $this->getRealCurrentLineNb() + 1;
                     $parser = new Parser($c);
                     $parser->refs =& $this->refs;
                     $parsed = $parser->parse($value);
                     $merged = array();
                     if (!is_array($parsed)) {
                         throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
                     } elseif (isset($parsed[0])) {
                         // Numeric array, merge individual elements
                         foreach (array_reverse($parsed) as $parsedItem) {
                             if (!is_array($parsedItem)) {
                                 throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem);
                             }
                             $merged = array_merge($parsedItem, $merged);
//.........这里部分代码省略.........
开发者ID:CrazyDev,项目名称:minewriter,代码行数:101,代码来源:Parser.php

示例2: parse

 /**
  * Parses a YAML string to a PHP value.
  *
  * @param string  $value                  A YAML string
  * @param bool    $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
  * @param bool    $objectSupport          true if object support is enabled, false otherwise
  *
  * @return mixed  A PHP value
  *
  * @throws ParseException If the YAML is not valid
  */
 public function parse($value, $exceptionOnInvalidType = false, $objectSupport = false)
 {
     $this->currentLineNb = -1;
     $this->currentLine = '';
     $this->lines = explode("\n", $this->cleanup($value));
     if (!preg_match('//u', $value)) {
         throw new ParseException('The YAML value does not appear to be valid UTF-8.');
     }
     if (function_exists('mb_internal_encoding') && (int) ini_get('mbstring.func_overload') & 2) {
         $mbEncoding = mb_internal_encoding();
         mb_internal_encoding('UTF-8');
     }
     $data = array();
     $context = null;
     $allowOverwrite = false;
     while ($this->moveToNextLine()) {
         if ($this->isCurrentLineEmpty()) {
             continue;
         }
         // tab?
         if ("\t" === $this->currentLine[0]) {
             throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
         }
         $isRef = $mergeNode = false;
         if (preg_match('#^\\-((?P<leadspaces>\\s+)(?P<value>.+?))?\\s*$#u', $this->currentLine, $values)) {
             if ($context && 'mapping' == $context) {
                 throw new ParseException('You cannot define a sequence item when in a mapping');
             }
             $context = 'sequence';
             if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#u', $values['value'], $matches)) {
                 $isRef = $matches['ref'];
                 $values['value'] = $matches['value'];
             }
             // array
             if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
                 $c = $this->getRealCurrentLineNb() + 1;
                 $parser = new Parser($c);
                 $parser->refs =& $this->refs;
                 $data[] = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport);
             } else {
                 if (isset($values['leadspaces']) && ' ' == $values['leadspaces'] && preg_match('#^(?P<key>' . Inline::REGEX_QUOTED_STRING . '|[^ \'"\\{\\[].*?) *\\:(\\s+(?P<value>.+?))?\\s*$#u', $values['value'], $matches)) {
                     // this is a compact notation element, add to next block and parse
                     $c = $this->getRealCurrentLineNb();
                     $parser = new Parser($c);
                     $parser->refs =& $this->refs;
                     $block = $values['value'];
                     if ($this->isNextLineIndented()) {
                         $block .= "\n" . $this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2);
                     }
                     $data[] = $parser->parse($block, $exceptionOnInvalidType, $objectSupport);
                 } else {
                     $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport);
                 }
             }
         } elseif (preg_match('#^(?P<key>' . Inline::REGEX_QUOTED_STRING . '|[^ \'"\\[\\{].*?) *\\:(\\s+(?P<value>.+?))?\\s*$#u', $this->currentLine, $values) && (false === strpos($values['key'], ' #') || in_array($values['key'][0], array('"', "'")))) {
             if ($context && 'sequence' == $context) {
                 throw new ParseException('You cannot define a mapping item when in a sequence');
             }
             $context = 'mapping';
             // force correct settings
             Inline::parse(null, $exceptionOnInvalidType, $objectSupport, $this->refs);
             try {
                 $key = Inline::parseScalar($values['key']);
             } catch (ParseException $e) {
                 $e->setParsedLine($this->getRealCurrentLineNb() + 1);
                 $e->setSnippet($this->currentLine);
                 throw $e;
             }
             if ('<<' === $key) {
                 $mergeNode = true;
                 $allowOverwrite = true;
                 if (isset($values['value']) && 0 === strpos($values['value'], '*')) {
                     $refName = substr($values['value'], 1);
                     if (!array_key_exists($refName, $this->refs)) {
                         throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine);
                     }
                     $refValue = $this->refs[$refName];
                     if (!is_array($refValue)) {
                         throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
                     }
                     foreach ($refValue as $key => $value) {
                         if (!isset($data[$key])) {
                             $data[$key] = $value;
                         }
                     }
                 } else {
                     if (isset($values['value']) && $values['value'] !== '') {
                         $value = $values['value'];
                     } else {
//.........这里部分代码省略.........
开发者ID:mawaha,项目名称:tracker,代码行数:101,代码来源:Parser.php

示例3: parse

 /**
  * Parses a YAML string to a PHP value.
  *
  * @param string $value A YAML string
  * @param int    $flags A bit field of PARSE_* constants to customize the YAML parser behavior
  *
  * @return mixed A PHP value
  *
  * @throws ParseException If the YAML is not valid
  */
 public function parse($value, $flags = 0)
 {
     if (is_bool($flags)) {
         @trigger_error('Passing a boolean flag to toggle exception handling is deprecated since version 3.1 and will be removed in 4.0. Use the Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE flag instead.', E_USER_DEPRECATED);
         if ($flags) {
             $flags = Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE;
         } else {
             $flags = 0;
         }
     }
     if (func_num_args() >= 3) {
         @trigger_error('Passing a boolean flag to toggle object support is deprecated since version 3.1 and will be removed in 4.0. Use the Yaml::PARSE_OBJECT flag instead.', E_USER_DEPRECATED);
         if (func_get_arg(2)) {
             $flags |= Yaml::PARSE_OBJECT;
         }
     }
     if (func_num_args() >= 4) {
         @trigger_error('Passing a boolean flag to toggle object for map support is deprecated since version 3.1 and will be removed in 4.0. Use the Yaml::PARSE_OBJECT_FOR_MAP flag instead.', E_USER_DEPRECATED);
         if (func_get_arg(3)) {
             $flags |= Yaml::PARSE_OBJECT_FOR_MAP;
         }
     }
     if (!preg_match('//u', $value)) {
         throw new ParseException('The YAML value does not appear to be valid UTF-8.');
     }
     $this->currentLineNb = -1;
     $this->currentLine = '';
     $value = $this->cleanup($value);
     $this->lines = explode("\n", $value);
     if (null === $this->totalNumberOfLines) {
         $this->totalNumberOfLines = count($this->lines);
     }
     if (2 & (int) ini_get('mbstring.func_overload')) {
         $mbEncoding = mb_internal_encoding();
         mb_internal_encoding('UTF-8');
     }
     $data = array();
     $context = null;
     $allowOverwrite = false;
     while ($this->moveToNextLine()) {
         if ($this->isCurrentLineEmpty()) {
             continue;
         }
         // tab?
         if ("\t" === $this->currentLine[0]) {
             throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
         }
         $isRef = $mergeNode = false;
         if (preg_match('#^\\-((?P<leadspaces>\\s+)(?P<value>.+?))?\\s*$#u', $this->currentLine, $values)) {
             if ($context && 'mapping' == $context) {
                 throw new ParseException('You cannot define a sequence item when in a mapping', $this->getRealCurrentLineNb() + 1, $this->currentLine);
             }
             $context = 'sequence';
             if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#u', $values['value'], $matches)) {
                 $isRef = $matches['ref'];
                 $values['value'] = $matches['value'];
             }
             // array
             if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
                 $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags);
             } else {
                 if (isset($values['leadspaces']) && preg_match('#^(?P<key>' . Inline::REGEX_QUOTED_STRING . '|[^ \'"\\{\\[].*?) *\\:(\\s+(?P<value>.+?))?\\s*$#u', $values['value'], $matches)) {
                     // this is a compact notation element, add to next block and parse
                     $block = $values['value'];
                     if ($this->isNextLineIndented()) {
                         $block .= "\n" . $this->getNextEmbedBlock($this->getCurrentLineIndentation() + strlen($values['leadspaces']) + 1);
                     }
                     $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags);
                 } else {
                     $data[] = $this->parseValue($values['value'], $flags, $context);
                 }
             }
             if ($isRef) {
                 $this->refs[$isRef] = end($data);
             }
         } elseif (preg_match('#^(?P<key>' . Inline::REGEX_QUOTED_STRING . '|[^ \'"\\[\\{].*?) *\\:(\\s+(?P<value>.+?))?\\s*$#u', $this->currentLine, $values) && (false === strpos($values['key'], ' #') || in_array($values['key'][0], array('"', "'")))) {
             if ($context && 'sequence' == $context) {
                 throw new ParseException('You cannot define a mapping item when in a sequence', $this->currentLineNb + 1, $this->currentLine);
             }
             $context = 'mapping';
             // force correct settings
             Inline::parse(null, $flags, $this->refs);
             try {
                 Inline::$parsedLineNumber = $this->getRealCurrentLineNb();
                 $key = Inline::parseScalar($values['key']);
             } catch (ParseException $e) {
                 $e->setParsedLine($this->getRealCurrentLineNb() + 1);
                 $e->setSnippet($this->currentLine);
                 throw $e;
             }
//.........这里部分代码省略.........
开发者ID:Gladhon,项目名称:symfony,代码行数:101,代码来源:Parser.php

示例4: testParseScalarWithCorrectlyQuotedStringShouldReturnString

 public function testParseScalarWithCorrectlyQuotedStringShouldReturnString()
 {
     $value = "'don''t do somthin'' like that'";
     $expect = "don't do somthin' like that";
     $this->assertSame($expect, Inline::parseScalar($value));
 }
开发者ID:senthil-r-wiredelta,项目名称:meilleure-visite,代码行数:6,代码来源:InlineTest.php

示例5: parse

public function parse($value, $exceptionOnInvalidType = false, $objectSupport = false, $objectForMap = false)
{
if (!preg_match('//u', $value)) {
throw new ParseException('The YAML value does not appear to be valid UTF-8.');
}
$this->currentLineNb = -1;
$this->currentLine = '';
$value = $this->cleanup($value);
$this->lines = explode("\n", $value);

if (2  & (int) ini_get('mbstring.func_overload')) {
$mbEncoding = mb_internal_encoding();
mb_internal_encoding('UTF-8');
}

$data = array();
$context = null;
$allowOverwrite = false;
while ($this->moveToNextLine()) {
if ($this->isCurrentLineEmpty()) {
continue;
}


 if ("\t" === $this->currentLine[0]) {
throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
}

$isRef = $mergeNode = false;
if (preg_match('#^\-((?P<leadspaces>\s+)(?P<value>.+?))?\s*$#u', $this->currentLine, $values)) {
if ($context && 'mapping' == $context) {
throw new ParseException('You cannot define a sequence item when in a mapping');
}
$context = 'sequence';

if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#u', $values['value'], $matches)) {
$isRef = $matches['ref'];
$values['value'] = $matches['value'];
}


 if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
$c = $this->getRealCurrentLineNb() + 1;
$parser = new self($c);
$parser->refs = &$this->refs;
$data[] = $parser->parse($this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport, $objectForMap);
} else {
if (isset($values['leadspaces'])
&& preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $values['value'], $matches)
) {

 $c = $this->getRealCurrentLineNb();
$parser = new self($c);
$parser->refs = &$this->refs;

$block = $values['value'];
if ($this->isNextLineIndented()) {
$block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + strlen($values['leadspaces']) + 1);
}

$data[] = $parser->parse($block, $exceptionOnInvalidType, $objectSupport, $objectForMap);
} else {
$data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport, $objectForMap, $context);
}
}
if ($isRef) {
$this->refs[$isRef] = end($data);
}
} elseif (preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $this->currentLine, $values) && (false === strpos($values['key'], ' #') || in_array($values['key'][0], array('"', "'")))) {
if ($context && 'sequence' == $context) {
throw new ParseException('You cannot define a mapping item when in a sequence');
}
$context = 'mapping';


 Inline::parse(null, $exceptionOnInvalidType, $objectSupport, $objectForMap, $this->refs);
try {
$key = Inline::parseScalar($values['key']);
} catch (ParseException $e) {
$e->setParsedLine($this->getRealCurrentLineNb() + 1);
$e->setSnippet($this->currentLine);

throw $e;
}


 if (is_float($key)) {
$key = (string) $key;
}

if ('<<' === $key) {
$mergeNode = true;
$allowOverwrite = true;
if (isset($values['value']) && 0 === strpos($values['value'], '*')) {
$refName = substr($values['value'], 1);
if (!array_key_exists($refName, $this->refs)) {
throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine);
}

$refValue = $this->refs[$refName];
//.........这里部分代码省略.........
开发者ID:Ryu0621,项目名称:SaNaVi,代码行数:101,代码来源:Parser.php


注:本文中的Symfony\Component\Yaml\Inline::parseScalar方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。