summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2022-04-20 20:17:28 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2022-04-20 20:17:28 +0200
commitf740345a433f2b9736b14f61a98173763e093b6f (patch)
treeb216dd9b5188da8049416d85280a715cbb5523f6 /tex/context/base/mkiv
parentb9a7e870cf47674c90331b41f9267768992b49cb (diff)
downloadcontext-f740345a433f2b9736b14f61a98173763e093b6f.tar.gz
2022-04-20 19:17:00
Diffstat (limited to 'tex/context/base/mkiv')
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/publ-ini.lua26
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin24624 -> 24636 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin257224 -> 257224 bytes
-rw-r--r--tex/context/base/mkiv/util-tbs.lua114
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
index d464c29ca..f6ca25caa 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 9c4d2c54e..bdb717f7d 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
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