%% xyps-ps.tex from $Id: xyps-ps.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $ %% %% Xy-pic ``PS-PS'' PostScript support. %% Copyright (c) 1993-1997 Ross Moore %% %% This file is part of the Xy-pic package for graphs and diagrams in TeX. %% See the companion README and INSTALL files for further information. %% Copyright (c) 1991-2011 Kristoffer H. Rose %% %% The Xy-pic package is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by the %% Free Software Foundation; either version 2 of the License, or (at your %% option) any later version. %% %% The Xy-pic package is distributed in the hope that it will be useful, but %% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY %% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License %% for more details. %% %% You should have received a copy of the GNU General Public License along %% with this package; if not, see http://www.gnu.org/licenses/. %% %% As a special exception, you may use this file and all files derived %% from it without restrictions. This special exception was added with %% version 3.7 of Xy-pic. %% \expandafter\ifx\csname xyps-psloaded\endcsname\empty \message{not reloaded}\endinput \fi \expandafter\let\csname xyps-psloaded\endcsname=\empty \xycatcodes \xylet@\PSmacro@@=\eat@ \xylet@\PSdict@@=\eat@ \xylet@\PSspecial@@=\eat@ \xylet@\PSread@@=\eat@ \xylet@\PSinclude@@=\eat@ \xylet@\PSraw@@=\eat@ \xylet@\xyPSobeylines@@=\relax \xylet@\PSspecialdict@@=\eat@ \xydef@\UnloadPSps@{% \let\PSmacro@@=\eat@ \let\PSdict@@=\eat@ \let\PSspecial@@=\eat@ \let\PSread@@=\eat@ \let\PSinclude@@=\eat@ \let\PSraw@@=\eat@ \let\xyPSobeylines@@=\relax \let\PSspecialdict@@=\eat@ } \xydef@\UnloadPS@{\UnloadPSps@ \expandafter\ifx\csname xypsloaded\endcsname\unknown\PSspecials@false \else\expandafter\NoPSspecials\fi} \xylet@\UnloadPS@@=\UnloadPS@ \ifx\undefined\dvitype@\xydef@\dvitype@{null}\fi \xylet@\xyrealshipout@=\shipout \xydef@\xyPSshipout@{\setbox9=\copy\voidb@x \afterassignment\xyPSshipout@i\setbox9=} \xydef@\xyPSshipout@i{\ifvoid9 \expandafter\aftergroup\fi\xyPSshipout@ii} \xydef@\xyPSshipout@ii{\xyrealshipout@\vbox{\XYpredict@@\box9}} \xydef@\@PSshipout{\global\let\shipout=\xyPSshipout@ } \xydef@\xyPSshipout@PSii{% \ifUsePSdict@@\let\XYshipdict@=\includeXYPSdict@@ \else\def\XYshipdict@{\XYpredict@@\XYdict@@}\fi \xyrealshipout@\vbox{\XYshipdict@\box9}} \xydef@\firstPS@{% \global\let\firstPS@@=\relax \global\let\firstPS@=\relax} \xylet@\firstPS@@=\firstPS@ \ifx\undefined\dumpPSdict@@ \xylet@\dumpPSdict@@=\relax \fi \xydef@\installxyps@{% \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}\xycatcodes \installxyps@@ \installxyps@x } \xylet@\installxyps@@=\relax \xylet@\setupxyPS@@=\relax \xywithoption{ps}{\let\setupxyPS@@=\setupxyPS@} \xydef@\installxyps@x{\dumpPSdict@@ \ifx\xyrealshipout@\undefined \let\xyrealshipout@=\shipout\fi \ifx \shipout \xyrealshipout@ \ifUsePSdict@@ \DN@{\includePSmessage@\includeXYPSdict@\message{>}}% \else \DN@{\XYdict@\endXYdict@}\fi \else \DN@{\let\xyPSshipout@ii=\xyPSshipout@PSii \@PSshipout}\fi \let\firstPS@=\relax \next@ \let\XYpredict@=\relax \setupxyPS@@ } \let\realinstallxyps@x=\installxyps@x \ifx\undefined\AfterBeginDocument \def\installxyps@x{\xysetup@@{\realinstallxyps@x}}% \else \def\installxyps@x{\AfterBeginDocument{\realinstallxyps@x}}% \fi \xydef@\xydefaultdriver@{dvips} \xydef@\xyPSdriver#1{\def\xydefaultdriver@{#1}} \xydef@\installxyps@orig{\DN@{}% \ifx\xydriversselected@@\empty \DN@{\expandafter\defaultinstallps@\expandafter{\xydefaultdriver@}}% \else \def\do##1{% \expandafter\ifx\csname##1@xy@ps\endcsname\relax \DN@{\defaultinstallps@{##1}}}% \xydriversselected@@ \else \DN@##1{}\fi\fi \next@ } \xydef@\defaultinstallps@#1#2{% \xywarning@{no driver specified, using #1 }% \xyrequire{#1}\csname #1@xy@ps\endcsname{}} \xydef@\null@xy@ps{\installxyps@} \xydefcsname@{shape [!...]}#1{% \expandafter\ifx\csname xyps-sloaded\endcsname\empty \DN@{\xyPSescapestyle@{#1}@@}% \else\ifxyPSshapes@\DN@{\xyPSshapechar@{#1}@@}% \else \DN@{\xyPScharwarning@}\fi\fi \next@ } \xydefcsname@{shape [psxy]}{\ifxyPSshapes@\DN@{\xyPSpsxy@}% \else \DN@{\xyPScharwarning@}\fi \next@ } \xydef@\xyPSpsxy@{% \setboxz@h{\dimen@=\L@p \advance\dimen@-\R@p \dimen@ii=-\U@p \raise\dimen@ii\hbox to\z@{% \kern\dimen@\xyPScurrpt@\kern-\dimen@}\boxz@}}% \xydef@\xyPScurrpt@{\ifxyPSshapes@\expandafter\xyPScurrpt@@\fi} \xydef@\xyPScurrpt@@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}} \ifx\undefined\xyPScurrpt@@ \xylet@\xyPScurrpt@@=\xyPScurrpt@@@ \fi \xywarnifdefined\xyPSshapechar@ \xywarnifdefined\xyPSsplitshape@ {\xyuncatcodes \catcode`@=11 \gdef\xyPSshapechar@#1@@{\xyPSsplitshape@#1<><>@@}% \gdef\xyPSsplitshape@#1<>#2<>#3@@{\xyPSsplitPS@{#1}{#2}}} \xydef@\xyPSrawA@#1{\expandafter\xyPSrawAA@ #1{}}% \xydef@\xyPSrawAA@#1#2{\PSraw@@{{pu #1}xyg #2}% \PSmessage{{pu #1}xyg #2}}% \xydef@\xyPSrawZ@#1{\PSraw@@{{#1 pp}xyf}\PSmessage{{#1 pp}xyf}}% \xydef@\modPSboxz@{% \expandafter\DN@\expandafter{\xyPSpre@{}}\ifx\next@\empty\else \setboxz@h{\expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}\boxz@ \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}\DN@{}\fi}% \xydef@\modPSdrop@{% \expandafter\DNii@\expandafter{% \expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}}% \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{\nextii@ ##1}}% \expandafter\next@\expandafter{\Drop@@}% \expandafter\DNii@\expandafter{% \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}% \DN@##1{\expandafter\def\expandafter\Drop@@\expandafter{\tmp@ ##1}}% \expandafter\next@\expandafter{\nextii@}}% \xydef@\modPSconnect@{% \expandafter\DNii@\expandafter{% \expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}}% \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{\nextii@ ##1}}% \expandafter\next@\expandafter{\Connect@@}% \expandafter\DNii@\expandafter{% \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}% \DN@##1{\expandafter\def\expandafter\Connect@@\expandafter{\tmp@ ##1}}% \expandafter\next@\expandafter{\nextii@}}% \xydef@\xyPSpre@{{}{}} \xydef@\xyPSpost@{} \xydef@\PSmessage@#1{\W@{PS: #1, direction=\the\Direction}} \xydef@\PSignore@#1{}% \xydef@\showPSmessages{\let\PSmessage=\PSmessage@} \xydef@\hidePSmessages{\let\PSmessage=\PSignore@} \xylet@\PStracing=\showPSmessages \hidePSmessages \xydef@\PSmacro@#1{\PSmacro@@{#1}\PSmessage{#1}} \xydef@\includeXYPSdict@@{% \expandafter\PSinclude@@\expandafter{\xyPSdictname}} \xydef@\includeXYPSdict@r{\message{PS: includeXYPSdict}\includeXYPSdict@@ \let\includeXYPSdict@=\relax} \xylet@\includeXYPSdict@\includeXYPSdict@r \xydef@\endXYdict@{} \xydef@\includePSmessage@@{\message{=2 | \gdef\xyPS@@<%%>\gdef\xyPS@@@<%!>} \xydef@\writePSdict@@{\message{PS: writePSdict@@}\writePSdict@ \def\writePSdict@@{\message{write PS relaxed}}} {\catcode`|=14 \catcode`\%=12 \gdef\writePSdict@{{\begingroup| \immediate\openout\xywrite@=\xyPSdictname \relax \message{}| \endgroup}}} \xywarnifdefined\obeyoutlines@ {\catcode`\^^M=\active% \gdef\obeyoutlines@{\catcode`\^^M=\active \def^^M{^^J}% \newlinechar=`\^^J\obeyspaces}} \xydef@\XYpredict@@{\ifUsePSdict@@\DN@{}\else \DN@{\xy@begindvi{\xyinputorelse@{xyps-pro}% {\xyerror@{Could not load xyps-pro}{}}\xyuncatcodes}}% \next@ \DN@{\xy@begindvi{\xyinputorelse@{xypspatt}% {\xyerror@{Could not load xypspatt}{}}\xyuncatcodes}}\fi \next@ } \xydef@\XYpredict@r{\XYpredict@@ \let\XYpredict@=\relax \installxyps@} \xylet@\XYpredict@\XYpredict@r \xydef@\XYdict@{\XYdict@@\def\XYdict@{\message{PS relaxed}}}% \xydef@\XYdict@@{\DN@{\xyinputorelse@{xypsdict}% {\xyerror@{Could not load xypsdict}{}}\xyuncatcodes}% \expandafter\xy@begindvi\expandafter{\next@}} \xydef@\forceload@XYdict{% \let\includeXYPSdict@=\includeXYPSdict@r \let\XYpredict@=\XYpredict@r \let\XYdict@=\XYdict@@ \expandafter\installxyps@ } \xynew@{if}\ifxyPSshapes@ \xyPSshapes@true \xydef@\xyPScharwarning@@{\xyPScharmessage@ \gdef\xyPScharwarning@@{\xyPScharmessage@ \xywarning@{...no further PostScript warnings will be given}% \global\let\xyPScharwarning@@=\relax }} \xydef@\xyPScharmessage@{\xywarning@{% the current does not fully support PostScript effects}}% \xydef@\newxyshape#1#2#3{% \DN@{#3}\ifx\next@\empty \xydefcsname@{shape [#1]}{\csname xyshape@#1@\endcsname}% \else \expandafter\def\csname shape [#1]\endcsname{% \csname xyshape@#1@\endcsname}\fi \DN@{#2}\ifx\next@\empty \expandafter\def\csname xyshape@#1@\endcsname{% \xyundefinedEffect@{#1}{}@@}% \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi } \xydef@\xyundefinedEffect@#1#2@@{% \xywarning@{The #1 #2 effect is not implemented with the current driver}}% \xydef@\newxyPSshape#1#2{% \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}% \DNii@{\relax}\ifx\next@\nextii@ \newxyshape{#1}{}\relax\fi \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}% \expandafter\def\nextii@{#2}% \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}% \else \edef\tmp@{\noexpand\let\expandafter\noexpand\next@ \expandafter\noexpand\nextii@}% \expandafter\tmp@\fi } \xydef@\xyPSnotimplemented@@#1@@{% \xywarning@{This PostScript effect is not implemented yet}}% \xydef@\xyPSnotfinished@@{% \xywarning@{This effect is not reliable yet; box sizes may be wrong}}% \endinput