I sent this to Norbert only instead of to the list...


---

Hi Norbert,

so I already found the & modifier, which means  {{& myObject.asString }} will not have escaped characters in it. So far so good for & which I want to be interpreted by LaTeX as Column delimiters.

But now I have this need for &'s that should be printed. Of course that means I need the encoded, just not as HTML entities ;-)


Do you happen to know how I could implement my own modifier that enables to plug a custom encoding?

I am thinking of introducing a modifier, say § to switch the html entity encoding for another one which I of course have to implement on my own. The end result would be:

{{ myObject }}     to encoe with HTML entities for all things (X)HTML
{{& myObject }}     to not encode at all (e.g. when I need & as & in the resulting String) {{§ myObject }}    for an individually added encoding (tbd - for my LaTeX needs)

A mechanism like this could be used to make a "universal superset" of Mustache, I guess. Especially if we introduce some syntax for selecting an encoding from the template...


Any pointers are welcome. And also ideas if this is a feasible/clever idea or not.

Joachim





Am 17.04.19 um 08:31 schrieb Norbert Hartl:
Joachim,

Am 17.04.2019 um 07:56 schrieb jtuc...@objektfabrik.de:

Norbert,

thanks for answering. I had tried the {{{ }}} option. In case of LaTeX, this is not so easy, however, because {{{ and }}} are completely valid syntactical elements of LaTeX.

It seems like you can replace {{ and }} in Mustache, but not {{{ and }}}. At least it didn't work when I tried. Using '{{{=### ###=}}} ' in my MustacheTemplate would leave text like '###myObject.printString###' unchanged in the resulting text instead of replacing it with the text representation of myObject.

So what I tried last and what gave me quite some mileage on the way to a sulotion was to use

\catcode to replace & with ; in my LaTeX file for the Column separator problem {{=## to make sure I can fill in my table rows with ; as column separator.

Thus my Mustache-Template looks like this (excerpt):

% redefine Mustache-Insertion syntax {{=## ##=}}
\catcode`\;=4 % redefine ; for & to allow non-escaped column-separators in \tabular

...
\begin{tabular}{ccp{6.0cm}rrr}
##myObject.asLatexTableRows## % This is where & is needed for LaTeX to separate table columns, but Mustache would replace the with the html entity &
\end{tabular}


This is a bit hacky, and as I wrote, also still presents problems, because if any of the Strings being inserted using Mustache contains an &, there will be an & in the .tex file, which will lead to a LaTeX error.


So, essentially, what I am most likely looking for is a way to replace {{{ and }}} in Mustache to make sure the $&'s will remain untouched in my inserted text... Sorry for asking the wrong question, I was so glad how far I'd gotten with what I did that I didn't see the forest between all the trees.

So my real question is: how can I replace {{{ in Mustache with something that will not irritate LaTeX?


Any ideas?

Sure ;) In Mustache {{ and }} are the default delimiters. Every addtional character is a modifier. So {{{ is actuall a start delimiter {{ with a { as modifier. So what you can do is to change the delimiter but leave the { modifier like so

'{{=<% %>=}} <%{ value %>}' asMustacheTemplate value: { #value -> '&amp;' } asDictionary

So {{ is the start delimiter, = is the modifier to change the delimiters. We set them to <% and %>. If you want to have unescaped strings you keep using the { on the new delimiter which turns out to be <%{ and %>}.

Norbert
Am 16.04.19 um 12:00 schrieb Norbert Hartl:
Hi,


Am 16.04.2019 um 09:02 schrieb jtuc...@objektfabrik.de:

Hi Pharoers,


I may be a bit wrong on this list. I try anyways.

I am using Mustache to fill text into a String which will then be handed over to LaTeX. The Data I fill in comes from the Database.

Now the problem is this: if a String from the database contains an ampersand (like in 'Katz & Maus'), Mustache will replace special chars with HTML entities. That is fine in a web context, but LaTeX doesnt actually work well with HTML entities. I could, of course, remove the html entities after Mustache invested a lopt of work into creating them. But it seems more logical to keep Mustache from being so eager to help.
It is not logical because mustache is defined that way. So redefining does not improve it. But just use triple {{{ }}} to have strings not being escaped.

BTW: I already took the hurdle of Mustache excaping $& fir tabular environments (LaTeX uses the ampersand as a divider for table cells) by using \catcode in our .tex template files. But now the String comes from the database and so I am a bit lost...


So is there any best practice for this problem?

Yes, use it this way

'{{{ value }}}' asMustacheTemplate value: { #value -> '&amp;' } asDictionary

Norbert



--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel mailto:jtuc...@objektfabrik.de
Fliederweg 1 http://www.objektfabrik.de
D-71640 Ludwigsburg http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0 Fax: +49 7141 56 10 86 1






--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          mailto:jtuc...@objektfabrik.de
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1


--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          mailto:jtuc...@objektfabrik.de
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1



Reply via email to