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 / CalcFunction.php

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

87 lines 3.9 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\Parsing\ParserState;
7 use WCPOS\Vendor\Sabberworm\CSS\Parsing\UnexpectedEOFException;
8 use WCPOS\Vendor\Sabberworm\CSS\Parsing\UnexpectedTokenException;
9 use function WCPOS\Vendor\Safe\preg_match;
10 class CalcFunction extends CSSFunction
11 {
12 private const T_OPERAND = 1;
13 private const T_OPERATOR = 2;
14 /**
15 * @throws UnexpectedTokenException
16 * @throws UnexpectedEOFException
17 *
18 * @internal since V8.8.0
19 */
20 public static function parse(ParserState $parserState, bool $ignoreCase = \false) : CSSFunction
21 {
22 $operators = ['+', '-', '*', '/'];
23 $function = $parserState->parseIdentifier();
24 if ($parserState->peek() !== '(') {
25 // Found ; or end of line before an opening bracket
26 throw new UnexpectedTokenException('(', $parserState->peek(), 'literal', $parserState->currentLine());
27 } elseif ($function !== 'calc') {
28 // Found invalid calc definition. Example calc (...
29 throw new UnexpectedTokenException('calc', $function, 'literal', $parserState->currentLine());
30 }
31 $parserState->consume('(');
32 $calcRuleValueList = new CalcRuleValueList($parserState->currentLine());
33 $list = new RuleValueList(',', $parserState->currentLine());
34 $nestingLevel = 0;
35 $lastComponentType = null;
36 while (!$parserState->comes(')') || $nestingLevel > 0) {
37 if ($parserState->isEnd() && $nestingLevel === 0) {
38 break;
39 }
40 $parserState->consumeWhiteSpace();
41 if ($parserState->comes('(')) {
42 $nestingLevel++;
43 $calcRuleValueList->addListComponent($parserState->consume(1));
44 $parserState->consumeWhiteSpace();
45 continue;
46 } elseif ($parserState->comes(')')) {
47 $nestingLevel--;
48 $calcRuleValueList->addListComponent($parserState->consume(1));
49 $parserState->consumeWhiteSpace();
50 continue;
51 }
52 if ($lastComponentType !== CalcFunction::T_OPERAND) {
53 $value = Value::parsePrimitiveValue($parserState);
54 $calcRuleValueList->addListComponent($value);
55 $lastComponentType = CalcFunction::T_OPERAND;
56 } else {
57 if (\in_array($parserState->peek(), $operators, \true)) {
58 if ($parserState->comes('-') || $parserState->comes('+')) {
59 if (preg_match('/\\s/', $parserState->peek(1, -1)) !== 1 || preg_match('/\\s/', $parserState->peek(1, 1)) !== 1) {
60 throw new UnexpectedTokenException(" {$parserState->peek()} ", $parserState->peek(1, -1) . $parserState->peek(2), 'literal', $parserState->currentLine());
61 }
62 }
63 $calcRuleValueList->addListComponent($parserState->consume(1));
64 $lastComponentType = CalcFunction::T_OPERATOR;
65 } else {
66 throw new UnexpectedTokenException(\sprintf('Next token was expected to be an operand of type %s. Instead "%s" was found.', \implode(', ', $operators), $parserState->peek()), '', 'custom', $parserState->currentLine());
67 }
68 }
69 $parserState->consumeWhiteSpace();
70 }
71 $list->addListComponent($calcRuleValueList);
72 if (!$parserState->isEnd()) {
73 $parserState->consume(')');
74 }
75 return new CalcFunction($function, $list, ',', $parserState->currentLine());
76 }
77 /**
78 * @return array<string, bool|int|float|string|array<mixed>|null>
79 *
80 * @internal
81 */
82 public function getArrayRepresentation() : array
83 {
84 throw new \BadMethodCallException('`getArrayRepresentation` is not yet implemented for `' . self::class . '`');
85 }
86 }
87