summaryrefslogtreecommitdiff
path: root/tex/context/base/lpdf-ren.lua
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2012-07-26 21:20:16 +0300
committerMarius <mariausol@gmail.com>2012-07-26 21:20:16 +0300
commitf09b2aabeeebefd483622c018ae170e37397308d (patch)
tree6835400206e98ff028450e631d2cd8418831a3b2 /tex/context/base/lpdf-ren.lua
parent0d565456a826f94f3d8a7d8f9bb28982737615cd (diff)
downloadcontext-f09b2aabeeebefd483622c018ae170e37397308d.tar.gz
beta 2012.07.26 19:37
Diffstat (limited to 'tex/context/base/lpdf-ren.lua')
-rw-r--r--tex/context/base/lpdf-ren.lua111
1 files changed, 67 insertions, 44 deletions
diff --git a/tex/context/base/lpdf-ren.lua b/tex/context/base/lpdf-ren.lua
index 6ffdf8110..6362d12fe 100644
--- a/tex/context/base/lpdf-ren.lua
+++ b/tex/context/base/lpdf-ren.lua
@@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['lpdf-ren'] = {
-- rendering
local tostring, tonumber, next = tostring, tonumber, next
-local format = string.format
+local format, rep = string.format, string.rep
local settings_to_array = utilities.parsers.settings_to_array
local backends, lpdf, nodes, node = backends, lpdf, nodes, node
@@ -60,49 +60,6 @@ local lpdf_usage = pdfdictionary { Print = pdfdictionary { PrintState = pdf_off
-- hide and vide actions. This is why we need to be able to force usage of layers
-- at several moments.
--- injection
-
-local cache = { }
-
-function codeinjections.startlayer(name)
- if not name then
- name = "unknown"
- end
- codeinjections.useviewerlayer(name)
- return format("/OC /%s BDC",name)
-end
-
-function codeinjections.stoplayer(name)
- return "EMC"
-end
-
-function nodeinjections.startlayer(name)
- local c = cache[name]
- if not c then
- codeinjections.useviewerlayer(name)
- c = register(pdfliteral(format("/OC /%s BDC",name)))
- cache[name] = c
- end
- return copy_node(c)
-end
-
-local stop = register(pdfliteral("EMC"))
-
-function nodeinjections.stoplayer()
- return copy_node(stop)
-end
-
-local cache = { }
-
-function nodeinjections.switchlayer(name) -- not used, optimization
- local c = cache[name]
- if not c then
- codeinjections.useviewerlayer(name)
- c = register(pdfliteral(format("EMC /OC /%s BDC",name)))
- end
- return copy_node(c)
-end
-
-- management
local pdfln, pdfld = { }, { }
@@ -240,6 +197,72 @@ function executers.hidelayer (arguments) return setlayer(pdf_off, arguments)
function executers.videlayer (arguments) return setlayer(pdf_on, arguments) end
function executers.togglelayer(arguments) return setlayer(pdf_toggle,arguments) end
+-- injection
+
+function codeinjections.startlayer(name) -- used in mp
+ if not name then
+ name = "unknown"
+ end
+ useviewerlayer(name)
+ return format("/OC /%s BDC",name)
+end
+
+function codeinjections.stoplayer(name) -- used in mp
+ return "EMC"
+end
+
+local cache = { }
+
+function nodeinjections.startlayer(name)
+ local c = cache[name]
+ if not c then
+ useviewerlayer(name)
+ c = register(pdfliteral(format("/OC /%s BDC",name)))
+ cache[name] = c
+ end
+ return copy_node(c)
+end
+
+local stop = register(pdfliteral("EMC"))
+
+function nodeinjections.stoplayer()
+ return copy_node(stop)
+end
+
+-- experimental stacker code (slow, can be optimized):
+--
+-- local values = viewerlayers.values
+--
+-- function nodeinjections.startstackedlayer(s,t,first,last)
+-- local r = { }
+-- for i=first,last do
+-- r[#r+1] = startlayer(values[t[i]])
+-- end
+-- r = concat(r," ")
+-- return pdfliteral(r)
+-- end
+--
+-- function nodeinjections.stopstackedlayer(s,t,first,last)
+-- local r = { }
+-- for i=last,first,-1 do
+-- r[#r+1] = stoplayer()
+-- end
+-- r = concat(r," ")
+-- return pdfliteral(r)
+-- end
+--
+-- function nodeinjections.changestackedlayer(s,t1,first1,last1,t2,first2,last2)
+-- local r = { }
+-- for i=last1,first1,-1 do
+-- r[#r+1] = stoplayer()
+-- end
+-- for i=first2,last2 do
+-- r[#r+1] = startlayer(values[t2[i]])
+-- end
+-- r = concat(r," ")
+-- return pdfliteral(r)
+-- end
+
-- transitions
local pagetransitions = {