diff --git a/src/Latte/Compiler/Parser.php b/src/Latte/Compiler/Parser.php index 328d54040..736b9d37f 100644 --- a/src/Latte/Compiler/Parser.php +++ b/src/Latte/Compiler/Parser.php @@ -393,7 +393,7 @@ public function parseMacroTag(string $tag): ?array (?P/?) ( (?P\?|[a-z]\w*+(?:[.:]\w+)*+(?!::|\(|\\\\))| ## ?, name, /name, but not function( or class:: or namespace\ - (?P[=_]?) ## expression, =expression, ... + (?P=|_(?!_)|) ## expression, =expression, ... )(?P(?:' . self::RE_STRING . '|[^\'"])*?) (?P(?(?:' . self::RE_STRING . '|(?:\((?P>modArgs)\))|[^\'"/()]|/(?=.))*+))? (?P/?$) diff --git a/tests/Latte/Parser.parseMacroTag.phpt b/tests/Latte/Parser.parseMacroTag.phpt index d87ba4b88..a879c2654 100644 --- a/tests/Latte/Parser.parseMacroTag.phpt +++ b/tests/Latte/Parser.parseMacroTag.phpt @@ -27,6 +27,7 @@ Assert::same(['=', '$var', '|noescape', false, false], $parser->parseMacroTag('$ Assert::same(['=', '$var', '|noescape', true, false], $parser->parseMacroTag('$var|noescape/')); Assert::same(['=', '$var||false', '', false, false], $parser->parseMacroTag('$var||false')); Assert::same(['_', '"I love Nette"', '|noescape', false, false], $parser->parseMacroTag('_"I love Nette"|noescape')); +Assert::same(['=', '__("I love Nette")', '|noescape', false, false], $parser->parseMacroTag('__("I love Nette")|noescape')); Assert::same(['_', '$var', '', false, false], $parser->parseMacroTag('_$var')); Assert::same(['_', '$var', '', false, false], $parser->parseMacroTag('_ $var')); Assert::same(['_', '', '', false, false], $parser->parseMacroTag('_'));