Automattic\WooCommerce\Vendor\Sabberworm\CSS\Value

Value::parseValuepublic staticWC 1.0

Method of the class: Value{}

No Hooks.

Returns

RuleValueList|CSSFunction|CSSString|LineName|Size|URL|String.

Usage

$result = Value::parseValue( $oParserState, $aListDelimiters );
$oParserState(ParserState) (required)
.
$aListDelimiters(array)
.
Default: []

Value::parseValue() code WC 10.5.0

public static function parseValue(ParserState $oParserState, array $aListDelimiters = [])
{
    /** @var array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aStack */
    $aStack = [];
    $oParserState->consumeWhiteSpace();
    //Build a list of delimiters and parsed values
    while (
        !($oParserState->comes('}') || $oParserState->comes(';') || $oParserState->comes('!')
            || $oParserState->comes(')')
            || $oParserState->comes('\\')
            || $oParserState->isEnd())
    ) {
        if (count($aStack) > 0) {
            $bFoundDelimiter = false;
            foreach ($aListDelimiters as $sDelimiter) {
                if ($oParserState->comes($sDelimiter)) {
                    array_push($aStack, $oParserState->consume($sDelimiter));
                    $oParserState->consumeWhiteSpace();
                    $bFoundDelimiter = true;
                    break;
                }
            }
            if (!$bFoundDelimiter) {
                //Whitespace was the list delimiter
                array_push($aStack, ' ');
            }
        }
        array_push($aStack, self::parsePrimitiveValue($oParserState));
        $oParserState->consumeWhiteSpace();
    }
    // Convert the list to list objects
    foreach ($aListDelimiters as $sDelimiter) {
        $iStackLength = count($aStack);
        if ($iStackLength === 1) {
            return $aStack[0];
        }
        $aNewStack = [];
        for ($iStartPosition = 0; $iStartPosition < $iStackLength; ++$iStartPosition) {
            if ($iStartPosition === ($iStackLength - 1) || $sDelimiter !== $aStack[$iStartPosition + 1]) {
                $aNewStack[] = $aStack[$iStartPosition];
                continue;
            }
            $iLength = 2; //Number of elements to be joined
            for ($i = $iStartPosition + 3; $i < $iStackLength; $i += 2, ++$iLength) {
                if ($sDelimiter !== $aStack[$i]) {
                    break;
                }
            }
            $oList = new RuleValueList($sDelimiter, $oParserState->currentLine());
            for ($i = $iStartPosition; $i - $iStartPosition < $iLength * 2; $i += 2) {
                $oList->addListComponent($aStack[$i]);
            }
            $aNewStack[] = $oList;
            $iStartPosition += $iLength * 2 - 2;
        }
        $aStack = $aNewStack;
    }
    if (!isset($aStack[0])) {
        throw new UnexpectedTokenException(
            " {$oParserState->peek()} ",
            $oParserState->peek(1, -1) . $oParserState->peek(2),
            'literal',
            $oParserState->currentLine()
        );
    }
    return $aStack[0];
}