Hans Hagen wrote:
On 7-5-2010 10:52, Taco Hoekwater wrote:
Peter Münster wrote:
On Thu, May 06 2010, Hans Hagen wrote:

\startbuffer[test]
bla = nil
\stopbuffer
\savebuffer[test][../mytest.lua]
\starttext
\startluacode
package.path = "../?.lua;;"
require("mytest")
\stopluacode
\stoptext
dofile "../mytest.lua"

Bad example...

mytest.lua is a module, so it must be loaded with require:

You cannot always replace 'require' with 'dofile', and for
this reason it is important that package.path actually works
as explained in the lua manual. (escrito had similar problems,
and other external lua modules will run into it as well).

well, package path is supported (as is cpath) so it's more a question of why that paths fails .. maybe we need to explicitly assume ";" instead of the platform separator (tests on my machine work ok as windows has ; as separator)

you can test this with adding an explcit ";" to

        libpaths = file.split_path(_path_,";")

in data-lua.lua

For me on linux, this change should make it work (package.path indeed
contains semicolons). However, require() is still broken:

! LuaTeX error /opt/tex/texmf-local/tex/context/base/l-file.lua:133: bad argument #1 to 'gsub' (string expected, got nil)
stack traceback:
        [C]: in function 'gsub'
/opt/tex/texmf-local/tex/context/base/l-file.lua:133: in function 'split_path' /opt/tex/texmf-local/tex/context/base/data-lua.lua:36: in function 'clibpaths' /opt/tex/texmf-local/tex/context/base/data-lua.lua:97: in function </opt/tex/texmf-local/tex/context/base/data-lua.lua:79>
        [C]: in function 'require'
        <main ctx instance>:2: in main chunk.
}inserted text> ...equire('testmodule') -- fails

\dodostartluacode ...d \directlua \zerocount {#1}}

l.5 \stopluacode


Test files are attached. The definition of package.libpaths I used:

  function package.libpaths()
    print (_path_, package.path)
    if not _path_ or package.path ~= _path_ then
        _path_ = package.path
        libpaths = file.split_path(_path_,';')
        print (table.serialize(libpaths))
    end
    return libpaths
  end

And it prints out:

nil ./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua
t={
 "./?.lua",
 "/usr/local/share/lua/5.1/?.lua",
 "/usr/local/share/lua/5.1/?/init.lua",
 "/usr/local/lib/lua/5.1/?.lua",
 "/usr/local/lib/lua/5.1/?/init.lua",
}

But it looks like mkiv is not happy with the split path, as it goes
on trying clibpaths().


Also, I ran into another problem: if the module has the same name as the
base input file, package.libpaths is not called at all (initially the
module was called 'tryme.lua').

Best wishes,
Taco


module 'testmodule'

return {}

Attachment: tryme.tex
Description: TeX document

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to