summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mkiv/driv-ini.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/driv-ini.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/driv-ini.lua134
1 files changed, 104 insertions, 30 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/driv-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/driv-ini.lua
index e16327f27d7..316613b2167 100644
--- a/Master/texmf-dist/tex/context/base/mkiv/driv-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/driv-ini.lua
@@ -19,19 +19,33 @@ local report = logs.reporter("drivers")
local instances = { }
local helpers = { }
+local converters = { }
local prepared = { }
local wrappedup = { }
+local cleanedup = { }
local currentdriver = "default"
+local currentinstance = nil
+
+local shipout = tex.shipout
+local texgetbox = tex.getbox
+local texgetcount = tex.getcount
+
+function converters.engine(driver,boxnumber,mode,number,specification)
+ return shipout(boxnumber)
+end
local prepare = nil
local convert = nil
local wrapup = nil
+local cleanup = nil
local outputfilename = nil
drivers = drivers or {
instances = instances,
helpers = helpers,
+ converters = converters,
lmtxversion = 0.10,
+ report = report,
}
local dummy = function() end
@@ -42,6 +56,7 @@ local defaulthandlers = {
finalize = dummy,
updatefontstate = dummy,
wrapup = dummy,
+ cleanup = dummy,
convert = dummy,
outputfilename = dummy,
}
@@ -62,45 +77,74 @@ function drivers.install(specification)
report("no flushers for driver %a",name)
return
end
- setmetatableindex(actions,defaulthandlers)
+ -- report("driver %a is installed",name)
+ setmetatableindex(actions, defaulthandlers)
+ setmetatableindex(flushers, function() return dummy end)
instances[name] = specification
end
function drivers.convert(boxnumber)
- callbacks.functions.start_page_number()
- starttiming(drivers)
- convert(boxnumber)
- stoptiming(drivers)
- callbacks.functions.stop_page_number()
+ if currentinstance then
+ callbacks.functions.start_page_number()
+ starttiming(drivers)
+ convert(currentinstance,boxnumber,texgetcount("realpageno"))
+ stoptiming(drivers)
+ callbacks.functions.stop_page_number()
+ end
end
function drivers.outputfilename()
- return outputfilename()
+ if currentinstance then
+ return outputfilename(currentinstance)
+ end
end
-
luatex.wrapup(function()
- if not wrappedup[currentdriver] then
+ if currentinstance and wrapup and not wrappedup[currentdriver] then
starttiming(drivers)
- wrapup()
+ wrapup(currentinstance)
stoptiming(drivers)
wrappedup[currentdriver] = true
+ cleanedup[currentdriver] = true
end
end)
-function drivers.enable(name)
- currentdriver = name or "default"
- local actions = instances[currentdriver].actions
- prepare = actions.prepare
- wrapup = actions.wrapup
- convert = actions.convert
- outputfilename = actions.outputfilename
- --
- if prepare and not prepared[currentdriver] then
+luatex.cleanup(function()
+ if currentinstance and cleanup and not cleanedup[currentdriver] then
starttiming(drivers)
- prepare()
+ cleanup(currentinstance)
stoptiming(drivers)
- prepared[currentdriver] = true
+ wrappedup[currentdriver] = true
+ cleanedup[currentdriver] = true
+ end
+end)
+
+function drivers.enable(name)
+ if name ~= currentdriver then
+ if currentinstance then
+ starttiming(drivers)
+ cleanup(currentinstance)
+ stoptiming(drivers)
+ end
+ currentdriver = name or "default"
+ currentinstance = instances[currentdriver]
+ if currentinstance then
+ local actions = currentinstance.actions
+ prepare = actions.prepare
+ wrapup = actions.wrapup
+ cleanup = actions.cleanup
+ convert = actions.convert
+ outputfilename = actions.outputfilename
+ --
+ if prepare and not prepared[currentdriver] then
+ starttiming(drivers)
+ prepare(currentinstance)
+ stoptiming(drivers)
+ prepared[currentdriver] = true
+ end
+ else
+ report("bad driver")
+ end
end
end
@@ -129,8 +173,8 @@ do
drivers.install {
name = "default",
actions = {
- convert = tex.shipout,
- outputfilename = function()
+ convert = drivers.converters.engine,
+ outputfilename = function(driver)
if not filename then
filename = addsuffix(tex.jobname,"pdf")
end
@@ -144,6 +188,41 @@ do
end
+-- No driver:
+
+do
+
+ drivers.install {
+ name = "none",
+ actions = { },
+ flushers = { },
+ }
+
+end
+
+do
+
+ local function prepare(driver)
+ converter = drivers.converters.lmtx
+ end
+
+ local function convert(driver,boxnumber,pagenumber)
+ converter(driver,texgetbox(boxnumber),"page",pagenumber)
+ end
+
+ drivers.install {
+ name = "empty",
+ actions = {
+ prepare = prepare,
+ convert = convert,
+ },
+ flushers = { },
+ }
+
+end
+
+--
+
setmetatableindex(instances,function() return instances.default end)
-- for now:
@@ -153,13 +232,8 @@ drivers.enable("default")
-- helpers
local s_matrix_0 = "1 0 0 1"
-local f_matrix_2 = formatters["%.6F 0 0 %.6F"]
-local f_matrix_4 = formatters["%.6F %.6F %.6F %.6F"]
-
-directives.register("pdf.stripzeros",function()
- f_matrix_2 = formatters["%.6N 0 0 %.6N"]
- f_matrix_4 = formatters["%.6N %.6N %.6N %.6N"]
-end)
+local f_matrix_2 = formatters["%.6N 0 0 %.6N"]
+local f_matrix_4 = formatters["%.6N %.6N %.6N %.6N"]
function helpers.tomatrix(rx,sx,sy,ry,tx,ty) -- todo: tx ty
if type(rx) == "string" then