PluginProbe
Independent Analytics – WordPress Analytics Plugin / 1.17
Independent Analytics – WordPress Analytics Plugin v1.17
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 All 120 releases
independent-analytics / vendor / sabberworm / php-css-parser / src / Value / CalcFunction.php
CalcFunction.php
69 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace IAWP\Sabberworm\CSS\Value;
4
5 use IAWP\Sabberworm\CSS\Parsing\ParserState;
6 use IAWP\Sabberworm\CSS\Parsing\UnexpectedEOFException;
7 use IAWP\Sabberworm\CSS\Parsing\UnexpectedTokenException;
8 class CalcFunction extends CSSFunction
9 {
10 /**
11 * @var int
12 */
13 const T_OPERAND = 1;
14 /**
15 * @var int
16 */
17 const T_OPERATOR = 2;
18 /**
19 * @return CalcFunction
20 *
21 * @throws UnexpectedTokenException
22 * @throws UnexpectedEOFException
23 */
24 public static function parse(ParserState $oParserState)
25 {
26 $aOperators = ['+', '-', '*', '/'];
27 $sFunction = \trim($oParserState->consumeUntil('(', \false, \true));
28 $oCalcList = new CalcRuleValueList($oParserState->currentLine());
29 $oList = new RuleValueList(',', $oParserState->currentLine());
30 $iNestingLevel = 0;
31 $iLastComponentType = null;
32 while (!$oParserState->comes(')') || $iNestingLevel > 0) {
33 $oParserState->consumeWhiteSpace();
34 if ($oParserState->comes('(')) {
35 $iNestingLevel++;
36 $oCalcList->addListComponent($oParserState->consume(1));
37 $oParserState->consumeWhiteSpace();
38 continue;
39 } elseif ($oParserState->comes(')')) {
40 $iNestingLevel--;
41 $oCalcList->addListComponent($oParserState->consume(1));
42 $oParserState->consumeWhiteSpace();
43 continue;
44 }
45 if ($iLastComponentType != CalcFunction::T_OPERAND) {
46 $oVal = Value::parsePrimitiveValue($oParserState);
47 $oCalcList->addListComponent($oVal);
48 $iLastComponentType = CalcFunction::T_OPERAND;
49 } else {
50 if (\in_array($oParserState->peek(), $aOperators)) {
51 if ($oParserState->comes('-') || $oParserState->comes('+')) {
52 if ($oParserState->peek(1, -1) != ' ' || !($oParserState->comes('- ') || $oParserState->comes('+ '))) {
53 throw new UnexpectedTokenException(" {$oParserState->peek()} ", $oParserState->peek(1, -1) . $oParserState->peek(2), 'literal', $oParserState->currentLine());
54 }
55 }
56 $oCalcList->addListComponent($oParserState->consume(1));
57 $iLastComponentType = CalcFunction::T_OPERATOR;
58 } else {
59 throw new UnexpectedTokenException(\sprintf('Next token was expected to be an operand of type %s. Instead "%s" was found.', \implode(', ', $aOperators), $oVal), '', 'custom', $oParserState->currentLine());
60 }
61 }
62 $oParserState->consumeWhiteSpace();
63 }
64 $oList->addListComponent($oCalcList);
65 $oParserState->consume(')');
66 return new CalcFunction($sFunction, $oList, ',', $oParserState->currentLine());
67 }
68 }
69