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 formatters = string.formatters 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 formatters["\\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