Automattic\WooCommerce\Vendor\Sabberworm\CSS\CSSList

CSSList::parseAtRuleprivate staticWC 1.0

Method of the class: CSSList{}

No Hooks.

Returns

AtRuleBlockList|KeyFrame|Charset|CSSNamespace|Import|AtRuleSet|null.

Usage

$result = CSSList::parseAtRule( $oParserState );
$oParserState(ParserState) (required)
.

CSSList::parseAtRule() code WC 10.4.3

private static function parseAtRule(ParserState $oParserState)
{
    $oParserState->consume('@');
    $sIdentifier = $oParserState->parseIdentifier();
    $iIdentifierLineNum = $oParserState->currentLine();
    $oParserState->consumeWhiteSpace();
    if ($sIdentifier === 'import') {
        $oLocation = URL::parse($oParserState);
        $oParserState->consumeWhiteSpace();
        $sMediaQuery = null;
        if (!$oParserState->comes(';')) {
            $sMediaQuery = trim($oParserState->consumeUntil([';', ParserState::EOF]));
        }
        $oParserState->consumeUntil([';', ParserState::EOF], true, true);
        return new Import($oLocation, $sMediaQuery ?: null, $iIdentifierLineNum);
    } elseif ($sIdentifier === 'charset') {
        $oCharsetString = CSSString::parse($oParserState);
        $oParserState->consumeWhiteSpace();
        $oParserState->consumeUntil([';', ParserState::EOF], true, true);
        return new Charset($oCharsetString, $iIdentifierLineNum);
    } elseif (self::identifierIs($sIdentifier, 'keyframes')) {
        $oResult = new KeyFrame($iIdentifierLineNum);
        $oResult->setVendorKeyFrame($sIdentifier);
        $oResult->setAnimationName(trim($oParserState->consumeUntil('{', false, true)));
        CSSList::parseList($oParserState, $oResult);
        if ($oParserState->comes('}')) {
            $oParserState->consume('}');
        }
        return $oResult;
    } elseif ($sIdentifier === 'namespace') {
        $sPrefix = null;
        $mUrl = Value::parsePrimitiveValue($oParserState);
        if (!$oParserState->comes(';')) {
            $sPrefix = $mUrl;
            $mUrl = Value::parsePrimitiveValue($oParserState);
        }
        $oParserState->consumeUntil([';', ParserState::EOF], true, true);
        if ($sPrefix !== null && !is_string($sPrefix)) {
            throw new UnexpectedTokenException('Wrong namespace prefix', $sPrefix, 'custom', $iIdentifierLineNum);
        }
        if (!($mUrl instanceof CSSString || $mUrl instanceof URL)) {
            throw new UnexpectedTokenException(
                'Wrong namespace url of invalid type',
                $mUrl,
                'custom',
                $iIdentifierLineNum
            );
        }
        return new CSSNamespace($mUrl, $sPrefix, $iIdentifierLineNum);
    } else {
        // Unknown other at rule (font-face or such)
        $sArgs = trim($oParserState->consumeUntil('{', false, true));
        if (substr_count($sArgs, "(") != substr_count($sArgs, ")")) {
            if ($oParserState->getSettings()->bLenientParsing) {
                return null;
            } else {
                throw new SourceException("Unmatched brace count in media query", $oParserState->currentLine());
            }
        }
        $bUseRuleSet = true;
        foreach (explode('/', AtRule::BLOCK_RULES) as $sBlockRuleName) {
            if (self::identifierIs($sIdentifier, $sBlockRuleName)) {
                $bUseRuleSet = false;
                break;
            }
        }
        if ($bUseRuleSet) {
            $oAtRule = new AtRuleSet($sIdentifier, $sArgs, $iIdentifierLineNum);
            RuleSet::parseRuleSet($oParserState, $oAtRule);
        } else {
            $oAtRule = new AtRuleBlockList($sIdentifier, $sArgs, $iIdentifierLineNum);
            CSSList::parseList($oParserState, $oAtRule);
            if ($oParserState->comes('}')) {
                $oParserState->consume('}');
            }
        }
        return $oAtRule;
    }
}