[ Index ] |
PHP Cross Reference of phpBB-3.1.12-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 /* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12 namespace Symfony\Component\Console\Input; 13 14 /** 15 * StringInput represents an input provided as a string. 16 * 17 * Usage: 18 * 19 * $input = new StringInput('foo --bar="foobar"'); 20 * 21 * @author Fabien Potencier <fabien@symfony.com> 22 */ 23 class StringInput extends ArgvInput 24 { 25 const REGEX_STRING = '([^\s]+?)(?:\s|(?<!\\\\)"|(?<!\\\\)\'|$)'; 26 const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\')'; 27 28 /** 29 * Constructor. 30 * 31 * @param string $input An array of parameters from the CLI (in the argv format) 32 * @param InputDefinition $definition A InputDefinition instance 33 * 34 * @deprecated The second argument is deprecated as it does not work (will be removed in 3.0), use 'bind' method instead 35 */ 36 public function __construct($input, InputDefinition $definition = null) 37 { 38 parent::__construct(array(), null); 39 40 $this->setTokens($this->tokenize($input)); 41 42 if (null !== $definition) { 43 $this->bind($definition); 44 } 45 } 46 47 /** 48 * Tokenizes a string. 49 * 50 * @param string $input The input to tokenize 51 * 52 * @return array An array of tokens 53 * 54 * @throws \InvalidArgumentException When unable to parse input (should never happen) 55 */ 56 private function tokenize($input) 57 { 58 $tokens = array(); 59 $length = strlen($input); 60 $cursor = 0; 61 while ($cursor < $length) { 62 if (preg_match('/\s+/A', $input, $match, null, $cursor)) { 63 } elseif (preg_match('/([^="\'\s]+?)(=?)('.self::REGEX_QUOTED_STRING.'+)/A', $input, $match, null, $cursor)) { 64 $tokens[] = $match[1].$match[2].stripcslashes(str_replace(array('"\'', '\'"', '\'\'', '""'), '', substr($match[3], 1, strlen($match[3]) - 2))); 65 } elseif (preg_match('/'.self::REGEX_QUOTED_STRING.'/A', $input, $match, null, $cursor)) { 66 $tokens[] = stripcslashes(substr($match[0], 1, strlen($match[0]) - 2)); 67 } elseif (preg_match('/'.self::REGEX_STRING.'/A', $input, $match, null, $cursor)) { 68 $tokens[] = stripcslashes($match[1]); 69 } else { 70 // should never happen 71 // @codeCoverageIgnoreStart 72 throw new \InvalidArgumentException(sprintf('Unable to parse input near "... %s ..."', substr($input, $cursor, 10))); 73 // @codeCoverageIgnoreEnd 74 } 75 76 $cursor += strlen($match[0]); 77 } 78 79 return $tokens; 80 } 81 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Jan 11 00:25:41 2018 | Cross-referenced by PHPXref 0.7.1 |