Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\Parsing\ParserState;
> use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
< class CalcFunction extends CSSFunction {
> class CalcFunction extends CSSFunction > { > /** > * @var int > */
const T_OPERAND = 1;
> const T_OPERATOR = 2; > /** > * @var int public static function parse(ParserState $oParserState) { > */
< public static function parse(ParserState $oParserState) { < $aOperators = array('+', '-', '*', '/');
> /** > * @return CalcFunction > * > * @throws UnexpectedTokenException > * @throws UnexpectedEOFException > */ > public static function parse(ParserState $oParserState) > { > $aOperators = ['+', '-', '*', '/'];
$oCalcList = new CalcRuleValueList($oParserState->currentLine()); $oList = new RuleValueList(',', $oParserState->currentLine()); $iNestingLevel = 0;
< $iLastComponentType = NULL;
> $iLastComponentType = null;
while(!$oParserState->comes(')') || $iNestingLevel > 0) { $oParserState->consumeWhiteSpace(); if ($oParserState->comes('(')) { $iNestingLevel++; $oCalcList->addListComponent($oParserState->consume(1));
> $oParserState->consumeWhiteSpace();
continue; } else if ($oParserState->comes(')')) { $iNestingLevel--; $oCalcList->addListComponent($oParserState->consume(1));
> $oParserState->consumeWhiteSpace();
continue; } if ($iLastComponentType != CalcFunction::T_OPERAND) { $oVal = Value::parsePrimitiveValue($oParserState); $oCalcList->addListComponent($oVal); $iLastComponentType = CalcFunction::T_OPERAND; } else { if (in_array($oParserState->peek(), $aOperators)) { if (($oParserState->comes('-') || $oParserState->comes('+'))) {
< if ($oParserState->peek(1, -1) != ' ' || !($oParserState->comes('- ') || $oParserState->comes('+ '))) { < throw new UnexpectedTokenException(" {$oParserState->peek()} ", $oParserState->peek(1, -1) . $oParserState->peek(2), 'literal', $oParserState->currentLine());
> if ( > $oParserState->peek(1, -1) != ' ' > || !($oParserState->comes('- ') > || $oParserState->comes('+ ')) > ) { > throw new UnexpectedTokenException( > " {$oParserState->peek()} ", > $oParserState->peek(1, -1) . $oParserState->peek(2), > 'literal', > $oParserState->currentLine() > );
} } $oCalcList->addListComponent($oParserState->consume(1)); $iLastComponentType = CalcFunction::T_OPERATOR; } else { 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() ); } }
> $oParserState->consumeWhiteSpace();
} $oList->addListComponent($oCalcList); $oParserState->consume(')'); return new CalcFunction($sFunction, $oList, ',', $oParserState->currentLine()); }
<
}