MDL-65759 library: Update php-css-parser to 8.3.0
[moodle.git] / lib / php-css-parser / Value / CSSString.php
index b070008..9f9c050 100644 (file)
@@ -2,6 +2,9 @@
 
 namespace Sabberworm\CSS\Value;
 
+use Sabberworm\CSS\Parsing\ParserState;
+use Sabberworm\CSS\Parsing\SourceException;
+
 class CSSString extends PrimitiveValue {
 
        private $sString;
@@ -11,6 +14,37 @@ class CSSString extends PrimitiveValue {
                parent::__construct($iLineNo);
        }
 
+       public static function parse(ParserState $oParserState) {
+               $sBegin = $oParserState->peek();
+               $sQuote = null;
+               if ($sBegin === "'") {
+                       $sQuote = "'";
+               } else if ($sBegin === '"') {
+                       $sQuote = '"';
+               }
+               if ($sQuote !== null) {
+                       $oParserState->consume($sQuote);
+               }
+               $sResult = "";
+               $sContent = null;
+               if ($sQuote === null) {
+                       // Unquoted strings end in whitespace or with braces, brackets, parentheses
+                       while (!preg_match('/[\\s{}()<>\\[\\]]/isu', $oParserState->peek())) {
+                               $sResult .= $oParserState->parseCharacter(false);
+                       }
+               } else {
+                       while (!$oParserState->comes($sQuote)) {
+                               $sContent = $oParserState->parseCharacter(false);
+                               if ($sContent === null) {
+                                       throw new SourceException("Non-well-formed quoted string {$oParserState->peek(3)}", $oParserState->currentLine());
+                               }
+                               $sResult .= $sContent;
+                       }
+                       $oParserState->consume($sQuote);
+               }
+               return new CSSString($sResult, $oParserState->currentLine());
+       }
+
        public function setString($sString) {
                $this->sString = $sString;
        }