summaryrefslogtreecommitdiff
path: root/tex/context/base/mlib-ctx.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mlib-ctx.lua')
-rw-r--r--tex/context/base/mlib-ctx.lua266
1 files changed, 136 insertions, 130 deletions
diff --git a/tex/context/base/mlib-ctx.lua b/tex/context/base/mlib-ctx.lua
index 43c4b4c42..f259113f4 100644
--- a/tex/context/base/mlib-ctx.lua
+++ b/tex/context/base/mlib-ctx.lua
@@ -23,14 +23,9 @@ local mplib = mplib
metapost = metapost or {}
local metapost = metapost
-local scanners = tokens.scanners
-local scanstring = scanners.string
-local scaninteger = scanners.integer
local setters = tokens.setters
local setmacro = setters.macro
-
-local compilescanner = tokens.compile
-local scanners = interfaces.scanners
+local implement = interfaces.implement
local v_no = interfaces.variables.no
@@ -94,12 +89,14 @@ end
-- context(metapost.getextensions(instance,state))
-- end
-scanners.setmpextensions = compilescanner {
+implement {
+ name = "setmpextensions",
actions = metapost.setextensions,
arguments = { "string", "string" }
}
-scanners.getmpextensions = compilescanner {
+implement {
+ name = "getmpextensions",
actions = { metapost.getextensions, context } ,
arguments = "string"
}
@@ -107,7 +104,13 @@ scanners.getmpextensions = compilescanner {
local report_metapost = logs.reporter ("metapost")
local status_metapost = logs.messenger("metapost")
-local patterns = { "meta-imp-%s.mkiv", "meta-imp-%s.tex", "meta-%s.mkiv", "meta-%s.tex" } -- we are compatible
+local patterns = {
+ "meta-imp-%s.mkiv",
+ "meta-imp-%s.tex",
+ -- obsolete:
+ "meta-%s.mkiv",
+ "meta-%s.tex"
+}
local function action(name,foundname)
status_metapost("library %a is loaded",name)
@@ -120,59 +123,74 @@ local function failure(name)
report_metapost("library %a is unknown or invalid",name)
end
-scanners.useMPlibrary = function() -- name
- commands.uselibrary {
- name = scanstring(),
- patterns = patterns,
- action = action,
- failure = failure,
- onlyonce = true,
- }
-end
+implement {
+ name = "useMPlibrary",
+ arguments = "string",
+ actions = function(name)
+ resolvers.uselibrary {
+ name = name,
+ patterns = patterns,
+ action = action,
+ failure = failure,
+ onlyonce = true,
+ }
+ end
+}
-- metapost.variables = { } -- to be stacked
-scanners.mprunvar = function() -- name
- local value = metapost.variables[scanstring()]
- if value ~= nil then
- local tvalue = type(value)
- if tvalue == "table" then
- context(concat(value," "))
- elseif tvalue == "number" or tvalue == "boolean" then
- context(tostring(value))
- elseif tvalue == "string" then
- context(value)
+implement {
+ name = "mprunvar",
+ arguments = "string",
+ actions = function(name)
+ local value = metapost.variables[name]
+ if value ~= nil then
+ local tvalue = type(value)
+ if tvalue == "table" then
+ context(concat(value," "))
+ elseif tvalue == "number" or tvalue == "boolean" then
+ context(tostring(value))
+ elseif tvalue == "string" then
+ context(value)
+ end
end
end
-end
+}
-scanners.mpruntab = function() -- name n
- local value = metapost.variables[scanstring()]
- if value ~= nil then
- local tvalue = type(value)
- if tvalue == "table" then
- context(value[scaninteger()])
- elseif tvalue == "number" or tvalue == "boolean" then
- context(tostring(value))
- elseif tvalue == "string" then
- context(value)
+implement {
+ name = "mpruntab",
+ arguments = { "string", "integer" },
+ actions = function(name,n)
+ local value = metapost.variables[name]
+ if value ~= nil then
+ local tvalue = type(value)
+ if tvalue == "table" then
+ context(value[n])
+ elseif tvalue == "number" or tvalue == "boolean" then
+ context(tostring(value))
+ elseif tvalue == "string" then
+ context(value)
+ end
end
end
-end
+}
-scanners.mprunset = function() -- name connector
- local value = metapost.variables[scanstring()]
- if value ~= nil then
- local tvalue = type(value)
- if tvalue == "table" then
- context(concat(value,scanstring()))
- elseif tvalue == "number" or tvalue == "boolean" then
- context(tostring(value))
- elseif tvalue == "string" then
- context(value)
+implement {
+ name = "mprunset",
+ actions = function(name,connector)
+ local value = metapost.variables[name]
+ if value ~= nil then
+ local tvalue = type(value)
+ if tvalue == "table" then
+ context(concat(value,connector))
+ elseif tvalue == "number" or tvalue == "boolean" then
+ context(tostring(value))
+ elseif tvalue == "string" then
+ context(value)
+ end
end
end
-end
+}
-- we need to move more from pps to here as pps is the plugin .. the order is a mess
-- or just move the scanners to pps
@@ -181,64 +199,40 @@ function metapost.graphic(specification)
metapost.graphic_base_pass(setmpsformat(specification))
end
--- scanners.mpgraphic = compilescanner {
--- actions = { setmpsformat, metapost.graphic_base_pass }, -- not yet implemented
--- arguments = {
--- {
--- { "instance" },
--- { "format" },
--- { "data" },
--- { "initializations" },
--- { "extensions" },
--- { "inclusions" },
--- { "definitions" },
--- { "figure" },
--- { "method" },
--- },
--- }
--- }
-
-local get_mpgraphic_spec = compilescanner {
- {
- { "instance" },
- { "format" },
- { "data" },
- { "initializations" },
- { "extensions" },
- { "inclusions" },
- { "definitions" },
- { "figure" },
- { "method" },
+implement {
+ name = "mpgraphic",
+ actions = function(specification) metapost.graphic_base_pass(setmpsformat(specification)) end, -- not yet implemented
+ arguments = {
+ {
+ { "instance" },
+ { "format" },
+ { "data" },
+ { "initializations" },
+ { "extensions" },
+ { "inclusions" },
+ { "definitions" },
+ { "figure" },
+ { "method" },
+ }
}
}
-scanners.mpgraphic = function()
- metapost.graphic_base_pass(setmpsformat(get_mpgraphic_spec()))
-end
-
--- scanners.mpsetoutercolor = compilescanner {
--- action = metapost.setoutercolor, -- not yet implemented
--- arguments = { "integer", "integer", "integer", "integer" }
--- }
-
-scanners.mpsetoutercolor = function()
- metapost.setoutercolor(scaninteger(),scaninteger(),scaninteger(),scaninteger())
-end
-
--- scanners.mpflushreset = metapost.flushreset -- will become obsolete and internal
-
-scanners.mpflushreset = function()
- metapost.flushreset()
-end
+implement {
+ name = "mpsetoutercolor",
+ actions = function(...) metapost.setoutercolor(...) end, -- not yet implemented
+ arguments = { "integer", "integer", "integer", "integer" }
+}
--- scanners.mpflushliteral = compilescanner {
--- action = metapost.flushliteral, -- not yet implemented
--- arguments = "string",
--- }
+implement {
+ name = "mpflushreset",
+ actions = function() metapost.flushreset() end -- not yet implemented
+}
-scanners.mpflushliteral = function()
- metapost.flushliteral(scanstring())
-end
+implement {
+ name = "mpflushliteral",
+ actions = function(str) metapost.flushliteral(str) end, -- not yet implemented
+ arguments = "string",
+}
function metapost.getclippath(specification) -- why not a special instance for this
setmpsformat(specification)
@@ -295,22 +289,24 @@ function metapost.theclippath(...)
end
end
-local get_mpsetclippath_spec = compilescanner {
- {
- { "instance" },
- { "format" },
- { "data" },
- { "initializations" },
- { "useextensions" },
- { "inclusions" },
- { "method" },
- },
+implement {
+ name = "mpsetclippath",
+ actions = function(specification)
+ setmacro("MPclippath",metapost.theclippath(specification),"global")
+ end,
+ arguments = {
+ {
+ { "instance" },
+ { "format" },
+ { "data" },
+ { "initializations" },
+ { "useextensions" },
+ { "inclusions" },
+ { "method" },
+ },
+ }
}
-scanners.mpsetclippath = function()
- setmacro("MPclippath",metapost.theclippath(get_mpsetclippath_spec()),"global")
-end
-
statistics.register("metapost processing time", function()
local n = metapost.n
if n and n > 0 then
@@ -344,6 +340,10 @@ function mptex.set(str)
environments[#environments+1] = str
end
+function mptex.setfrombuffer(name)
+ environments[#environments+1] = buffers.content(name)
+end
+
function mptex.get()
return concat(environments,"\n")
end
@@ -352,18 +352,24 @@ function mptex.reset()
environments = { }
end
-scanners.mptexset = function()
- environments[#environments+1] = scanstring()
-end
+implement {
+ name = "mptexset",
+ arguments = "string",
+ actions = mptex.set
+}
-scanners.mptexget = function()
- context(concat(environments,"\n"))
-end
+implement {
+ name = "mptexsetfrombuffer",
+ arguments = "string",
+ actions = mptex.setfrombuffer
+}
-scanners.mptexsetfrombuffer = function()
- environments[#environments+1] = buffers.content(scanstring())
-end
+implement {
+ name = "mptexget",
+ actions = { mptex.get, context }
+}
-scanners.mptexreset = function()
- environments = { }
-end
+implement {
+ name = "mptexreset",
+ actions = mptex.reset
+}