summaryrefslogtreecommitdiff
path: root/lualibs-extended.lua
blob: c5728eac7716a3e368a008a1d8e3f5542882221c (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
--  This is file `lualibs-extended.lua',
module('lualibs-extended', package.seeall)

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

--[[doc--
Here we define some functions that fake the elaborate logging/tracking
mechanism Context provides.
--doc]]--
local error, logger, mklog
if luatexbase and luatexbase.provides_module then
  --- TODO test how those work out when running tex
  local __error,_,_,__logger =
    luatexbase.provides_module(lualibs_extended_module)
  error  = __error
  logger = __logger
  mklog = function ( ) return logger end
else
  local texiowrite    = texio.write
  local texiowrite_nl = texio.write_nl
  local stringformat  = string.format
  mklog = function (t)
    local prefix = stringformat("[%s] ", t)
    return function (...)
      texiowrite_nl(prefix)
      texiowrite   (stringformat(...))
    end
  end
  error  = mklog"ERROR"
  logger = mklog"INFO"
end

--[[doc--
We temporarily put our own global table in place and restore whatever
we overloaded afterwards.

\CONTEXT\ modules each have a custom logging mechanism that can be
enabled for debugging.
In order to fake the presence of this facility we need to define at
least the function \verb|logs.reporter|.
For now it’s sufficient to make it a reference to \verb|mklog| as
defined above.
--doc]]--

local dummy_function = function ( ) end
local newline        = function ( ) texiowrite_nl"" end

local fake_logs = function (name)
  return {
    name     = name,
    enable   = dummy_function,
    disable  = dummy_function,
    reporter = mklog,
    newline  = newline
  }
end

local fake_trackers = function (name)
  return {
    name     = name,
    enable   = dummy_function,
    disable  = dummy_function,
    register = mklog,
    newline  = newline,
  }
end

local backup_store
local fake_context = function ( )
  if not backup_store then
    backup_store = utilities.storage.allocate()
  end
  if _G.logs     then backup_store.logs     = _G.logs     end
  if _G.trackers then backup_store.trackers = _G.trackers end
  _G.logs     = fake_logs"logs"
  _G.trackers = fake_trackers"trackers"
end

--[[doc--
Restore a backed up logger if appropriate.
--doc]]--
local unfake_context = function ( )
  if backup_store then
    local bl, bt = backup_store.logs, backup_store.trackers
    if bl then _G.logs     = bl end
    if bt then _G.trackers = bt end
  end
end

local loadmodule = lualibs.loadmodule

loadmodule("lualibs-util-str.lua")--- string formatters (fast)
loadmodule("lualibs-util-tab.lua")--- extended table operations
loadmodule("lualibs-util-sto.lua")--- storage (hash allocation)
----------("lualibs-util-pck.lua")---!packers; necessary?
----------("lualibs-util-seq.lua")---!sequencers (function chaining)
----------("lualibs-util-mrg.lua")---!only relevant in mtx-package
loadmodule("lualibs-util-prs.lua")--- miscellaneous parsers; cool. cool cool cool
----------("lualibs-util-fmt.lua")---!column formatter (rarely used)
loadmodule("lualibs-util-dim.lua")--- conversions between dimensions
loadmodule("lualibs-util-jsn.lua")--- JSON parser


fake_context()

----------("lualibs-trac-set.lua")---!generalization of trackers
----------("lualibs-trac-log.lua")---!logging
loadmodule("lualibs-trac-inf.lua")--- timing/statistics
loadmodule("lualibs-util-lua.lua")--- operations on lua bytecode
loadmodule("lualibs-util-deb.lua")--- extra debugging
loadmodule("lualibs-util-tpl.lua")--- templating
loadmodule("lualibs-util-sta.lua")--- stacker (for writing pdf)
-------------------------------------!data-* -- Context specific
----------("lualibs-util-lib.lua")---!swiglib; there is a luatex-swiglib
loadmodule("lualibs-util-env.lua")--- environment arguments
----------("lualibs-mult-ini.lua")---
----------("lualibs-core-con.lua")---

unfake_context() --- TODO check if this works at runtime

-- vim:tw=71:sw=2:ts=2:expandtab
--  End of File `lualibs-extended.lua'.