summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/spec-xtx.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/spec-xtx.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/spec-xtx.tex247
1 files changed, 247 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/spec-xtx.tex b/Master/texmf-dist/tex/context/base/spec-xtx.tex
new file mode 100644
index 00000000000..ea355abd7bb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spec-xtx.tex
@@ -0,0 +1,247 @@
+%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
+