Nextras\Orm\Entity\Reflection\ModifierParser::processArgs PHP Метод

processArgs() приватный Метод

private processArgs ( Nette\Utils\TokenIterator $iterator, $modifierName, $inArray )
$iterator Nette\Utils\TokenIterator
    private function processArgs(TokenIterator $iterator, $modifierName, $inArray)
    {
        $result = [];
        $iterator->position++;
        while (isset($iterator->tokens[$iterator->position])) {
            list($value, , $type) = $iterator->currentToken();
            if ($type === self::TOKEN_RBRACKET) {
                if ($inArray) {
                    return $result;
                } else {
                    throw new InvalidModifierDefinitionException("Modifier {{$modifierName}} mismatches brackets.");
                }
            } elseif ($type === self::TOKEN_STRING || $type === self::TOKEN_KEYWORD) {
                $iterator->position++;
                list(, , $nextToken) = $iterator->currentToken();
                if ($nextToken === self::TOKEN_EQUAL) {
                    $iterator->position++;
                    list(, , $nextToken) = $iterator->currentToken();
                    $nextValue = $iterator->currentValue();
                    if ($nextToken === self::TOKEN_LBRACKET) {
                        $result[$value] = $this->processArgs($iterator, $modifierName, true);
                    } elseif ($nextToken === self::TOKEN_STRING || $nextToken === self::TOKEN_KEYWORD) {
                        $result[$value] = $nextValue;
                    } elseif ($nextToken !== null) {
                        throw new InvalidModifierDefinitionException("Modifier {{$modifierName}} has invalid token after =.");
                    }
                } elseif ($type !== null) {
                    $iterator->position--;
                    $result[] = $value;
                }
            } elseif ($type === self::TOKEN_LBRACKET) {
                $result[] = $this->processArgs($iterator, $modifierName, true);
            } else {
                throw new InvalidModifierDefinitionException("Modifier {{$modifierName}} has invalid token, expected string, keyword, or array.");
            }
            $iterator->position++;
            list(, , $type) = $iterator->currentToken();
            if ($type === self::TOKEN_RBRACKET && $inArray) {
                return $result;
            } elseif ($type !== null && $type !== self::TOKEN_SEPARATOR) {
                throw new InvalidModifierDefinitionException("Modifier {{$modifierName}} misses argument separator.");
            }
            $iterator->position++;
        }
        if ($inArray) {
            throw new InvalidModifierDefinitionException("Modifier {{$modifierName}} has unclosed array argument.");
        }
        return $result;
    }