Overload Jinja2 autodescape für (La) TeX

8

Ist es möglich, Jinja2 autoescape zu überladen, so dass es etwas auf eine benutzerdefinierte Weise (d. h. etwas anderes als HTML wie LaTeX) entkommt?

Hier ist ein Beispiel, das versucht, TeX zu umgehen.

%Vor%

Wenn Sie den obigen Befehl ausführen, wird Folgendes ausgegeben:

%Vor%

Das Problem hier ist, dass HTML-Escaping verwendet wird. Daher sollten { und } mit Escapezeichen versehen werden, aber nicht, und < wird in &lt; konvertiert, sollte dies aber nicht sein.

Ich möchte die Escape-Funktion überladen, die Jinja2 verwendet, um Variablen zu entkommen.

Mein erster Gedanke ist, finalize zu überladen und autoescape zu deaktivieren. z.B.

%Vor%

Die Ausgabe ist falsch, weil der Haupttext nicht in Markup (d. h. eine als sicher markierte Zeichenfolge) steht:

%Vor%

Wenn ich autoescape auf True setze und in finalize belasse, funktioniert fast (und in diesem Beispiel funktioniert es):

%Vor%

Das Aktivieren von autoescape on funktioniert, da der Haupttext für die Vorlage als Markup (d. h. sicher) erstellt wird.

Hier liegt jedoch das Problem, wenn ich die Eingabe in eine Liste ändere, die join ed:

ist %Vor%

Wenn ich das mache, bekomme ich:

%Vor%

Es scheint so, als würde HTML autoescape auf den Elementen von 'content' statt finalize ausgeführt. Die einfachste Lösung, vorausgesetzt, dass Jinja2 und sein Autocaping lose gekoppelt sind, scheint eine AutoScape-Funktion zu überlasten. Ich kann das nicht herausfinden, und das Beste, was ich mir ausgedacht habe, ist die Funktion finalize .

Gibt es eine bessere Möglichkeit, das Escapen von TeX als das Überladen der Funktion finalize zu behandeln? Kann man autoescape überladen?

Zum Beispiel könnte man ein benutzerdefiniertes Markup-Paket installieren? (eine Wahl, die ich lieber vermeiden würde)

Danke fürs Lesen.

    
Brian M. Hunt 03.11.2011, 21:18
quelle

0 Antworten

Tags und Links