-
Notifications
You must be signed in to change notification settings - Fork 82
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#923 replace Spyc with Symfony YAML class
- Loading branch information
1 parent
26516b1
commit ec05408
Showing
17 changed files
with
2,219 additions
and
1,188 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of the Symfony package. | ||
* | ||
* (c) Fabien Potencier <[email protected]> | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
namespace Symfony\Component\Yaml; | ||
|
||
/** | ||
* Dumper dumps PHP variables to YAML strings. | ||
* | ||
* @author Fabien Potencier <[email protected]> | ||
*/ | ||
class Dumper | ||
{ | ||
/** | ||
* The amount of spaces to use for indentation of nested nodes. | ||
* | ||
* @var int | ||
*/ | ||
protected $indentation = 4; | ||
|
||
/** | ||
* Sets the indentation. | ||
* | ||
* @param int $num The amount of spaces to use for indentation of nested nodes | ||
*/ | ||
public function setIndentation($num) | ||
{ | ||
if ($num < 1) { | ||
throw new \InvalidArgumentException('The indentation must be greater than zero.'); | ||
} | ||
|
||
$this->indentation = (int) $num; | ||
} | ||
|
||
/** | ||
* Dumps a PHP value to YAML. | ||
* | ||
* @param mixed $input The PHP value | ||
* @param int $inline The level where you switch to inline YAML | ||
* @param int $indent The level of indentation (used internally) | ||
* @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 string The YAML representation of the PHP value | ||
*/ | ||
public function dump($input, $inline = 0, $indent = 0, $exceptionOnInvalidType = false, $objectSupport = false) | ||
{ | ||
$output = ''; | ||
$prefix = $indent ? str_repeat(' ', $indent) : ''; | ||
|
||
if ($inline <= 0 || !is_array($input) || empty($input)) { | ||
$output .= $prefix.Inline::dump($input, $exceptionOnInvalidType, $objectSupport); | ||
} else { | ||
$isAHash = Inline::isHash($input); | ||
|
||
foreach ($input as $key => $value) { | ||
$willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value); | ||
|
||
$output .= sprintf('%s%s%s%s', | ||
$prefix, | ||
$isAHash ? Inline::dump($key, $exceptionOnInvalidType, $objectSupport).':' : '-', | ||
$willBeInlined ? ' ' : "\n", | ||
$this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $exceptionOnInvalidType, $objectSupport) | ||
).($willBeInlined ? "\n" : ''); | ||
} | ||
} | ||
|
||
return $output; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of the Symfony package. | ||
* | ||
* (c) Fabien Potencier <[email protected]> | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
namespace Symfony\Component\Yaml; | ||
|
||
/** | ||
* Escaper encapsulates escaping rules for single and double-quoted | ||
* YAML strings. | ||
* | ||
* @author Matthew Lewinski <[email protected]> | ||
* | ||
* @internal | ||
*/ | ||
class Escaper | ||
{ | ||
// Characters that would cause a dumped string to require double quoting. | ||
const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; | ||
|
||
// Mapping arrays for escaping a double quoted string. The backslash is | ||
// first to ensure proper escaping because str_replace operates iteratively | ||
// on the input arrays. This ordering of the characters avoids the use of strtr, | ||
// which performs more slowly. | ||
private static $escapees = array('\\', '\\\\', '\\"', '"', | ||
"\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", | ||
"\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", | ||
"\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", | ||
"\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", | ||
"\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9"); | ||
private static $escaped = array('\\\\', '\\"', '\\\\', '\\"', | ||
'\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', | ||
'\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', | ||
'\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', | ||
'\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', | ||
'\\N', '\\_', '\\L', '\\P'); | ||
|
||
/** | ||
* Determines if a PHP value would require double quoting in YAML. | ||
* | ||
* @param string $value A PHP value | ||
* | ||
* @return bool True if the value would require double quotes | ||
*/ | ||
public static function requiresDoubleQuoting($value) | ||
{ | ||
return preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); | ||
} | ||
|
||
/** | ||
* Escapes and surrounds a PHP value with double quotes. | ||
* | ||
* @param string $value A PHP value | ||
* | ||
* @return string The quoted, escaped string | ||
*/ | ||
public static function escapeWithDoubleQuotes($value) | ||
{ | ||
return sprintf('"%s"', str_replace(self::$escapees, self::$escaped, $value)); | ||
} | ||
|
||
/** | ||
* Determines if a PHP value would require single quoting in YAML. | ||
* | ||
* @param string $value A PHP value | ||
* | ||
* @return bool True if the value would require single quotes | ||
*/ | ||
public static function requiresSingleQuoting($value) | ||
{ | ||
// Determines if a PHP value is entirely composed of a value that would | ||
// require single quoting in YAML. | ||
if (in_array(strtolower($value), array('null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'))) { | ||
return true; | ||
} | ||
|
||
// Determines if the PHP value contains any single characters that would | ||
// cause it to require single quoting in YAML. | ||
return preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` ]/x', $value); | ||
} | ||
|
||
/** | ||
* Escapes and surrounds a PHP value with single quotes. | ||
* | ||
* @param string $value A PHP value | ||
* | ||
* @return string The quoted, escaped string | ||
*/ | ||
public static function escapeWithSingleQuotes($value) | ||
{ | ||
return sprintf("'%s'", str_replace('\'', '\'\'', $value)); | ||
} | ||
} |
Oops, something went wrong.