summaryrefslogtreecommitdiff
path: root/tex/context/base/buff-ver.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/buff-ver.lua')
-rw-r--r--tex/context/base/buff-ver.lua31
1 files changed, 21 insertions, 10 deletions
diff --git a/tex/context/base/buff-ver.lua b/tex/context/base/buff-ver.lua
index 2cc8d6df9..d62d31df7 100644
--- a/tex/context/base/buff-ver.lua
+++ b/tex/context/base/buff-ver.lua
@@ -156,6 +156,15 @@ function visualizers.newgrammar(name,t)
return t
end
+local function getvisualizer(method,nature)
+ local m = specifications[method] or specifications.default
+ if nature then
+ return m and (m[nature] or m.parser) or nil
+ else
+ return m and m.parser or nil
+ end
+end
+
local fallback = context.verbatim
local function makepattern(visualizer,kind,pattern)
@@ -172,8 +181,19 @@ local function makepattern(visualizer,kind,pattern)
end
end
-visualizers.pattern = makepattern
+local function makenested(handler,how,start,stop)
+ local b, e, f = P(start), P(stop), how
+ if type(how) == "string" then
+ f = function(s) getvisualizer(how,"direct")(s) end
+ end
+ return makepattern(handler,"name",b)
+ * ((1-e)^1/f)
+ * makepattern(handler,"name",e)
+end
+
+visualizers.pattern = makepattern
visualizers.makepattern = makepattern
+visualizers.makenested = makenested
function visualizers.load(name)
if rawget(specifications,name) == nil then
@@ -258,15 +278,6 @@ function visualizers.register(name,specification)
return specification
end
-local function getvisualizer(method,nature)
- local m = specifications[method] or specifications.default
- if nature then
- return m and (m[nature] or m.parser) or nil
- else
- return m and m.parser or nil
- end
-end
-
local escapepatterns = { } visualizers.escapepatterns = escapepatterns
local function texmethod(s)