LuaTeX erweitern0
Ich habe für unsere Software einen eigenen XML-Parser geschrieben, der auf lpeg basiert. Bisher hat der Parser auch wunderbar funktioniert. Das liegt bestimmt auch daran, das ich die Grammatik 1:1 aus der XML-Spezifikation übernehmen konnte und somit Fehler sehr unwahrscheinlich sind. Bei unserem aktuellen Kundenprojekt mit sehr großen Datenmengen stoße ich aber langsam an die Grenze von lpeg. Die Stack-Größe ist wohl zu klein für Zigtausende Aufrufe einer lpeg-Regel innerhalb einer Grammatik. Daher möchte ich auf einen erprobten XML-Parser umsteigen und habe mich für libxml2 entschieden, mit lua-xmlreader als Lua-Verbindung. Der Einfachheit halber hätte ich gerne libxml2 und die Lua-Bindings lua-xmlreader im LuaTeX-Programm, damit ich nur eine plattformabhängige Datei habe. Taco Hoekwater hat mir auf der Mailingliste dankenswerterweise gezeigt, wie ich das machen kann. Ich erlaube mir, seine Anleitung hier noch einmal zu veröffentlichen. (Übersetzung von mir.)
- Das l
ibxml2-develPaket installieren (war bei mir nicht notwendig, vielleicht weil ich XCode schon installiert hatte?). lua-xmlreader-0.1.tar.gzunterhalb vonluatexdir/entpacken.- Drei Quelldateien und die Include-Datei zu
luatexdir/am/luamisc.amhinzufügen:Index: texk/web2c/luatexdir/am/luamisc.am =================================================================== --- texk/web2c/luatexdir/am/luamisc.am (revision 3735) +++ texk/web2c/luatexdir/am/luamisc.am (working copy) @@ -15,7 +15,8 @@ libluamisc_a_CPPFLAGS = \ $(ZLIB_INCLUDES) \ $(ZZIPLIB_INCLUDES) \ - -I$(top_srcdir)/luatexdir/lua51 + -I$(top_srcdir)/luatexdir/lua51 \ + -I/usr/include/libxml2 libluamisc_a_CFLAGS = # $(WARNING_CFLAGS) libluamisc_a_SOURCES = \ @@ -26,6 +27,9 @@ luatexdir/luamd5/md5lib.c \ luatexdir/luamd5/md5_lua.c \ luatexdir/luapeg/lpeg.c \ + luatexdir/lua-xmlreader-0.1/error.c \ + luatexdir/lua-xmlreader-0.1/error.h \ + luatexdir/lua-xmlreader-0.1/xmlreader.c \ luatexdir/luaprofiler/clocks.c \ luatexdir/luaprofiler/clocks.h \ luatexdir/luaprofiler/core_profiler.c \ -
-lxml2zoluatexdir/am/luatex.amhinzufügen - '
autoreconf' insource/texk/web2causführen. Das ist ein wenig tricky, da du die richtigen Versionen von autoconf (>=2.65) und automake (>=1.11.1) benötigst. - Die Prototypen von
luaopen_xmlreaderausxmlreader.czuluatexdir/lua/luatex-api.hhinzufügen: - Den Aufruf von
luaopen_xmlreader()im Feld inluatexdir/lua/luastuff.wergänzen: build.shausführen.
=================================================================== --- texk/web2c/luatexdir/am/luatex.am (revision 3735) +++ texk/web2c/luatexdir/am/luatex.am (working copy) @@ -26,7 +26,7 @@ luatex_LDFLAGS = -export-dynamic -luatex_LDADD = $(luatex_ldadd) $(LDADD) $(LIBADD_DLOPEN) $(lua_socketlibs) +luatex_LDADD = $(luatex_ldadd) $(LDADD) $(LIBADD_DLOPEN) $(lua_socketlibs) -lxml2 luatex_DEPENDENCIES = $(proglib) $(KPATHSEA_DEPEND) libluatex.a luatex_DEPENDENCIES += $(LIBPNG_DEPEND) $(ZLIB_DEPEND) $(XPDF_DEPEND)
Index: texk/web2c/luatexdir/lua/luatex-api.h =================================================================== --- texk/web2c/luatexdir/lua/luatex-api.h (revision 3735) +++ texk/web2c/luatexdir/lua/luatex-api.h (working copy) @@ -60,6 +60,8 @@ extern int luaopen_md5(lua_State * L); extern int luatex_md5_lua_open(lua_State * L); +extern int luaopen_xmlreader(lua_State * L); + extern int luaopen_zlib(lua_State * L); extern int luaopen_gzip(lua_State * L); extern int luaopen_ff(lua_State * L);
Index: texk/web2c/luatexdir/lua/luastuff.w
===================================================================
--- texk/web2c/luatexdir/lua/luastuff.w (revision 3735)
+++ texk/web2c/luatexdir/lua/luastuff.w (working copy)
@@ -105,6 +105,7 @@
{"unicode", luaopen_unicode},
{"zip", luaopen_zip},
{"lpeg", luaopen_lpeg},
+ {"xmlreader", luaopen_xmlreader},
{"md5", luaopen_md5},
{"lfs", luaopen_lfs},
{"profiler", luaopen_profiler},
Auf meinem Mac hat das sofort funktioniert. Jetzt steht der Umstellung auf libxml2 nichts mehr im Wege. Besten Dank, Taco!

Kommentar schreiben