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" } -- This is actually one of the oldest MkIV files and basically a port of MkII but -- the old usage has long be phased out. Also, the public part is now handled by -- datasets which makes this a more private store. -- local next = next -- local remove, concat = table.remove, table.concat local allocate = utilities.storage.allocate 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) function jobpasses.getcollected(id) return collected[id] or { } end function jobpasses.gettobesaved(id) local t = tobesaved[id] if not t then t = { } tobesaved[id] = t end return t end -- local function define(id) -- local p = tobesaved[id] -- if not p then -- p = { } -- tobesaved[id] = p -- end -- return p -- end -- -- local function save(id,str,index) -- local jti = define(id) -- if index then -- jti[index] = str -- else -- jti[#jti+1] = str -- end -- end -- -- local function savetagged(id,tag,str) -- local jti = define(id) -- jti[tag] = str -- end -- -- local function getdata(id,index,default) -- local jti = collected[id] -- local value = jti and jti[index] -- return value ~= "" and value or default or "" -- end -- -- local function 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 -- -- local function getcollected(id) -- return collected[id] or { } -- end -- -- local function gettobesaved(id) -- return define(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] -- return jti and jti[1] -- end -- -- local function last(id) -- local jti = collected[id] -- return jti and jti[#jti] -- end -- -- local function find(id,n) -- local jti = collected[id] -- return jti and jti[n] or nil -- 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.define = define -- jobpasses.save = save -- jobpasses.savetagged = savetagged -- jobpasses.getdata = getdata -- jobpasses.getfield = getfield -- jobpasses.getcollected = getcollected -- jobpasses.gettobesaved = gettobesaved -- 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 -- -- local implement = interfaces.implement -- -- implement { name = "gettwopassdata", actions = { get, context }, arguments = "string" } -- implement { name = "getfirsttwopassdata",actions = { first, context }, arguments = "string" } -- implement { name = "getlasttwopassdata", actions = { last, context }, arguments = "string" } -- implement { name = "findtwopassdata", actions = { find, context }, arguments = "2 strings" } -- implement { name = "gettwopassdatalist", actions = { list, context }, arguments = "string" } -- implement { name = "counttwopassdata", actions = { count, context }, arguments = "string" } -- implement { name = "checktwopassdata", actions = { check, context }, arguments = "string" } -- -- implement { -- name = "definetwopasslist", -- actions = define, -- arguments = "string" -- } -- -- implement { -- name = "savetwopassdata", -- actions = save, -- arguments = "2 strings", -- } -- -- implement { -- name = "savetaggedtwopassdata", -- actions = savetagged, -- arguments = "3 strings", -- } -- -- implement { -- name = "doifelseintwopassdata", -- actions = { inlist, commands.doifelse }, -- arguments = "2 strings", -- } -- -- -- local ctx_latelua = context.latelua -- -- -- implement { -- -- name = "lazysavetwopassdata", -- -- arguments = "3 strings", -- -- public = true, -- -- actions = function(a,b,c) -- -- ctx_latelua(function() save(a,c) end) -- -- end, -- -- } -- -- -- implement { -- -- name = "lazysavetaggedtwopassdata", -- -- arguments = "3 strings", -- -- public = true, -- -- actions = function(a,b,c) -- -- ctx_latelua(function() savetagged(a,b,c) end) -- -- end, -- -- }