diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii new file mode 100644 index 00000000000..aca2436c130 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii @@ -0,0 +1,305 @@ +%D \module +%D [ file=enco-pfr, +%D version=2000.12.10, % adapted 2005.08.14 to more delayed loading +%D title=\CONTEXT\ Encoding Macros, +%D subtitle=PDF Resources, +%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. + +\ifnum\texengine>\pdftexengine + \expandafter \endinput +\fi + +\ifdefined\pdffontresource \else + \expandafter \endinput +\fi + +\writestatus{loading}{ConTeXt Encoding Macros / PDF Resources} + +%D This is an experimental module in which we implement +%D font resource inclusion in \PDF. One reason to include +%D font resources is that it enables a search engine to +%D perform a search (I'm told). This feature ws requested by +%D Petr Ferdus from Czech. + +%D A simple test file may look like this (watch how we first +%D load the encoding and then the font; previous font +%D definitions are left untouched.) +%D +%D \starttyping +%D % output=pdftex interface=en +%D +%D \useencoding[pfr] +%D \setupbodyfont[csr] +%D +%D \starttext +%D test \`z \'z \bf test \sl test \bs quite funny \`z \page +%D test \`z \'z \bf test \sl test \bs quite funny \`z \page +%D \stoptext +%D \stoptyping +%D +%D We do our best to include a (often large) font resources +%D only once. The current implementation is not that +%D general which is also due to the fact that \type +%D {\pdffontattr} is expanded instantly and persistent. A +%D more versatile (but also slower) approach is to keep track +%D of the fonts and either flush the information at shipout +%D time, or at the end of the document. + +%D \macros +%D {ifincludepdffontresources} +%D +%D You can turn of this feature using the following switch. + +\newif\ifincludepdffontresources \includepdffontresourcestrue + +\ifx\pdfglyphtounicode\undefined \else + \appendtoks + \doif\jobsuffix{pdf}{\readfile{pdfr-def.mkii}\donothing\donothing}% + \to \everystarttext +\fi + +% somehow we cannot preload this beast; also, it's mk dependent +% +% \appendtoks +% \doifelse{\jobsuffix}{pdf}{\loadmkiifile{pdfr-def.mkii}}% +% \to \everystarttext + +% ugly, this should go to the driver spec-tpd + +\ifx\pdfgentounicode\undefined \else + \ifcase\pdfgentounicode \else + \expandafter \expandafter \expandafter \endinput + \fi +\fi + +\unprotect + +% a problem is that there is always an ec vector added even when +% we switch to texnansi early; this has to do with the fact that +% we need to setup fonts at startup; this a pain when we have +% textless documents, so we should have a way around, i.e. an +% extension to pdftex where we can tag numbers inside user specs +% and attributes. +% +% currently we need to use immediate so we end up with entries + +%D The name of the resource is stored in a macro, as is its +%D object reference. A resource is only processed once. When +%D done, the resource name is erased, and we use this fact to +%D prevent redefinition as well as well as reloading. So, a +%D macro defined with \type {\pdffontfileresource} can have +%D three states: +%D +%D \startitemize[packed] +%D \item undefined: not yet loaded, and not yet included +%D \item some value: loaded, but not yet included +%D \item empty: loaded, and already included +%D \stopitemize + +\def\pdffontresource {pdfr:\currentencoding} +\def\pdffontfileresource{pdff:\pdffontresource} + +%D A resource is defined in a file prefixed by \type {pdfr-}. +%D The following \PDF\ code is composed by Ondrej Koala Vacha (I +%D probably mispelled this name). +%D +%D \starttyping +%D \startpdffontresource[il2] +%D /CIDInit /ProcSet findresource begin +%D 12 dict begin +%D begincmap +%D /CIDSystemInfo +%D << /Registry (Adobe) +%D /Ordering (T1UV) +%D /Supplement 0 +%D >> def +%D /CMapName /Adobe-Identity-UCS def +%D /CMapType 1 def +%D 1 begincodespacerange +%D <00> <FF> +%D endcodespacerange +%D %%FontSpecificEncoding +%D 191 beginbfrange +%D <20> <20> <0020> % space dec: 32 oct:040 hex:20 +%D .... .... ...... . ........ .... .. ....... ...... +%D <ff> <ff> <00ff> % dotaccent dec:255 oct:377 hex:ff +%D endbfrange +%D endcmap +%D CMapName currentdict /CMap defineresource pop end +%D end +%D \stoppdffontresource +%D \stoptyping +%D +%D We don't preload such huge definitions, and process them +%D run||time to save memory. Therefore, in the encoding +%D vector, we only add an entry like: +%D +%D \starttyping +%D \startencoding [il2] +%D \usepdffontresource il2 +%D \stopencoding +%D \stoptyping +%D +%D This macro is defined as follows. + +\def\usepdffontresource #1 % + {\doifundefinedelse\pdffontfileresource % okay, undefined, so either + {\setxvalue\pdffontfileresource{#1}} % brand new, or not yet loaded + {\doifvaluesomething\pdffontfileresource % only if not loaded in which + {\setxvalue\pdffontfileresource{#1}}}} % case it's made empty + +%D Watch how we check for duplicated loading. The resource +%D itself, when asked for, is included immediately, after which +%D we save its reference. Normally a document will have one +%D such a resource. + +% \long\def\startpdffontresource[#1]#2\stoppdffontresource +% {\doif{#1}\currentencoding +% {\immediate\pdfobj useobjnum \getvalue{\pdffontresource} stream {#2}}} + +% alternatively we can use object references + +% fails when we switch back and forward between dvi/pdf mode +% +% \long\def\startpdffontresource[#1]#2\stoppdffontresource +% {\doif{#1}\currentencoding{\doifdefined\pdffontresource +% {\immediate\pdfobj useobjnum \getvalue{\pdffontresource} stream {#2}}}} + +\long\def\startpdffontresource[#1]#2\stoppdffontresource + {\doif{#1}\currentencoding{\doifdefined\pdffontresource + {\expanded{\doshipoutpdffontresource{\getvalue{\pdffontresource}}{#2}}}}} + +\def\doshipoutpdffontresource#1#2% + {\ifnum\realpageno<\plustwo + \doglobal\appendtoks + \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi + \to\everyfirstshipout + \else + \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi + \fi} + +% cleaner but not better: +% +% \newtoks \collectedpdffontresources +% +% \def\doshipoutpdffontresource#1#2% +% {\doglobal\appendtoks +% \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi +% \to \collectedpdffontresources} +% +% \def\dofluspdffontresources +% {\the\collectedpdffontresources +% \global\collectedpdffontresources\emptytoks} +% +% \appendtoks \dofluspdffontresources \to \everybeforeshipout + +%D The reference to such a vector is to be handled at font +%D definition time, which is why we hook it into the font +%D loading routine. A little bit of indirectness speeds up +%D the process when this feature is disabled and keeps the +%D macros readable. + +% \newevery \everyfont \relax + +\appendtoksonce \includepdffontresource \to \everyfont + +% \def\includepdffontresource +% {\ifincludepdffontresources +% \ifx\pdffontattr\undefined +% % we're not using (a recent version of) pdftex +% \else\ifcase\pdfoutput +% % we're not in pdf mode +% \else +% \doincludepdffontresource +% \fi\fi +% \fi} + +\def\includepdffontresource + {\ifx\pdfgentounicode\undefined + \expandafter\ifx\the\font\nullfont \else + \ifx\pdffontattr\undefined + % we're not using (a recent version of) pdftex + \else\ifcase\pdfoutput + % we're not in pdf mode + \else + \doincludepdffontresource + \fi\fi + \fi + \else\ifcase\pdfgentounicode + \ifincludepdffontresources + \expandafter\ifx\the\font\nullfont \else + \ifx\pdffontattr\undefined + % we're not using (a recent version of) pdftex + \else\ifcase\pdfoutput + % we're not in pdf mode + \else + \doincludepdffontresource + \fi\fi + \fi + \fi + \or + \global\let\includepdffontresource\relax % automatic, built in + \fi\fi} + +\def\dododoincludepdffontresource#1% encoding + {\bgroup + \edef\currentencoding{#1}% + \doifvaluesomething\pdffontfileresource + {\startreadingfile + \ignorelines % just in case \par is redefined; this thing can get called anywhere + \readsysfile{pdfr-\getvalue\pdffontfileresource.mkii}\donothing\donothing + \stopreadingfile + \letgvalue\pdffontfileresource\empty}% + \egroup} + +\def\doincludepdffontresource + {\ifcsname\s!ucmap\fontfile\endcsname\else + \dodoincludepdffontresource + \fi} + +\def\dodoincludepdffontresource + {% does this font has an encoding specified vector + \doifsomething\currentencoding % no \ifx + {% is there a pdf font encoding resource file defined + \ifcsname\pdffontresource\endcsname + % (fake) object defined + \else\ifcsname\pdffontfileresource\endcsname + % is there a resource already included + \doifsomething\pdffontfileresource + {\pdfobj reserveobjnum {}% + \setxvalue\pdffontresource{\the\pdflastobj}% + \flushatshipout{\dododoincludepdffontresource{\currentencoding}}}% +% \doglobal\appendetoks +% \noexpand\dododoincludepdffontresource{\currentencoding}% +% \to \everybeforeshipout}% prevent multiple loading + \fi\fi + \ifcsname\pdffontresource\endcsname + \expanded{\pdffontattr\font{/ToUnicode \csname\pdffontresource\endcsname\space0 R}}% + % do it only once for each font + \letgvalue{\s!ucmap\fontfile}\empty + \fi}} + +%D For the moment, we keep this definition here, if only +%D because \type {\usepdffontencoding} is not defined in the +%D core. In the end, this will go to \type {enco-*.tex}. +%D +%D Test: +%D +%D \starttyping +%D \useencoding[pfr] \usetypescript[palatino][ec] \setupbodyfont[palatino] +%D +%D \starttext +%D fi ff ffi +%D \stoptext +%D \stoptyping + +\startencoding [il2] \usepdffontresource il2 \stopencoding +\startencoding [ec] \usepdffontresource ec \stopencoding + +\protect \endinput |