%% xyemtex.tex from $Id: xyemtex.doc,v 3.3 1996/12/18 09:18:00 ross Exp $
%%
%% Xy-pic ``em-TeX'' back-end extension.
%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
%%
%% 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-1996 Kristoffer H. Rose <krisrose@brics.dk>
%%
%% 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, write to the Free Software Foundation, Inc.,
%% 675 Mass Ave, Cambridge, MA 02139, USA.
%%
\ifx\xyloaded\undefined \input xy \fi
\xyprovide{emtex}{em-TeX backend}{\stripRCS$Revision: 3.3 $}%
 {Ross Moore}{ross@mpce.mq.edu.au}%
 {Mathematics Department, Macquarie University, NSW~2109, Australia}
\xynew@{if}\ifEMspecials@
\xydef@\UseEMspecials{\EMspecials@true}
\xydef@\NoEMspecials{\EMspecials@false}
\xydef@\xyemtex@lineto{\xyEM@special{lineto}} 
\xydef@\xyemtex@moveto{\xyEM@special{moveto}} 
\xydef@\xyemtex@line#1{\xyEM@special{line #1}} 
\xydef@\xyemtex@point#1{\xyEM@special{point #1}} 
\xydef@\xyemtex@pen#1{\addtostyletoks@{\xyEM@special{linewidth #1}}}
{\catcode`:=12 \gdef\next#1{\special{em:#1}}}
\xylet@\xyEM@special=\next
{\catcode`:=12 \gdef\next#1{%
 \W@{EM:#1 (\the\X@p,\the\Y@p),(\the\X@c,\the\Y@c)}\special{em:#1}}}
\xylet@\xyEM@noisy=\next
\xydef@\NoisyEMTeX{\let\xyEM@special=\xyEM@noisy}
\xydef@\EMalternative@#1#2{%
\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1%
 \xdef#1{\noexpand\ifEMspecials@
 \noexpand\expandafter\expandafter\noexpand\csname xyemtex@#2@\endcsname
 \noexpand\else
 \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname
 \noexpand\fi}}%
\xydef@\setupxyEMTeX@{\xywarning@{using em-TeX specials}%
 \EMalternative@{\solid@}{solid}%
 \EMalternative@{\splinesolid@}{splinesolid}%
 \let\setupxyEM@=\reloadxyEM@ 
 \activateEM@ }
\xydef@\xyunloadEM@{\xywarning@{EM specials turned off}%
 \xywithoption{line}{\xysetup@@\uninstallEMline@ }%
 \EMspecials@false
 \let\setupxyEM@=\reloadxyEM@ }
\xydef@\activateEM@{%
 \xywithoption{line}{\xysetup@@\installEMline@}%
 \EMspecials@true }
\xydef@\reloadxyEM@{\xywarning@{EM specials back on}\activateEM@ }
\xydef@\xyemtex@solid@{%
 \ifInvisible@ \let\next@=\no@@
 \else \DN@{\xyEMstraight@}\fi
 \next@ }
\xydef@\xyEMstraight@{\setupDirection@
 \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
 \DN@##1##2{\def\checkoverlap@@{%
 \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi
 \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}%
 \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@
 \noCshavep@@ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}%
 \noCshavec@@ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}%
 \ifHidden@\else
 \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
 \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
 \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
 \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi
 \ifInvisible@\let\next@=\relax \else
 \DN@{%
 \setboxz@h{\kern\X@p \raise\Y@p\hbox{\xyemtex@moveto}}%
 \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@
 \setboxz@h{\boxz@ \kern\X@c \raise\Y@c\hbox{\xyemtex@lineto}}%
 \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}%
 \fi 
 \checkoverlap@@
 \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@
 \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
 \def\Calong@@{\noCalong@@}\Creset@@ }
\xydef@\xyemtex@splinesolid@{\setbox\splinebox@=\copy\voidb@x 
 \multiply\splinetol@\thr@@ 
 \gdef\splineextra@@{\xyemtex@moveto\gdef\splineextra@@{\xyemtex@lineto}}%
 \def\xycrvdrop@{ }\def\xycrvconn@{}\splineset@@ }
\xydef@\xyEMlinewidth@#1{\dimen@=#1\relax\edef\next@{\the\dimen@}}
\xydef@\installEMline@{%
 \let\xylinewidth@@=\xylinewidth@
 \let\xylineSpecial@@=\xyemtex@pen
 \let\transxyline@@=\xyEMlinewidth@ }
\xydef@\uninstallEMline@{\UnloadLine@\relax}%
\xydef@\UseEMlinewidth{\installEMline@}%
\xydef@\NoEMlinewidth{\uninstallEMline@}%
\xyendinput
