/** * Gets the used variables from the provided format * @param string $format Data format * @return array Array with the variable strings */ private function getVariablesFromFormat($format) { $symbol = new NestedSymbol(self::SYMBOL_OPEN, self::SYMBOL_CLOSE, null, true); $tokenizer = new Tokenizer(); $tokenizer->addSymbol($symbol); $tokens = $tokenizer->tokenize($format); $variables = array(); $isVariableOpen = false; $variableFormat = null; foreach ($tokens as $token) { if ($token == self::SYMBOL_OPEN) { $isVariableOpen = true; continue; } if (!$isVariableOpen) { continue; } if ($token == self::SYMBOL_CLOSE) { $variables[$variableFormat] = new DataFormatVariable($variableFormat); $isVariableOpen = false; $variableFormat = null; } else { $variableFormat .= $token; } } return $variables; }
/** * Tokenizes the tag content in argument tokens * * eg. img=150x100 alt="Image description" width=150 * array { * "img=150x100", * "alt=Image Description", * "width=150", * } * * @param string $tagContent * @return array */ private function tokenize($tagContent) { $positionApo = strpos($tagContent, '"'); if (!$positionApo) { return explode(' ', $tagContent); } $tokens = array(); $tokenizer = new Tokenizer(); $tokenizer->addSymbol(new SimpleSymbol(' ', false)); $tokenizer->addSymbol(new NestedSymbol('"', '"', null, true)); $isStringArgument = false; $previousToken = null; $parsedTokens = $tokenizer->tokenize($tagContent); foreach ($parsedTokens as $token) { if ($token == '"') { $isStringArgument = !$isStringArgument; continue; } if ($isStringArgument) { $tokens[count($tokens) - 1] .= $token; } else { $tokens[] = $token; } } return $tokens; }