diff options
Diffstat (limited to 'tex/context/base/buff-ver.lua')
-rw-r--r-- | tex/context/base/buff-ver.lua | 31 |
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) |