xref: /plugin/combo/vendor/carica/phpcss/src/PhpCss/Parser/Text.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau/**
3*04fd306cSNickeau * The string parser collects all string character tokens until a string end token is found.
4*04fd306cSNickeau *
5*04fd306cSNickeau * @license http://www.opensource.org/licenses/mit-license.php The MIT License
6*04fd306cSNickeau * @copyright Copyright 2010-2014 PhpCss Team
7*04fd306cSNickeau */
8*04fd306cSNickeau
9*04fd306cSNickeaunamespace PhpCss\Parser {
10*04fd306cSNickeau
11*04fd306cSNickeau  use PhpCss;
12*04fd306cSNickeau  use PhpCss\Scanner;
13*04fd306cSNickeau
14*04fd306cSNickeau  /**
15*04fd306cSNickeau   * The string parser collects all string character tokens until a string end token is found.
16*04fd306cSNickeau   */
17*04fd306cSNickeau  class Text extends PhpCss\Parser {
18*04fd306cSNickeau
19*04fd306cSNickeau    /**
20*04fd306cSNickeau     * @throws PhpCss\Exception\ParserException
21*04fd306cSNickeau     */
22*04fd306cSNickeau    public function parse(): PhpCss\Ast\Node {
23*04fd306cSNickeau      $string = '';
24*04fd306cSNickeau      while (TRUE) {
25*04fd306cSNickeau        $token = $this->read(
26*04fd306cSNickeau          [
27*04fd306cSNickeau            Scanner\Token::STRING_CHARACTERS,
28*04fd306cSNickeau            Scanner\Token::STRING_ESCAPED_CHARACTER,
29*04fd306cSNickeau            Scanner\Token::SINGLEQUOTE_STRING_END,
30*04fd306cSNickeau            Scanner\Token::DOUBLEQUOTE_STRING_END,
31*04fd306cSNickeau          ]
32*04fd306cSNickeau        );
33*04fd306cSNickeau        switch ($token->type) {
34*04fd306cSNickeau        case Scanner\Token::STRING_CHARACTERS :
35*04fd306cSNickeau          $string .= $token->content;
36*04fd306cSNickeau          break;
37*04fd306cSNickeau        case Scanner\Token::STRING_ESCAPED_CHARACTER :
38*04fd306cSNickeau          $string .= substr($token->content, 1);
39*04fd306cSNickeau          break;
40*04fd306cSNickeau        case Scanner\Token::SINGLEQUOTE_STRING_END :
41*04fd306cSNickeau        case Scanner\Token::DOUBLEQUOTE_STRING_END :
42*04fd306cSNickeau          return new PhpCss\Ast\Value\Literal($string);
43*04fd306cSNickeau        }
44*04fd306cSNickeau      }
45*04fd306cSNickeau    }
46*04fd306cSNickeau  }
47*04fd306cSNickeau}
48