Vlastní implicitní escapování

- zirafka
- Člen | 12
Zdravím ve spolek,
normálně používám fórum jako readonly, ale teď jsem se nějak zasekla a
tak jsem se odhodlala, že vyzkouším na vlastní kůži sílu legendární
nette komunity (-;
Používám Latte na generování jiného souboru, než je HTML/JS/CSS (konkrétně zdroják pro sazbu v LaTeXu). Takže bych si potřebovala vytvořit jiné dafault makro na escapování. Jak to udělám nejlíp/nejhezčejc/nejsprávnějc?
Předem díky za podpověď!
Žirafka
EDIT: Tak nakonec jsme metodou pokus omyl zjistili, že funguje toto:
<?php
NLatteMacros::$defaultMacros['$'] = '<?php echo %:macroDollar% ?>';
?>
Ale nemělo by náhodou fungovat i toto?
<?php
$latteFilter->escape = "myEscapeFunction";
$latteFilter->context = NLatteFilter::CONTEXT_NONE;
?>
Editoval zirafka (8. 3. 2011 13:43)

- Jan Tvrdík
- Nette guru | 2595
zirafka napsal(a):
Ale nemělo by náhodou fungovat i toto?
<?php $latteFilter->escape = "myEscapeFunction"; $latteFilter->context = NLatteFilter::CONTEXT_NONE; ?>
Ne, nemělo. $latteFilter->escape a
$latteFilter->context jsou pomocné funkce, jejichž hodnota se
přepíná za chodu. Udržují aktuální kontext a aktuální funkci použitou
pro escapování.

- zirafka
- Člen | 12
Díky za odpověď.
<?php
NLatteMacros::$defaultMacros['$'] = '<?php echo myEscapeFunction(%:macroDollar%) ?>';
?>
je tedy nejčistší cesta, jak to udělat, nebo to jde i elegantněji?
Jan Tvrdík napsal(a):
zirafka napsal(a):
Ale nemělo by náhodou fungovat i toto?
<?php $latteFilter->escape = "myEscapeFunction"; $latteFilter->context = NLatteFilter::CONTEXT_NONE; ?>Ne, nemělo.
$latteFilter->escapea$latteFilter->contextjsou pomocné funkce, jejichž hodnota se přepíná za chodu. Udržují aktuální kontext a aktuální funkci použitou pro escapování.

- Jan Tvrdík
- Nette guru | 2595
Tak jsem se na to díval ještě jednou a viděl bych to asi takto: LaTeX je
z pohledu Nette kontext, takže ideální by bylo nadefinovat nový typ
kontextu, což ale pořádně nejde, protože by to vyžadovalo podědit
LatteFilter (to jde) a změnit private metody na
protected (to vyžaduje pull request do Nette). Pokud se rozhodneš
netvořit si vlastní kontext (což bude výrazně jednodušší), tak stačí
pomocí makra {contentType latex} (uvedeného na začátku
šablony) resetovat kontext na NONE a následně přeregistrovat
helper escape v šabloně pomocí
$tpl->registerHelper('escape', myEscapeFunction').