%D \module %D [ file=spec-xtx, %D version=2004.11.08, %D title=\CONTEXT\ Special Macros, %D subtitle=\XETEX\ support, %D author={Adam Lindsay \& Hans Hagen \& \unknown}, %D date=\currentdate, %D copyright={Adam Lindsay \& Hans Hagen}] \unprotect \startspecials[xetex][reset,dpx] %D Actually, there's an intermediate ``\type{xdv}'' %D output format, but by default, it's tranparently %D converted to \PDF\ by \XETEX. \setjobsuffix{pdf} %D Rotation looks fine. \definespecial\dostartrotation#1% {\special{x:gsave}\special{x:rotate #1}} \definespecial\dostoprotation% {\special{x:grestore}} %D Scaling and mirroring are also fine. \definespecial\dostartscaling#1#2% {\special{x:gsave}\special{x:scale #1 #2}} \definespecial\dostopscaling% {\special{x:grestore}} \definespecial\dostartmirroring% {\special{x:gsave}\special{x:scale -1 1}} \definespecial\dostopmirroring% {\special{x:grestore}} %D Colors are done with the \DVIPDFMX\ color model, which are %D inherited. %D Although hex colors were accommodated by Hans, we'll try the %D more familiar \DVIPDFMX\ ones. One good side-effect of the %D previous approach %D was that it kept track of the color state (transparency %D in XeTeX is accomplished setting the color to an RGBA quadruple, %D rather than an RGB triple). So transparency will need another %D plan. % \macros % {dostarttransparency,dostoptransparency} % % \starttypen % \dostarttransparency{fraction}{type} % \dostoptransparency % \stoptypen % % Although in \CONTEXT\ transparency is closely integrated % in the color drivers, in the end it is an independent % feature. %\installspecial [\dostarttransparency] [or] [2] %\installspecial [\dostoptransparency] [or] [0] %D \macros %D {doloadmapfile,doloadmapline,doresetmapfilelist} %D %D \XETEX\ 0.91 allows map file additions, via a special. \definespecial\doresetmapfilelist{\special{x:fontmapfile original-empty.map}} \definespecial\doloadmapfile #1#2{\special{x:fontmapfile #1#2}} \definespecial\doloadmapline #1#2{\special{x:fontmapline #1#2}} %D \XETEX\ supports \type{\doPDFdestination} and %D \type{\doPDFbookmark} inherited straight from \DVIPDFMX. \definespecial\doinsertfile#1#2#3#4#5#6#7#8#9% {\bgroup \dodoinsertfile{xtx}{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}% \egroup} \definefileinsertion{xtx}{jpg}{\xtxhandleotherimage} \definefileinsertion{xtx}{png}{\xtxhandleotherimage} \definefileinsertion{xtx}{gif}{\xtxhandleotherimage} \definefileinsertion{xtx}{tif}{\xtxhandleotherimage} \definefileinsertion{xtx}{pdf}{\xtxhandlepdfimage } \def\xtxhandleotherimage#1#2#3#4#5#6#7#8#9% {\bgroup % not needed, we load this under a normal catcode regime; \catcode`\"=11 \XeTeXpicfile "#1" width #7 height #8\relax% \donetrue \egroup} \def\xtxhandlepdfimage#1#2#3#4#5#6#7#8#9% {\bgroup % not needed, we load this under a normal catcode regime; \catcode`\"=11 \checkpdfimagepagenumber{#9} \XeTeXpdffile "#1" \pdfimagepagenumber\space width #7 height #8 \relax% \donetrue \egroup} \def\checkpdfimagepagenumber#1% {\let\pdfimagepagenumber\empty \getfromcommacommand[#1][1]% \doifnumberelse\commalistelement {\ifcase\commalistelement\else \edef\pdfimagepagenumber{page \commalistelement}% %\message{(pdf image \pdfimagepagenumber)}% \fi} {}} % \type{\getfiguredimensionsA} calls this one. % \type{\executedtrue} means it was able to get the desired % dogetfiguresizeBLAH method for the image type. % \type{\donetrue} means that the image was successfully % measured to be more than zero points. \def\dogetXTXfiguresize#1#2#3#4#5#6#7% {#4\zeropoint #5\zeropoint \setbox\foundexternalfigure\vbox{\XeTeXpicfile "#2"}% #6\wd\foundexternalfigure #7\ht\foundexternalfigure \ifdim\wd\foundexternalfigure=\zeropoint % \ifzeropt\wd\foundexternalfigure #1{#2}{#3}{#4}{#5}{#6}{#7}% \fi} \def\dogetXTXpdfsize#1#2#3#4#5#6#7% {#4\zeropoint #5\zeropoint \checkpdfimagepagenumber{#3} \setbox\foundexternalfigure\vbox{\XeTeXpdffile "#2" \pdfimagepagenumber}% \relax not needed #6\wd\foundexternalfigure #7\ht\foundexternalfigure \ifdim\wd\foundexternalfigure=\zeropoint % \ifzeropt\wd\foundexternalfigure #1{#2}{#3}{#4}{#5}{#6}{#7}% \fi} \let\normaldogetfiguresizepng=\dogetfiguresizepng \let\normaldogetfiguresizetif=\dogetfiguresizetif \let\normaldogetfiguresizejpg=\dogetfiguresizejpg \let\normaldogetfiguresizegif=\dogetfiguresizegif \let\normaldogetfiguresizepdf=\dogetfiguresizepdf \def\dogetfiguresizepng{\dogetXTXfiguresize\normaldogetfiguresizepng} \def\dogetfiguresizejpg{\dogetXTXfiguresize\normaldogetfiguresizejpg} \def\dogetfiguresizegif{\dogetXTXfiguresize\normaldogetfiguresizegif} \def\dogetfiguresizetif{\dogetXTXfiguresize\normaldogetfiguresizetif} \def\dogetfiguresizepdf{\dogetXTXpdfsize\normaldogetfiguresizepdf} \appendtoksonce \let\dogetfiguresizepng\normaldogetfiguresizepng \let\dogetfiguresizetif\normaldogetfiguresizetif \let\dogetfiguresizejpg\normaldogetfiguresizejpg \let\dogetfiguresizegif\normaldogetfiguresizegif \let\dogetfiguresizepdf\normaldogetfiguresizepdf \to \everyresetspecials %D The figure object system caused no end of headaches. They all %D went away with this single line: \setupexternalfigures[\c!object=\v!no] \stopspecials \protect %\endinput % FOR THE MOMENT HERE \ifx\dqfontquote\undefined \else \endinput \fi \unprotect % actually, we can use "" in pdftex> 1.20 as well \def\parsefontspec#1% {\xdef\somefontspec{#1\space}% \@EA\doparsefontspec\somefontspec\relax]% =>#1 \empty] \donoparsefontspec} \def\doparsefontspec#1% {\ifx"#1% \@EA\dodqparsefontspec \else\ifx'#1% \@EAEAEA\dosqparsefontspec \else \@EAEAEA\dodoparsefontspec \fi\fi#1} \def\dqfontquote{"} \def\sqfontquote{'} \def\dodqparsefontspec"#1"#2% {\def\somefontname{#1}% \let\somefontquote\dqfontquote \ifx#2\relax\@EA\setnaturalfontspec\else\@EA\setforcedfontspec\fi#2} \def\dosqparsefontspec'#1'#2% {\def\somefontname{#1}% \let\somefontquote\sqfontquote \ifx#2\relax\@EA\setnaturalfontspec\else\@EA\setforcedfontspec\fi#2} \def\dodoparsefontspec#1 #2% {\def\somefontname{#1}% \let\somefontquote\empty \ifx\somefontname\empty % space before fontname \@EA\doparsefontspec \else\ifx#2\relax \@EAEAEA\setnaturalfontspec \else \@EAEAEA\setforcedfontspec \fi\fi #2} \def\setnaturalfontspec#1]% {\@fs@scaled\plusthousand\relax} \def\setforcedfontspec#1 #2\relax]% {\csname\@fs@#1\endcsname#2\relax} \beginXETEX \font \def\donoparsefontspec % #1 == \cs {\edef\fontfile{\somefontquote\truefontname\somefontname\somefontquote}% \ifx\fontfile\s!unknown \let\fontfile\defaultfontfile \fi \edef\lastfontname{\fontfile\somefontspec}% \ifx\fontclass\empty \expandafter\definefontlocal \else \expandafter\definefontglobal \fi} % #1 == \cs \endXETEX \protect \endinput \starttext \definedfont[{cmr10} at 40pt] test \definedfont['cmss10' at 40pt] test \definedfont["cmtt10" at 40pt] test \definedfont[{cmr10} at 40pt] test \definedfont['cmss10' at 40pt] test \definedfont["cmtt10" at 40pt] test % \definedfont["Gentium" at 40pt] test \stoptext