diff options
author | Karl Berry <karl@freefriends.org> | 2013-04-08 00:43:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-04-08 00:43:40 +0000 |
commit | 824f7b0903de8ad7f6ee3d7656005e4c59155e06 (patch) | |
tree | abfc8673ef9916f3ab7074e811207384c301492b /Master/texmf-dist/scripts/context/lua/mtxlibs.lua | |
parent | 689aefb0727676ed3cddf331337b4be226495e72 (diff) |
context import for TL13, from www.pragma-ade.com/context/beta/cont-tmf.zip
git-svn-id: svn://tug.org/texlive/trunk@29731 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/scripts/context/lua/mtxlibs.lua')
-rw-r--r-- | Master/texmf-dist/scripts/context/lua/mtxlibs.lua | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/Master/texmf-dist/scripts/context/lua/mtxlibs.lua b/Master/texmf-dist/scripts/context/lua/mtxlibs.lua new file mode 100644 index 00000000000..60889acde48 --- /dev/null +++ b/Master/texmf-dist/scripts/context/lua/mtxlibs.lua @@ -0,0 +1,240 @@ +if not modules then modules = { } end modules ['mtxlibs'] = { + version = 1.001, + comment = "a reasonable subset of mtxrun preloaded libraries", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- This file can be used to load a the (relevant) helper libraries that are also used +-- in ConTeXt. You can use it as: +-- +-- -- if needed (outside texlua): +-- +-- -- require("lpeg") -- mandate +-- -- require("md5") -- handy +-- -- require("lfs") -- recommended +-- -- require("slunicode") -- sort of obsolete +-- +-- -- the library: +-- +-- require("mtxlibs") +-- +-- An alternative is to merge all libraries into this one so that you don't have to +-- distribute them. +-- +-- mtxlibs --selfmerge +-- +-- If you need additional libraries, you can do something like this: +-- +-- lua mtxlibs.lua --selfmerge my-web-project.lua trac-lmx util-jsn +-- lua mtxlibs.lua --selfmerge my-sql-project.lua util-sql util-sql-imp-library util-sql-imp-client +-- +-- That way you only need to update one file in a project and are not dependent on changes +-- in the core ConTeXT libraries. The libraries are maintained as part of ConTeXt and used +-- in projects so relative stable. The code works in Lua 5.1 as well as in 5.2. Not all +-- functionality makes sense for users who are not familiar with ConTeXt but for instance +-- trackers and loggers are included because that way we have can provide users with a +-- consistent ecosystem. +-- +-- Much of the provided functionality is described in cld-mkiv.pdf and related manuals, on +-- contextgarden.net as well in articles. The XML subsystem is described in its own manual. +-- Templates and SQL (not preloaded) is also has its own manual. +-- +-- The next section contains the merged code, with each block ending uop in its own +-- closure. The code gets somewhat compacted to save space and speed up loading. +-- +-- There are some dependencies between the several modules. Also, quite some functions are added +-- to the regular Lua namespaces. In due time I'll isolate them in their own namespaces but with +-- the for context handy option to expose them in the normal ones. I might make the dependencies +-- less but it probably makes no sense to waste time on them. + +xpcall(function() local _, t = require("lpeg") return end,function() end) if t then lpeg = t end +xpcall(function() local _, t = require("md5") return end,function() end) if t then md5 = t end +xpcall(function() local _, t = require("lfs") return end,function() end) if t then lfs = t end +xpcall(function() local _, t = require("slunicode") return end,function() end) if t then unicode = t end + +-- begin library merge + +-- end library merge + +local gsub, gmatch, match, find = string.gsub, string.gmatch, string.match, string.find +local concat = table.concat + +local ownname = arg and arg[0] or 'mtxlibs.lua' +local ownpath = gsub(match(ownname,"^(.+)[\\/].-$") or ".","\\","/") +local owntree = ownpath + +local ownlibs = { + + "l-lua.lua", + "l-lpeg.lua", + "l-function.lua", + "l-string.lua", + "l-table.lua", + "l-io.lua", + "l-number.lua", + "l-set.lua", + "l-os.lua", + "l-file.lua", -- limited functionality when no lfs + "l-md5.lua", -- not loaded when no md5 library + "l-url.lua", + "l-dir.lua", -- limited functionality when no lfs + "l-boolean.lua", + "l-unicode.lua", -- nowadays independent of slunicode + "l-math.lua", + + "util-str.lua", + "util-tab.lua", + "util-sto.lua", + -- "util-lua.lua", -- no need for compiling + "util-prs.lua", + -- "util-fmt.lua", -- no need for table formatters + -- "util-deb.lua", -- no need for debugging (and tracing) + + "trac-set.lua", + "trac-log.lua", + -- "trac-pro.lua", -- not relevant outside context + "trac-inf.lua", + + "util-mrg.lua", + "util-tpl.lua", + + "util-env.lua", + -- "luat-env.lua", -- not relevant outside context + + "lxml-tab.lua", + "lxml-lpt.lua", + "lxml-mis.lua", + "lxml-aux.lua", + "lxml-xml.lua", + +} + +package.path = "t:/sources/?.lua;t:/sources/?;" .. package.path + +local ownlist = { + '.', + ownpath , + ownpath .. "/../sources", -- HH's development path + owntree .. "/../../texmf-local/tex/context/base", + owntree .. "/../../texmf-context/tex/context/base", + owntree .. "/../../texmf-dist/tex/context/base", + owntree .. "/../../texmf/tex/context/base", + owntree .. "/../../../texmf-local/tex/context/base", + owntree .. "/../../../texmf-context/tex/context/base", + owntree .. "/../../../texmf-dist/tex/context/base", + owntree .. "/../../../texmf/tex/context/base", +} + +if ownpath == "." then table.remove(ownlist,1) end + +own = { + name = ownname, + path = ownpath, + tree = owntree, + list = ownlist, + libs = ownlibs, +} + +local function locate_libs() + local name = ownlibs[1] + local done = false + for i=1,#ownlist do + local path = ownlist[i] + local filename = path .. "/" .. name + local f = io.open(filename) + if f then + f:close() + package.path = package.path .. ";" .. path .. "/?.lua" -- in case l-* does a require + done = path + break + end + end + locate_libs = function() return done end + return done +end + +local function load_libs() + local found = locate_libs() + if found then + for i=1,#ownlibs do + local basename = ownlibs[i] + local filename = found .. "/" .. basename + local codeblob = loadfile(filename) + if codeblob then + package.preload[basename] = codeblob() or true + end + end + end +end + +if not unicode then + load_libs() +end + +local merger = utilities and utilities.merger + +if not merger then + return +end + +local arguments = environment.arguments +local files = environment.files + +if environment.ownname ~= "mtxlibs.lua" then + return +end + +local helpinfo = [[ +usage: mtxlibs [options] + +--merge +--merge targetfile extralibs +--selfclean + +and in a lua file: + +require("mtxlibs") +]] + +local application = logs.application { + name = "mtxlibs", + banner = "ConTeXt Basic Lua Libraries 1.00", + helpinfo = helpinfo, +} + +local report = application.report + +if arguments.selfmerge then + + report("merging libraries") + local found = locate_libs() + if found then + local target = files[1] + if target == ownname then + report("target cannot be this file") + return + elseif target then + report("target: %s",target) + for i=1,#files do + ownlibs[#ownlibs+1] = file.addsuffix(files[i],"lua") + end + end + merger.selfmerge(ownname,ownlibs,{ found },target) + report("done") + else + report("no libraries found") + end + +elseif arguments.selfclean then + + report("cleaning libraries") + merger.selfclean(ownname) + report("done") + +elseif arguments.help or files[1] == "help" then + + application.help() + +end |