summaryrefslogtreecommitdiff
path: root/lualibs.lua
blob: 79e17fddf34aeadf5f34a7475d6492d3c517a5db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
-- 
--  This is file `lualibs.lua',
--  generated with the docstrip utility.
-- 
--  The original source files were:
-- 
--  lualibs.dtx  (with options: `lua')
--  This is a generated file.
--  
--  Copyright (C) 2009 by PRAGMA ADE / ConTeXt Development Team
--  
--  See ConTeXt's mreadme.pdf for the license.
--  
--  This work consists of the main source file lualibs.dtx
--  and the derived file lualibs.lua.
--  
module('lualibs', package.seeall)

local lualibs_module = {
    name          = "lualibs",
    version       = 1.01,
    date          = "2013/04/10",
    description   = "Lua additional functions.",
    author        = "Hans Hagen, PRAGMA-ADE, Hasselt NL & Elie Roux",
    copyright     = "PRAGMA ADE / ConTeXt Development Team",
    license       = "See ConTeXt's mreadme.pdf for the license",
}

local lpeg, kpse = lpeg, kpse

local dofile       = dofile
local lpegmatch    = lpeg.match
local stringformat = string.format

local find_file, error, warn, info
if luatexbase and luatexbase.provides_module then
  error, warn, info = luatexbase.provides_module(lualibs_module)
else
  error, warn, info = texio.write_nl, texio.write_nl, texio.write_nl -- stub
end
if luatexbase and luatexbase.find_file then
  find_file = luatexbase.find_file
else
  kpse.set_program_name"luatex"
  find_file = kpse.find_file
end

loadmodule = _ENV.loadmodule or function (name, t)
  if not t then t = "library" end
  local filepath  = kpse.find_file(name, "lua")
  if not filepath or filepath == "" then
    warn(stringformat("Could not locate %s “%s”.", t, name))
    return false
  end
  dofile(filepath)
  return true
end

local merged_suffix = "-merged.lua"

local p_suffix      = lpeg.P".lua" * lpeg.P(-1)
local p_nosuffix    = (1 - p_suffix)^0
local p_hassuffix   = (p_nosuffix) * p_suffix
local p_stripsuffix = lpeg.C(p_nosuffix) * p_suffix

local loadmerged = function (basename)
  basename = lualibs_module.name .. "-" .. basename
  if not lpegmatch(p_hassuffix, basename) then -- force .lua suffix
    basename = basename .. ".lua"
  end
  local mergedname = lpegmatch(p_stripsuffix, basename) .. merged_suffix
  local res = loadmodule(mergedname, "merged package")
  if not res then -- package not present, load individual libs
    info(stringformat("Falling back to “%s”.", basename))
    res = loadmodule(basename, "metapackage")
  end
  if res == false then
    error(stringformat("Could not load metapackage “%s”.", basename))
  end
end

loadmerged"basic.lua"
--inspect(table.keys(table))
--inspect(table.keys(string))
loadmerged"extended.lua"

io.write"\n"
-- 
-- vim:tw=71:sw=2:ts=2:expandtab
--  End of File `lualibs.lua'.