diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv | 188 |
1 files changed, 78 insertions, 110 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv index 3b0dd78520a..9e88ab19399 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv @@ -11,11 +11,10 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -%D The less ther ei shere, the better. +%D The less there is here, the better. \writestatus{loading}{ConTeXt Backend Macros / PDF} -%registerctxluafile{lpdf-aux}{optimize} % common helpers \registerctxluafile{lpdf-ini}{optimize} \registerctxluafile{lpdf-nod}{} \registerctxluafile{lpdf-col}{} @@ -32,9 +31,22 @@ \registerctxluafile{lpdf-swf}{} % this will become a module \registerctxluafile{lpdf-tag}{} \registerctxluafile{lpdf-fmt}{} -\registerctxluafile{lpdf-epd}{} +\registerctxluafile{lpdf-pde}{} + +\ifcase\contextlmtxmode\else + \registerctxluafile{lpdf-img}{optimize} +\fi + \registerctxluafile{lpdf-epa}{} +\ifcase\contextlmtxmode\else + \registerctxluafile{lpdf-emb}{optimize} +\fi + +\registerctxluafile{back-pdp}{} + +\registerctxluafile{lpdf-fnt}{} + \registerctxluafile{back-pdf}{} % some code will move to lpdf-* \loadmarkfile{back-u3d} % this will become a module @@ -47,26 +59,53 @@ %D %D Here we initialize some internal quantities. We also protect them. -\outputmode\plusone \let\outputmode\relax \newcount\outputmode \outputmode\plusone +\ifdefined\outputmode + \outputmode\plusone + \let\outputmode\relax + \newcount\outputmode + \outputmode\plusone + \let\normaloutputmode\outputmode +\fi %D Because we do a lot in \LUA\ and don't want interferences, we nil most of the %D \PDFTEX\ primitives. Of course one can always use the \type {\pdfvariable}, %D \type {\pdfextension} and \type {\pdffeedback} primitives but it will probably %D have bad side effects. +%D For the moment we put these here as they are pdf related but they might move to +%D a better place. We overload the primitives with our own but use a bit of indirection +%D for the purpose of tracing. + +\unexpanded\def\saveboxresource {\clf_saveboxresource} +\unexpanded\def\lastsavedboxresourceindex {\numexpr\clf_lastsavedboxresourceindex\relax} +\unexpanded\def\useboxresource {\clf_useboxresource} + +\unexpanded\def\saveimageresource {\clf_saveimageresource} +\unexpanded\def\lastsavedimageresourceindex{\numexpr\clf_lastsavedimageresourceindex\relax} +\unexpanded\def\lastsavedimageresourcepages{\numexpr\clf_lastsavedimageresourcepages\relax} +\unexpanded\def\useimageresource {\clf_useimageresource} + +\unexpanded\def\savepos {\clf_savepos} + \def\lastxpos {\clf_lastxpos} + \def\lastypos {\clf_lastypos} + +\unexpanded\def\pdfextension {\clf_pdfextension} + \def\pdffeedback {\clf_pdffeedback} + %D These are no-ops and don't even intercept what comes next. Maybe some day %D I'll write a parser that maps onto \CONTEXT. \unexpanded\def\unsupportedpdfprimitive#1% - {\writestatus{error}{the primitive \string#1\space is not supported}} + {\writestatus{fatal error}{the primitive \string#1\space is not supported}% + \directlua{os.exit()}} \unexpanded\def\pdfcolorstack {\unsupportedpdfprimitive\pdfcolorstack} \unexpanded\def\pdfcolorstackinit{\unsupportedpdfprimitive\pdfcolorstackinit} -%unexpanded\def\pdfannot {\unsupportedpdfprimitive\pdfannot} +% pdfannot \unexpanded\def\pdfstartlink {\unsupportedpdfprimitive\pdfstartlink} \unexpanded\def\pdfendlink {\unsupportedpdfprimitive\pdfendlink} \unexpanded\def\pdfoutline {\unsupportedpdfprimitive\pdfoutline} -%unexpanded\def\pdfdest {\unsupportedpdfprimitive\pdfdest} +% pdfdest \unexpanded\def\pdfthread {\unsupportedpdfprimitive\pdfthread} \unexpanded\def\pdfstartthread {\unsupportedpdfprimitive\pdfstartthread} \unexpanded\def\pdfendthread {\unsupportedpdfprimitive\pdfendthread} @@ -97,23 +136,24 @@ %D But we still provide: -\unexpanded\def\nopdfcompression {\clf_setpdfcompression\zerocount\zerocount} -\unexpanded\def\maximumpdfcompression {\clf_setpdfcompression\plusnine \plusnine } -\unexpanded\def\normalpdfcompression {\clf_setpdfcompression\plusthree\plusthree} +\unexpanded\def\nopdfcompression {\clf_setpdfcompression\zerocount\zerocount} +\unexpanded\def\onlypdfobjectcompression{\clf_setpdfcompression\zerocount\plusthree} +\unexpanded\def\maximumpdfcompression {\clf_setpdfcompression\plusnine \plusnine } +\unexpanded\def\normalpdfcompression {\clf_setpdfcompression\plusthree\plusthree} %D These might even become no-ops as we don't need them in \CONTEXT: -\unexpanded\def\pdfmapfile#1{\clf_setmapfile{#1}} -\unexpanded\def\pdfmapline#1{\clf_setmapline{#1}} +\unexpanded\def\pdfmapfile#1{} % obsolete +\unexpanded\def\pdfmapline#1{} % obsolete %D We don't support these directives, at least not this way. If they are needed %D by third party modules we can provide some interface. -% \pdfcreationdate +%pdfcreationdate \let\pdfdecimaldigits \relax \newcount\pdfdecimaldigits \let\pdfdestmargin \relax \newdimen\pdfdestmargin -% \pdffontname -% \pdffontobjnum +% pdffontname +% pdffontobjnum \let\pdffontsize \relax \newcount\pdffontsize \let\pdfgamma \relax \newcount\pdfgamma \let\pdfgentounicode \relax \newcount\pdfgentounicode @@ -128,21 +168,21 @@ \let\pdfinclusioncopyfonts \relax \newcount\pdfinclusioncopyfonts \let\pdfinclusionerrorlevel \relax \newcount\pdfinclusionerrorlevel \let\pdfinfoomitdate \relax \newcount\pdfinfoomitdate -% \pdflastannot -% \pdflastlink +% pdflastannot +% pdflastlink \let\pdflinkmargin \relax \newdimen\pdflinkmargin \let\pdfmajorversion \relax \newcount\pdfmajorversion \let\pdfminorversion \relax \newcount\pdfminorversion \let\pdfpagebox \relax \newcount\pdfpagebox -% \pdfpageref +% pdfpageref \let\pdfpkfixeddpi \relax \newcount\pdfpkfixeddpi \let\pdfpkmode \relax \newtoks \pdfpkmode \let\pdfpkresolution \relax \newcount\pdfpkresolution -% \pdfretval +% pdfretval \let\pdfsuppressoptionalinfo \relax \newcount\pdfsuppressoptionalinfo \let\pdfsuppressptexinfo \relax \newcount\pdfsuppressptexinfo -% \pdftexrevision -% \pdftexversion +% pdftexrevision +% pdftexversion \let\pdfthreadmargin \relax \newdimen\pdfthreadmargin \let\pdftrailerid \relax \newtoks \pdftrailerid \let\pdfuniqueresname \relax \newcount\pdfuniqueresname @@ -152,27 +192,33 @@ %D These are still accepted but are normally not needed. +\let\pdfxform \saveboxresource +\let\pdfximage \saveimageresource + \let\pdflastxform \lastsavedboxresourceindex \let\pdflastximage \lastsavedimageresourceindex -\let\pdflastximagepages \lastsavedimageresourcepages -\let\pdflastxpos \lastxpos -\let\pdflastypos \lastypos + \let\pdfrefxform \useboxresource \let\pdfrefximage \useimageresource + +\let\pdflastximagepages \lastsavedimageresourcepages + \let\pdfsavepos \savepos -\let\pdfxform \saveboxresource -\let\pdfximage \saveimageresource +\let\pdflastxpos \lastxpos +\let\pdflastypos \lastypos %D For the moment we keep these as they are but they will become \LUA\ calls %D eventually, after which we will nil the three \type {\pdf} interface primitives. -\normalprotected\def\pdfliteral {\pdfextension literal } -\normalprotected\def\pdfobj {\pdfextension obj } - \def\pdflastobj {\numexpr\pdffeedback lastobj\relax} +\normalprotected\def\pdfliteral {\clf_pdfliteral}% + +\normalprotected\def\pdfobj {\clf_pdfobj}% +\normalprotected\def\pdflastobj {\numexpr\clf_pdflastobj\relax}% + \normalprotected\def\pdfrefobj {\pdfextension refobj } -\normalprotected\def\pdfrestore {\pdfextension restore\relax} -\normalprotected\def\pdfsave {\pdfextension save\relax} -\normalprotected\def\pdfsetmatrix{\pdfextension setmatrix } +\normalprotected\def\pdfrestore {\clf_restore} +\normalprotected\def\pdfsave {\clf_save} +\normalprotected\def\pdfsetmatrix{\clf_setmatrix} %D This one can be consulted by users although the suffix is also a system mode. @@ -225,84 +271,6 @@ \def\pdfcolor #1{\clf_lpdf_color\numexpr\thecolorattribute{#1}\relax} \let\PDFcolor\pdfcolor -%D Transformations - -% rotation - -\unexpanded\def\dostartrotation#1% - {\forcecolorhack - \clf_pdfstartrotation#1\relax} % todo: implement without Q q - -\unexpanded\def\dostoprotation - {\clf_pdfstoprotation - \forcecolorhack} - -% scaling - -\unexpanded\def\dostartscaling#1#2% - {\forcecolorhack - \clf_pdfstartscaling rx #1 ry #2\relax} - -\unexpanded\def\dostopscaling - {\clf_pdfstopscaling - \forcecolorhack} - -% mirroring - -\unexpanded\def\dostartmirroring - {\clf_pdfstartmirroring} - -\unexpanded\def\dostopmirroring - {\clf_pdfstopmirroring} - -% transform - -\unexpanded\def\dotransformnextbox#1#2#3#4#5#6% - {\dowithnextbox{\dodotransformnextbox{#1}{#2}{#3}{#4}{#5}{#6}}} - -\unexpanded\def\dodotransformnextbox#1#2#3#4#5#6% - {\hpack - {\kern #5\onebasepoint - \raise#6\onebasepoint - \hpack - {\clf_pdfstartmatrix rx #1 sx #2 sy #3 ry #4\relax - \box\nextbox - \clf_pdfstopmatrix}}} - -% somehow the shift is not happening .. bug in luatex? -% -% \unexpanded\def\dodotransformnextbox#1#2#3#4#5#6% -% {\ctxcommand{pdftransformbox(\number\nextbox,#1,#2,#3,#4,\number\dimexpr#5\onebasepoint,\number\dimexpr#6\onebasepoint)}% -% \box\nextbox} -% -% \startluacode -% function commands.pdftransformbox(box,rx,sx,sy,ry,tx,ty) -% if rx == 1 and sx == 0 and sy == 0 and ry == 1 then -% if tx == 0 and ty == 0 then -% local b = nodes.hpack(nodes.concat { -% nodes.pool.kern(tx), -% nodes.takebox(box), -% }) -% b.shift = -ty -% tex.setbox(box,b) -% else -% -- no need to transform -% end -% else -% local b = nodes.hpack(nodes.concat { -% nodes.pool.kern(tx), -% nodes.pool.pdfsave(), -% nodes.pool.pdfsetmatrix(rx,sx,sy,ry), -% nodes.takebox(box), -% nodes.pool.pdfsetmatrix(-rx,-sx,-sy,-ry), -% nodes.pool.pdfrestore(), -% }) -% b.shift = -ty -% tex.setbox(box,b) -% end -% end -% \stopluacode - % clipping \unexpanded\def\dostartclipping#1#2#3% we can move this to lua and only set a box here |