PluginProbe
WCPOS – Point of Sale (POS) plugin for WooCommerce / 1.10.18
WCPOS – Point of Sale (POS) plugin for WooCommerce v1.10.18
1.10.19 1.10.18 1.10.17 1.10.16 1.10.15 1.10.13 1.10.14 1.10.12 1.10.11 1.10.10 1.10.9 1.10.8 untagged-3d9b7ccddc54df87c672 1.10.7 1.10.6 1.10.5 1.10.3 1.10.4 1.10.2 1.10.1 1.10.0 1.9.17 1.9.15 1.9.16 1.9.14 All 163 releases
woocommerce-pos / vendor_prefixed / sabberworm / php-css-parser / src / Value / CSSString.php

CSSString.php in WCPOS – Point of Sale (POS) plugin for WooCommerce 1.10.18, at vendor_prefixed/sabberworm/php-css-parser/src/Value/CSSString.php

107 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare (strict_types=1);
4 namespace WCPOS\Vendor\Sabberworm\CSS\Value;
5
6 use WCPOS\Vendor\Sabberworm\CSS\OutputFormat;
7 use WCPOS\Vendor\Sabberworm\CSS\Parsing\ParserState;
8 use WCPOS\Vendor\Sabberworm\CSS\Parsing\SourceException;
9 use WCPOS\Vendor\Sabberworm\CSS\Parsing\UnexpectedEOFException;
10 use WCPOS\Vendor\Sabberworm\CSS\Parsing\UnexpectedTokenException;
11 use WCPOS\Vendor\Sabberworm\CSS\ShortClassNameProvider;
12 use function WCPOS\Vendor\Safe\preg_match;
13 /**
14 * This class is a wrapper for quoted strings to distinguish them from keywords.
15 *
16 * `CSSString`s always output with double quotes.
17 */
18 class CSSString extends PrimitiveValue
19 {
20 use ShortClassNameProvider;
21 /**
22 * @var string
23 */
24 private $string;
25 /**
26 * @param int<1, max>|null $lineNumber
27 */
28 public function __construct(string $string, ?int $lineNumber = null)
29 {
30 $this->string = $string;
31 parent::__construct($lineNumber);
32 }
33 /**
34 * @throws SourceException
35 * @throws UnexpectedEOFException
36 * @throws UnexpectedTokenException
37 *
38 * @internal since V8.8.0
39 */
40 public static function parse(ParserState $parserState) : CSSString
41 {
42 $begin = $parserState->peek();
43 $quote = null;
44 if ($begin === "'") {
45 $quote = "'";
46 } elseif ($begin === '"') {
47 $quote = '"';
48 }
49 if ($quote !== null) {
50 $parserState->consume($quote);
51 }
52 $result = '';
53 if ($quote === null) {
54 // Unquoted strings end in whitespace or with braces, brackets, parentheses
55 while (preg_match('/[\\s{}()<>\\[\\]]/isu', $parserState->peek()) === 0) {
56 $result .= $parserState->parseCharacter(\false);
57 }
58 } else {
59 while (!$parserState->comes($quote)) {
60 $content = $parserState->parseCharacter(\false);
61 if ($content === null) {
62 throw new SourceException("Non-well-formed quoted string {$parserState->peek(3)}", $parserState->currentLine());
63 }
64 $result .= $content;
65 }
66 $parserState->consume($quote);
67 }
68 return new CSSString($result, $parserState->currentLine());
69 }
70 public function setString(string $string) : void
71 {
72 $this->string = $string;
73 }
74 public function getString() : string
75 {
76 return $this->string;
77 }
78 /**
79 * @return non-empty-string
80 */
81 public function render(OutputFormat $outputFormat) : string
82 {
83 return $outputFormat->getStringQuotingType() . $this->escape($this->string, $outputFormat) . $outputFormat->getStringQuotingType();
84 }
85 /**
86 * @return array<string, bool|int|float|string|array<mixed>|null>
87 *
88 * @internal
89 */
90 public function getArrayRepresentation() : array
91 {
92 return [
93 'class' => $this->getShortClassName(),
94 // We're using the term "contents" here to make the difference to the class more clear.
95 'contents' => $this->string,
96 ];
97 }
98 private function escape(string $string, OutputFormat $outputFormat) : string
99 {
100 $charactersToEscape = '\\';
101 $charactersToEscape .= $outputFormat->getStringQuotingType() === '"' ? '"' : "'";
102 $withEscapedQuotes = \addcslashes($string, $charactersToEscape);
103 $withNewlineEncoded = \str_replace("\n", '\\A', $withEscapedQuotes);
104 return $withNewlineEncoded;
105 }
106 }
107