Renaming macro ‘_’ to any string stops escaping

5 years ago

Daniel
Member | 3
+
0
-

Hello,
I use standalone Latte and everything work perfectly except one thing.

THIS WORKS
CoreMacros.php

<?php
$me->addMacro('_', array($me, 'macroTranslate'), array($me, 'macroTranslate'));

// some code

public function macroTranslate(MacroNode $node, PhpWriter $writer)
{
    if ($node->closing) {
        return $writer->write('echo %modify($template->translate(ob_get_clean()))');

    } elseif ($node->isEmpty = ($node->args !== '')) {
        return $writer->write('echo %modify($template->translate(%node.args))');

    } else {
        return 'ob_start()';
    }
}
?>

In template:

<?php
{_'SOME KEY'}
?>

Output in php:

<?php
echo \view\latte\Runtime\Filters::escapeHtml($template->translate('SOME KEY'), ENT_NOQUOTES)
?>

THIS DOES NOT WORKS
I change only name of macro in CoreMacros.php

<?php
$me->addMacro('translate', array($me, 'macroTranslate'), array($me, 'macroTranslate'));
?>

In template:

<?php
{translate 'SOME KEY'}
?>

Output in php:

<?php
echo $template->translate('SOME KEY')
?>

Renamign causes, that there is no escaping. I have no idea why.

I need two translating macros, because I have two translation sources. Thats why I try to rename macro – I want to duplicate it in future.

Many thanks for any help.
Daniel

5 years ago

Patrik Votoček
Member | 2249
+
0
-

because (auto) escaping for macro _ is hardcoded in Latte

5 years ago

Daniel
Member | 3
+
0
-

Thanks.
On what place in code? It occured to me, I tried to search, but didn't find it. Can I double it for different name?

Last edited by Daniel (2014-05-23 21:09)

5 years ago

David Grudl
Nette Core | 6849
+
0
-

Here https://github.com/…Compiler.php#L536. But it is not nice.

5 years ago

Daniel
Member | 3
+
0
-

Many thanks, that is what I was looking for.

Latte and Tracy is awesome. Especially ‘n’ macro.