diff options
-rw-r--r-- | Master/texmf-dist/tex/xelatex/graphics/xetex.def | 466 |
1 files changed, 466 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/graphics/xetex.def b/Master/texmf-dist/tex/xelatex/graphics/xetex.def new file mode 100644 index 00000000000..b60dc9d0d7d --- /dev/null +++ b/Master/texmf-dist/tex/xelatex/graphics/xetex.def @@ -0,0 +1,466 @@ +%% +%% This is file `xetex.def', +%% based upon other drivers for LaTeX color and graphics support. +%% +%% Copyright 2004, 2005 Ross Moore <ross@maths.mq.edu.au> +%% modified by Jonathan Kew <jonathan_kew@sil.org> +%% +%% This file is *not yet* part of the Standard LaTeX `Graphics Bundle'. +%% It may be distributed under the terms of the LaTeX Project Public +%% License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Version History +%% +%% 2007/10/25 [JK] Version v0.93 added EPS support from dvipdfmx.def +%% (for use with xdvipdfmx, default driver in xetex 0.997) +%% +%% 2006/08/10 [JK] Version v0.92 correct type-check in \G@measure@QTm; +%% remove \G@PDF@ext, apply \lowercase instead; +%% make \XeTeXquote have catcode 12 rather than 11; +%% explicit space after "filename.ext" (reqd by xetex 0.995) +%% +%% 2006/07/19 [JK] Version v0.91 use \special{color ...} rather than +%% \special{x:textcolor ...} etc, for compatibility with +%% both xdv2pdf and xdvipdfmx drivers; +%% added .bmp to list of recognized graphics extensions +%% +%% 2006/01/09 [JK] Version v0.9 removed support for XeTeX versions +%% prior to 0.6 (when the \XeTeXpicfile parameters were +%% modified), to avoid problem when \XeTeXrevision inc. letters +%% +%% 2005/10/12 Version v0.8 removed spurious space in \convertHEX@ +%% -- found by Morten Hogholm +%% +%% 2004/05/09 Version v0.7 changed support for \pagecolor, adapted +%% from pdftex.def, to put a \special in the \shipout ; +%% this driver should now work with miniltx.tex ; +%% changed some control-sequence names; +%% implemented HSB to RGB color conversion +%% identified the redundant (v0.5) coding more clearly. +%% +%% 2004/05/08 Version v0.6 properly implements scaling and rotations +%% following the coding used with pdftex.def ; +%% implemented `viewport' and prepared for `clip'; +%% don't rely on " to have correct catcode; +%% altered the suffix order for graphics, to be: +%% .pdf .png .jpg .pict .tif .... +%% +%% 2004/04/29 Version v0.5 adapts to the changed names for the +%% graphics inclusion primitives, and version strings. +%% +%% 2004/04/23 Version v0.41 works with graphics.sty as well as +%% graphicx.sty ; \G@pdf@ext is '.pdf'; +%% similarly define and use \G@PDF@ext for '.PDF'; +%% removed some log-messages. +%% +%% 2004/04/22 Version v0.4 designed to work with XeTeX v0.4 +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ProvidesFile{xetex.def} + [2006/08/10 v0.92 LaTeX color/graphics driver for XeTeX (RRM, mod. JK)] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% make sure we can use " with correct catcode +{\catcode`\"=12 + \gdef\XeTeXquote{"}% +} + +% miniltx.tex does not define \PackageWarning +% or \PackageWarningNoLine. +\@ifundefined{PackageWarning}{% + \def\PackageWarning#1#2{% + \begingroup + \newlinechar=10 % + \def\MessageBreak{% + ^^J(#1)\@spaces\@spaces\@spaces\@spaces + }% + \immediate\write16{^^JPackage #1 Warning: #2\on@line.^^J}% + \endgroup + }% +}{} +\@ifundefined{PackageWarningNoLine}{% + \def\PackageWarningNoLine#1#2{% + \PackageWarning{#1}{#2\@gobble}% + }% +}{} +\@ifundefined{on@line}{% + \def\on@line{ on input line \the\inputlineno}% +}{} +\@ifundefined{@spaces}{% + \def\@spaces{\space\space\space\space}% +}{} +\def\GXT@warn{\PackageWarning{xetex.def}}% +\ifx\Gin@log\@undefined + \def\Gin@log{\message} +\fi + +% Colour Support. The following models may be used. +% * rgb \ +% * cmyk \ +% * gray /-- all passed directly to the driver +% * hsb / +% * RGB ---- converted to rgb here +% * named +% +\def\c@lor@arg#1{% + \dimen@#1\p@ + \ifdim\dimen@<\z@\dimen@\maxdimen\fi + \ifdim\dimen@>\p@ + \PackageError{color}{Argument `#1' not in range [0,1]}\@ehd + \fi} +\def\color@gray#1#2{% + \c@lor@arg{#2}% + \edef#1{gray #2}% + } +\def\color@cmyk#1#2{\c@lor@@cmyk#2\@@#1} +\def\c@lor@@cmyk#1,#2,#3,#4\@@#5{% + \c@lor@arg{#4}% + \c@lor@arg{#1}% + \c@lor@arg{#2}% + \c@lor@arg{#3}% + \edef#5{cmyk #1 #2 #3 #4}% + } +\def\color@rgb#1#2{\c@lor@@rgb#2\@@#1} +\def\c@lor@@rgb#1,#2,#3\@@#4{% + \c@lor@arg{#1}% + \c@lor@arg{#2}% + \c@lor@arg{#3}% + \edef#4{rgb #1 #2 #3}% + } +\def\color@RGB#1#2{\c@lor@@RGB#2\@@#1} +\def\c@lor@@RGB#1,#2,#3\@@#4{% + \c@lor@RGB@rgb{#1}\@tempa + \c@lor@RGB@rgb{#2}\@tempb + \c@lor@RGB@rgb{#3}\@tempc + \c@lor@@rgb\@tempa,\@tempb,\@tempc\@@#4% + } +\def\c@lor@RGB@rgb#1#2{% + \dimen@#1\p@ + \divide\dimen@\@cclv + \edef#2{\strip@pt\dimen@}} +\def\color@hsb#1#2{\c@lor@@hsb#2\@@#1} +\def\c@lor@@hsb#1,#2,#3\@@#4{% + \c@lor@arg{#1}% + \c@lor@arg{#2}% + \c@lor@arg{#3}% + \edef#4{hsb #1 #2 #3}% + } +\def\color@named#1#2{\c@lor@@named#2,,\@@#1} +\def\c@lor@@named#1,#2,#3\@@#4{% + \@ifundefined{col@#1}% + {\PackageError{color}{Undefined color `#1'}\@ehd}% + {\edef#4{ #1}}% + } + +\def\current@color{gray 0} + +% +% v0.02t: support for \pagecolor +\def\set@page@color{% + \global\let\current@page@color\current@color + \@ifundefined{GXTorg@shipout}{% + \global\let\GXTorg@shipout\shipout + \gdef\shipout{% + \afterassignment\GXT@shipout + \global\setbox\@cclv=% + }% + \gdef\GXT@shipout{% + \ifvoid\@cclv\relax + \aftergroup\GXT@@shipout + \GXT@setpagecolor + \else + \GXTorg@shipout\vbox{% + \GXT@setpagecolor + \box\@cclv + }% + \fi + }% + \gdef\GXT@@shipout{% + \GXTorg@shipout\box\@cclv\relax + }% + \gdef\GXT@setpagecolor{% + \special{background \current@page@color}% + }% + }{}% +} + +\def\set@color@stack{% + \special{color push \current@color}% + \aftergroup\reset@color +} +\def\set@color@nostack{% + \special{color \current@color}% + \aftergroup\reset@color +} +\def\reset@color@nostack{% + \special{color \current@color}% + \expandafter\checkfor@moreresets +} +\def\reset@color@stack{% + \special{color pop}% + \expandafter\checkfor@moreresets +} +\def\checkfor@moreresets{\futurelet\tmp\checkfor@moreresets@} +\def\checkfor@moreresets@{% + \ifx\tmp\reset@color\expandafter\gobble@color\fi} +\def\gobble@color#1{\checkfor@moreresets} + +\def\define@color@named#1#2{% + \expandafter\edef\csname col@#1\endcsname{#2}} +% +\def\check@for@XeTeX@colorstack{% + \expandafter\ifx\csname use@XeTeX@colorstack\endcsname\relax + \let\set@color\set@color@stack + \let\reset@color\reset@color@stack + \let\checkfor@moreresets\relax + \else + \let\set@color\set@color@nostack + \let\reset@color\reset@color@nostack + \fi +} +% +% use \noXeTeXcolorstack to turn off the color-stack +% mechanism; use it within the preamble only. +% This may be useful with some packages +% e.g. TeXpower which makes partial page-builds. +% +\def\noXeTeXcolorstack{\def\use@XeTeX@colorstack{}} +\AtBeginDocument{\check@for@XeTeX@colorstack} +% +% < end of color support for XeTeX > + +% < graphics inclusion for XeTeX > +% +% PDF is a special case which has extra features +\def\G@pdf@ext{.pdf} + +% \Gin@XeTeX@page: page number of pdf image or \@empty otherwise. +% This code adapted from pdftex.def +\let\Gin@XeTeX@page\@empty +\begingroup + \toks@{\define@key{Gin}{page}{\def\Gin@XeTeX@page{#1}}}% + \@ifundefined{define@key}{% + \edef\x{\endgroup\noexpand\AtBeginDocument{% + \noexpand\@ifundefined{define@key}{}{\the\toks@}}% + }\x + }{\expandafter\endgroup\the\toks@} + +% rotating graphics is supported, but +% rotation of arbitrary material is not supported yet +% +\def\GXT@erotate#1#2{\Grot@setangle{#1}\hbox{#2}}% +\def\set@GXT@erotate{\let\Gin@erotate\GXT@erotate} +%\AtBeginDocument{\set@GXT@erotate} + +\expandafter\ifx\csname XeTeXpicfile\endcsname\relax + \let\picfile@cmd\picfile + \let\pdffile@cmd\pdffile +\else + \let\picfile@cmd\XeTeXpicfile + \let\pdffile@cmd\XeTeXpdffile +\fi + +% all graphics are handled by Apple's QuickTime +% +\def\XeTeX@include@QTm#1{% + \def\picpage{}% + \lowercase{\edef\type@ext{\Gin@ext}}% + \ifx\type@ext\G@pdf@ext + \ifx\Gin@XeTeX@page\@empty\else + \edef\picpage{ page\Gin@XeTeX@page}\fi + \def\picfilecommand{\pdffile@cmd}% + \else + \def\picfilecommand{\picfile@cmd}% + \fi + \edef\picfileargs{ \XeTeXquote#1\XeTeXquote\space\picpage}% + \Gin@log{% + <use \picfileargs>% + }% + \ifx\Gscale@start\relax + \setbox\z@=\hbox{\expandafter\picfilecommand\picfileargs}% + \edef\next{\box\z@\egroup + \def\noexpand\width{\the\wd\z@}\relax + \def\noexpand\height{\the\ht\z@}\bgroup}% + \expandafter\next + \else + \XeTeX@scaleinclude{#1}% + \fi +} +\def\XeTeX@scaleinclude#1{% + \def\@tempa{!}% + \ifx\Gin@scaley\@tempa + \let\Gin@scaley\Gin@scalex + \else + \ifx\Gin@scalex\@tempa\let\Gin@scalex\Gin@scaley\fi + \fi + \hbox{% + \Gscale@box{\Gin@scalex}[\Gin@scaley]{% + \@ifundefined{Gin@vllx}{% + \GXT@viewportfalse + % without viewport/trim clipping does not make sense + % for XeTeX + \Gin@clipfalse + }{}% + \ifGin@clip + \GXT@warn{No clipping support in XeTeX yet}% + \if!\Gin@vllx\Gin@vlly\Gin@vurx\Gin@vury!% + \else + \let\GXT@clipend\GXT@DoClipEnd + \setbox\@tempboxa\hbox\bgroup + \fi + \fi + \ifGXT@viewport + \ifdim\Gin@vlly\p@=\z@ + \else + \lower\Gin@vlly bp\hbox\bgroup + \fi + \ifdim\Gin@vllx\p@=\z@ + \else + \hskip-\Gin@vllx bp\relax + \fi + \fi +% + \expandafter\picfilecommand\picfileargs +% + \ifGXT@viewport + \ifdim\Gin@vlly\p@=\z@ + \else + \egroup + \fi + \GXT@clipend + \fi + }% + }% +} +\newif\ifGXT@viewport +\GXT@viewporttrue +\let\GXT@clipend\relax +\def\GXT@DoClipEnd{% + \egroup + \dp\@tempboxa\z@ + % \Gin@urx and \Gin@ury already contain the correct values, + % so both cases viewport and trim can be handled together: + \dimen@\Gin@urx\p@ + \advance\dimen@ -\Gin@vllx\p@ + \wd\@tempboxa\strip@pt\dimen@ bp\relax + \dimen@\Gin@ury\p@ + \advance\dimen@ -\Gin@vlly\p@ + \ht\@tempboxa\strip@pt\dimen@ bp\relax + % when clipping is implemented for XeTeX + % make the changes here: + \box\@tempboxa +} + + +\def\Gread@QTm#1{\IfFileExists{\Gin@base.bb}% + {\Gread@eps{\Gin@base.bb}}% + {\G@measure@QTm{\Gin@base}{\Gin@ext}}% +} +\def\G@measure@QTm#1#2{% + % \@warning{measuring size of QuickTime graphic #1#2}% + \bgroup + \lowercase{\edef\type@ext{#2}}% + \ifx\type@ext\G@pdf@ext + \ifx\Gin@XeTeX@page\@empty \def\picpage{}% + \else \edef\picpage{ page\Gin@XeTeX@page}\fi + \fi + \setbox0=\hbox{% + \ifx\type@ext\G@pdf@ext + \edef\piccommand{\noexpand\pdffile@cmd + \XeTeXquote#1#2\XeTeXquote\space\picpage}% + \else + \edef\piccommand{\noexpand\picfile@cmd + \XeTeXquote#1#2\XeTeXquote\space}% + \fi + \piccommand + }\dimen0=\wd0 \dimen2=\ht0 + \edef\next{\egroup + \def\noexpand\Gin@urx{\strip@pt\dimen0}% + \def\noexpand\Gin@ury{\strip@pt\dimen2}}% + \next + \Gin@defaultbp\Gin@llx{0}% + \Gin@defaultbp\Gin@lly{0}% + \expandafter\Gin@defaultbp\expandafter\Gin@urx\expandafter{\Gin@urx}% + \expandafter\Gin@defaultbp\expandafter\Gin@ury\expandafter{\Gin@ury}% +% \typeout{XeTeX: HiRes BoundingBox = (0,0)\space x (\Gin@urx,\Gin@ury) }% + \Gin@nat@width=\Gin@urx\p@ + \Gin@nat@height=\Gin@ury\p@ + % these emulate \@begin@tempboxa + \edef\width{\the\Gin@nat@width}% + \edef\height{\the\Gin@nat@height}% + \def\depth{0pt}% + \let\totalheight\@ovri + \totalheight\height +} + +\let\Ginclude@QTm\XeTeX@include@QTm + +% For a new graphics type, you can include a line here ... +\@namedef{Gin@rule@.pdf}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.gif}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.jpg}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.mac}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.pict}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.png}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.psd}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.sgi}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.tga}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.tif}#1{{QTm}{QTm}{#1}} +\@namedef{Gin@rule@.bmp}#1{{QTm}{QTm}{#1}} + +% movies not supported yet: +%\@namedef{Gin@rule@.qt}#1{{QTm}{QTm}{#1}} +%\@namedef{Gin@rule@.mpg}#1{{QTm}{QTm}{#1}} +%\@namedef{Gin@rule@.mov}#1{{QTm}{QTm}{#1}} +%\@namedef{Gin@rule@.moov}#1{{QTm}{QTm}{#1}} + + +% ... though this default rule will try QuickTime anyway ... +\@namedef{Gin@rule@*}#1{{QTm}{QTm}{#1}} + +% ... and add its extension here +\def\Gin@extensions{.pdf,.eps,.ps,% + .png,.jpg,.bmp,.pict,.tif,.psd,.mac,.sga,.tga,.gif} + +% xdvipdfmx is now the default driver, and can support EPS images, +% so we borrow code for this from dvipdfmx.def (and add the extensions above) +\def\Ginclude@eps#1{% + \message{<#1>}% + \bgroup + \def\@tempa{!}% + \dimen@\Gin@req@width + \dimen@ii.1bp% + \divide\dimen@\dimen@ii + \@tempdima\Gin@req@height + \divide\@tempdima\dimen@ii + \special{PSfile="#1"\space + llx=\Gin@llx\space + lly=\Gin@lly\space + urx=\Gin@urx\space + ury=\Gin@ury\space + \ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\space\fi + \ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\space\fi + \ifGin@clip clip\fi}% + \egroup} +\@namedef{Gin@rule@.ps}#1{{eps}{.ps}{#1}} +\@namedef{Gin@rule@.eps}#1{{eps}{.eps}{#1}} + +% +% Rotation & Scaling +% supported from xetex v0.6 onwards +% + +\def\Grot@start{\wd\z@\z@ + \special{x:gsave}\special{x:rotate \Grot@angle}} +\def\Grot@end{\special{x:grestore}} + +\def\Gscale@start{% + \special{x:gsave}\special{x:scale \Gscale@x\space\Gscale@y}} +\let\Gscale@end\Grot@end +% + +\endinput +%% +%% End of file `xetex.def'. |