Automattic\WooCommerce\Vendor\Sabberworm\CSS\Value

CalcFunction::parsepublic staticWC 1.0

Метод класса: CalcFunction{}

Хуков нет.

Возвращает

CalcFunction.

Использование

$result = CalcFunction::parse( $oParserState, $bIgnoreCase );
$oParserState(ParserState) (обязательный)
.
$bIgnoreCase(true|false)
.
По умолчанию: false

Код CalcFunction::parse() WC 10.4.3

public static function parse(ParserState $oParserState, $bIgnoreCase = false)
{
    $aOperators = ['+', '-', '*', '/'];
    $sFunction = $oParserState->parseIdentifier();
    if ($oParserState->peek() != '(') {
        // Found ; or end of line before an opening bracket
        throw new UnexpectedTokenException('(', $oParserState->peek(), 'literal', $oParserState->currentLine());
    } elseif (!in_array($sFunction, ['calc', '-moz-calc', '-webkit-calc'])) {
        // Found invalid calc definition. Example calc (...
        throw new UnexpectedTokenException('calc', $sFunction, 'literal', $oParserState->currentLine());
    }
    $oParserState->consume('(');
    $oCalcList = new CalcRuleValueList($oParserState->currentLine());
    $oList = new RuleValueList(',', $oParserState->currentLine());
    $iNestingLevel = 0;
    $iLastComponentType = null;
    while (!$oParserState->comes(')') || $iNestingLevel > 0) {
        if ($oParserState->isEnd() && $iNestingLevel === 0) {
            break;
        }

        $oParserState->consumeWhiteSpace();
        if ($oParserState->comes('(')) {
            $iNestingLevel++;
            $oCalcList->addListComponent($oParserState->consume(1));
            $oParserState->consumeWhiteSpace();
            continue;
        } elseif ($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()
                        );
                    }
                }
                $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),
                        $oParserState->peek()
                    ),
                    '',
                    'custom',
                    $oParserState->currentLine()
                );
            }
        }
        $oParserState->consumeWhiteSpace();
    }
    $oList->addListComponent($oCalcList);
    if (!$oParserState->isEnd()) {
        $oParserState->consume(')');
    }
    return new CalcFunction($sFunction, $oList, ',', $oParserState->currentLine());
}