http://www.mediawiki.org/wiki/Special:Code/MediaWiki/71889
Revision: 71889 Author: siebrand Date: 2010-08-29 17:39:29 +0000 (Sun, 29 Aug 2010) Log Message: ----------- New version of spyc (r91) From: http://spyc.googlecode.com/svn/trunk/spyc.php Modified Paths: -------------- trunk/extensions/Translate/spyc/spyc.php Modified: trunk/extensions/Translate/spyc/spyc.php =================================================================== --- trunk/extensions/Translate/spyc/spyc.php 2010-08-29 17:13:14 UTC (rev 71888) +++ trunk/extensions/Translate/spyc/spyc.php 2010-08-29 17:39:29 UTC (rev 71889) @@ -10,25 +10,25 @@ * @package Spyc */ -if ( !function_exists( 'spyc_load' ) ) { +if (!function_exists('spyc_load')) { /** * Parses YAML to array. * @param string $string YAML string. * @return array */ - function spyc_load ( $string ) { - return Spyc::YAMLLoadString( $string ); + function spyc_load ($string) { + return Spyc::YAMLLoadString($string); } } -if ( !function_exists( 'spyc_load_file' ) ) { +if (!function_exists('spyc_load_file')) { /** * Parses YAML to array. * @param string $file Path to YAML file. * @return array */ - function spyc_load_file ( $file ) { - return Spyc::YAMLLoad( $file ); + function spyc_load_file ($file) { + return Spyc::YAMLLoad($file); } } @@ -105,8 +105,8 @@ * @param string $input * @return array */ - public function load ( $input ) { - return $this->__loadString( $input ); + public function load ($input) { + return $this->__loadString($input); } /** @@ -114,8 +114,8 @@ * @param string $file * @return array */ - public function loadFile ( $file ) { - return $this->__load( $file ); + public function loadFile ($file) { + return $this->__load($file); } /** @@ -133,9 +133,9 @@ * @return array * @param string $input Path of YAML file or string containing YAML */ - public static function YAMLLoad( $input ) { + public static function YAMLLoad($input) { $Spyc = new Spyc; - return $Spyc->__load( $input ); + return $Spyc->__load($input); } /** @@ -157,9 +157,9 @@ * @return array * @param string $input String containing YAML */ - public static function YAMLLoadString( $input ) { + public static function YAMLLoadString($input) { $Spyc = new Spyc; - return $Spyc->__loadString( $input ); + return $Spyc->__loadString($input); } /** @@ -182,9 +182,9 @@ * @param int $indent Pass in false to use the default, which is 2 * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) */ - public static function YAMLDump( $array, $indent = false, $wordwrap = false ) { + public static function YAMLDump($array,$indent = false,$wordwrap = false) { $spyc = new Spyc; - return $spyc->dump( $array, $indent, $wordwrap ); + return $spyc->dump($array,$indent,$wordwrap); } @@ -208,18 +208,18 @@ * @param int $indent Pass in false to use the default, which is 2 * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) */ - public function dump( $array, $indent = false, $wordwrap = false ) { + public function dump($array,$indent = false,$wordwrap = false) { // Dumps to some very clean YAML. We'll have to add some more features // and options soon. And better support for folding. // New features and options. - if ( $indent === false or !is_numeric( $indent ) ) { + if ($indent === false or !is_numeric($indent)) { $this->_dumpIndent = 2; } else { $this->_dumpIndent = $indent; } - if ( $wordwrap === false or !is_numeric( $wordwrap ) ) { + if ($wordwrap === false or !is_numeric($wordwrap)) { $this->_dumpWordWrap = 40; } else { $this->_dumpWordWrap = $wordwrap; @@ -229,13 +229,13 @@ $string = "---\n"; // Start at the base of the array and move through it. - if ( $array ) { + if ($array) { $array = (array)$array; - $first_key = key( $array ); + $first_key = key($array); $previous_key = -1; - foreach ( $array as $key => $value ) { - $string .= $this->_yamlize( $key, $value, 0, $previous_key, $first_key ); + foreach ($array as $key => $value) { + $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key, $array); $previous_key = $key; } } @@ -250,20 +250,20 @@ * @param $value The value of the item * @param $indent The indent of the current node */ - private function _yamlize( $key, $value, $indent, $previous_key = -1, $first_key = 0 ) { - if ( is_array( $value ) ) { - if ( empty ( $value ) ) - return $this->_dumpNode( $key, array(), $indent, $previous_key, $first_key ); + private function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0, $source_array = null) { + if (is_array($value)) { + if (empty ($value)) + return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key, $source_array); // It has children. What to do? // Make it the right kind of item - $string = $this->_dumpNode( $key, null, $indent, $previous_key, $first_key ); + $string = $this->_dumpNode($key, NULL, $indent, $previous_key, $first_key, $source_array); // Add the indent $indent += $this->_dumpIndent; // Yamlize the array - $string .= $this->_yamlizeArray( $value, $indent ); - } elseif ( !is_array( $value ) ) { + $string .= $this->_yamlizeArray($value,$indent); + } elseif (!is_array($value)) { // It doesn't have children. Yip. - $string = $this->_dumpNode( $key, $value, $indent, $previous_key, $first_key ); + $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key, $source_array); } return $string; } @@ -275,13 +275,14 @@ * @param $array The array you want to convert * @param $indent The indent of the current level */ - private function _yamlizeArray( $array, $indent ) { - if ( is_array( $array ) ) { + private function _yamlizeArray($array,$indent) { + if (is_array($array)) { $string = ''; $previous_key = -1; - $first_key = key( $array ); - foreach ( $array as $key => $value ) { - $string .= $this->_yamlize( $key, $value, $indent, $previous_key, $first_key ); + $first_key = key($array); + + foreach ($array as $key => $value) { + $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key, $array); $previous_key = $key; } return $string; @@ -298,38 +299,40 @@ * @param $value The value of the item * @param $indent The indent of the current node */ - private function _dumpNode( $key, $value, $indent, $previous_key = -1, $first_key = 0 ) { + private function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0, $source_array = null) { // do some folding here, for blocks - if ( is_string ( $value ) && ( ( strpos( $value, "\n" ) !== false || strpos( $value, ": " ) !== false || strpos( $value, "- " ) !== false || - strpos( $value, "*" ) !== false || strpos( $value, "#" ) !== false || strpos( $value, "<" ) !== false || strpos( $value, ">" ) !== false || strpos ( $value, ' ' ) !== false || - strpos( $value, "[" ) !== false || strpos( $value, "]" ) !== false || strpos( $value, "{" ) !== false || strpos( $value, "}" ) !== false ) || substr ( $value, -1, 1 ) == ':' ) + if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false || + strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false || strpos ($value, ' ') !== false || + strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || strpos($value,"&") !== false || + substr ($value, -1, 1) == ':') ) { - $value = $this->_doLiteralBlock( $value, $indent ); + $value = $this->_doLiteralBlock($value,$indent); } else { - $value = $this->_doFolding( $value, $indent ); + $value = $this->_doFolding($value,$indent); } - if ( $value === array() ) $value = '[ ]'; - if ( in_array ( $value, array ( 'true', 'TRUE', 'false', 'FALSE', 'y', 'Y', 'n', 'N', 'null', 'NULL' ), true ) ) { - $value = $this->_doLiteralBlock( $value, $indent ); + if ($value === array()) $value = '[ ]'; + if (in_array ($value, array ('true', 'TRUE', 'false', 'FALSE', 'y', 'Y', 'n', 'N', 'null', 'NULL'), true)) { + $value = $this->_doLiteralBlock($value,$indent); } - if ( trim ( $value ) != $value ) - $value = $this->_doLiteralBlock( $value, $indent ); + if (trim ($value) != $value) + $value = $this->_doLiteralBlock($value,$indent); - if ( is_bool( $value ) ) { - $value = ( $value ) ? "true" : "false"; + if (is_bool($value)) { + $value = ($value) ? "true" : "false"; } - $spaces = str_repeat( ' ', $indent ); + $spaces = str_repeat(' ',$indent); - if ( is_int( $key ) && $key - 1 == $previous_key && $first_key === 0 ) { + //if (is_int($key) && $key - 1 == $previous_key && $first_key===0) { + if (is_array ($source_array) && array_keys($source_array) === range(0, count($source_array) - 1)) { // It's a sequence - $string = $spaces . '- ' . $value . "\n"; + $string = $spaces.'- '.$value."\n"; } else { - if ( $first_key === 0 ) throw new Exception( 'Keys are all screwy. The first one was zero, now it\'s "' . $key . '"' ); + // if ($first_key===0) throw new Exception('Keys are all screwy. The first one was zero, now it\'s "'. $key .'"'); // It's mapped - if ( strpos( $key, ":" ) !== false ) { $key = '"' . $key . '"'; } - $string = $spaces . $key . ': ' . $value . "\n"; + if (strpos($key, ":") !== false || strpos($key, "#") !== false) { $key = '"' . $key . '"'; } + $string = rtrim ($spaces.$key.': '.$value)."\n"; } return $string; } @@ -341,20 +344,20 @@ * @param $value * @param $indent int The value of the indent */ - private function _doLiteralBlock( $value, $indent ) { - if ( $value === "\n" ) return '\n'; - if ( strpos( $value, "\n" ) === false && strpos( $value, "'" ) === false ) { - return sprintf ( "'%s'", $value ); + private function _doLiteralBlock($value,$indent) { + if ($value === "\n") return '\n'; + if (strpos($value, "\n") === false && strpos($value, "'") === false) { + return sprintf ("'%s'", $value); } - if ( strpos( $value, "\n" ) === false && strpos( $value, '"' ) === false ) { - return sprintf ( '"%s"', $value ); + if (strpos($value, "\n") === false && strpos($value, '"') === false) { + return sprintf ('"%s"', $value); } - $exploded = explode( "\n", $value ); + $exploded = explode("\n",$value); $newValue = '|'; $indent += $this->_dumpIndent; - $spaces = str_repeat( ' ', $indent ); - foreach ( $exploded as $line ) { - $newValue .= "\n" . $spaces . ( $line ); + $spaces = str_repeat(' ',$indent); + foreach ($exploded as $line) { + $newValue .= "\n" . $spaces . ($line); } return $newValue; } @@ -365,16 +368,16 @@ * @return string * @param $value The string you wish to fold */ - private function _doFolding( $value, $indent ) { + private function _doFolding($value,$indent) { // Don't do anything if wordwrap is set to 0 - if ( $this->_dumpWordWrap !== 0 && is_string ( $value ) && strlen( $value ) > $this->_dumpWordWrap ) { + if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) { $indent += $this->_dumpIndent; - $indent = str_repeat( ' ', $indent ); - $wrapped = wordwrap( $value, $this->_dumpWordWrap, "\n$indent" ); - $value = ">\n" . $indent . $wrapped; + $indent = str_repeat(' ',$indent); + $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent"); + $value = ">\n".$indent.$wrapped; } else { - if ( $this->setting_dump_force_quotes && is_string ( $value ) ) + if ($this->setting_dump_force_quotes && is_string ($value)) $value = '"' . $value . '"'; } @@ -384,69 +387,69 @@ // LOADING FUNCTIONS - private function __load( $input ) { - $Source = $this->loadFromSource( $input ); - return $this->loadWithSource( $Source ); + private function __load($input) { + $Source = $this->loadFromSource($input); + return $this->loadWithSource($Source); } - private function __loadString( $input ) { - $Source = $this->loadFromString( $input ); - return $this->loadWithSource( $Source ); + private function __loadString($input) { + $Source = $this->loadFromString($input); + return $this->loadWithSource($Source); } - private function loadWithSource( $Source ) { - if ( empty ( $Source ) ) return array(); - if ( $this->setting_use_syck_is_possible && function_exists ( 'syck_load' ) ) { - $array = syck_load ( implode ( '', $Source ) ); - return is_array( $array ) ? $array : array(); + private function loadWithSource($Source) { + if (empty ($Source)) return array(); + if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) { + $array = syck_load (implode ('', $Source)); + return is_array($array) ? $array : array(); } $this->path = array(); $this->result = array(); - $cnt = count( $Source ); - for ( $i = 0; $i < $cnt; $i++ ) { + $cnt = count($Source); + for ($i = 0; $i < $cnt; $i++) { $line = $Source[$i]; - $this->indent = strlen( $line ) - strlen( ltrim( $line ) ); - $tempPath = $this->getParentPathByIndent( $this->indent ); - $line = self::stripIndent( $line, $this->indent ); - if ( self::isComment( $line ) ) continue; - if ( self::isEmpty( $line ) ) continue; + $this->indent = strlen($line) - strlen(ltrim($line)); + $tempPath = $this->getParentPathByIndent($this->indent); + $line = self::stripIndent($line, $this->indent); + if (self::isComment($line)) continue; + if (self::isEmpty($line)) continue; $this->path = $tempPath; - $literalBlockStyle = self::startsLiteralBlock( $line ); - if ( $literalBlockStyle ) { - $line = rtrim ( $line, $literalBlockStyle . " \n" ); + $literalBlockStyle = self::startsLiteralBlock($line); + if ($literalBlockStyle) { + $line = rtrim ($line, $literalBlockStyle . " \n"); $literalBlock = ''; $line .= $this->LiteralPlaceHolder; - while ( ++$i < $cnt && $this->literalBlockContinues( $Source[$i], $this->indent ) ) { - $literalBlock = $this->addLiteralLine( $literalBlock, $Source[$i], $literalBlockStyle ); + while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) { + $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle); } $i--; } - while ( ++$i < $cnt && self::greedilyNeedNextLine( $line ) ) { - $line = rtrim ( $line, " \n\t\r" ) . ' ' . ltrim ( $Source[$i], " \t" ); + while (++$i < $cnt && self::greedilyNeedNextLine($line)) { + $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t"); } $i--; - if ( strpos ( $line, '#' ) ) { - if ( strpos ( $line, '"' ) === false && strpos ( $line, "'" ) === false ) - $line = preg_replace( '/\s+#(.+)$/', '', $line ); + if (strpos ($line, '#')) { + if (strpos ($line, '"') === false && strpos ($line, "'") === false) + $line = preg_replace('/\s+#(.+)$/','',$line); } - $lineArray = $this->_parseLine( $line ); + $lineArray = $this->_parseLine($line); - if ( $literalBlockStyle ) - $lineArray = $this->revertLiteralPlaceHolder ( $lineArray, $literalBlock ); + if ($literalBlockStyle) + $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock); - $this->addArray( $lineArray, $this->indent ); + $this->addArray($lineArray, $this->indent); - foreach ( $this->delayedPath as $indent => $delayedPath ) + foreach ($this->delayedPath as $indent => $delayedPath) $this->path[$indent] = $delayedPath; $this->delayedPath = array(); @@ -455,17 +458,17 @@ return $this->result; } - private function loadFromSource ( $input ) { - if ( !empty( $input ) && strpos( $input, "\n" ) === false && file_exists( $input ) ) - return file( $input ); + private function loadFromSource ($input) { + if (!empty($input) && strpos($input, "\n") === false && file_exists($input)) + return file($input); - return $this->loadFromString( $input ); + return $this->loadFromString($input); } - private function loadFromString ( $input ) { - $lines = explode( "\n", $input ); - foreach ( $lines as $k => $_ ) { - $lines[$k] = rtrim ( $_, "\r" ); + private function loadFromString ($input) { + $lines = explode("\n",$input); + foreach ($lines as $k => $_) { + $lines[$k] = rtrim ($_, "\r"); } return $lines; } @@ -476,31 +479,33 @@ * @return array * @param string $line A line from the YAML file */ - private function _parseLine( $line ) { - if ( !$line ) return array(); - $line = trim( $line ); - if ( !$line ) return array(); + private function _parseLine($line) { + if (!$line) return array(); + $line = trim($line); + if (!$line) return array(); - $group = $this->nodeContainsGroup( $line ); - if ( $group ) { - $this->addGroup( $line, $group ); - $line = $this->stripGroup ( $line, $group ); + $array = array(); + + $group = $this->nodeContainsGroup($line); + if ($group) { + $this->addGroup($line, $group); + $line = $this->stripGroup ($line, $group); } - if ( $this->startsMappedSequence( $line ) ) - return $this->returnMappedSequence( $line ); + if ($this->startsMappedSequence($line)) + return $this->returnMappedSequence($line); - if ( $this->startsMappedValue( $line ) ) - return $this->returnMappedValue( $line ); + if ($this->startsMappedValue($line)) + return $this->returnMappedValue($line); - if ( $this->isArrayElement( $line ) ) - return $this->returnArrayElement( $line ); + if ($this->isArrayElement($line)) + return $this->returnArrayElement($line); - if ( $this->isPlainArray( $line ) ) - return $this->returnPlainArray( $line ); + if ($this->isPlainArray($line)) + return $this->returnPlainArray($line); - return $this->returnKeyValuePair( $line ); + return $this->returnKeyValuePair($line); } @@ -510,92 +515,92 @@ * @param string $value * @return mixed */ - private function _toType( $value ) { - if ( $value === '' ) return null; + private function _toType($value) { + if ($value === '') return null; $first_character = $value[0]; - $last_character = substr( $value, -1, 1 ); + $last_character = substr($value, -1, 1); $is_quoted = false; do { - if ( !$value ) break; - if ( $first_character != '"' && $first_character != "'" ) break; - if ( $last_character != '"' && $last_character != "'" ) break; + if (!$value) break; + if ($first_character != '"' && $first_character != "'") break; + if ($last_character != '"' && $last_character != "'") break; $is_quoted = true; - } while ( 0 ); + } while (0); - if ( $is_quoted ) - return strtr( substr ( $value, 1, -1 ), array ( '\\"' => '"', '\'\'' => '\'', '\\\'' => '\'' ) ); + if ($is_quoted) + return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\'\'' => '\'', '\\\'' => '\'')); - if ( strpos( $value, ' #' ) !== false && !$is_quoted ) - $value = preg_replace( '/\s+#(.+)$/', '', $value ); + if (strpos($value, ' #') !== false && !$is_quoted) + $value = preg_replace('/\s+#(.+)$/','',$value); - if ( !$is_quoted ) $value = str_replace( '\n', "\n", $value ); + if (!$is_quoted) $value = str_replace('\n', "\n", $value); - if ( $first_character == '[' && $last_character == ']' ) { + if ($first_character == '[' && $last_character == ']') { // Take out strings sequences and mappings - $innerValue = trim( substr ( $value, 1, -1 ) ); - if ( $innerValue === '' ) return array(); - $explode = $this->_inlineEscape( $innerValue ); + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + $explode = $this->_inlineEscape($innerValue); // Propagate value array $value = array(); - foreach ( $explode as $v ) { - $value[] = $this->_toType( $v ); + foreach ($explode as $v) { + $value[] = $this->_toType($v); } return $value; } - if ( strpos( $value, ': ' ) !== false && $first_character != '{' ) { - $array = explode( ': ', $value ); - $key = trim( $array[0] ); - array_shift( $array ); - $value = trim( implode( ': ', $array ) ); - $value = $this->_toType( $value ); - return array( $key => $value ); + if (strpos($value,': ')!==false && $first_character != '{') { + $array = explode(': ',$value); + $key = trim($array[0]); + array_shift($array); + $value = trim(implode(': ',$array)); + $value = $this->_toType($value); + return array($key => $value); } - if ( $first_character == '{' && $last_character == '}' ) { - $innerValue = trim( substr ( $value, 1, -1 ) ); - if ( $innerValue === '' ) return array(); + if ($first_character == '{' && $last_character == '}') { + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); // Inline Mapping // Take out strings sequences and mappings - $explode = $this->_inlineEscape( $innerValue ); + $explode = $this->_inlineEscape($innerValue); // Propagate value array $array = array(); - foreach ( $explode as $v ) { - $SubArr = $this->_toType( $v ); - if ( empty( $SubArr ) ) continue; - if ( is_array ( $SubArr ) ) { - $array[key( $SubArr )] = $SubArr[key( $SubArr )]; continue; + foreach ($explode as $v) { + $SubArr = $this->_toType($v); + if (empty($SubArr)) continue; + if (is_array ($SubArr)) { + $array[key($SubArr)] = $SubArr[key($SubArr)]; continue; } $array[] = $SubArr; } return $array; } - if ( $value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~' ) { + if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') { return null; } - if ( intval( $first_character ) > 0 && preg_match ( '/^[1-9]+[0-9]*$/', $value ) ) { + if (intval($first_character) > 0 && preg_match ('/^[1-9]+[0-9]*$/', $value)) { $intvalue = (int)$value; - if ( $intvalue != PHP_INT_MAX ) + if ($intvalue != PHP_INT_MAX) $value = $intvalue; return $value; } - if ( in_array( $value, - array( 'true', 'on', '+', 'yes', 'y', 'True', 'TRUE', 'On', 'ON', 'YES', 'Yes', 'Y' ) ) ) { + if (in_array($value, + array('true', 'on', '+', 'yes', 'y', 'True', 'TRUE', 'On', 'ON', 'YES', 'Yes', 'Y'))) { return true; } - if ( in_array( strtolower( $value ), - array( 'false', 'off', '-', 'no', 'n' ) ) ) { + if (in_array(strtolower($value), + array('false', 'off', '-', 'no', 'n'))) { return false; } - if ( is_numeric( $value ) ) { - if ( $value === '0' ) return 0; - if ( trim ( $value, 0 ) === $value ) + if (is_numeric($value)) { + if ($value === '0') return 0; + if (trim ($value, 0) === $value) $value = (float)$value; return $value; } @@ -608,7 +613,7 @@ * @access private * @return array */ - private function _inlineEscape( $inline ) { + private function _inlineEscape($inline) { // There's gotta be a cleaner way to do this... // While pure sequences seem to be nesting just fine, // pure mappings and mappings with sequences inside can't go very @@ -620,42 +625,42 @@ // Check for strings $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/'; - if ( preg_match_all( $regex, $inline, $strings ) ) { + if (preg_match_all($regex,$inline,$strings)) { $saved_strings = $strings[0]; - $inline = preg_replace( $regex, 'YAMLString', $inline ); + $inline = preg_replace($regex,'YAMLString',$inline); } - unset( $regex ); + unset($regex); $i = 0; do { // Check for sequences - while ( preg_match( '/\[([^{}\[\]]+)\]/U', $inline, $matchseqs ) ) { + while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) { $seqs[] = $matchseqs[0]; - $inline = preg_replace( '/\[([^{}\[\]]+)\]/U', ( 'YAMLSeq' . ( count( $seqs ) - 1 ) . 's' ), $inline, 1 ); + $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1); } // Check for mappings - while ( preg_match( '/{([^\[\]{}]+)}/U', $inline, $matchmaps ) ) { + while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) { $maps[] = $matchmaps[0]; - $inline = preg_replace( '/{([^\[\]{}]+)}/U', ( 'YAMLMap' . ( count( $maps ) - 1 ) . 's' ), $inline, 1 ); + $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1); } - if ( $i++ >= 10 ) break; + if ($i++ >= 10) break; - } while ( strpos ( $inline, '[' ) !== false || strpos ( $inline, '{' ) !== false ); + } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false); - $explode = explode( ', ', $inline ); + $explode = explode(', ',$inline); $stringi = 0; $i = 0; - while ( 1 ) { + while (1) { // Re-add the sequences - if ( !empty( $seqs ) ) { - foreach ( $explode as $key => $value ) { - if ( strpos( $value, 'YAMLSeq' ) !== false ) { - foreach ( $seqs as $seqk => $seq ) { - $explode[$key] = str_replace( ( 'YAMLSeq' . $seqk . 's' ), $seq, $value ); + if (!empty($seqs)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + foreach ($seqs as $seqk => $seq) { + $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value); $value = $explode[$key]; } } @@ -663,11 +668,11 @@ } // Re-add the mappings - if ( !empty( $maps ) ) { - foreach ( $explode as $key => $value ) { - if ( strpos( $value, 'YAMLMap' ) !== false ) { - foreach ( $maps as $mapk => $map ) { - $explode[$key] = str_replace( ( 'YAMLMap' . $mapk . 's' ), $map, $value ); + if (!empty($maps)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLMap') !== false) { + foreach ($maps as $mapk => $map) { + $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value); $value = $explode[$key]; } } @@ -676,11 +681,11 @@ // Re-add the strings - if ( !empty( $saved_strings ) ) { - foreach ( $explode as $key => $value ) { - while ( strpos( $value, 'YAMLString' ) !== false ) { - $explode[$key] = preg_replace( '/YAMLString/', $saved_strings[$stringi], $value, 1 ); - unset( $saved_strings[$stringi] ); + if (!empty($saved_strings)) { + foreach ($explode as $key => $value) { + while (strpos($value,'YAMLString') !== false) { + $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1); + unset($saved_strings[$stringi]); ++$stringi; $value = $explode[$key]; } @@ -688,72 +693,72 @@ } $finished = true; - foreach ( $explode as $key => $value ) { - if ( strpos( $value, 'YAMLSeq' ) !== false ) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { $finished = false; break; } - if ( strpos( $value, 'YAMLMap' ) !== false ) { + if (strpos($value,'YAMLMap') !== false) { $finished = false; break; } - if ( strpos( $value, 'YAMLString' ) !== false ) { + if (strpos($value,'YAMLString') !== false) { $finished = false; break; } } - if ( $finished ) break; + if ($finished) break; $i++; - if ( $i > 10 ) + if ($i > 10) break; // Prevent infinite loops. } return $explode; } - private function literalBlockContinues ( $line, $lineIndent ) { - if ( !trim( $line ) ) return true; - if ( strlen( $line ) - strlen( ltrim( $line ) ) > $lineIndent ) return true; + private function literalBlockContinues ($line, $lineIndent) { + if (!trim($line)) return true; + if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true; return false; } - private function referenceContentsByAlias ( $alias ) { + private function referenceContentsByAlias ($alias) { do { - if ( !isset( $this->SavedGroups[$alias] ) ) { echo "Bad group name: $alias."; break; } + if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; } $groupPath = $this->SavedGroups[$alias]; $value = $this->result; - foreach ( $groupPath as $k ) { + foreach ($groupPath as $k) { $value = $value[$k]; } - } while ( false ); + } while (false); return $value; } - private function addArrayInline ( $array, $indent ) { + private function addArrayInline ($array, $indent) { $CommonGroupPath = $this->path; - if ( empty ( $array ) ) return false; + if (empty ($array)) return false; - foreach ( $array as $k => $_ ) { - $this->addArray( array( $k => $_ ), $indent ); + foreach ($array as $k => $_) { + $this->addArray(array($k => $_), $indent); $this->path = $CommonGroupPath; } return true; } - private function addArray ( $incoming_data, $incoming_indent ) { + private function addArray ($incoming_data, $incoming_indent) { // print_r ($incoming_data); - if ( count ( $incoming_data ) > 1 ) - return $this->addArrayInline ( $incoming_data, $incoming_indent ); + if (count ($incoming_data) > 1) + return $this->addArrayInline ($incoming_data, $incoming_indent); - $key = key ( $incoming_data ); - $value = isset( $incoming_data[$key] ) ? $incoming_data[$key] : null; - if ( $key === '__!YAMLZero' ) $key = '0'; + $key = key ($incoming_data); + $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null; + if ($key === '__!YAMLZero') $key = '0'; - if ( $incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor ) { // Shortcut for root-level values. - if ( $key || $key === '' || $key === '0' ) { + if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values. + if ($key || $key === '' || $key === '0') { $this->result[$key] = $value; } else { - $this->result[] = $value; end ( $this->result ); $key = key ( $this->result ); + $this->result[] = $value; end ($this->result); $key = key ($this->result); } $this->path[$incoming_indent] = $key; return; @@ -764,44 +769,47 @@ $history = array(); // Unfolding inner array tree. $history[] = $_arr = $this->result; - foreach ( $this->path as $k ) { + foreach ($this->path as $k) { $history[] = $_arr = $_arr[$k]; } - if ( $this->_containsGroupAlias ) { - $value = $this->referenceContentsByAlias( $this->_containsGroupAlias ); + if ($this->_containsGroupAlias) { + $value = $this->referenceContentsByAlias($this->_containsGroupAlias); $this->_containsGroupAlias = false; } // Adding string or numeric key to the innermost level or $this->arr. - if ( is_string( $key ) && $key == '<<' ) { - if ( !is_array ( $_arr ) ) { $_arr = array (); } + if (is_string($key) && $key == '<<') { + if (!is_array ($_arr)) { $_arr = array (); } - $_arr = array_merge ( $_arr, $value ); - } else if ( $key || $key === '' || $key === '0' ) { - $_arr[$key] = $value; + $_arr = array_merge ($_arr, $value); + } else if ($key || $key === '' || $key === '0') { + if (!is_array ($_arr)) + $_arr = array ($key=>$value); + else + $_arr[$key] = $value; } else { - if ( !is_array ( $_arr ) ) { $_arr = array ( $value ); $key = 0; } - else { $_arr[] = $value; end ( $_arr ); $key = key ( $_arr ); } + if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; } + else { $_arr[] = $value; end ($_arr); $key = key ($_arr); } } - $reverse_path = array_reverse( $this->path ); - $reverse_history = array_reverse ( $history ); + $reverse_path = array_reverse($this->path); + $reverse_history = array_reverse ($history); $reverse_history[0] = $_arr; - $cnt = count( $reverse_history ) - 1; - for ( $i = 0; $i < $cnt; $i++ ) { - $reverse_history[$i + 1][$reverse_path[$i]] = $reverse_history[$i]; + $cnt = count($reverse_history) - 1; + for ($i = 0; $i < $cnt; $i++) { + $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i]; } $this->result = $reverse_history[$cnt]; $this->path[$incoming_indent] = $key; - if ( $this->_containsGroupAnchor ) { + if ($this->_containsGroupAnchor) { $this->SavedGroups[$this->_containsGroupAnchor] = $this->path; - if ( is_array ( $value ) ) { - $k = key ( $value ); - if ( !is_int ( $k ) ) { + if (is_array ($value)) { + $k = key ($value); + if (!is_int ($k)) { $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k; } } @@ -810,209 +818,209 @@ } - private static function startsLiteralBlock ( $line ) { - $lastChar = substr ( trim( $line ), -1 ); - if ( $lastChar != '>' && $lastChar != '|' ) return false; - if ( $lastChar == '|' ) return $lastChar; + private static function startsLiteralBlock ($line) { + $lastChar = substr (trim($line), -1); + if ($lastChar != '>' && $lastChar != '|') return false; + if ($lastChar == '|') return $lastChar; // HTML tags should not be counted as literal blocks. - if ( preg_match ( '#<.*?>$#', $line ) ) return false; + if (preg_match ('#<.*?>$#', $line)) return false; return $lastChar; } - private static function greedilyNeedNextLine( $line ) { - $line = trim ( $line ); - if ( !strlen( $line ) ) return false; - if ( substr ( $line, -1, 1 ) == ']' ) return false; - if ( $line[0] == '[' ) return true; - if ( preg_match ( '#^[^:]+?:\s*\[#', $line ) ) return true; + private static function greedilyNeedNextLine($line) { + $line = trim ($line); + if (!strlen($line)) return false; + if (substr ($line, -1, 1) == ']') return false; + if ($line[0] == '[') return true; + if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true; return false; } - private function addLiteralLine ( $literalBlock, $line, $literalBlockStyle ) { - $line = self::stripIndent( $line ); - $line = rtrim ( $line, "\r\n\t " ) . "\n"; - if ( $literalBlockStyle == '|' ) { + private function addLiteralLine ($literalBlock, $line, $literalBlockStyle) { + $line = self::stripIndent($line); + $line = rtrim ($line, "\r\n\t ") . "\n"; + if ($literalBlockStyle == '|') { return $literalBlock . $line; } - if ( strlen( $line ) == 0 ) - return rtrim( $literalBlock, ' ' ) . "\n"; - if ( $line == "\n" && $literalBlockStyle == '>' ) { - return rtrim ( $literalBlock, " \t" ) . "\n"; + if (strlen($line) == 0) + return rtrim($literalBlock, ' ') . "\n"; + if ($line == "\n" && $literalBlockStyle == '>') { + return rtrim ($literalBlock, " \t") . "\n"; } - if ( $line != "\n" ) - $line = trim ( $line, "\r\n " ) . " "; + if ($line != "\n") + $line = trim ($line, "\r\n ") . " "; return $literalBlock . $line; } - function revertLiteralPlaceHolder ( $lineArray, $literalBlock ) { - foreach ( $lineArray as $k => $_ ) { - if ( is_array( $_ ) ) - $lineArray[$k] = $this->revertLiteralPlaceHolder ( $_, $literalBlock ); - else if ( substr( $_, -1 * strlen ( $this->LiteralPlaceHolder ) ) == $this->LiteralPlaceHolder ) - $lineArray[$k] = rtrim ( $literalBlock, " \r\n" ); + function revertLiteralPlaceHolder ($lineArray, $literalBlock) { + foreach ($lineArray as $k => $_) { + if (is_array($_)) + $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock); + else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder) + $lineArray[$k] = rtrim ($literalBlock, " \r\n"); } return $lineArray; } - private static function stripIndent ( $line, $indent = -1 ) { - if ( $indent == -1 ) $indent = strlen( $line ) - strlen( ltrim( $line ) ); - return substr ( $line, $indent ); + private static function stripIndent ($line, $indent = -1) { + if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line)); + return substr ($line, $indent); } - private function getParentPathByIndent ( $indent ) { - if ( $indent == 0 ) return array(); + private function getParentPathByIndent ($indent) { + if ($indent == 0) return array(); $linePath = $this->path; do { - end( $linePath ); $lastIndentInParentPath = key( $linePath ); - if ( $indent <= $lastIndentInParentPath ) array_pop ( $linePath ); - } while ( $indent <= $lastIndentInParentPath ); + end($linePath); $lastIndentInParentPath = key($linePath); + if ($indent <= $lastIndentInParentPath) array_pop ($linePath); + } while ($indent <= $lastIndentInParentPath); return $linePath; } - private function clearBiggerPathValues ( $indent ) { + private function clearBiggerPathValues ($indent) { - if ( $indent == 0 ) $this->path = array(); - if ( empty ( $this->path ) ) return true; + if ($indent == 0) $this->path = array(); + if (empty ($this->path)) return true; - foreach ( $this->path as $k => $_ ) { - if ( $k > $indent ) unset ( $this->path[$k] ); + foreach ($this->path as $k => $_) { + if ($k > $indent) unset ($this->path[$k]); } return true; } - private static function isComment ( $line ) { - if ( !$line ) return false; - if ( $line[0] == '#' ) return true; - if ( trim( $line, " \r\n\t" ) == '---' ) return true; + private static function isComment ($line) { + if (!$line) return false; + if ($line[0] == '#') return true; + if (trim($line, " \r\n\t") == '---') return true; return false; } - private static function isEmpty ( $line ) { - return ( trim ( $line ) === '' ); + private static function isEmpty ($line) { + return (trim ($line) === ''); } - private function isArrayElement ( $line ) { - if ( !$line ) return false; - if ( $line[0] != '-' ) return false; - if ( strlen ( $line ) > 3 ) - if ( substr( $line, 0, 3 ) == '---' ) return false; + private function isArrayElement ($line) { + if (!$line) return false; + if ($line[0] != '-') return false; + if (strlen ($line) > 3) + if (substr($line,0,3) == '---') return false; return true; } - private function isHashElement ( $line ) { - return strpos( $line, ':' ); + private function isHashElement ($line) { + return strpos($line, ':'); } - private function isLiteral ( $line ) { - if ( $this->isArrayElement( $line ) ) return false; - if ( $this->isHashElement( $line ) ) return false; + private function isLiteral ($line) { + if ($this->isArrayElement($line)) return false; + if ($this->isHashElement($line)) return false; return true; } - private static function unquote ( $value ) { - if ( !$value ) return $value; - if ( !is_string( $value ) ) return $value; - if ( $value[0] == '\'' ) return trim ( $value, '\'' ); - if ( $value[0] == '"' ) return trim ( $value, '"' ); + private static function unquote ($value) { + if (!$value) return $value; + if (!is_string($value)) return $value; + if ($value[0] == '\'') return trim ($value, '\''); + if ($value[0] == '"') return trim ($value, '"'); return $value; } - private function startsMappedSequence ( $line ) { - return ( $line[0] == '-' && substr ( $line, -1, 1 ) == ':' ); + private function startsMappedSequence ($line) { + return ($line[0] == '-' && substr ($line, -1, 1) == ':'); } - private function returnMappedSequence ( $line ) { + private function returnMappedSequence ($line) { $array = array(); - $key = self::unquote( trim( substr( $line, 1, -1 ) ) ); + $key = self::unquote(trim(substr($line,1,-1))); $array[$key] = array(); - $this->delayedPath = array( strpos ( $line, $key ) + $this->indent => $key ); - return array( $array ); + $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key); + return array($array); } - private function returnMappedValue ( $line ) { + private function returnMappedValue ($line) { $array = array(); - $key = self::unquote ( trim( substr( $line, 0, -1 ) ) ); + $key = self::unquote (trim(substr($line,0,-1))); $array[$key] = ''; return $array; } - private function startsMappedValue ( $line ) { - return ( substr ( $line, -1, 1 ) == ':' ); + private function startsMappedValue ($line) { + return (substr ($line, -1, 1) == ':'); } - private function isPlainArray ( $line ) { - return ( $line[0] == '[' && substr ( $line, -1, 1 ) == ']' ); + private function isPlainArray ($line) { + return ($line[0] == '[' && substr ($line, -1, 1) == ']'); } - private function returnPlainArray ( $line ) { - return $this->_toType( $line ); - } + private function returnPlainArray ($line) { + return $this->_toType($line); + } - private function returnKeyValuePair ( $line ) { + private function returnKeyValuePair ($line) { $array = array(); $key = ''; - if ( strpos ( $line, ':' ) ) { + if (strpos ($line, ':')) { // It's a key/value pair most likely // If the key is in double quotes pull it out - if ( ( $line[0] == '"' || $line[0] == "'" ) && preg_match( '/^(["\'](.*)["\'](\s)*:)/', $line, $matches ) ) { - $value = trim( str_replace( $matches[1], '', $line ) ); + if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) { + $value = trim(str_replace($matches[1],'',$line)); $key = $matches[2]; } else { // Do some guesswork as to the key and the value - $explode = explode( ':', $line ); - $key = trim( $explode[0] ); - array_shift( $explode ); - $value = trim( implode( ':', $explode ) ); + $explode = explode(':',$line); + $key = trim($explode[0]); + array_shift($explode); + $value = trim(implode(':',$explode)); } // Set the type of the value. Int, string, etc - $value = $this->_toType( $value ); - if ( $key === '0' ) $key = '__!YAMLZero'; + $value = $this->_toType($value); + if ($key === '0') $key = '__!YAMLZero'; $array[$key] = $value; } else { - $array = array ( $line ); + $array = array ($line); } return $array; } - private function returnArrayElement ( $line ) { - if ( strlen( $line ) <= 1 ) return array( array() ); // Weird %) + private function returnArrayElement ($line) { + if (strlen($line) <= 1) return array(array()); // Weird %) $array = array(); - $value = trim( substr( $line, 1 ) ); - $value = $this->_toType( $value ); + $value = trim(substr($line,1)); + $value = $this->_toType($value); $array[] = $value; return $array; } - private function nodeContainsGroup ( $line ) { + private function nodeContainsGroup ($line) { $symbolsForReference = 'A-z0-9_\-'; - if ( strpos( $line, '&' ) === false && strpos( $line, '*' ) === false ) return false; // Please die fast ;-) - if ( $line[0] == '&' && preg_match( '/^(&[' . $symbolsForReference . ']+)/', $line, $matches ) ) return $matches[1]; - if ( $line[0] == '*' && preg_match( '/^(\*[' . $symbolsForReference . ']+)/', $line, $matches ) ) return $matches[1]; - if ( preg_match( '/(&[' . $symbolsForReference . ']+)$/', $line, $matches ) ) return $matches[1]; - if ( preg_match( '/(\*[' . $symbolsForReference . ']+$)/', $line, $matches ) ) return $matches[1]; - if ( preg_match ( '#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches ) ) return $matches[1]; + if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-) + if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1]; + if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1]; + if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1]; return false; } - private function addGroup ( $line, $group ) { - if ( $group[0] == '&' ) $this->_containsGroupAnchor = substr ( $group, 1 ); - if ( $group[0] == '*' ) $this->_containsGroupAlias = substr ( $group, 1 ); - // print_r ($this->path); + private function addGroup ($line, $group) { + if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1); + if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1); + //print_r ($this->path); } - private function stripGroup ( $line, $group ) { - $line = trim( str_replace( $group, '', $line ) ); + private function stripGroup ($line, $group) { + $line = trim(str_replace($group, '', $line)); return $line; } } @@ -1020,13 +1028,13 @@ // Enable use of Spyc from command line // The syntax is the following: php spyc.php spyc.yaml -define ( 'SPYC_FROM_COMMAND_LINE', false ); +define ('SPYC_FROM_COMMAND_LINE', false); do { - if ( !SPYC_FROM_COMMAND_LINE ) break; - if ( empty ( $_SERVER['argc'] ) || $_SERVER['argc'] < 2 ) break; - if ( empty ( $_SERVER['PHP_SELF'] ) || $_SERVER['PHP_SELF'] != 'spyc.php' ) break; + if (!SPYC_FROM_COMMAND_LINE) break; + if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break; + if (empty ($_SERVER['PHP_SELF']) || $_SERVER['PHP_SELF'] != 'spyc.php') break; $file = $argv[1]; - printf ( "Spyc loading file: %s\n", $file ); - print_r ( spyc_load_file ( $file ) ); -} while ( 0 ); \ No newline at end of file + printf ("Spyc loading file: %s\n", $file); + print_r (spyc_load_file ($file)); +} while (0); \ No newline at end of file _______________________________________________ MediaWiki-CVS mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs
