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 | 589 |
1 files changed, 589 insertions, 0 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 new file mode 100644 index 00000000000..ab9e4160cb9 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv @@ -0,0 +1,589 @@ +%D \module +%D [ file=back-pdf, +%D version=2009.04.15, +%D title=\CONTEXT\ Backend Macros, +%D subtitle=\PDF, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Backend Macros / PDF} + +%registerctxluafile{lpdf-aux}{1.001} % common helpers +\registerctxluafile{lpdf-ini}{1.001} +\registerctxluafile{lpdf-nod}{1.001} +\registerctxluafile{lpdf-col}{1.000} +\registerctxluafile{lpdf-xmp}{1.001} +\registerctxluafile{lpdf-ano}{1.001} +\registerctxluafile{lpdf-res}{1.001} +\registerctxluafile{lpdf-mis}{1.001} +\registerctxluafile{lpdf-ren}{1.001} +\registerctxluafile{lpdf-grp}{1.001} +\registerctxluafile{lpdf-wid}{1.001} +\registerctxluafile{lpdf-fld}{1.001} +\registerctxluafile{lpdf-mov}{1.001} +\registerctxluafile{lpdf-u3d}{1.001} +\registerctxluafile{lpdf-swf}{1.001} +\registerctxluafile{lpdf-tag}{1.001} +\registerctxluafile{lpdf-fmt}{1.001} +\registerctxluafile{lpdf-epd}{1.001} +\registerctxluafile{lpdf-epa}{1.001} + +\registerctxluafile{back-pdf}{1.001} % some code will move to lpdf-* + +\unprotect + +%D We will minimize the number of calls to \PDF\ specific primitives +%D and delegate all management and injection of code to the backend. +%D +%D Here we initialize some internal quantities. We also protect them. + +\outputmode \plusone \let\modeoutput \undefined \newcount\outputmode \outputmode \plusone + +%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 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. + +\let\pdfcolorstack \relax +\let\pdfcolorstackinit \relax +\let\pdfannot \relax +\let\pdfstartlink \relax +\let\pdfendlink \relax +\let\pdfoutline \relax +\let\pdfdest \relax +\let\pdfthread \relax +\let\pdfstartthread \relax +\let\pdfendthread \relax +\let\pdffontattr \relax +\let\pdfglyphtounicode \relax + +%D Here we do intercept (silently) what gets passed. One should use the +%D \CONTEXT\ interfaces instead. + +\let\pdfcatalog \relax \newtoks \pdfcatalog +\let\pdfinfo \relax \newtoks \pdfinfo +\let\pdfnames \relax \newtoks \pdfnames +\let\pdftrailer \relax \newtoks \pdftrailer +\let\pdfpageresources \relax \newtoks \pdfpageresources +\let\pdfpageattr \relax \newtoks \pdfpageattr +\let\pdfpagesattr \relax \newtoks \pdfpagesattr +\let\pdfxformattr \relax \newtoks \pdfxformattr +\let\pdfxformresources \relax \newtoks \pdfxformresources + +%D We use the \LUA\ interface (which then permits more control over +%D possible pdf/x extensions). + +\let\pdfcompresslevel \relax \newcount\pdfcompresslevel +\let\pdfobjcompresslevel\relax \newcount\pdfobjcompresslevel + +%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} + +%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}} + +%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. + +\let\pdfcreationdate \relax \newtoks \pdfcreationdate +\let\pdfdecimaldigits \relax \newcount\pdfdecimaldigits +\let\pdfdestmargin \relax \newcount\pdfdestmargin +\let\pdffontname \relax \newcount\pdffontname +\let\pdffontobjnum \relax \newcount\pdffontobjnum +\let\pdffontsize \relax \newcount\pdffontsize +\let\pdfgamma \relax \newcount\pdfgamma +\let\pdfgentounicode \relax \newcount\pdfgentounicode +\let\pdfhorigin \relax \newcount\pdfhorigin +\let\pdfignoreunknownimages \relax \newcount\pdfignoreunknownimages +\let\pdfimageaddfilename \relax \newcount\pdfimageaddfilename +\let\pdfimageapplygamma \relax \newcount\pdfimageapplygamma +\let\pdfimagegamma \relax \newcount\pdfimagegamma +\let\pdfimagehicolor \relax \newcount\pdfimagehicolor +\let\pdfimageresolution \relax \newcount\pdfimageresolution +\let\pdfincludechars \relax \newtoks \pdffontsize +\let\pdfinclusioncopyfonts \relax \newcount\pdfinclusioncopyfonts +\let\pdfinclusionerrorlevel \relax \newcount\pdfinclusionerrorlevel +\let\pdfinfoomitdate \relax \newcount\pdfinfoomitdate +\let\pdflastannot \relax \newcount\pdflastannot +\let\pdflastlink \relax \newcount\pdflastlink +\let\pdflinkmargin \relax \newcount\pdflinkmargin +\let\pdfminorversion \relax \newcount\pdfminorversion +\let\pdfpagebox \relax \newcount\pdfpagebox +\let\pdfpageref \relax \newcount\pdfpageref +\let\pdfpkfixeddpi \relax \newcount\pdfpkfixeddpi +\let\pdfpkmode \relax \newtoks \pdfpkmode +\let\pdfpkresolution \relax \newcount\pdfpkresolution +\let\pdfretval \relax \newcount\pdfretval +\let\pdfsuppressoptionalinfo \relax \newcount\pdfsuppressoptionalinfo +\let\pdfsuppressptexinfo \relax \newcount\pdfsuppressptexinfo +\let\pdftexrevision \relax \newcount\pdftexrevision +\let\pdftexversion \relax \newcount\pdftexversion +\let\pdfthreadmargin \relax \newcount\pdfthreadmargin +\let\pdftrailerid \relax \newtoks \pdftrailerid +\let\pdfuniqueresname \relax \newcount\pdfuniqueresname +\let\pdfvorigin \relax \newcount\pdfvorigin +\let\pdfxformmargin \relax \newcount\pdfxformmargin +\let\pdfxformname \relax \newcount\pdfxformname + +%D These are still accepted but are normally not needed. + +\let\pdflastxform \lastsavedboxresourceindex +\let\pdflastximage \lastsavedimageresourceindex +\let\pdflastximagepages \lastsavedimageresourcepages +\let\pdflastxpos \lastxpos +\let\pdflastypos \lastypos +\let\pdfrefxform \useboxresource +\let\pdfrefximage \useimageresource +\let\pdfsavepos \savepos +\let\pdfxform \saveboxresource +\let\pdfximage \saveimageresource + +%D For the moment we keep these as they are but they will become \LUA\ +%D calls eventually, after which we will nil the three \type {\pdf} +%D interface primitives. + +\normalprotected\def\pdfliteral {\pdfextension literal } +\normalprotected\def\pdfobj {\pdfextension obj } + \def\pdflastobj {\numexpr\pdffeedback lastobj\relax} +\normalprotected\def\pdfrefobj {\pdfextension refobj } +\normalprotected\def\pdfrestore {\pdfextension restore\relax} +\normalprotected\def\pdfsave {\pdfextension save\relax} +\normalprotected\def\pdfsetmatrix{\pdfextension setmatrix } + +%D This one can be consulted by users although the suffix is also +%D a system mode. + +\back_job_set_suffix{pdf} + +%D PDF/X (maybe combine the two lua calls) + +\setupbackend + [xmpfile=] + +\appendtoks + \doifsomething{\backendparameter{xmpfile}} + {\clf_setxmpfile{\backendparameter{xmpfile}}}% +\to \everysetupbackend + +% \doifsomething{\backendparameter\c!format} .. at the lua end + +\appendtoks + \clf_setformat + format {\backendparameter\c!format}% + level {\backendparameter\c!level}% + option {\backendparameter\c!option}% + profile {\backendparameter\c!profile}% + intent {\backendparameter\c!intent}% + file {\backendparameter\c!file}% + \relax +\to \everysetupbackend + +%D For the moment we keep these. + +%newtoks \pdfbackendeveryximage +\newtoks \pdfbackendeveryxform + +%D These are the only official methods to add stuff to the resources. + +\unexpanded\def\pdfbackendsetcatalog #1#2{\clf_lpdf_addtocatalog {#1}{#2}} +\unexpanded\def\pdfbackendsetinfo #1#2{\clf_lpdf_addtoinfo {#1}{#2}} +\unexpanded\def\pdfbackendsetname #1#2{\clf_lpdf_addtonames {#1}{#2}} + +\unexpanded\def\pdfbackendsetpageattribute #1#2{\clf_lpdf_addtopageattributes {#1}{#2}} +\unexpanded\def\pdfbackendsetpagesattribute#1#2{\clf_lpdf_addtopagesattributes {#1}{#2}} +\unexpanded\def\pdfbackendsetpageresource #1#2{\clf_lpdf_addtopageresources {#1}{#2}} + +\unexpanded\def\pdfbackendsetextgstate #1#2{\clf_lpdf_adddocumentextgstate {#1}{#2}} +\unexpanded\def\pdfbackendsetcolorspace #1#2{\clf_lpdf_adddocumentcolorspace{#1}{#2}} +\unexpanded\def\pdfbackendsetpattern #1#2{\clf_lpdf_adddocumentpattern {#1}{#2}} +\unexpanded\def\pdfbackendsetshade #1#2{\clf_lpdf_adddocumentshade {#1}{#2}} + + \def\pdfbackendcurrentresources {\clf_lpdf_collectedresources} + \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 + {\PointsToBigPoints{#2}\width + \PointsToBigPoints{#3}\height + \meta_grab_clip_path{#1}\width\height{% + 0 0 m % + \width\space 0 l % + \width\space \height\space l % + 0 \height\space l% + }% + \pdfliteral{q 0 w \MPclippath\space W n}} + +\unexpanded\def\dostopclipping + {\pdfliteral{Q}} + +%D Temporary hack, will be removed or improved or default. + +% attr {/Group << /S /Transparency /I false /K true >>} + +%def\TransparencyHack{\ctxlua{backends.codeinjections.addtransparencygroup()}} +\def\TransparencyHack{\setupcolors[\c!pagecolormodel=\v!auto]} + +% \let\lastpredefinedsymbol\empty % some day we can do more at the lua end +% +% \unexpanded\def\predefinesymbol[#1]% +% {\begingroup +% \xdef\lastpredefinedsymbol{#1}% +% \settightobject{SYM}{#1}\hbox{\symbol[#1]}% to be checked ... maybe only fitting +% \dogetobjectreference{SYM}{#1}\m_back_object_reference +% \clf_registerbackendsymbol{#1}\m_back_object_reference\relax +% \endgroup} + +% Still here: + +%D \macros +%D {back_ovalbox} +%D +%D Drawing frames with round corners is inherited from the +%D main module. +%D +%D For drawing ovals we use quite raw \PDF\ code. The next +%D implementation does not differ that much from the one +%D implemented in the \POSTSCRIPT\ driver. This code is +%D somewhat obsolete as we now have metapost embedded. + +% \def\back_oval_calculate#1#2#3% +% {\PointsToBigPoints{\dimexpr#2+#3\relax}#1} + +\unexpanded\def\back_ovalbox#1#2#3#4#5#6#7#8% + {\forcecolorhack + \bgroup +% \scratchdimen#4% +% \divide\scratchdimen\plustwo +% \back_oval_calculate\xmin \zeropoint\scratchdimen +% \back_oval_calculate\xmax {#1}{-\scratchdimen}% +% \back_oval_calculate\ymax {#2}{-\scratchdimen}% +% \back_oval_calculate\ymin {-#3}\scratchdimen +% \advance\scratchdimen by #5% +% \back_oval_calculate\xxmin \zeropoint\scratchdimen +% \back_oval_calculate\xxmax {#1}{-\scratchdimen}% +% \back_oval_calculate\yymax {#2}{-\scratchdimen}% +% \back_oval_calculate\yymin {-#3}\scratchdimen +% \back_oval_calculate\stroke{#4}\zeropoint +% \back_oval_calculate\radius{#5}\zeropoint + % + \PointsToBigPoints{#4} \stroke + \PointsToBigPoints{#5} \radius + \scratchdimen\dimexpr#4/\plustwo\relax + \PointsToBigPoints \scratchdimen \xmin + \PointsToBigPoints{\dimexpr #1-\scratchdimen}\xmax + \PointsToBigPoints{\dimexpr #2-\scratchdimen}\ymax + \PointsToBigPoints{\dimexpr-#3+\scratchdimen}\ymin + \advance\scratchdimen by #5\relax + \PointsToBigPoints \scratchdimen \xxmin + \PointsToBigPoints{\dimexpr #1-\scratchdimen}\xxmax + \PointsToBigPoints{\dimexpr #2-\scratchdimen}\yymax + \PointsToBigPoints{\dimexpr-#3+\scratchdimen}\yymin + % + \edef\dostroke{\number#6}% + \edef\dofill{\number#7}% + \edef\mode{\number#8}% + % no \ifcase, else \relax in pdfcode + \setbox\scratchbox\naturalhpack + {\ifnum\dostroke\dofill>\zerocount + \pdfliteral + {q + \stroke\space w + \ifcase\mode\space + \xxmin\space \ymin \space m + \xxmax\space \ymin \space l + \xmax \space \ymin \space \xmax \space \yymin\space y + \xmax \space \yymax\space l + \xmax \space \ymax \space \xxmax\space \ymax \space y + \xxmin\space \ymax \space l + \xmin \space \ymax \space \xmin \space \yymax\space y + \xmin \space \yymin\space l + \xmin \space \ymin \space \xxmin\space \ymin \space y + h + \or % 1 + \xxmin\space \ymin \space m + \xxmax\space \ymin \space l + \xmax \space \ymin \space \xmax \space \yymin\space y + \xmax \space \ymax \space l + \xmin \space \ymax \space l + \xmin \space \yymin\space l + \xmin \space \ymin \space \xxmin\space \ymin \space y + h + \or % 2 + \xxmin\space \ymin \space m + \xmax \space \ymin \space l + \xmax \space \ymax \space l + \xxmin\space \ymax \space l + \xmin \space \ymax \space \xmin \space \yymax\space y + \xmin \space \yymin\space l + \xmin \space \ymin \space \xxmin\space \ymin \space y + h + \or % 3 + \xmin \space \ymin \space m + \xmax \space \ymin \space l + \xmax \space \yymax\space l + \xmax \space \ymax \space \xxmax\space \ymax \space y + \xxmin\space \ymax \space l + \xmin \space \ymax \space \xmin \space \yymax\space y + \xmin \space \ymin \space l + h + \or % 4 + \xmin \space \ymin \space m + \xxmax\space \ymin \space l + \xmax \space \ymin \space \xmax \space \yymin\space y + \xmax \space \yymax\space l + \xmax \space \ymax \space \xxmax\space \ymax \space y + \xmin \space \ymax \space l + \xmin \space \ymin\space l + h + \or % 5 + \xmin \space \ymin \space m + \xmax \space \ymin \space l + \xmax \space \yymax\space l + \xmax \space \ymax \space \xxmax\space \ymax \space y + \xmin \space \ymax \space l + \xmin \space \ymin \space l + h + \or % 6 + \xmin \space \ymin \space m + \xxmax\space \ymin \space l + \xmax \space \ymin \space \xmax \space \yymin\space y + \xmax \space \ymax \space l + \xmin \space \ymax \space l + \xmin \space \ymin \space l + h + \or + \xxmin\space \ymin \space m + \xmax \space \ymin \space l + \xmax \space \ymax \space l + \xmin \space \ymax \space l + \xmin \space \yymin\space l + \xmin \space \ymin \space \xxmin\space \ymin \space y + h + \or + \xmin \space \ymin \space m + \xmax \space \ymin \space l + \xmax \space \ymax \space l + \xxmin\space \ymax \space l + \xmin \space \ymax \space \xmin \space \yymax\space y + \xmin \space \ymin \space l + h + \or % 9 top open + \xmin \space \ymax \space m + \xmin \space \yymin\space l + \xmin \space \ymin \space \xxmin\space \ymin \space y + \xxmax\space \ymin \space l + \xmax \space \ymin \space \xmax \space \yymin\space y + \xmax \space \ymax \space l + \or % 10 right open + \xmax \space \ymax \space m + \xxmin\space \ymax \space l + \xmin \space \ymax \space \xmin \space \yymax\space y + \xmin \space \yymin\space l + \xmin \space \ymin \space \xxmin\space \ymin \space y + \xmax\space \ymin \space l + \or % 11 bottom open + \xmax \space \ymin \space m + \xmax \space \yymax\space l + \xmax \space \ymax \space \xxmax \space \ymax\space y + \xxmin\space \ymax \space l + \xmin \space \ymax \space \xmin \space \yymax\space y + \xmin \space \ymin \space l + \or % 12 left open + \xmin \space \ymax \space m + \xxmax\space \ymax \space l + \xmax \space \ymax \space \xmax \space \yymax\space y + \xmax \space \yymin\space l + \xmax \space \ymin \space \xxmax\space \ymin \space y + \xmin \space \ymin \space l + \or % 13 + \xmin \space \ymax \space m + \xxmax\space \ymax \space l + \xmax \space \ymax \space \xmax \space \yymax\space y + \xmax\space \ymin \space l + \or % 14 + \xmax \space \ymax \space m + \xmax \space \yymin\space l + \xmax \space \ymin \space \xxmax\space \ymin \space y + \xmin \space \ymin \space l + \or % 15 + \xmax \space \ymin \space m + \xxmin\space \ymin \space l + \xmin \space \ymin \space \xmin \space \yymin\space y + \xmin \space \ymax \space l + \or % 16 + \xmin \space \ymin \space m + \xmin \space \yymax\space l + \xmin \space \ymax \space \xxmin\space \ymax \space y + \xmax \space \ymax \space l + \or % 17 + \xxmax\space \ymax \space m + \xmax \space \ymax \space \xmax \space \yymax\space y + \or % 18 + \xmax \space \yymin\space m + \xmax \space \ymin \space \xxmax\space \ymin \space y + \or % 19 + \xxmin\space \ymin \space m + \xmin \space \ymin \space \xmin \space \yymin\space y + \or % 20 + \xmin \space \yymax\space m + \xmin \space \ymax \space \xxmin\space \ymax \space y + \or % 21 + \xxmax\space \ymax \space m + \xmax \space \ymax \space \xmax \space \yymax\space y + \xmin \space \yymax\space m + \xmin \space \ymax \space \xxmin\space \ymax \space y + \or % 22 + \xxmax\space \ymax \space m + \xmax \space \ymax \space \xmax \space \yymax\space y + \xmax \space \yymin\space m + \xmax \space \ymin \space \xxmax\space \ymin \space y + \or % 23 + \xmax \space \yymin\space m + \xmax \space \ymin \space \xxmax\space \ymin \space y + \xxmin\space \ymin \space m + \xmin \space \ymin \space \xmin \space \yymin\space y + \or % 24 + \xxmin\space \ymin \space m + \xmin \space \ymin \space \xmin \space \yymin\space y + \xmin \space \yymax\space m + \xmin \space \ymax \space \xxmin\space \ymax \space y + \or % 25 + \xxmax\space \ymax \space m + \xmax \space \ymax \space \xmax \space \yymax\space y + \xmax \space \yymin\space m + \xmax \space \ymin \space \xxmax\space \ymin \space y + \xxmin\space \ymin \space m + \xmin \space \ymin \space \xmin \space \yymin\space y + \xmin \space \yymax\space m + \xmin \space \ymax \space \xxmin\space \ymax \space y + \or % 26 + \xmax \space \yymin\space m + \xmax \space \ymin \space \xxmax\space \ymin \space y + \xmin \space \yymax\space m + \xmin \space \ymax \space \xxmin\space \ymax \space y + \or % 27 + \xxmax\space \ymax \space m + \xmax \space \ymax \space \xmax \space \yymax\space y + \xxmin\space \ymin \space m + \xmin \space \ymin \space \xmin \space \yymin\space y + \or % 28 + \fi + \ifnum\mode>\pluseight\space + S + \else + \ifnum\dostroke=\plusone S \fi + \ifnum\dofill =\plusone f \fi + \fi + Q}% + \fi}% + \wd\scratchbox#1% + \ht\scratchbox#2% + \dp\scratchbox#3% + \box\scratchbox + \egroup} + +\unexpanded\def\pdfbackendactualtext#1#2% not interfaced + {\clf_startactualtext{#2}% + #1% + \clf_stopactualtext} + +\let\pdfactualtext\pdfbackendactualtext + +% \starttext +% text \pdfbackendactualtext{Meier}{Müller} text +% \stoptext + +\protect \endinput |