Martin Scharrer avatar Martin Scharrer committed a4ba90c

Official r95 by Ross Moore of xetex.def.

Comments (0)

Files changed (1)

xetex/xetex-095.def

+%%
+%% This is file `xetex.def',
+%% based upon other drivers for LaTeX color and graphics support.
+%%
+%%  Copyright 2004-2007, 2009, 2013  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
+%%
+%%  2013/02/04  [RRM] Version v0.95  added clipping support.
+%%              (code provided by Joseph Wright and Martin Scharrer)
+%%
+%%  2009/11/21  [KB] Version v0.94  merge the two 0.93's.
+%%
+%%  2009/10/28  [RRM] Version v0.93  fix big-point incompatibility;
+%%
+%%  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}
+        [2013/02/04 v0.95 LaTeX color/graphics driver for XeTeX (RRM/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
+      \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
+%  \wd\@tempboxa\dimen@ \relax
+  \dimen@\Gin@ury\p@
+  \advance\dimen@ -\Gin@vlly\p@
+  \ht\@tempboxa\strip@pt\dimen@ bp\relax
+%  \ht\@tempboxa\dimen@ \relax
+  % Clip box to its official size
+  \GXT@clipbox\@tempboxa
+  \box\@tempboxa
+}
+% Clipping support added by Martin Scharrer and Joseph Wright, Nov 2011 
+% under the LPPL v1.0 or later. 
+\def\GXT@clipbox#1{% 
+  \setbox#1=\hbox{% 
+    \Gin@defaultbp\WIDTH{\wd#1}% 
+    \Gin@defaultbp\DEPTH{\dp#1}% 
+    \@tempdima\ht#1% 
+    \advance\@tempdima\dp#1% 
+    \Gin@defaultbp\TOTALHEIGHT{\@tempdima}% 
+    \special{pdf:content q }% 
+      \special{% 
+        pdf:literal direct 
+            0 -\DEPTH\space \WIDTH\space \TOTALHEIGHT\space re 
+      }% 
+      \special{pdf:literal direct W }% 
+      \special{pdf:literal direct n }% 
+        \special{pdf:literal direct -1 0 0 -1 0 0 cm }% 
+          \special{pdf:content q }% 
+            \special{pdf:literal direct -1 0 0 -1 0 0 cm }% 
+              \box#1% 
+          \special{pdf:literal direct Q }% 
+    \special{pdf:literal direct Q }% 
+  }% 
+} 
+% End of clipping code 
+  
+% 
+\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
+     \edef\noexpand\Gin@urx{\the\dimen0}%
+     \edef\noexpand\Gin@ury{\the\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'.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.