%% xy2cell.tex from $Id: xy2cell.doc,v 3.3 1996/12/18 14:21:23 ross Exp $
%%
%% Xy-pic ``2-cell'' feature.
%% Copyright (c) 1993-1996 Ross Moore <[email protected]>
%%
%% 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 <[email protected]>
%%
%% 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 macro package; if not, write to the Free Software Foundation,
%% Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%%
\ifx\xyloaded\undefined \input xy \fi
\xyprovide{2cell}{Two-cell feature}{\stripRCS$Revision: 3.3 $}%
{Ross Moore}{[email protected]}%
{Mathematics Department, Macquarie University, NSW~2109, Australia}
\xyrequire{curve}\xycatcodes
\message{two-cells,}
\xydef@\UseTwocells{\definesupermorphism{twocell}{%
\xy@{start of 2-cell}{\begingroup}%
\twocell@}}
\xydef@\UseHalfTwocells{%
\definesupermorphism{uppertwocell}{%
\xy@{start of 2-cell}{\begingroup}%
\uppertwocell@}%
\definesupermorphism{lowertwocell}{%
\xy@{start of 2-cell}{\begingroup}%
\lowertwocell@}}
\xydef@\UseCompositeMaps{\definesupermorphism{compositemap}{%
\xy@{start composite-map}{\begingroup}%
\compositemap@}}
\xydef@\UseAllTwocells{%
\UseTwocells \UseHalfTwocells \UseCompositeMaps }
\xydef@\supermorphism#1[#2]#3{\def\afterMORPHISM{[#2]#3}#1}
\xydef@\afterMORPHISM{}
\xydef@\definesupermorphism#1#2{%
\expandafter\def\csname x#1\endcsname{\supermorphism{#2}}%
\expandafter\def\csname u#1\endcsname{\supermorphism{#2}[-1,0]{}}%
\expandafter\def\csname d#1\endcsname{\supermorphism{#2}[1,0]{}}%
\expandafter\def\csname l#1\endcsname{\supermorphism{#2}[0,-1]{}}%
\expandafter\def\csname r#1\endcsname{\supermorphism{#2}[0,1]{}}%
\expandafter\def\csname uu#1\endcsname{\supermorphism{#2}[-2,0]{}}%
\expandafter\def\csname dd#1\endcsname{\supermorphism{#2}[2,0]{}}%
\expandafter\def\csname ll#1\endcsname{\supermorphism{#2}[0,-2]{}}%
\expandafter\def\csname rr#1\endcsname{\supermorphism{#2}[0,2]{}}%
\expandafter\def\csname ur#1\endcsname{\supermorphism{#2}[-1,1]{}}%
\expandafter\def\csname ul#1\endcsname{\supermorphism{#2}[-1,-1]{}}%
\expandafter\def\csname dr#1\endcsname{\supermorphism{#2}[1,1]{}}%
\expandafter\def\csname dl#1\endcsname{\supermorphism{#2}[1,-1]{}}%
\expandafter\def\csname uul#1\endcsname{\supermorphism{#2}[-2,-1]{}}%
\expandafter\def\csname uur#1\endcsname{\supermorphism{#2}[-2,1]{}}%
\expandafter\def\csname ull#1\endcsname{\supermorphism{#2}[-1,-2]{}}%
\expandafter\def\csname urr#1\endcsname{\supermorphism{#2}[-1,2]{}}%
\expandafter\def\csname ddl#1\endcsname{\supermorphism{#2}[2,-1]{}}%
\expandafter\def\csname ddr#1\endcsname{\supermorphism{#2}[2,1]{}}%
\expandafter\def\csname dll#1\endcsname{\supermorphism{#2}[1,-2]{}}%
\expandafter\def\csname drr#1\endcsname{\supermorphism{#2}[1,2]{}}%
\expandafter\def\csname uull#1\endcsname{\supermorphism{#2}[-2,-2]{}}%
\expandafter\def\csname uurr#1\endcsname{\supermorphism{#2}[-2,2]{}}%
\expandafter\def\csname ddll#1\endcsname{\supermorphism{#2}[2,-2]{}}%
\expandafter\def\csname ddrr#1\endcsname{\supermorphism{#2}[2,2]{}}}
\newdir{=>}{!/5pt/\dir{=}!/2.5pt/\dir{=}*!/-5pt/\dir2{>}}
\xydef@\arrowobject#1{\def\Arrowobject@{#1}}
\xydef@\Arrowobject@{\dir{=>}}
\xydef@\twocell@{\toks6={3.5}\toks5={@}\toks7={@}\toks8={@}\toks3={f}%
\tw@cell@ }
\xydef@\uppertwocell@{\toks6={7}\toks5={@}\toks7={@}\toks8={@}\toks3={o}%
\tw@cell@ }
\xydef@\lowertwocell@{\toks6={-7}\toks5={@}\toks7={@}\toks8={@}\toks3={o}%
\tw@cell@ }
\xydef@\compositemap@{\toks6={3.5}\toks5={@}\toks7={@}\toks8={@}\toks3={t}%
\tw@cell@ }
\xydef@\tw@cell@@@{%
\expandafter\ifx\the\toks6\omit\relax\toks6={}\else
\expandafter\ifx\expandafter @\the\toks7\relax\expandafter\dimen@\the\toks6\p@
\expandafter\if\the\toks3t\relax\dimen@=\p@
\else\expandafter\if\the\toks3o\divide\dimen@\tw@
\ifdim\dimen@<\z@ \dimen@ii-\p@ \advance\dimen@ii\dimen@
\dimen@=\dimen@ii \else \dimen@\p@ \fi
\else\dimen@\p@
\fi\fi
\edef\tmp@{\expandafter\removePT@\the\dimen@}%
\expandafter\toks\expandafter7\expandafter{\tmp@}\fi
\expandafter\ifx\expandafter @\the\toks8\relax
\expandafter\dimen@\the\toks6\p@
\expandafter\if\the\toks3t\relax\dimen@\p@
\else\expandafter\if\the\toks3o\divide\dimen@\tw@
\ifdim\dimen@<\z@ \dimen@ii-\p@ \advance\dimen@ii\dimen@
\dimen@=\dimen@ii \else \dimen@\p@ \fi
\else\dimen@\p@
\fi\fi
\edef\tmp@{\expandafter\removePT@\the\dimen@}%
\expandafter\toks\expandafter8\expandafter{\tmp@}\fi
\expandafter\ifx\expandafter @\the\toks5\relax
\expandafter\dimen@\the\toks6\p@
\expandafter\if\the\toks3o\divide\dimen@ by-4\relax
\else\dimen@\z@\fi
\edef\tmp@{\expandafter\removePT@\the\dimen@}%
\expandafter\toks\expandafter5\expandafter{\tmp@}\fi
\fi
\twocellmod@
\expandafter\if\the\toks3t\relax
\edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}%
{\the\toks7}{\the\toks8}{\the\toks3}%
{\the\toks2}{\the\toks1}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}%
\else
\edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}%
{\the\toks7}{\the\toks8}{\the\toks3}%
{\the\toks1}{\the\toks2}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}%
\fi
\toks@={\endgroup}%
\expandafter\def\expandafter\next@\expandafter{%
\expandafter\def\expandafter\twocellhead@\expandafter{\twocellhead@}}%
\expandafter\addtotoks@\expandafter{\next@}%
\expandafter\def\expandafter\next@\expandafter{%
\expandafter\def\expandafter\twocelltail@\expandafter{\twocelltail@}}%
\expandafter\addtotoks@\expandafter{\next@}%
\expandafter\addtotoks@\expandafter{\expandafter\twocellPATH\tmp@}%
\the\toks@ }%
\xydef@\twocellstyle{\scriptstyle}
\xydef@\droptwocelllabel@#1{\xyFN@\droptwocelllabel@@#1@!}
\xydef@\droptwocelllabel@@{%
\ifx*\next\DN@*{\droptwocelldrop@}%
\else\DN@##1@!{\droptwocelltext@{##1}}%
\fi \next@ }
{\xyuncatcodes \gdef\next#1{\drop+!C{\twocellstyle #1}}}
\xylet@\droptwocelltext@=\next
\xydef@\droptwocelldrop@#1@!{\bgroup \let\xy@=\oxy@
\let\objectstyle=\twocellstyle \drop#1{}%
\edef\tmp@{\egroup \X@min=\the\X@min \X@max=\the\X@max
\Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@ }
\xydef@\twocellhead#1{\def\twocellhead@{#1}}
\xydef@\twocelltail#1{\def\twocelltail@{#1}}
\xydef@\twocellhead@{\dir{>}}
\xydef@\twocelltail@{}
\xywarnifdefined\twocellmod@
\xydef@\tw@cell@{\begingroup
\toks@={{}}\toks1={{}}\toks2={{}}\toks4={{}}%
\def\twocellmod@{}\xyFN@\tw@@cell@}%
\xydef@\tw@@cell@{%
\ifx\space@\next\expandafter\DN@\space{\xyFN@\tw@@cell@}%
\else\ifx\bgroup\next \let\next@=\toks@\afterassignment\tw@@cell@@
\else\ifx ^\next \DN@^##1{\toks@={##1}\nudgepos@71\tw@@cell@}%
\else\ifx _\next \DN@_##1{\toks@={##1}\nudgepos@82\tw@@cell@}%
\else\addLT@\ifx \next \addGT@{\addLT@\DN@##1}{%
\toks6={##1}\ifx\omit##1\relax\toks3={t}\toks5={0}\fi\xyFN@\tw@@cell@}%
\else\ifx\omit\next \DN@\omit{\omitarrows@\xyFN@\tw@@cell@}%
\else\ifx~\next \DN@~{\xyFN@\whichCurveObject@}%
\else \DN@{\xyFN@\tw@cell@@\empty @}%
\fi\fi\fi\fi\fi\fi\fi%
\next@ }
\xydef@\whichCurveObject@{%
\ifx\space@\next\expandafter\DN@\space{\xyFN@\whichCurveObject@}%
\else\ifx\next^\DN@^##1{\xy@{~^{##1}}{\uppercurveobject{##1}}\xyFN@\tw@@cell@}%
\else\ifx\next_\DN@_##1{\xy@{~_{##1}}{\lowercurveobject{##1}}\xyFN@\tw@@cell@}%
\else\addRQ@\ifx\next \addRQ@\DN@##1{%
\xy@{~'{##1}}{\def\twocellhead@{##1}}\xyFN@\tw@@cell@}%
\else\addLQ@\ifx\next \addLQ@\DN@##1{%
\xy@{~`{##1}}{\def\twocelltail@{##1}}\xyFN@\tw@@cell@}%
\else\ifx!\next \DN@!{\xyFN@\checkmodmap@}%
\else\ifx\next\bgroup\DN@##1{\xy@{~{##1}}{\curveobject{##1}}\xyFN@\tw@@cell@}%
\else\DN@##1{\xy@{~##1}{\curveobject{##1}}\xyFN@\tw@@cell@}%
\fi\fi\fi\fi \fi\fi\fi
\next@ }
\xydef@\checkmodmap@{%
\ifx\space@\next\expandafter\DN@\space{\xyFN@\checkmodmap@}%
\else \def\twocellmod@{\modmap@}%
\ifx\next!\DN@!##1{%
\xy@{~!!{##1}}{\def\modmapobject@{##1}}\xyFN@\tw@@cell@}%
\else \DN@{\xyFN@\tw@@cell@}\fi
\fi \next@ }
\xydef@\omitarrows@{\toks5={0}\toks6={}\toks7={0}\toks8={0}}
\xydef@\tw@@cell@@{\expandafter\xyFN@\expandafter\tw@cell@@\the\toks@ @}
\xydef@\tw@cell@@{\ifx \space@\next\expandafter\DN@\space{\xyFN@\tw@cell@@}%
\else\ifx ^\next
\DN@^##1@{\toks@={##1}\toks4={^}\nudgepos@50\tw@cell@@@}%
\else\addEQ@\ifx\next
\addEQ@\DN@##1@{\toks@={##1}\toks4={=}\nudgepos@50\tw@cell@@@}%
\else\ifx _\next
\DN@_##1@{\toks@={##1}\toks4={_}\nudgepos@50\tw@cell@@@}%
\else\addLT@\ifx \next
\DN@##1@{\toks@={##1}\toks4={_}\nudgepos@50\tw@cell@@@}%
\else\ifx\omit\next \DN@\omit##1@{\toks4={@}\toks@={##1}\tw@cell@@@}%
\else\addRQ@\ifx\next \addRQ@\DN@##1@{\toks4={@}\toks3={/}\toks@={##1}%
\nudgepos@50\tw@cell@@@}%
\else\addLQ@\ifx\next \addLQ@\DN@##1@{\toks4={@}\toks3={b}\toks@={##1}%
\nudgepos@50\tw@cell@@@}%
\else\ifx"\next \DN@"##1@{\toks4={@}\toks3={B}\toks@={##1}%
\nudgepos@50\tw@cell@@@}%
\else\ifx!\next \DN@!##1@{\toks4={@}\toks3={@}\toks@={##1}%
\nudgepos@50\tw@cell@@@}%
\else\ifx\next\empty\DN@##1@{\toks@={{}}\toks4={_}\tw@cell@@@}%
\else\DN@##1@{\toks@={##1}\toks4={_}\tw@cell@@@}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@ }
\xywarnifdefined\whichnudge
\xywarnifdefined\whichinfo
\xywarnifdefined\afternudge
\xydef@\nudgepos@#1#2#3{\def\whichnudge{\toks#1}\def\whichinfo{\toks#2}%
\def\afternudge{#3}\expandafter\xyFN@\expandafter\nudgepos@@\the\toks@ @}
\xydef@\nudgepos@@{\ifx \space@\next\expandafter\DN@\space{\xyFN@\nudgepos@}%
\else\addLT@\ifx \next
\addGT@{\addLT@\DN@##1}##2@{%
\ifx\omit##1\relax\whichnudge={0}\whichinfo={}%
\else\whichnudge={##1}\whichinfo={##2}\fi\xyFN@\afternudge}%
\else \DN@##1@{\whichinfo={##1}\xyFN@\afternudge}%
\fi\fi \next@ }
\xydef@\modmap@{%
\expandafter\ifx\the\toks4@\toks4={!}%
\else\expandafter\ifx\the\toks4=\toks4={H}%
\else\expandafter\ifx\the\toks4^\toks4={A}%
\else\expandafter\ifx\the\toks4_\toks4={V}\fi\fi\fi\fi
\expandafter\DN@\expandafter{\the\toks6}%
\ifx\next@\empty\relax\else\expandafter\moddefs@\fi}
\xydef@\moddefs@{%
\expandafter\dimen@\the\toks6\p@
\ifdim\dimen@=\z@\relax
\expandafter\dimen@\the\toks7\p@
\ifdim\dimen@<\z@\advance\[email protected]\p@\else\advance\[email protected]\p@\fi
\edef\tmp@{\noexpand\toks7={\expandafter\removePT@\the\dimen@}}\tmp@
\expandafter\dimen@\the\toks8\p@
\ifdim\dimen@<\z@\advance\[email protected]\p@\else\advance\[email protected]\p@\fi
\expandafter\ifx\the\toks3t\advance\dimen@-1\p@\fi
\edef\tmp@{\noexpand\toks8={\expandafter\removePT@\the\dimen@}}\tmp@
\else
\ifdim\dimen@<\z@\advance\[email protected]\p@\else\advance\[email protected]\p@\fi
\edef\tmp@{\noexpand\toks6={\expandafter\removePT@\the\dimen@}}\tmp@
\expandafter\dimen@\the\toks7\p@
\ifdim\dimen@<\z@\advance\[email protected]\p@\else\advance\[email protected]\p@\fi
\expandafter\ifx\the\toks3t\advance\dimen@-2\p@\fi
\edef\tmp@{\noexpand\toks7={\expandafter\removePT@\the\dimen@}}\tmp@
\expandafter\dimen@\the\toks8\p@
\ifdim\dimen@<\z@\advance\[email protected]\p@\else\advance\[email protected]\p@\fi
\expandafter\ifx\the\toks3t\advance\dimen@-2\p@\fi
\edef\tmp@{\noexpand\toks8={\expandafter\removePT@\the\dimen@}}\tmp@
\fi }%
\xydef@\modmapobject#1{\def\modmapobject@{#1}}
\xydef@\modmapobject@{\dir{|}}
\xydef@\@modmapobject@{{\if\@mod@\relax\expandafter\empty
\else\expandafter\modmapobject@\fi}}
\xydef@\curveobject#1{\def\ucurveObject@{~*#1}\def\dcurveObject@{~*#1}}
\xydef@\uppercurveobject#1{\def\ucurveObject@{~*#1}}
\xydef@\lowercurveobject#1{\def\dcurveObject@{~*#1}}
\xydef@\ucurveObject@{}
\xydef@\dcurveObject@{}
\xydef@\savetwocellobjects{%
\xy@{twocell objects}{%
\expandafter\uppercurveobject\expandafter{\ucurveObject@}%
\expandafter\lowercurveobject\expandafter{\dcurveObject@}%
\expandafter\modmapobject\expandafter{\modmapobject@}%
\expandafter\twocellhead\expandafter{\twocellhead@}%
\expandafter\twocelltail\expandafter{\twocelltail@}%
\expandafter\arrowobject\expandafter{Arrowobject@}%
}}
\xydef@\twocell@path.[#1].{%
\expandafter\ifx\csname Q@@c\endcsname\relax
\DN@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
\xy@{}{\expandafter\edef\csname Q@@\endcsname{\cfromthec@}}%
\afterPOS{\xy@{}%
{\expandafter\edef\csname Q@@c\endcsname{\cfromthec@}}%
\xy@{}%
{\cfromid@{@}\expandafter\edef\csname Q@@p\endcsname{\cfromthec@}}%
\xy@{twocell #1}{#1}\leave@\aftertwoCELL};p,}%
\else
\DN@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
\xy@{twocell #1}{#1}\leave@\aftertwoCELL}%
\fi \next@ }
\xydef@\twocellpath.[#1].{%
\expandafter\edef\csname Q@@p\endcsname{\cfromthec@}%
\xy@{}{\enter@{\pfromthep@}}%
\xy@{}{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
\enter@{\pfromthec@}}%
\afterPOS{\xy@{}{\leave@\setupDirection@}#1\restore\restore
\xy@{end of 2-cell}\xysaveMinMax@ }}%
\xydef@\xysaveMinMax@{\edef\tmp@{\endgroup
\noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi
\noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi
\noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi
\noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi
}\tmp@ }
\xylet@\twocellPATH=\twocellpath
\xydef@\aftertwo@CELL{\let\twocellPATH=\twocellpath \def\aftertwoCELL{}}
\xydef@\aftertwoCELL{}
\xydef@\twocell@@@@#1!!!{\xy@{twocell #1}{\twocell@@#1!!!}}
\let\xystatus=\xystatus@
\xydef@\twocell{\hbox\bgroup\@twocell}
\xydef@\uppertwocell{\hbox\bgroup\@uppertwocell}
\xydef@\lowertwocell{\hbox\bgroup\@lowertwocell}
\xydef@\compositemap{\hbox\bgroup\@compositemap}
\xydef@\twocelll#1#{\hbox\bgroup\xy@\save\save@\@twocelll{#1}}
\xydef@\@twocelll#1#2{%
\afterPOS{\@twocelll@\xyFN@\twocell@#1{#2}}}
\xydef@\uppertwocelll#1#{\hbox\bgroup\xy@\save\save@\@uppertwocelll{#1}}
\xydef@\@uppertwocelll#1#2{%
\afterPOS{\@twocelll@\xyFN@\uppertwocell@#1{#2}}}
\xydef@\lowertwocelll#1#{\hbox\bgroup\xy@\save\save@\@lowertwocelll{#1}}
\xydef@\@lowertwocelll#1#2{%
\afterPOS{\@twocelll@\xyFN@\lowertwocell@#1{#2}}}
\xydef@\compositemapp#1#{\hbox\bgroup\xy@\save\save@\@compositemapp{#1}}
\xydef@\@compositemapp#1#2{%
\afterPOS{\@twocelll@\xyFN@\compositemap@#1{#2}}}
\xydef@\@twocelll@{%
\expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@
\expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@
\let\twocellPATH=\twocell@path
\def\aftertwoCELL{\twocell@DONE \xy@\restore \leave@
}}
\xydef@\@twocell#1{\DN@{\@twocell@\twocell@}\xyFN@\next@[#1]}
\xydef@\@uppertwocell#1{\DN@{\@twocell@\uppertwocell@}\xyFN@\next@[#1]}
\xydef@\@lowertwocell#1{\DN@{\@twocell@\lowertwocell@}\xyFN@\next@[#1]}
\xydef@\@compositemap#1{\DN@{\@twocell@\compositemap@}\xyFN@\next@[#1]}
\xydef@\@twocell@#1{\ifx\next[\DN@[{\toks@={#1}\xyFN@\@@twocell@}%
\else\DN@{#1{}}\fi
%%
\expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@
\expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@
\let\twocellPATH=\twocell@path
\def\aftertwoCELL{\twocell@DONE}\next@}
\xydef@\@@twocell@{\ifx\next\bgroup\DN@##1]{\the\toks@{##1}}%
\else\DN@##1]{\the\toks@##1}\fi\next@}
%% \DN@{\twocell}%
%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@twocell}
%% \DN@{\uppertwocell}%
%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@uppertwocell}
%% \DN@{\lowertwocell}%
%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@lowertwocell}
%% \DN@{\compositemap}%
%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@compositemap}
\xydef@\twocell@DONE{%
\edef\tmp@{\egroup \X@min=\the\X@min \X@max=\the\X@max
\Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@
\L@c=\X@c \advance\L@c-\X@min \R@c=\X@max \advance\R@c-\X@c
\D@c=\Y@c \advance\D@c-\Y@min \U@c=\Y@max \advance\U@c-\Y@c
\ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@
\computeLeftUpness@
\setboxz@h{\kern-\X@p \raise-\Y@c\boxz@ }%
\dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c
\Edge@c={\rectangleEdge}\Invisible@false \Hidden@false
\edef\Drop@@{\noexpand\drop@Twocell
\noexpand\def\noexpand\Leftness@{\Leftness@}%
\noexpand\def\noexpand\Upness@{\Upness@}}%
\edef\Connect@@{\noexpand\connect@Twocell
\noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi
\noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi
\noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi
\noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi }}%
\xydef@\drop@Twocell{\boxz@ }
\xydef@\connect@Twocell{%
\setboxz@h{\kern\X@p \raise\Y@c\box\lastobjectbox@ }%
\wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \Drop@@ }
\xywarnifdefined\@mod@
\xywarnifdefined\Arrowtok@
\xydef@\twocell@@#1#2#3#4#5#6#7#8#9!!!{%
\def\@mod@{@}\DN@{#9}%
\ifx #9!\def\Arrowtok@{@}\else\ifx #9A\def\Arrowtok@{^}%
\else\ifx #9V\def\Arrowtok@{_}\else\ifx #9H\def\Arrowtok@{=}%
\else\def\@mod@{\relax}%
\ifx #5/\def\Arrowtok@{@}\else\ifx #5b\def\Arrowtok@{@}%
\else\ifx #5B\def\Arrowtok@{@}\else\ifx #5@\def\Arrowtok@{@}%
\else\def\Arrowtok@{#9}%
\fi\fi\fi\fi\fi\fi\fi\fi
\addEQ@\ifx #9\def\Arrowtok@{=}\fi
\DN@{\omit}\ifx\next@\Arrowtok@\def\Arrowtok@{}\else
\edef\Arrowtok@{\codeof\Arrowtok@}\fi
\save@ \idfromc@{@c}\swap@\idfromc@{@p}\swap@
\cfromid@{@c}\no@@
\ifdim \X@c<\X@p \X@min=\X@c \X@max=\X@p \else \X@min=\X@p \X@max=\X@c \fi
\ifdim \Y@c<\Y@p \Y@min=\Y@c \Y@max=\Y@p \else \Y@min=\Y@p \Y@max=\Y@c \fi
\Calong@@{.5}\idfromc@{@m}\idfromc@{@m1}\idfromc@{@m2}%
\ifx #5t\relax
\enter@{\cplusthec@\pfromthep@}%
\enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@ \xydashl@
\DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
\ifdim\dimen@=\z@ \DN@{\vfromslide@i{\xydashl@}@}\relax
\else\DN@{\vfromslide@i{#1\xydashl@}@}\fi \next@
\czeroEdge@ \leave@ \no@@ \drop@{+}{}\idfromc@{@m1}%
\DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
\else
\DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
\ifdim\dimen@=\z@ \enter@{\cplusthec@\pfromthep@}%
\enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@\xydashl@
\vfromslide@i{\xydashl@}@\czeroEdge@ \leave@ \idfromc@{@m1}%
\cfromid@{@p}\swap@\cfromid@{@c}%
\DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
\else \DN@{\enter@\cplusthec@
\enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@ \xydashl@
\vfromslide@i{#1\xydashl@}@\czeroEdge@ \leave@
\idfromc@{@m1}\cfromid@{@p}\swap@\cfromid@{@c}%
\edef\next@{\codeof\ucurveObject@}%
\ifx\next@\empty\DN@{\connect@\crv{"@m1"}}%
\else
\DNii@####1{\connect@\crv{####1}}\expandafter\DN@\expandafter{%
\expandafter\nextii@\expandafter{\ucurveObject@"@m1"}}%
\fi \next@ }%
%% \ifx\next@\empty\def\ucurveObject@{.}\fi
%% \enter@\cfromthec@\sinit@\cfromid@{@m1}\senter@\leave@
%% \expandafter\connect@\expandafter\crvs\expandafter{\ucurveObject@}%
%% \sinit@\sleave@ }%
\fi
\fi \next@
\DN@{#1}\ifx\next@\empty\relax\else
\if\@mod@ @\relax
\enter@\pfromthep@ \Creset@@
\ifx #5t\relax
\PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}%
\else \def\next@{\crvreset@}%
\ifx\next@\Creset@@
\gettwocelledges@ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
\else \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}\fi
\fi
\expandafter\Calong@@\PLACEf@ \czeroEdge@ \leave@
\edef\tmp@{\codeof\modmapobject@}%
\ifx\tmp@\empty \DN@{\drop@{\dir}{|}}%
\else \DNii@##1##{\drop@{##1}}%
\DN@{\expandafter\nextii@\modmapobject@{}}%
\fi \next@
\fi\fi
\DN@{#6}\ifx\next@\empty\DN@{\relax}\else
\DNii@{{}}\ifx\next@\nextii@\DN@{\relax}\else
\ifx @#3\relax\DN@{\relax}\else
\DN@{\enter@\pfromthep@ \Creset@@
\Calong@@{.5}\czeroEdge@ \leave@
\enter@\cplusthec@
\enter@\DirectionfromtheDirection@\begingroup
\DN@{#1}\ifx\next@\empty\dimen@\z@\else\dimen@=#1\p@\fi
\ifdim\dimen@<\z@ \belowDirection@ \xydashl@
\else \aboveDirection@ \xydashl@ \fi
\dimen@=#3\p@ \if\@mod@ @\relax
\advance\dimen@\ifdim\dimen@<\z@-\fi.5\p@\fi
\edef\next@{\expandafter\removePT@\the\dimen@}%
\expandafter\vfromslide@i\expandafter{\next@\xydashl@}@\leave@
\droptwocelllabel@{#6}}%
\fi\fi\fi \next@
\DN@{#1}\ifx\next@\empty\relax\else
\ifx #5b\relax
\enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
\Calong@@{0}\czeroEdge@ \leave@
\edef\next@{\codeof\twocelltail@}%
\ifx\next@\empty \DN@{\dir{>}}%
\ifx\next@\twocellhead@\drop@{\dir}{<}%
\else
\reverseDirection@ \DNii@##1##{\drop@{##1}}%
\expandafter\nextii@\twocellhead@{}\reverseDirection@
\fi
\else
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
\fi
\else\ifx #5@\relax
\else
\enter@\pfromthep@ \Creset@@ \PLACEedgec@
\Calong@@{1}\czeroEdge@ \leave@
\edef\next@{\codeof\twocellhead@}%
\ifx\next@\empty\drop@{\dir}{>}%
\else
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
\fi
\ifx #5B\relax
\enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
\Calong@@{0}\czeroEdge@ \leave@
\edef\next@{\codeof\twocelltail@}%
\ifx\next@\empty \DN@{\dir{>}}%
\ifx\next@\twocellhead@\drop@{\dir}{<}%
\else
\reverseDirection@\DNii@##1##{\drop@{##1}}%
\expandafter\nextii@\twocellhead@{}\reverseDirection@
\fi
\else
\DNii@##1##{\drop@{##1}}\expandafter\drop\twocelltail@{}%
\fi
\else\ifx #5/\relax
\else \edef\next@{\codeof\twocelltail@}%
\ifx\next@\empty\relax\else
\enter@\pfromthep@ \Creset@@ \PLACEedgep@
\Calong@@{0}\czeroEdge@ \leave@
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
\fi\fi\fi
\fi\fi\fi
\cfromid@{@p}\swap@\cfromid@{@c}\no@@ \cfromid@{@m}%
\ifx #5t\relax
\idfromc@{@m2}\cfromid@{@m1}\swap@ \cfromid@{@c}\no@@
\DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
\else\ifx #5o\relax
\idfromc@{@m2}\DN@{}%
\else
\DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
\ifdim\dimen@=\z@
\enter@{\cplusthec@\pfromthep@}%
\enter@\DirectionfromtheDirection@ \begingroup \belowDirection@\xydashl@
\vfromslide@i{\xydashl@}@\czeroEdge@ \leave@ \idfromc@{@m2}%
\DN@{\cfromid@{@p}\swap@\cfromid@{@c}\no@@}%
\else \DN@{\enter@\cplusthec@
\enter@\DirectionfromtheDirection@ \begingroup \belowDirection@ \xydashl@
\vfromslide@i{#1\xydashl@}@\czeroEdge@ \leave@
\idfromc@{@m2}\cfromid@{@p}\swap@\cfromid@{@c}%
\edef\next@{\codeof\dcurveObject@}%
\ifx\next@\empty\DN@{\connect@\crv{"@m2"}}%
\else
\DNii@####1{\connect@\crv{####1}}\expandafter\DN@\expandafter{%
\expandafter\nextii@\expandafter{\dcurveObject@"@m2"}}%
\fi \next@ }\fi
%% \enter@\cfromthec@\sinit@\cfromid@{@m2}\senter@\leave@
%% \expandafter\connect@\expandafter\crvs\expandafter{\dcurveObject@}%
%% \sinit@\sleave@
%% }\fi
\fi\fi \next@
\DN@{#1}\ifx\next@\empty\relax\else \ifx #5o\relax\else
\if\@mod@ @\DN@{\enter@\pfromthep@ \Creset@@
\ifx #5t\relax
\PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}%
\else \def\next@{\crvreset@}%
\ifx\next@\Creset@@
\gettwocelledges@ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
\else \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}\fi
\fi
\expandafter\Calong@@\PLACEf@ \czeroEdge@ \leave@
\edef\tmp@{\codeof\modmapobject@}\ifx\tmp@\empty\DN@{\drop@{\dir}{|}}%
\else \DNii@####1####{\drop@{####1}}%
\DN@{\expandafter\nextii@\modmapobject@{}}\fi
\next@ }\else\DN@{\relax}\fi
\next@ \fi\fi
\DN@{#7}\ifx\next@\empty\DN@{\relax}\else
\DNii@{{}}\ifx\next@\nextii@\DN@{\relax}\else
\ifx @#4\relax\DN@{\relax}\else
\DN@{\enter@\pfromthep@ \Creset@@
\Calong@@{.5}\czeroEdge@ \leave@
\enter@\cplusthec@
\enter@\DirectionfromtheDirection@ \begingroup
\DN@{#1}\ifx\next@\empty\dimen@\z@ \else\dimen@=#1\p@\fi
\ifx #5t\relax \ifdim\dimen@<\z@ \belowDirection@ \xydashl@
\else \aboveDirection@ \xydashl@ \fi
\else \ifdim\dimen@<\z@ \aboveDirection@ \xydashl@
\else \belowDirection@ \xydashl@ \fi
\fi \dimen@=#4\p@ \if\@mod@ @\relax
\advance\dimen@\ifdim\dimen@<\z@-\fi.5\p@\fi
\edef\next@{\expandafter\removePT@\the\dimen@}%
\expandafter\vfromslide@i\expandafter{\next@\xydashl@}@\leave@
\droptwocelllabel@{#7}}%
\fi\fi\fi \next@
\DN@{#1}\ifx\next@\empty\relax\else
\ifx #5o\relax
\else\ifx #5b\relax
\enter@ {\pfromthep@ }\Creset@@ \PLACEedgec@
\Calong@@{1}\czeroEdge@ \leave@
\edef\next@{\codeof\twocelltail@}%
\ifx\next@\empty \DN@{\dir{>}}%
\ifx\next@\twocellhead@\drop@{\dir}{>}%
\else
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
\fi
\else
\DNii@##1##{\drop@{##1}}\expandafter\drop\twocelltail@{}%
\fi
\else\ifx #5/\relax
\enter@{\pfromthep@}\Creset@@ \PLACEedgep@
\Calong@@{0}\czeroEdge@ \leave@
\edef\next@{\codeof\twocelltail@}%
\ifx\next@\empty \DN@{\dir{>}}%
\ifx\next@\twocellhead@\drop@{\dir}{<}%
\else
\reverseDirection@\DNii@##1##{\drop@{##1}}%
\expandafter\nextii@\twocellhead@{}\reverseDirection@
\fi
\else
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
\fi
\else\ifx #5@\relax
\else
\enter@\pfromthep@ \Creset@@ \PLACEedgec@
\Calong@@{1}\czeroEdge@ \leave@
\edef\next@{\codeof\twocellhead@}%
\ifx\next@\empty\drop@{\dir}{>}%
\else
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
\fi
\ifx #5B\relax
\enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
\Calong@@{0}\czeroEdge@ \leave@
\edef\next@{\codeof\twocelltail@}%
\ifx\next@\empty\DN@{\dir{>}}%
\ifx\next@\twocellhead@\drop@{\dir}{<}%
\else
\reverseDirection@\DNii@##1##{\drop@{##1}}%
\expandafter\nextii@\twocellhead@{}\reverseDirection@
\fi
\else
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
\fi
\else
\edef\next@{\codeof\twocelltail@}%
\ifx\next@\empty\relax\else
\enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
\Calong@@{0}\czeroEdge@ \leave@
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
\fi\fi
\fi\fi\fi
\fi\fi
\DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
\ifdim\dimen@<\z@ \cfromid@{@m2}\swap@\cfromid@{@m1}%
\else \cfromid@{@m1}\swap@\cfromid@{@m2}%
\fi \no@@ \cfromid@{@m}%
\ifx\Arrowtok@\empty
\else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
\enter@{\pfromthep@ \cplusthec@}\dimen@=#2\xydashl@
\enter@\DirectionfromtheDirection@ \begingroup
\expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
\leave@ \idfromc@{@m}%
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\Arrowobject@{}%
\else\DN@{^}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
\DN@{_}\edef\Arrowtok@{\codeof\next@}%
\enter@{\pfromthep@ \cplusthec@}\dimen@=#2\xydashl@
\enter@\DirectionfromtheDirection@ \begingroup
\expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
\leave@ \idfromc@{@m}\reverseDirection@
\DNii@##1##{\drop@{##1}}\expandafter\nextii@\Arrowobject@{}%
\else \DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
\enter@{\pfromthep@ \cplusthec@}%
\dimen@=#2\xydashl@ \advance\dimen@\xydashl@
\enter@\DirectionfromtheDirection@ \begingroup
\expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
\leave@ \idfromc@{@m2}%
\cfromid@{@m}%
\enter@{\pfromthep@ \cplusthec@}%
\dimen@=#2\xydashl@ \advance\dimen@-\xydashl@
\enter@\DirectionfromtheDirection@ \begingroup
\expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
\leave@ \idfromc@{@m1}%
\cfromid@{@m2}\swap@\cfromid@{@m1}\connect@{\dir 2}{-}%
\fi\fi\fi\fi
\DN@{#8}\ifx\next@\empty\DN@{}\else\DN@{%
\ifx\Arrowtok@\empty
\Calong@@{.5}%
\else\DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
\Calong@@{.5}%
\else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
\cfromid@{@m}%
\fi\fi\fi
\enter@\cplusthec@
\enter@\DirectionfromtheDirection@ \begingroup \aboveDirection@\xydashl@
\ifx\Arrowtok@\empty
\def\tmp@{0pt}%
\else\DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
\def\tmp@{\xydashl@}%
\else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
\def\tmp@{1.2\xydashl@}%
\else\def\tmp@{0pt}%
\fi\fi\fi
\expandafter\vfromslide@i\expandafter{\tmp@}@\czeroEdge@ \leave@
\droptwocelllabel@{#8}%
}\fi \next@
\leave@ }%
\xydef@\gettwocelledges@{%
\bgroup \the\crvpts@
\edef\next@{\edges@}%
\expandafter\gettwocelledges@@\next@ }
\xydef@\gettwocelledges@@#1;#2,#3;#4,{%
\dimen@=#2\advance\dimen@-#4\relax
\advance\dimen@ 2\p@ \divide\dimen@ by4 \relax
\edef\next@{\egroup\dimen@=\the\dimen@ }\next@}%
\xyendinput
|