diff options
author | Marius <mariausol@gmail.com> | 2011-12-13 17:40:23 +0200 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2011-12-13 17:40:23 +0200 |
commit | 008b7b212da48ca7ef8fc8ac876dbf13ca7b21a5 (patch) | |
tree | 8571937aba1460b4bf7daa0e08738f8768c48d03 /tex/context/base/typo-prc.lua | |
parent | 0396ead2bd0816d7e546848690271bbbe9077334 (diff) | |
download | context-008b7b212da48ca7ef8fc8ac876dbf13ca7b21a5.tar.gz |
beta 2011.12.13 15:17
Diffstat (limited to 'tex/context/base/typo-prc.lua')
-rw-r--r-- | tex/context/base/typo-prc.lua | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/tex/context/base/typo-prc.lua b/tex/context/base/typo-prc.lua new file mode 100644 index 000000000..bb965ff66 --- /dev/null +++ b/tex/context/base/typo-prc.lua @@ -0,0 +1,126 @@ +if not modules then modules = { } end modules ['typo-prc'] = { + version = 1.001, + comment = "companion to typo-prc.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- moved from strc-ini.lua + + +local format = string.format +local lpegmatch, patterns, P, C, Cs = lpeg.match, lpeg.patterns, lpeg.P, lpeg.C, lpeg.Cs + +-- processors: syntax: processor->data ... not ok yet + +typesetters.processors = typesetters.processors or { } +local processors = typesetters.processors + +local trace_processors = false +local report_processors = logs.reporter("processors") +local registered = { } + +trackers.register("typesetters.processors", function(v) trace_processors = v end) + +function processors.register(p) + registered[p] = true +end + +function processors.reset(p) + registered[p] = nil +end + +--~ local splitter = lpeg.splitat("->",true) -- also support => + +local becomes = P('->') +local processor = (1-becomes)^1 +local splitter = C(processor) * becomes * Cs(patterns.argument + patterns.content) + +function processors.split(str) + local p, s = lpegmatch(splitter,str) + if registered[p] then + return p, s + else + return false, str + end +end + +function processors.apply(p,s) + local str = p + if s == nil then + p, s = lpegmatch(splitter,p) + end + if p and registered[p] then + if trace_processors then + report_processors("known: %s, argument: %s",p,s or "") + end + context.applyprocessor(p,s) + elseif s then + if trace_processors then + report_processors("unknown: %s, argument: %s",p or "?",s) + end + context(s) + elseif str then + if trace_processors then + report_processors("direct: %s",str) + end + context(str) + end +end + +function processors.startapply(p,s) + local str = p + if s == nil then + p, s = lpegmatch(splitter,p) + end + if p and registered[p] then + if trace_processors then + report_processors("start: %s",p or "?") + end + context.applyprocessor(p) + context("{") + return s + elseif p then + if trace_processors then + report_processors("start: %s (unknown)",p) + end + context.firstofoneargument() + context("{") + return s + else + if trace_processors then + report_processors("start: ? (unset)") + end + context.firstofoneargument() + context("{") + return str + end +end + +function processors.stopapply() + context("}") + if trace_processors then + report_processors("stop") + end +end + +function processors.tostring(str) + local p, s = lpegmatch(splitter,str) + if registered[p] then + return format("\\applyprocessor{%s}{%s}",p,s) + else + return str + end +end + +function processors.stripped(str) + local p, s = lpegmatch(splitter,str) + return s or str +end + +-- interface + +commands.registerstructureprocessor = processors.register +commands.resetstructureprocessor = processors.reset + |