%D \module %D [ file=spec-mis, %D version=1997.04.01, %D title=\CONTEXT\ Special Macros, %D subtitle=Miscellaneous Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. %D Quite some modules in this group are dedicated to supporting %D \PDF\ directly by means of \PDFTEX or indirectly by using %D Acrobat Distiller. This module implements some common %D features. \writestatus{loading}{Context Special Macros / Miscellaneous Macros} \unprotect %D \macros %D {URLhash} %D %D A rather trivial macro: \expandafter\def\expandafter\URLhash\expandafter{\string#} %D \macros %D {ifusepagedestinations} %D %D In \PDF\ version 1.0 only page references were supported, %D while in \DVIWINDO\ 1.N only named references were accepted. %D Therefore \CONTEXT\ supports both methods of referencing. In %D \PDF\ version 1.1 named destinations arrived. Lack of %D continuous support of version 1.1 viewers for \MSDOS\ %D therefore sometimes forces us to prefer page references. As %D a bonus, they are faster too and have no limitations. How %D fortunate we were having both mechanisms available when the %D version 3.0 (\PDF\ version 1.2) viewers proved to be too %D bugged to support named destinations. \newif\ifusepagedestinations %D \macros %D {ifhighlighthyperlinks} %D %D The next switch can be used to make user hyperlinks are %D not highlighted when clicked on. \newif\ifhighlighthyperlinks %D \macros %D {ifgotonewwindow} %D %D To make the {\em goto previous jump} feature more %D convenient when using more than one file, it makes sense %D to force the viewer to open a new window for each file %D opened. \newif\ifgotonewwindow %D \macros %D {ifPDFstrokecolor} %D %D We can reduce the filesize a bit by setting the next switch %D to false. The amount of reduction depends on the use of %D color, but don't expect more than a few percent. Zip %D compression is already rather efficient in itself. \newif\ifPDFstrokecolor \PDFstrokecolortrue %D \macros %D {dodoinsertfile,dofileinsertion, %D definefileinsertion,doiffileinsertionsupported} %D %D File insertion depend on the driver or \TEX\ variant used. %D All driver modules use the same scheme for file insertion, %D and therefore have the next macro in common: % \def\dododoinsertfile[#1][#2,#3][#4,#5]% \next kan weg % {\def\fileinsertionclass{do#1insert}% % \doifdefinedelse{\fileinsertionclass#3} % {\def\next{\getvalue{\fileinsertionclass#3}}} % {\doifdefinedelse{\fileinsertionclass#2} % {\def\next{\getvalue{\fileinsertionclass#2}}} % {\def\next{\gobbleninearguments}}}% % \next{#4}{#5}} % % more modern % % \def\dododoinsertfile[#1][#2,#3][#4,#5]% % {\def\fileinsertionclass{do#1insert}% % \doifdefinedelse{\fileinsertionclass#3} % {\getvalue{\fileinsertionclass#3}} % {\doifdefinedelse{\fileinsertionclass#2} % {\getvalue{\fileinsertionclass#2}} % {\gobbleninearguments}}% % {#4}{#5}} % % more efficient % % \def\dododoinsertfile[#1][#2,#3][#4,#5]% % {\def\fileinsertionclass{do#1insert}% % \executeifdefined{\fileinsertionclass#3} % {\executeifdefined{\fileinsertionclass#2}\gobbleninearguments}% % {#4}{#5}} % % cleaner \def\dododoinsertfile[#1][#2,#3][#4,#5]% {\executeifdefined{do#1insert#3}{\executeifdefined{do#1insert#2}\gobbleninearguments}{#4}{#5}} \def\dodoinsertfile#1#2#3% {\dododoinsertfile[#1][#2][#3]} \def\definefileinsertion#1#2% {\addtocommalist{#2}\supportedfileinsertions \setvalue{do#1insert#2}} \def\dofileinsertion#1#2% {\getvalue{do#1insert#2}} \newevery \everyresetspecials \relax \appendtoks \let\supportedfileinsertions\empty \to \everyresetspecials \let\supportedfileinsertions\empty \def\doiffileinsertionsupportedelse#1% {\ExpandBothAfter\doifinstringelse{#1}{\c!tex,\c!tmp,\supportedfileinsertions}} %D This macro is called with 10 arguments, where the first %D one specifies the driver, like \type{yy} or \type{tr}. The %D second argument is a \type{{type,method}} pair and the %D third the filename. %D Just in case this one is undefined (which can happen if %D this module is used outside \CONTEXT): \ifx\setreferencefilename\undefined \def\setreferencefilename#1\to#2{\edef#2{#1}} \fi %D When submitting forms, we need to communicate the format. \chardef\submitoutputformat=0 % 0=unknown 1=HTML 2=FDF 3=XML \def\setsubmitoutputformat#1% {\doifinsetelse{#1}{FDF,fdf} {\chardef\submitoutputformat2} {\doifinsetelse{#1}{XML,xml} {\chardef\submitoutputformat3} {\chardef\submitoutputformat1}}% \relax} %D \macros %D {escapePSstring} %D %D \starttyping %D \escapePSstring(t\e\1st)))))\to\crap \crap %D \stoptyping % testcase: webschrift met lege regels en unbalanced () \bgroup \catcode`\*=\@@escape \catcode`\\=\@@letter *long*gdef*escapedPSstring#1% {*aftergroup*string *ifnum`#1=12 *aftergroup*n% *else*ifnum`#1=13 *aftergroup*n% *else*if#1(% *aftergroup*(% *else*if#1)% *aftergroup*)% *else*if#1\% *aftergroup*\% *else *aftergroup#1% *fi*fi*fi*fi*fi} *egroup \long\def\escapePSstring#1\to#2% {\convertargument#1\to#2% \bgroup \ifx#2\empty \else \setverbosecscharacters \aftergroup\edef \aftergroup#2% \aftergroup{% \expandafter\handletokens#2\with\escapedPSstring \aftergroup}% \fi \egroup} % \long\def\preservePSpar#1\to#2% % {\bgroup % \def\par{\rawcharacter{12}}% % \expanded{\egroup\noexpand\def\noexpand#2{#1}}} \long\def\preservePSpar#1\to#2% {\bgroup \def\par{\rawcharacter{12}\rawcharacter{12}}% \expanded{\egroup\noexpand\def\noexpand#2{#1}}} %D \macros %D {ifPDFunicode} %D %D We can use this switch to signal that content streams has %D to be unicoded. \newif\ifPDFunicode %D \macros %D {makeMPintoPDFobject, handleMPfshow, setMPPDFobject, getMPPDFobject} %D %D \METAPOST\ support. \appendtoks \chardef\makeMPintoPDFobject\zerocount \def\setMPPDFobject#1#2{\def\getMPPDFobject{\box#2}}% \to \everyresetspecials \appendtoks \let\handleMPfshow\dohandleMPfshow \to \everyresetspecials \protect \endinput