[Dev-luatex] Module searching

Hans Hagen pragma at wxs.nl
Tue Dec 11 10:25:57 CET 2007

Heiko Oberdiek wrote:

> Reimplementing kpse library in Lua with analyzing texmf.cnf
> files, path expansion, ls-R lookup, ...?

in this case i was more thinking of looking in the paths reported by 
kpse (given that the path variable can be expanded), so, no lookup, but 
looling at the file system; another option is that you just put the file 
alongside the tex file, lookup the tex file, replace the suffix and load 
the file; personally i see no need to put lua files that belong to tex 
in the scripts path;

> The other file types are covered: TeX files, tfm files, type 1 files, ...
> Missing is a proper support for lua scripts.

lua scripts as such are like perl, ruby, whatever scripts; the 
texmfscript path is not for tex related (runtime embedded or whatever) 
scripts ... makes packaging a mess when we get a duplicate tree there, 
apart from clashes

> A user/macro writer says for example:
>   \documentclass{article}
>   \usepackage{longtable}
>   \usepackage[T1]{fontenc}
>   \usepackage{lmodern}
> But he doesn't implement a search algorithm for
> finding article.cls or longtable.sty or the latin modern fonts.
> Also Lua has a module system, thus a user/macro writer wants to write:
>   \directlua0{
>     require("foobar.hello")
>     -- ...
>   }
> without implementing, how the module is found.

i'd say .. overload require, and put the modules in the tex tree

> Lua provides four search strategies by default.
> These can be changed and exended, see the table "package.loader"
> (latest Lua docu for 5.1)


>>> Something like "foobar_hello.lua" isn't the best solution:
> Currently I am using
>   TDS:scripts/foobar/foobar.hello.lua
> This doesn't follow Lua's conventions (TDS:scripts/foobar/hello.lua).
> But the search is easier:
>   function kpse.module_loader(module)
>     local script = module .. ".lua"
>     local file = kpse.find_file(script, "texmfscripts")
>     if file then
>       local loader, error = loadfile(file)
>       if loader then
>         return loader
>       end
>       return "\n\tKPSE loading error:\n" .. error
>     end
>     return "\n\tKPSE search failed"
>   end
>   table.insert(package.loaders, kpse.module_loader)
> and avoids at least:
>>> * It doesn't scale well, e.g. it pollutes "package.loaded".

a solution indeed, but as said ... i wonder if texmfscripts is meant for 
that (not sure how easy it is for packaging too)


                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl

More information about the dev-luatex mailing list