diff options
Diffstat (limited to 'tex/context/base/mkiv')
-rw-r--r-- | tex/context/base/mkiv/cont-new.mkiv | 2 | ||||
-rw-r--r-- | tex/context/base/mkiv/context.mkiv | 2 | ||||
-rw-r--r-- | tex/context/base/mkiv/publ-ini.lua | 26 | ||||
-rw-r--r-- | tex/context/base/mkiv/status-files.pdf | bin | 24624 -> 24636 bytes | |||
-rw-r--r-- | tex/context/base/mkiv/status-lua.pdf | bin | 257224 -> 257224 bytes | |||
-rw-r--r-- | tex/context/base/mkiv/util-tbs.lua | 114 |
6 files changed, 129 insertions, 15 deletions
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index d34252711..094648239 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.04.19 19:50} +\newcontextversion{2022.04.20 19:15} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index a6ef280ad..1165bfced 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -49,7 +49,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2022.04.19 19:50} +\edef\contextversion{2022.04.20 19:15} %D Kind of special: diff --git a/tex/context/base/mkiv/publ-ini.lua b/tex/context/base/mkiv/publ-ini.lua index d6a7bf3de..210a14deb 100644 --- a/tex/context/base/mkiv/publ-ini.lua +++ b/tex/context/base/mkiv/publ-ini.lua @@ -1428,8 +1428,8 @@ do local function get(dataset,tag,field,what,check,catspec) -- somewhat more extensive local current = rawget(datasets,dataset) if current then - tag = lowered.tag - field = lowered.field + tag = lowered[tag] + field = lowered[field] local data = current.luadata[tag] if data then local category = data.category @@ -1479,8 +1479,8 @@ do local function btxflush(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered.tag - field = lowered.field + tag = lowered[tag] + field = lowered[field] local fields = dataset.luadata[tag] if fields then local manipulator, field = splitmanipulation(field) @@ -1507,8 +1507,8 @@ do local function btxfield(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered.tag - field = lowered.field + tag = lowered[tag] + field = lowered[field] local fields = dataset.luadata[tag] if fields then local category = fields.category @@ -1534,8 +1534,8 @@ do local function btxdetail(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered.tag - field = lowered.field + tag = lowered[tag] + field = lowered[field] local fields = dataset.luadata[tag] if fields then local details = dataset.details[tag] @@ -1566,11 +1566,11 @@ do local function btxdirect(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered.tag - field = lowered.field + tag = lowered[tag] + field = lowered[field] local fields = dataset.luadata[tag] if fields then - field = lowered.field + field = lowered[field] local manipulator, field = splitmanipulation(field) local value = fields[field] if value then @@ -1589,8 +1589,8 @@ do local function okay(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered.tag - field = lowered.field + tag = lowered[tag] + field = lowered[field] local fields = dataset.luadata[tag] if fields then local category = fields.category diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf Binary files differindex d464c29ca..f6ca25caa 100644 --- a/tex/context/base/mkiv/status-files.pdf +++ b/tex/context/base/mkiv/status-files.pdf diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf Binary files differindex 9c4d2c54e..bdb717f7d 100644 --- a/tex/context/base/mkiv/status-lua.pdf +++ b/tex/context/base/mkiv/status-lua.pdf diff --git a/tex/context/base/mkiv/util-tbs.lua b/tex/context/base/mkiv/util-tbs.lua new file mode 100644 index 000000000..140e43a03 --- /dev/null +++ b/tex/context/base/mkiv/util-tbs.lua @@ -0,0 +1,114 @@ +if not modules then modules = { } end modules ['util-tbs'] = { + version = 1.001, + comment = "companion to luat-lib.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local tonumber, type, rawget = tonumber, type, rawget + +utilities = utilities or {} +local tablestore = { } +utilities.tablestore = tablestore + +local loaded = { } +local current = nil + +function tablestore.load(namespace,filename) + local data = loaded[namespace] + if not data then + if type(filename) == "table" then + data = filename + else + local fullname = resolvers.findfile(filename) + if fullname and fullname ~= "" then + if file.suffix(fullname,"json") and utilities.json then + data = io.loaddata(fullname) + if data then + data = utilities.json.tolua(data) + else + -- error + end + else + data = table.load(fullname) + end + end + end + if not data then + data = { } + end + loaded[namespace] = data + if metapost then + metapost.setparameterset(namespace,data) + end + end + current = data + return data +end + +function tablestore.loaded(namespace) + return (namespace and loaded[namespace]) or current or { } +end + +function tablestore.known(namespace) + return namespace and rawget(loaded,namespace) or false +end + +do + + local find, gmatch = string.find, string.gmatch + + local P, C, Ct, Cc, R = lpeg.P, lpeg.C, lpeg.Ct, lpeg.Cc, lpeg.R + + local separator = P(".") + local equal = P("=") + local digit = R("09") + local lbracket = P("[") + local rbracket = P("]") + local index = Ct(Cc("index") * lbracket * (digit^1 / tonumber) * rbracket) + local test = Ct(Cc("test") * lbracket * C((1-equal)^1) * equal * C((1-rbracket)^1) * rbracket) + local entry = Ct(Cc("entry") * C((1-lbracket-separator)^1)) + + local specifier = Ct ((entry + (separator + index + test))^1) + + function tablestore.field(namespace,name,default) + local data = loaded[namespace] or current + if data then + -- if find(name,"%[") then + local t = lpeg.match(specifier,name) + for i=1,#t do + local ti = t[i] + local t1 = ti[1] + local k = ti[2] + if t1 == "test" then + local v = ti[3] + for j=1,#data do + local dj = data[j] + if dj[k] == v then + data = dj + goto OKAY + end + end + return + else + data = data[k] + if not data then + return + end + end + ::OKAY:: + end + -- else + -- for s in gmatch(name,"[^%.]+") do + -- data = data[s] or data[tonumber(s) or 0] + -- if not data then + -- return + -- end + -- end + -- end + return data + end + end + +end |