private function contextMacro() { $matches = $this->match('~ (?P<comment>\\*.*?\\*' . $this->delimiters[1] . '\\n{0,2})| (?P<macro>(?> ' . self::RE_STRING . '| \\{(?>' . self::RE_STRING . '|[^\'"{}])*+\\}| [^\'"{}]+ )++) ' . $this->delimiters[1] . ' (?P<rmargin>[ \\t]*(?=\\n))? ~xsiA'); if (!empty($matches['macro'])) { $token = $this->addToken(Token::MACRO_TAG, $this->context[1][1] . $matches[0]); list($token->name, $token->value, $token->modifiers, $token->empty, $token->closing) = $this->parseMacroTag($matches['macro']); $this->context = $this->context[1][0]; } elseif (!empty($matches['comment'])) { $this->addToken(Token::COMMENT, $this->context[1][1] . $matches[0]); $this->context = $this->context[1][0]; } else { throw new CompileException('Malformed macro'); } }