von Patrick Gundlach |

Lua anstelle von XProc

Die neueste Version des Publishers (3.1.9) hat ein kleines, aber feines Feature dazu bekommen: ab sofort ist es möglich, vor dem Rendering Lua-Skripte auszuführen.

Lua

Lua ist eine ganz passable Programmiersprache, ähnlich wie JavaScript, und ideal, um in Programme eingebettet zu werden. Der Publisher selbst ist zu 95% in Lua geschrieben, daher bietet sich die Programmiersprache auch an, um die Startskripte damit zu erstellen.

Aufruf

Mit sp --filter meinprogramm.lua wird also das angegebene Lua-Programm ausgeführt, bevor der eigentliche Rendering-Prozess aufgerufen wird. Das ist übrigens derselbe Befehl, mit dem auch die XProc-Pipelines gestartet werden können. Ob die XProc-Schnittstelle weiter beibehalten wird, weiß ich noch nicht. Ich tendiere dazu, sie abzuschalten (sie wird in der Praxis vermutlich gar nicht benutzt, und wenn, nur um eine Transformation zu starten).

Praxis

Eine übliche Anwendung für einen Pre-Process ist, die Daten von einem Format in ein anderes zu transformieren. In dem Lua Modul runtime steht nun der Befehl run_saxon() zur Verfügung. Eine Vorverarbeitung könnte nun so aussehen:

ok, err = runtime.run_saxon("transformation.xsl","quelldatei.xml","data.xml")

-- den Publishing-Prozess abbrechen, wenn die Transformation fehl schlägt.
if not ok then
    print(err)
    os.exit(-1)
end

(Kommentare werden mit zwei Strichen eingeleitet). Speichern unter transformation.lua und dann den Publisher starten mit

sp --filter transformation.lua

bzw. in die Konfigurationsdatei

filter=transformation.lua

eintragen.

Ebenfalls gibt es in dem Modul runtime die Konstante projectdir, die den Pfad zum aktuellen Projektverzeichnis enthält.

Ausblick

Die Möglichkeiten, die sich durch die Integration mit dem Startprogramm ergibt, sind vielfältig. Man könnte z.B. den XML-Baum durchgehen und Daten abfragen und spontan verändern. Auch ist es denkbar, CSV-Dateien oder Excel-Tabellen in ein XML-Format zu transformieren und so weiter. Hier ist in den nächsten Versionen noch einiges zu erwarten.

Hinweis

Die Implementierung ist noch in einem frühen Stadium. Insofern ist es wahrscheinlich, dass es Änderungen an der API gibt. Ich bitte um Rückmeldung, wenn jemand diese Funktionalität nutzt!

Außerdem kann man noch nicht auf den eigentlichen Rendering-Prozess Einfluss nehmen. Wer weiß, was hier noch kommt.

Und was ist mit XProc?

Oben habe ich ja schon angedeutet, dass die Unterstützung für XProc über kurz oder lang wegfällt. Ich habe die XProc-Version schon länger nicht mehr aktualisiert, was damit zusammenhängt, dass die neuen Distributionen (Calabash, Morgana) um ein vielfaches Größer sind, als die Datei, die derzeit mit dem Publisher mitgeliefert wird. Meine Bereitschaft, die Installationsdatei nur für XProc um ein mehrfaches zu vergrößern, ist nicht so sonderlich hoch.

Ein gravierender Nachteil des nicht-updaten ist, dass die mitgelieferte Version von Saxon uralt ist, und noch kein XSLT 3 unterstützt. Das hat sich nun mit der Lua-Unterstützung geändert.

Insofern vermute ich, dass die Version 4 des Publishers noch XProc enthält, danach aber nicht mehr. Daher stelle ich die Unterstützung von XProc nun auf »deprecated« und hoffe, dass ich damit keine vorhandenen Workflows beeinträchtige.