[ Index ] |
PHP Cross Reference of DokuWiki |
[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\CssSelector\Parser\Tokenizer; 13 14 /** 15 * CSS selector tokenizer patterns builder. 16 * 17 * This component is a port of the Python cssselect library, 18 * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. 19 * 20 * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com> 21 * 22 * @internal 23 */ 24 class TokenizerPatterns 25 { 26 private $unicodeEscapePattern; 27 private $simpleEscapePattern; 28 private $newLineEscapePattern; 29 private $escapePattern; 30 private $stringEscapePattern; 31 private $nonAsciiPattern; 32 private $nmCharPattern; 33 private $nmStartPattern; 34 private $identifierPattern; 35 private $hashPattern; 36 private $numberPattern; 37 private $quotedStringPattern; 38 39 public function __construct() 40 { 41 $this->unicodeEscapePattern = '\\\\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?'; 42 $this->simpleEscapePattern = '\\\\(.)'; 43 $this->newLineEscapePattern = '\\\\(?:\n|\r\n|\r|\f)'; 44 $this->escapePattern = $this->unicodeEscapePattern.'|\\\\[^\n\r\f0-9a-f]'; 45 $this->stringEscapePattern = $this->newLineEscapePattern.'|'.$this->escapePattern; 46 $this->nonAsciiPattern = '[^\x00-\x7F]'; 47 $this->nmCharPattern = '[_a-z0-9-]|'.$this->escapePattern.'|'.$this->nonAsciiPattern; 48 $this->nmStartPattern = '[_a-z]|'.$this->escapePattern.'|'.$this->nonAsciiPattern; 49 $this->identifierPattern = '-?(?:'.$this->nmStartPattern.')(?:'.$this->nmCharPattern.')*'; 50 $this->hashPattern = '#((?:'.$this->nmCharPattern.')+)'; 51 $this->numberPattern = '[+-]?(?:[0-9]*\.[0-9]+|[0-9]+)'; 52 $this->quotedStringPattern = '([^\n\r\f%s]|'.$this->stringEscapePattern.')*'; 53 } 54 55 public function getNewLineEscapePattern(): string 56 { 57 return '~^'.$this->newLineEscapePattern.'~'; 58 } 59 60 public function getSimpleEscapePattern(): string 61 { 62 return '~^'.$this->simpleEscapePattern.'~'; 63 } 64 65 public function getUnicodeEscapePattern(): string 66 { 67 return '~^'.$this->unicodeEscapePattern.'~i'; 68 } 69 70 public function getIdentifierPattern(): string 71 { 72 return '~^'.$this->identifierPattern.'~i'; 73 } 74 75 public function getHashPattern(): string 76 { 77 return '~^'.$this->hashPattern.'~i'; 78 } 79 80 public function getNumberPattern(): string 81 { 82 return '~^'.$this->numberPattern.'~'; 83 } 84 85 public function getQuotedStringPattern(string $quote): string 86 { 87 return '~^'.sprintf($this->quotedStringPattern, $quote).'~i'; 88 } 89 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body