From 974640d66e61e81cb197ad96fdff7b08343e4c5a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 6 Mar 2021 21:58:15 +0000 Subject: context git-svn-id: svn://tug.org/texlive/trunk@58167 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/context/base/mkxl/back-pdp.lmt | 291 +++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 Master/texmf-dist/tex/context/base/mkxl/back-pdp.lmt (limited to 'Master/texmf-dist/tex/context/base/mkxl/back-pdp.lmt') diff --git a/Master/texmf-dist/tex/context/base/mkxl/back-pdp.lmt b/Master/texmf-dist/tex/context/base/mkxl/back-pdp.lmt new file mode 100644 index 00000000000..1b3a1700790 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/back-pdp.lmt @@ -0,0 +1,291 @@ +if not modules then modules = { } end modules ['back-pdp'] = { + version = 1.001, + comment = "companion to lpdf-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- This is temporary ... awaiting a better test .. basically we can +-- always use this: pdf primitives. + +local context = context +local lpdf = lpdf + +local pdfreserveobject +local pdfcompresslevel +local pdfobject +local pdfpagereference +local pdfgetxformname +local pdfminorversion +local pdfmajorversion + +updaters.register("backend.update.lpdf",function() + pdfreserveobject = lpdf.reserveobject + pdfcompresslevel = lpdf.compresslevel + pdfobject = lpdf.object + pdfpagereference = lpdf.pagereference + pdfgetxformname = lpdf.getxformname + pdfminorversion = lpdf.minorversion + pdfmajorversion = lpdf.majorversion +end) + +local tokenscanners = tokens.scanners +local scanword = tokenscanners.word +local scankeyword = tokenscanners.keyword +local scanstring = tokenscanners.string +local scaninteger = tokenscanners.integer +local scanwhd = tokenscanners.whd + +local trace = false trackers.register("backend", function(v) trace = v end) +local report = logs.reporter("backend") + +local nodepool = nodes.pool +local newliteral = nodepool.literal +local newsave = nodepool.save +local newrestore = nodepool.restore +local newsetmatrix = nodepool.setmatrix + +local implement = interfaces.implement +local constants = interfaces.constants +local variables = interfaces.variables + +-- literals + +local function pdf_literal() + context(newliteral(scanword() or "origin",scanstring())) +end + +-- objects + +local lastobjnum = 0 + +local function pdf_obj() + if scankeyword("reserveobjnum") then + lastobjnum = pdfreserveobject() + if trace then + report("\\pdfobj reserveobjnum: object %i",lastobjnum) + end + else + local immediate = true + local objnum = scankeyword("useobjnum") and scaninteger() or pdfreserveobject() + local uncompress = scankeyword("uncompressed") or pdfcompresslevel() == 0 + local streamobject = scankeyword("stream") + local attributes = scankeyword("attr") and scanstring() or nil + local fileobject = scankeyword("file") + local content = scanstring() + local object = streamobject and { + type = "stream", + objnum = objnum, + immediate = immediate, + attr = attributes, + compresslevel = uncompress and 0 or nil, + } or { + type = "raw", + objnum = objnum, + immediate = immediate, + } + if fileobject then + object.file = content + -- object.filename = content + else + object.string = content + end + pdfobject(object) + lastobjnum = objnum + if trace then + report("\\pdfobj: object %i",lastobjnum) + end + end +end + +local function pdf_lastobj() + context("%i",lastobjnum) + if trace then + report("\\lastobj: object %i",lastobjnum) + end +end + +local function pdf_refobj() + local objnum = scaninteger() + if trace then + report("\\refobj: object %i (todo)",objnum) + end +end + +-- annotations + +local lastobjnum = 0 + +local function pdf_annot() + if scankeyword("reserveobjnum") then + lastobjnum = pdfreserveobject() + if trace then + report("\\pdfannot reserveobjnum: object %i",lastobjnum) + end + else + local width = false + local height = false + local depth = false + local data = false + local object = false + local attr = false + -- + if scankeyword("useobjnum") then + object = scancount() + report("\\pdfannot useobjectnum is not (yet) supported") + end + local width, height, depth = scanwhd() + if scankeyword("attr") then + attr = scanstring() + end + data = scanstring() + context(backends.nodeinjections.annotation(width or 0,height or 0,depth or 0,data or "")) + end +end + +local function pdf_dest() + local name = false + local zoom = false + local view = false + local width = false + local height = false + local depth = false + if scankeyword("num") then + report("\\pdfdest num is not (yet) supported") + elseif scankeyword("name") then + name = scanstring() + end + if scankeyword("xyz") then + view = "xyz" + if scankeyword("zoom") then + report("\\pdfdest zoom is ignored") + zoom = scancount() -- will be divided by 1000 in the backend + end + elseif scankeyword("fitbh") then + view = "fitbh" + elseif scankeyword("fitbv") then + view = "fitbv" + elseif scankeyword("fitb") then + view = "fitb" + elseif scankeyword("fith") then + view = "fith" + elseif scankeyword("fitv") then + view = "fitv" + elseif scankeyword("fitr") then + view = "fitr" + width, height, depth = scanwhd() + elseif scankeyword("fit") then + view = "fit" + end + context(backends.nodeinjections.destination(width or 0,height or 0,depth or 0,{ name or "" },view or "fit")) +end + +-- management + +local function pdf_save() + context(newsave()) +end + +local function pdf_restore() + context(newrestore()) +end + +local function pdf_setmatrix() + context(newsetmatrix(scanstring())) +end + +-- extras + +-- extensions: literal dest annot save restore setmatrix obj refobj colorstack +-- startlink endlink startthread endthread thread outline glyphtounicode fontattr +-- mapfile mapline includechars catalog info names trailer + +local extensions = { + literal = pdf_literal, + obj = pdf_obj, + refobj = pdf_refobj, + dest = pdf_dest, + annot = pdf_annot, + save = pdf_save, + restore = pdf_restore, + setmatrix = pdf_setmatrix, +} + +local function pdf_extension() + local w = scanword() + if w then + local e = extensions[w] + if e then + e() + else + report("\\pdfextension: unsupported %a",w) + end + end +end + +-- feedbacks: colorstackinit creationdate fontname fontobjnum fontsize lastannot +-- lastlink lastobj pageref retval revision version xformname + +local feedbacks = { + lastobj = pdf_lastobj, + pageref = function() context(pdfpagereference()) end, + xformname = function() context(pdfgetxformname ()) end, +} + +local function pdf_feedback() + local w = scanword() + if w then + local f = feedbacks[w] + if f then + f() + else + report("\\pdffeedback: unsupported %a",w) + end + end +end + +-- variables: (integers:) compresslevel decimaldigits gamma gentounicode +-- ignoreunknownimages imageaddfilename imageapplygamma imagegamma imagehicolor +-- imageresolution inclusioncopyfonts inclusionerrorlevel majorversion minorversion +-- objcompresslevel omitcharset omitcidset pagebox pkfixeddpi pkresolution +-- recompress suppressoptionalinfo uniqueresname (dimensions:) destmargin horigin +-- linkmargin threadmargin vorigin xformmargin (tokenlists:) pageattr pageresources +-- pagesattr pkmode trailerid xformattr xformresources + +local variables = { + minorversion = function() context(pdfminorversion()) end, + majorversion = function() context(pdfmajorversion()) end, +} + +local function pdf_variable() + local w = scanword() + if w then + local f = variables[w] + if f then + f() + else + report("\\pdfvariable: unsupported %a",w) + end + else + print("missing variable") + end +end + +-- kept: + +implement { name = "pdfextension", actions = pdf_extension } +implement { name = "pdffeedback", actions = pdf_feedback } +implement { name = "pdfvariable", actions = pdf_variable } + +-- for the moment (tikz) + +implement { name = "pdfliteral", actions = pdf_literal } +implement { name = "pdfobj", actions = pdf_obj } +implement { name = "pdflastobj", actions = pdf_lastobj } +implement { name = "pdfrefobj", actions = pdf_refobj } +--------- { name = "pdfannot", actions = pdf_annot } +--------- { name = "pdfdest", actions = pdf_dest } +--------- { name = "pdfsave", actions = pdf_save } +--------- { name = "pdfrestore", actions = pdf_restore } +--------- { name = "pdfsetmatrix", actions = pdf_setmatrix } -- cgit v1.2.3