summaryrefslogtreecommitdiff
path: root/tex/generic/context/luatex/luatex-swiglib.lua
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2013-04-06 15:00:22 +0300
committerMarius <mariausol@gmail.com>2013-04-06 15:00:22 +0300
commit99c647f91806e9b73970a8e252af5a7974d5a57d (patch)
tree19306fbe23ad3b1617edda7c4aa47a9ac44a1ea9 /tex/generic/context/luatex/luatex-swiglib.lua
parentd0342a37af2ced0e9b350e01ab3eaa2311f0cdb9 (diff)
downloadcontext-99c647f91806e9b73970a8e252af5a7974d5a57d.tar.gz
beta 2013.04.05 22:00
Diffstat (limited to 'tex/generic/context/luatex/luatex-swiglib.lua')
-rw-r--r--tex/generic/context/luatex/luatex-swiglib.lua62
1 files changed, 62 insertions, 0 deletions
diff --git a/tex/generic/context/luatex/luatex-swiglib.lua b/tex/generic/context/luatex/luatex-swiglib.lua
new file mode 100644
index 000000000..7ffcdc375
--- /dev/null
+++ b/tex/generic/context/luatex/luatex-swiglib.lua
@@ -0,0 +1,62 @@
+if not modules then modules = { } end modules ['luatex-swiglib'] = {
+ version = 1.001,
+ comment = "companion to luatex-swiglib.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local savedrequire = require
+
+local libsuffix = os.type == "windows" and ".dll" or ".so"
+
+function requireswiglib(required,version)
+ local library = package.loaded[required]
+ if library then
+ return library
+ else
+ local name = string.gsub(required,"%.","/") .. libsuffix
+ local list = kpse.show_path("clua")
+ for root in string.gmatch(list,"([^;]+)") do
+ local full = false
+ if type(version) == "string" and version ~= "" then
+ full = root .. "/" .. version .. "/" .. name
+ full = lfs.isfile(full) and full
+ end
+ if not full then
+ full = root .. "/" .. name
+ full = lfs.isfile(full) and full
+ end
+ if full then
+ local path, base = string.match(full,"^(.-)([^\\/]+)" .. libsuffix .."$")
+ local savedlibrary = package.loaded[base]
+ package.loaded[base] = nil
+ local savedpath = lfs.currentdir()
+ lfs.chdir(path)
+ library = package.loadlib(full,"luaopen_" .. base)
+ if type(library) == "function" then
+ library = library()
+ texio.write("<swiglib: '",required,"' is loaded>")
+ end
+ lfs.chdir(savedpath)
+ package.loaded[base] = savedlibrary
+ package.loaded[required] = library
+ return library
+ end
+ end
+ texio.write("<swiglib: '",name,"'is not found on '",list,"'")
+ end
+ texio.write("<swiglib: '",required,"' is not found>")
+end
+
+function require(name)
+ if string.find(name,"^swiglib%.") then
+ return requireswiglib(name)
+ else
+ return savedrequire(name)
+ end
+end
+
+function swiglib(name,version)
+ return requireswiglib("swiglib." .. name,version)
+end