summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/lualibs/lualibs.lua
blob: c6f4d8a39635c075c3a48bf4d53d2b3c51188525 (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
-- 
--  This is file `lualibs.lua',
--  generated with the docstrip utility.
-- 
--  The original source files were:
-- 
--  lualibs.dtx  (with options: `lualibs')
--  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.
--  
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--  By default, \identifier{lualibs} will not load the libraries individually.
--  Instead, it includes two \emphasis{merged packages} that have been compiled
--  from the original files.
--  This is achieved by means of \identifier{mtx-package}, a script for bundling
--  \LUA code shipped with \CONTEXT.
--  This concatenates the code of several \LUA files into a single file that is
--  both easier to distribute and loading (marginally) faster.
--  \identifier{mtx-package} ensures that the code from each file gets its
--  own closure and strips newlines and comments, resulting in a smaller payload.
--  Another package that relies on it heavily is the font loader as contained in
--  \identifier{luaotfload} and \identifier{luatex-fonts}.
--
--  If \CONTEXT is installed on the system, the merge files can be created
--  by running:
--
--  \begin{quote}\begin{verbatim}
--    mtxrun --script package --merge lualibs-basic.lua
--    mtxrun --script package --merge lualibs-extended.lua
--  \end{verbatim}\end{quote}
--
--  \noindent
--  Of course there is a make target for that:
--
--  \begin{quote}\begin{verbatim}
--    make merge
--  \end{verbatim}\end{quote}
--  \noindent
--  will take care of assembling the packages from the files distributed with
--  \identifier{lualibs}.
--
--  For this to work, the syntax of the \LUA file needs to be well-formed:
--  files that should be merged must be included via a function
--  \verb|loadmodule()|.
--  It doesn’t matter if the function actually does something; a dummy will
--  suffice.
--  Also, the argument to \verb|loadmodule()| must be wrapped in parentheses.
--  This rule is quite convenient, actually, since it allows excluding files
--  from the merge while still using \verb|loadmodule()| consistently.
--
--  \begin{quote}\begin{verbatim}
--    ...
--    loadmodule("my-lua-file.lua") -- <= will be merged
--    loadmodule('my-2nd-file.lua') -- <= will be merged
--    loadmodule "my-3rd-file.lua"  -- <= will be ignored
--    ...
--  \end{verbatim}\end{quote}
--
--  Note that there is one exception to the packaging:
--  \fileent{lualibs-util-jsn.lua} cannot be successfully packaged because
--  it follows a different coding convention, returning a \LUA table on exit.
--  Therefore, the file is loaded separately as part of the \identifier{extended}
--  set like any other \LUA module.
--
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lualibs = lualibs or { }

lualibs.module_info = {
  name          = "lualibs",
  version       = 2.00,
  date          = "2013/04/30",
  description   = "ConTeXt Lua standard libraries.",
  author        = "Hans Hagen, PRAGMA-ADE, Hasselt NL & Elie Roux & Philipp Gesang",
  copyright     = "PRAGMA ADE / ConTeXt Development Team",
  license       = "See ConTeXt's mreadme.pdf for the license",
}


config           = config or { }
config.lualibs   = config.lualibs or { }

if config.lualibs.prefer_merged == nil then
  lualibs.prefer_merged = true
end
if config.lualibs.load_extended == nil then
  lualibs.load_extended = true
end
config.lualibs.verbose = config.lualibs.verbose == false


local dofile          = dofile
local kpsefind_file   = kpse.find_file
local stringformat    = string.format
local texiowrite_nl   = texio.write_nl

local find_file, error, warn, info
do
  local _error, _warn, _info
  if luatexbase and luatexbase.provides_module then
    _error, _warn, _info = luatexbase.provides_module(lualibs.module_info)
  else
    _error, _warn, _info = texiowrite_nl, texiowrite_nl, texiowrite_nl
  end

  if lualibs.verbose then
    error, warn, info = _error, _warn, _info
  else
    local dummylogger = function ( ) end
    error, warn, info = _error, dummylogger, dummylogger
  end
  lualibs.error, lualibs.warn, lualibs.info = error, warn, info
end

if luatexbase and luatexbase.find_file then
  find_file = luatexbase.find_file
else
  kpse.set_program_name"luatex"
  find_file = kpsefind_file
end


local loadmodule = loadmodule or function (name, t)
  if not t then t = "library" end
  local filepath  = 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

lualibs.loadmodule = loadmodule


if lualibs.basic_loaded ~= true then
  loadmodule"lualibs-basic.lua"
  loadmodule"lualibs-compat.lua" --- restore stuff gone since v1.*
end

if  lualibs.load_extended   == true
and lualibs.extended_loaded ~= true then
  loadmodule"lualibs-extended.lua"
end

--- This restores the default of loading everything should a package
--- have requested otherwise. Will be gone once there is a canonical
--- interface for parameterized loading of libraries.
lualibs.load_extended = true

-- vim:tw=71:sw=2:ts=2:expandtab

-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- 
--  End of File `lualibs.lua'.