From 8c4c1e86abf1effbf206c7e2e8ecf253fe057c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Mon, 26 Jul 2021 13:03:27 +0200 Subject: [PATCH] Macro fix (#71) * Update Macros.php * Update TranslatorTest.phpt * Update Macros.php * Update TranslatorTest.phpt * Update Macros.php --- src/Latte/Macros.php | 34 +++++++++++++++++++-------------- tests/Tests/TranslatorTest.phpt | 2 ++ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Latte/Macros.php b/src/Latte/Macros.php index e8c3039..fde7031 100644 --- a/src/Latte/Macros.php +++ b/src/Latte/Macros.php @@ -58,20 +58,26 @@ public function macroTranslate( $latteProp = '$ʟ_fi'; } - return $writer->write($latteProp . ' = new LR\FilterInfo(%var); echo %modifyContent($this->filters->filterContent("translate", ' . $latteProp . ', %raw))', $node->context[0], $value); + return $writer->write(sprintf('%s = new LR\FilterInfo(%%var); echo %%modifyContent($this->filters->filterContent("translate", %s, %%raw))', $latteProp, $latteProp), $node->context[0], $value); } if ($node->empty = ($node->args !== '')) { $messageProp = Helpers::createLatteProperty('Message'); $prefixProp = Helpers::createLatteProperty('Prefix'); - $prefix = $messageProp . ' = isset(' . $prefixProp . ') && !\Contributte\Translation\Helpers::isAbsoluteMessage(%node.word) ? implode(".", ' . $prefixProp . ') . "." : "";'; + $macroCodeEcho = Helpers::macroWithoutParameters($node) + ? sprintf('echo %%modify(call_user_func($this->filters->translate, %s))', $messageProp) + : sprintf('echo %%modify(call_user_func($this->filters->translate, %s, %%node.args))', $messageProp); - if (Helpers::macroWithoutParameters($node)) { - return $writer->write($prefix . 'echo %modify(call_user_func($this->filters->translate, ' . $messageProp . ' . %node.word))'); - } + return $writer->write(sprintf(' + %s = %%node.word; + + if (is_string(%s)) { + %s = isset(%s) && !\Contributte\Translation\Helpers::isAbsoluteMessage(%%node.word) ? implode(".", %s) . "." . %%node.word : %%node.word; + } - return $writer->write($prefix . 'echo %modify(call_user_func($this->filters->translate, ' . $messageProp . ' . %node.word, %node.args))'); + %s; + ', $messageProp, $messageProp, $messageProp, $prefixProp, $prefixProp, $macroCodeEcho)); } return ''; @@ -92,7 +98,7 @@ public function macroPrefix( if ($node->closing) { if ($node->content !== null && $node->content !== '') { - return $writer->write($prefixProp . ' = array_pop(' . $tempPrefixProp . ');'); + return $writer->write(sprintf('%s = array_pop(%s);', $prefixProp, $tempPrefixProp)); } return ''; @@ -102,17 +108,17 @@ public function macroPrefix( throw new CompileException('Expected message prefix, none given.'); } - return $writer->write(' - if (!isset(' . $tempPrefixProp . ')) { - ' . $tempPrefixProp . ' = []; + return $writer->write(sprintf(' + if (!isset(%s)) { + %s = []; } - if (isset(' . $prefixProp . ')) { - ' . $tempPrefixProp . '[] = ' . $prefixProp . '; + if (isset(%s)) { + %s[] = %s; } - ' . $prefixProp . ' = [%node.word]; - '); + %s = [%%node.word]; + ', $tempPrefixProp, $tempPrefixProp, $prefixProp, $tempPrefixProp, $prefixProp, $prefixProp)); } } diff --git a/tests/Tests/TranslatorTest.phpt b/tests/Tests/TranslatorTest.phpt index 8a5c207..3448bc5 100644 --- a/tests/Tests/TranslatorTest.phpt +++ b/tests/Tests/TranslatorTest.phpt @@ -276,6 +276,8 @@ final class TranslatorTest extends TestAbstract $latte->renderToString(FileMock::create('{translator}{_depth.message}{/translator}')); }, CompileException::class); Assert::same('
Hello
', $latte->renderToString(FileMock::create('
{_//messages.hello}
'))); + Assert::same('Do not translate!', $latte->renderToString(FileMock::create('{php $wrapper = new \Contributte\Translation\Wrappers\NotTranslate("Do not translate!")}{_$wrapper}'))); + Assert::same('Hi Ales!', $latte->renderToString(FileMock::create('{php $wrapper = new \Contributte\Translation\Wrappers\Message("hi", ["name" => "Ales"])}{_$wrapper}'))); } public function test04(): void