diff options
Diffstat (limited to 'tex/context/base/core-two.lua')
-rw-r--r-- | tex/context/base/core-two.lua | 314 |
1 files changed, 157 insertions, 157 deletions
diff --git a/tex/context/base/core-two.lua b/tex/context/base/core-two.lua index 734ad8e31..d6e006e04 100644 --- a/tex/context/base/core-two.lua +++ b/tex/context/base/core-two.lua @@ -1,157 +1,157 @@ -if not modules then modules = { } end modules ['core-two'] = {
- version = 1.001,
- comment = "companion to core-two.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local remove, concat = table.remove, table.concat
-local allocate = utilities.storage.allocate
-
---[[ldx--
-<p>We save multi-pass information in the main utility table. This is a
-bit of a mess because we support old and new methods.</p>
---ldx]]--
-
-local collected = allocate()
-local tobesaved = allocate()
-
-local jobpasses = {
- collected = collected,
- tobesaved = tobesaved,
-}
-
-job.passes = jobpasses
-
-local function initializer()
- collected = jobpasses.collected
- tobesaved = jobpasses.tobesaved
-end
-
-job.register('job.passes.collected', tobesaved, initializer, nil)
-
-local function allocate(id)
- local p = tobesaved[id]
- if not p then
- p = { }
- tobesaved[id] = p
- end
- return p
-end
-
-jobpasses.define = allocate
-
-function jobpasses.save(id,str)
- local jti = allocate(id)
- jti[#jti+1] = str
-end
-
-function jobpasses.savetagged(id,tag,str)
- local jti = allocate(id)
- jti[tag] = str
-end
-
-function jobpasses.getdata(id,index,default)
- local jti = collected[id]
- local value = jit and jti[index]
- return value ~= "" and value or default or ""
-end
-
-function jobpasses.getfield(id,index,tag,default)
- local jti = collected[id]
- jti = jti and jti[index]
- local value = jti and jti[tag]
- return value ~= "" and value or default or ""
-end
-
-function jobpasses.getcollected(id)
- return collected[id] or { }
-end
-
-function jobpasses.gettobesaved(id)
- return allocate(id)
-end
-
-local function get(id)
- local jti = collected[id]
- if jti and #jti > 0 then
- return remove(jti,1)
- end
-end
-
-local function first(id)
- local jti = collected[id]
- if jti and #jti > 0 then
- return jti[1]
- end
-end
-
-local function last(id)
- local jti = collected[id]
- if jti and #jti > 0 then
- return jti[#jti]
- end
-end
-
-local function find(id,n)
- local jti = collected[id]
- if jti and jti[n] then
- return jti[n]
- end
-end
-
-local function count(id)
- local jti = collected[id]
- return jti and #jti or 0
-end
-
-local function list(id)
- local jti = collected[id]
- if jti then
- return concat(jti,',')
- end
-end
-
-local function inlist(id,str)
- local jti = collected[id]
- if jti then
- for _, v in next, jti do
- if v == str then
- return true
- end
- end
- end
- return false
-end
-
-local check = first
-
---
-
-jobpasses.get = get
-jobpasses.first = first
-jobpasses.last = last
-jobpasses.find = find
-jobpasses.list = list
-jobpasses.count = count
-jobpasses.check = check
-jobpasses.inlist = inlist
-
--- interface
-
-function commands.gettwopassdata (id) local r = get (id) if r then context(r) end end
-function commands.getfirsttwopassdata(id) local r = first(id) if r then context(r) end end
-function commands.getlasttwopassdata (id) local r = last (id) if r then context(r) end end
-function commands.findtwopassdata (id,n) local r = find (id,n) if r then context(r) end end
-function commands.gettwopassdatalist (id) local r = list (id) if r then context(r) end end
-function commands.counttwopassdata (id) local r = count(id) if r then context(r) end end
-function commands.checktwopassdata (id) local r = check(id) if r then context(r) end end
-
-commands.definetwopasslist = jobpasses.define
-commands.savetwopassdata = jobpasses.save
-commands.savetaggedtwopassdata = jobpasses.savetagged
-
-function commands.doifelseintwopassdata(id,str)
- commands.doifelse(inlist(id,str))
-end
+if not modules then modules = { } end modules ['core-two'] = { + version = 1.001, + comment = "companion to core-two.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local remove, concat = table.remove, table.concat +local allocate = utilities.storage.allocate + +--[[ldx-- +<p>We save multi-pass information in the main utility table. This is a +bit of a mess because we support old and new methods.</p> +--ldx]]-- + +local collected = allocate() +local tobesaved = allocate() + +local jobpasses = { + collected = collected, + tobesaved = tobesaved, +} + +job.passes = jobpasses + +local function initializer() + collected = jobpasses.collected + tobesaved = jobpasses.tobesaved +end + +job.register('job.passes.collected', tobesaved, initializer, nil) + +local function allocate(id) + local p = tobesaved[id] + if not p then + p = { } + tobesaved[id] = p + end + return p +end + +jobpasses.define = allocate + +function jobpasses.save(id,str) + local jti = allocate(id) + jti[#jti+1] = str +end + +function jobpasses.savetagged(id,tag,str) + local jti = allocate(id) + jti[tag] = str +end + +function jobpasses.getdata(id,index,default) + local jti = collected[id] + local value = jit and jti[index] + return value ~= "" and value or default or "" +end + +function jobpasses.getfield(id,index,tag,default) + local jti = collected[id] + jti = jti and jti[index] + local value = jti and jti[tag] + return value ~= "" and value or default or "" +end + +function jobpasses.getcollected(id) + return collected[id] or { } +end + +function jobpasses.gettobesaved(id) + return allocate(id) +end + +local function get(id) + local jti = collected[id] + if jti and #jti > 0 then + return remove(jti,1) + end +end + +local function first(id) + local jti = collected[id] + if jti and #jti > 0 then + return jti[1] + end +end + +local function last(id) + local jti = collected[id] + if jti and #jti > 0 then + return jti[#jti] + end +end + +local function find(id,n) + local jti = collected[id] + if jti and jti[n] then + return jti[n] + end +end + +local function count(id) + local jti = collected[id] + return jti and #jti or 0 +end + +local function list(id) + local jti = collected[id] + if jti then + return concat(jti,',') + end +end + +local function inlist(id,str) + local jti = collected[id] + if jti then + for _, v in next, jti do + if v == str then + return true + end + end + end + return false +end + +local check = first + +-- + +jobpasses.get = get +jobpasses.first = first +jobpasses.last = last +jobpasses.find = find +jobpasses.list = list +jobpasses.count = count +jobpasses.check = check +jobpasses.inlist = inlist + +-- interface + +function commands.gettwopassdata (id) local r = get (id) if r then context(r) end end +function commands.getfirsttwopassdata(id) local r = first(id) if r then context(r) end end +function commands.getlasttwopassdata (id) local r = last (id) if r then context(r) end end +function commands.findtwopassdata (id,n) local r = find (id,n) if r then context(r) end end +function commands.gettwopassdatalist (id) local r = list (id) if r then context(r) end end +function commands.counttwopassdata (id) local r = count(id) if r then context(r) end end +function commands.checktwopassdata (id) local r = check(id) if r then context(r) end end + +commands.definetwopasslist = jobpasses.define +commands.savetwopassdata = jobpasses.save +commands.savetaggedtwopassdata = jobpasses.savetagged + +function commands.doifelseintwopassdata(id,str) + commands.doifelse(inlist(id,str)) +end |