diff options
author | Hans Hagen <pragma@wxs.nl> | 2019-02-07 19:16:06 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2019-02-07 19:16:06 +0100 |
commit | 99dc1cd9bb77ac9fa68b0584f58f57749994fdba (patch) | |
tree | ab184c40b11270cec9c311beb0e190913471e47f /tex/context/base/mkiv/lpdf-nod.lua | |
parent | 38a9804bf0448f3c987903d2601175f1750e9fe3 (diff) | |
download | context-99dc1cd9bb77ac9fa68b0584f58f57749994fdba.tar.gz |
2019-02-07 18:55:00
Diffstat (limited to 'tex/context/base/mkiv/lpdf-nod.lua')
-rw-r--r-- | tex/context/base/mkiv/lpdf-nod.lua | 129 |
1 files changed, 90 insertions, 39 deletions
diff --git a/tex/context/base/mkiv/lpdf-nod.lua b/tex/context/base/mkiv/lpdf-nod.lua index 05736a79f..9d4bf9270 100644 --- a/tex/context/base/mkiv/lpdf-nod.lua +++ b/tex/context/base/mkiv/lpdf-nod.lua @@ -81,45 +81,83 @@ local function tomatrix(rx,sx,sy,ry,tx,ty) -- todo: tx ty end end -local pdforiginliteral = register(new_node(whatsit_code, literalwhatsit_code)) setfield(pdforiginliteral,"mode",originliteral_code) -local pdfpageliteral = register(new_node(whatsit_code, literalwhatsit_code)) setfield(pdfpageliteral, "mode",pageliteral_code) -local pdfdirectliteral = register(new_node(whatsit_code, literalwhatsit_code)) setfield(pdfdirectliteral,"mode",directliteral_code) -local pdfrawliteral = register(new_node(whatsit_code, literalwhatsit_code)) setfield(pdfrawliteral, "mode",rawliteral_code) - -local pdfsave = register(new_node(whatsit_code, savewhatsit_code)) -local pdfrestore = register(new_node(whatsit_code, restorewhatsit_code)) -local pdfsetmatrix = register(new_node(whatsit_code, setmatrixwhatsit_code)) - -function nodepool.pdforiginliteral(str) local t = copy_node(pdforiginliteral) setdata(t,str) return t end -function nodepool.pdfpageliteral (str) local t = copy_node(pdfpageliteral ) setdata(t,str) return t end -function nodepool.pdfdirectliteral(str) local t = copy_node(pdfdirectliteral) setdata(t,str) return t end -function nodepool.pdfrawliteral (str) local t = copy_node(pdfrawliteral ) setdata(t,str) return t end - -local pdfliterals = { - -- by number - [originliteral_code] = pdforiginliteral, - [pageliteral_code] = pdfpageliteral, - [directliteral_code] = pdfdirectliteral, - [rawliteral_code] = pdfrawliteral, - -- by name - [literalvalues[originliteral_code]] = pdforiginliteral, - [literalvalues[pageliteral_code]] = pdfpageliteral, - [literalvalues[directliteral_code]] = pdfdirectliteral, - [literalvalues[rawliteral_code]] = pdfrawliteral, -} +if CONTEXTLMTXMODE then -function nodepool.pdfliteral(mode,str) - if str then - local t = copy_node(pdfliterals[mode] or pdfpageliteral) - setdata(t,str) - return t - else - local t = copy_node(pdfpageliteral) - setdata(t,mode) + local nodeproperties = nodes.properties.data + + local pdfliteral = register(new_node(whatsit_code,literalwhatsit_code)) + + function nodepool.pdforiginliteral(str) local t = copy_node(pdfliteral) nodeproperties[t] = { data = str, mode = originliteral_code } return t end + function nodepool.pdfpageliteral (str) local t = copy_node(pdfliteral) nodeproperties[t] = { data = str, mode = pageliteral_code } return t end + function nodepool.pdfdirectliteral(str) local t = copy_node(pdfliteral) nodeproperties[t] = { data = str, mode = directliteral_code } return t end + function nodepool.pdfrawliteral (str) local t = copy_node(pdfliteral) nodeproperties[t] = { data = str, mode = rawliteral_code } return t end + + local pdfliterals = { + -- by number + [originliteral_code] = originliteral_code, + [pageliteral_code] = pageliteral_code, + [directliteral_code] = directliteral_code, + [rawliteral_code] = rawliteral_code, + -- by name + [literalvalues[originliteral_code]] = originliteral_code, + [literalvalues[pageliteral_code]] = pageliteral_code, + [literalvalues[directliteral_code]] = directliteral_code, + [literalvalues[rawliteral_code]] = rawliteral_code, + } + + function nodepool.pdfliteral(mode,str) + local t = copy_node(pdfliteral) + if str then + nodeproperties[t] = { data = str, mode = pdfliterals[mode] or pageliteral_code } + else + nodeproperties[t] = { data = mode, mode = pageliteral_code } + end return t end + +else + + local pdforiginliteral = register(new_node(whatsit_code, literalwhatsit_code)) setfield(pdforiginliteral,"mode",originliteral_code) + local pdfpageliteral = register(new_node(whatsit_code, literalwhatsit_code)) setfield(pdfpageliteral, "mode",pageliteral_code) + local pdfdirectliteral = register(new_node(whatsit_code, literalwhatsit_code)) setfield(pdfdirectliteral,"mode",directliteral_code) + local pdfrawliteral = register(new_node(whatsit_code, literalwhatsit_code)) setfield(pdfrawliteral, "mode",rawliteral_code) + + function nodepool.pdforiginliteral(str) local t = copy_node(pdforiginliteral) setdata(t,str) return t end + function nodepool.pdfpageliteral (str) local t = copy_node(pdfpageliteral ) setdata(t,str) return t end + function nodepool.pdfdirectliteral(str) local t = copy_node(pdfdirectliteral) setdata(t,str) return t end + function nodepool.pdfrawliteral (str) local t = copy_node(pdfrawliteral ) setdata(t,str) return t end + + local pdfliterals = { + -- by number + [originliteral_code] = pdforiginliteral, + [pageliteral_code] = pdfpageliteral, + [directliteral_code] = pdfdirectliteral, + [rawliteral_code] = pdfrawliteral, + -- by name + [literalvalues[originliteral_code]] = pdforiginliteral, + [literalvalues[pageliteral_code]] = pdfpageliteral, + [literalvalues[directliteral_code]] = pdfdirectliteral, + [literalvalues[rawliteral_code]] = pdfrawliteral, + } + + function nodepool.pdfliteral(mode,str) + if str then + local t = copy_node(pdfliterals[mode] or pdfpageliteral) + setdata(t,str) + return t + else + local t = copy_node(pdfpageliteral) + setdata(t,mode) + return t + end + end + end +local pdfsave = register(new_node(whatsit_code, savewhatsit_code)) +local pdfrestore = register(new_node(whatsit_code, restorewhatsit_code)) +local pdfsetmatrix = register(new_node(whatsit_code, setmatrixwhatsit_code)) + function nodepool.pdfsave() return copy_node(pdfsave) end @@ -128,12 +166,25 @@ function nodepool.pdfrestore() return copy_node(pdfrestore) end -function nodepool.pdfsetmatrix(rx,sx,sy,ry,tx,ty) - local t = copy_node(pdfsetmatrix) - setdata(t,tomatrix(rx,sx,sy,ry,tx,ty)) - return t -end +if CONTEXTLMTXMODE then + + local nodeproperties = nodes.properties.data + + function nodepool.pdfsetmatrix(rx,sx,sy,ry,tx,ty) + local t = copy_node(pdfsetmatrix) + nodeproperties[t] = { matrix = tomatrix(rx,sx,sy,ry,tx,ty) } + return t + end +else + + function nodepool.pdfsetmatrix(rx,sx,sy,ry,tx,ty) + local t = copy_node(pdfsetmatrix) + setdata(t,tomatrix(rx,sx,sy,ry,tx,ty)) + return t + end + +end -- best is to use a specific one: origin | page | direct | raw |