From 873660d1a83ece926fe7206288dda9c36b349c1b Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 12 Jan 2006 23:46:03 +0000 Subject: generic 1 git-svn-id: svn://tug.org/texlive/trunk@613 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/generic/xypic/xy.tex | 2689 ++++++++++++++++++++++++++++ 1 file changed, 2689 insertions(+) create mode 100644 Master/texmf-dist/tex/generic/xypic/xy.tex (limited to 'Master/texmf-dist/tex/generic/xypic/xy.tex') diff --git a/Master/texmf-dist/tex/generic/xypic/xy.tex b/Master/texmf-dist/tex/generic/xypic/xy.tex new file mode 100644 index 00000000000..ae6d8085710 --- /dev/null +++ b/Master/texmf-dist/tex/generic/xypic/xy.tex @@ -0,0 +1,2689 @@ +%% xy.tex from $Id: xy.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $ +%% +%% Basic Xy-pictures: Xy-pic bootstrap and kernel macros. +%% Copyright (c) 1991-1999 Kristoffer H. Rose +%% +%% This file is part of the Xy-pic package for graphs and diagrams in TeX. +%% Copyright (c) 1991-1999 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, write to the Free Software Foundation, Inc., +%% 675 Mass Ave, Cambridge, MA 02139, USA. +%% +\ifx\xyloaded\undefined\else\message{not reloaded}\endinput\fi +\let\xyloaded=\relax +\message{Bootstrap\string'ing\string:} +{\catcode96 12\catcode`\#6\catcode`\.12\catcode`\:12\catcode`\'12\catcode`\@11 +\ifx\xywarnifdefined\undefined\else \immediate\write16{}% + \immediate\write16{Xy-pic Warning: \string\xywarnifdefined\space redefined.}% + \immediate\write16{}\fi +\gdef\xywarnifdefined#1{\ifx#1\undefined\else \immediate\write16{}% + \immediate\write16{Xy-pic Warning: `\string#1' redefined.}% + \immediate\write16{}\fi} +\xywarnifdefined\xydef@ \gdef\xydef@#1{\xywarnifdefined#1\gdef#1} +\xywarnifdefined\xylet@ \gdef\xylet@#1{\xywarnifdefined#1\global\let#1} +\xywarnifdefined\xynew@ + \gdef\xynew@#1#2{\xywarnifdefined#2\csname new#1\endcsname#2}} +\message{catcodes\string,} +\xywarnifdefined\xyuncatcodes +\xywarnifdefined\xyreuncatcodes \def\xyreuncatcodes{\edef\xyuncatcodes{% + \catcode92 0 \catcode123 1 \catcode125 2 \catcode37 14 + \catcode 9 \the\catcode 9 \catcode10 \the\catcode10 \catcode12 \the\catcode12 + \catcode35 \the\catcode35 \catcode36 \the\catcode36 \catcode38 \the\catcode38 + \catcode43 \the\catcode43 \catcode45 \the\catcode45 \catcode46 \the\catcode46 + \catcode47 \the\catcode47 + \catcode60 \the\catcode60 \catcode61 \the\catcode61 \catcode62 \the\catcode62 + \catcode64 \the\catcode64 \catcode96 \the\catcode96 + \newlinechar \the\newlinechar \endlinechar \the\endlinechar }} +\xyreuncatcodes +\xywarnifdefined\xycatcodes \def\xycatcodes{% + \catcode 9 10 + \catcode 35 6 \catcode 36 3 \catcode 38 4 + \catcode 43 12 \catcode 45 12 \catcode 46 12 \catcode 47 12 + \catcode 60 12 \catcode 61 12 \catcode 62 12 + \catcode 64 11 \catcode 96 12 } +\xycatcodes +\message{docmode,} +{\catcode`\|0 \xywarnifdefined|DOCMODE +\gdef|DOCMODE#1{\ifx(#1\relax \xycatcodes \expandafter\ignorespaces + \else \skipspecials@ \expandafter\docm@\fi}% +\xywarnifdefined\skipspecials@ +\gdef\skipspecials@{% + \catcode`\\12 \catcode`\{12 \catcode`\}12 \catcode`\#12 \catcode`\%12 + \catcode`\^^L12 \endlinechar`\^^J }% +\catcode`\/=12 \lccode`\/`\\% +\lccode`\D`\D \lccode`\O`\O \lccode`\C`\C \lccode`\M`\M \lccode`\E`\E +\lowercase{% +\xywarnifdefined\docm@ \gdef\docm@{\docm@i}% +\xywarnifdefined\docm@i \gdef\docm@i#1^^J{\docm@ii#1/DOCMODE\docm@iii}% +\xywarnifdefined\docm@ii + \gdef\docm@ii#1/DOCMODE{\def\next@{#1}\futurelet\next\docm@iii}% +\xywarnifdefined\docm@iii \gdef\docm@iii#1\docm@iii{% + \ifx\next\docm@iii \let\next\next@ \docecho@ \let\next@\docm@ + \else\ifx\next@\empty \let\next@\docfinish@ + \else \edef\next@{\noexpand\docm@iv\next@/DOCMODE#1\noexpand\docm@iv}% + \fi\fi \next@}% +\xywarnifdefined\docm@iv + \gdef\docm@iv#1/DOCMODE\docm@iv{\def\next{#1}\docecho@ \docm@}}% +\xywarnifdefined\docecho@ \global\let\docecho@\relax +\xywarnifdefined\docfinish@ \gdef\docfinish@{\xyuncatcodes|DOCMODE\next}} +\xydef@\xydefcsname@#1{\DN@{#1}\DNii@##1{% + \ifx ##1\relax\else \xywarning@{\string`\string##1\string' redefined}\fi + \def##1}% + \expandafter\nextii@\csname\codeof\next@\endcsname} +\xydef@\xyletcsnamecsname@#1#2{\def\1{#1}\def\2{#2}\DN@##1##2{% + \ifx ##1\relax\else \xywarning@{`\string##1\string' redefined}\fi + \let##1=##2}% + \expandafter\expandafter\expandafter\next@ + \expandafter\csname\expandafter\codeof\expandafter\1\expandafter\endcsname + \csname\codeof\2\endcsname} +\xywarnifdefined\codeof +\xywarnifdefined\codeof@ +{\catcode`\:=12 + \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:} + \gdef\codeof@#1:->#2<-:{#2}} +\xywarnifdefined\addAT@ +\xywarnifdefined\addHASH@ +\xywarnifdefined\addDOLL@ +\xywarnifdefined\addAND@ +\xywarnifdefined\addRQ@ +\xywarnifdefined\addPLUS@ +\xywarnifdefined\addDASH@ +\xywarnifdefined\addDOT@ +\xywarnifdefined\addLT@ +\xywarnifdefined\addEQ@ +\xywarnifdefined\addGT@ +\xywarnifdefined\addLQ@ +\xydef@\xymakeADD@#1#2 #3 {\ifnum\catcode#3=6 \def#1##1{##1#2#2}% + \else \def#1##1{##1#2}\fi} +\xydef@\xyrecat@{\xymakeADD@\addAT@} +\xydef@\xyrecat{\xyrecat@} +\xydef@\xyresetcatcodes{\def\xyrecat{\xyrecat@}\xyreuncatcodes + \input xyrecat \relax \xyuncatcodes} +\xyuncatcodes \xyresetcatcodes \xycatcodes +\xydef@\testAND@{{\aftergroup\ifx + \addAND@\ifx\next\addFalse@\else\addTrue@\fi}} +\xydef@\addFalse@{\aftergroup\iffalse} +\xydef@\addTrue@{\aftergroup\iftrue} +\input xyidioms +\xydef@\stripRCS$#1${\stripRCS@#1: @@ @@@} +\xydef@\stripRCS@#1: #2@ #3@@@{% + \ifx @#2\string?\else\ifx :#2\else\stripRCS@@#2\fi\fi} +\xydef@\stripRCS@@#1 #2: @{#1} +\edef\next{\stripRCS$Revision: 3.7 $} +\xylet@\xyversion=\next +\edef\next{\stripRCS$Date: 1999/02/16 15:12:50 $} +\xylet@\xydate=\next +\xydef@\Xygreet@{% + \W@{}% + \W@{ Xy-pic version \xyversion\space<\xydate>}% + \W@{ Copyright (c) 1991-1998 by Kristoffer H. Rose }% + \W@{ Xy-pic is free software: see the User\string's Guide for details.}% + \W@{}} +\Xygreet@ +\expandafter\everyjob\expandafter{\the\everyjob\Xygreet@} +\message{Loading kernel:} +\xydef@\Xy{\leavevmode + \hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}}} +\message{messages;} +\xywarnifdefined\thelineno@ +\ifx\inputlineno\undefined \edef\thelineno@{\string?} +\else \def\thelineno@{\the\inputlineno}\fi +\xydef@\xytracelineno@{ \string[\jobname:\thelineno@\string]} +\xydef@\xywarning@#1{{\newlinechar=10 + \W@{}\W@{Xy-pic Warning: #1\xytracelineno@.}\W@{}}} +\xydef@\xyerror@#1#2{\if\inxy@\xy@{ERROR #1}{}\fi + {\def\2{#2}\newlinechar=10 + \ifx\2\empty \errhelp{See the Xy-pic manual for further information.}% + \else \errhelp{#2}\fi + \errmessage{Xy-pic error: #1}}} +\xydef@\xybug@#1{{\newlinechar=10 + \errhelp{This is a bug in Xy-pic and should not happen!^^J% +If it did then please send a bug report with the offending Xy-pic code^^J% +to the author of Xy-pic, krisrose@ens-lyon.fr.}% + \errmessage{Xy-pic BUG: #1 -- notify krisrose@ens-lyon.fr.}}} +\message{fonts;} +\xydef@\xyfont@#1{\ifx#1\undefined \DN@{\global\font#1}\expandafter\next@ + \else \xywarning@{Using previously loaded \string#1\space font}\fi} +\xyfont@\xydashfont=xydash10 +\xydef@\xydashl@{\fontdimen6\xydashfont} +\xydef@\xydashh@{\fontdimen5\xydashfont} +\xydef@\xydashw@{\fontdimen8\xydashfont} +\xyfont@\xyatipfont=xyatip10 +\xyfont@\xybtipfont=xybtip10 +\xyfont@\xybsqlfont=xybsql10 +\xydef@\xybsqll@{\fontdimen6\xybsqlfont} +\xydef@\xybsqlh@{\fontdimen5\xybsqlfont} +\xydef@\xybsqlw@{\fontdimen8\xybsqlfont} +\xyfont@\xycircfont=xycirc10 +\message{allocations:} +\message{state,} +\xynew@{dimen}\X@c +\xynew@{dimen}\Y@c +\xynew@{dimen}\U@c +\xynew@{dimen}\D@c +\xynew@{dimen}\L@c +\xynew@{dimen}\R@c +\xynew@{toks}\Edge@c +\xynew@{dimen}\X@p +\xynew@{dimen}\Y@p +\xynew@{dimen}\U@p +\xynew@{dimen}\D@p +\xynew@{dimen}\L@p +\xynew@{dimen}\R@p +\xynew@{toks}\Edge@p +\xynew@{dimen}\X@origin \X@origin=\z@ +\xynew@{dimen}\Y@origin \X@origin=\z@ +\xynew@{dimen}\X@xbase \X@xbase=1mm +\xynew@{dimen}\Y@xbase \Y@xbase=\z@ +\xynew@{dimen}\X@ybase \X@ybase=\z@ +\xynew@{dimen}\Y@ybase \Y@ybase=1mm +\xynew@{dimen}\X@min +\xynew@{dimen}\Y@min +\xynew@{dimen}\X@max +\xynew@{dimen}\Y@max +\xynew@{box}\lastobjectbox@ +\xynew@{box}\zerodotbox@ +\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@ + \kern-\dimen@ \vrule width\xydashw@ height\dimen@ depth\dimen@} +\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@ +\xynew@{dimen}\almostz@ \almostz@=50sp +\xydef@\zz@#1{\ifdim#1<\z@-\fi#1<\almostz@\relax} +\xynew@{if}\iftmp@ +\message{direction,} +\xynew@{dimen}\d@X +\xynew@{dimen}\d@Y +\xydef@\sd@X{} +\xydef@\sd@Y{} +\xynew@{count}\K@ \K@=1024 +\xynew@{count}\KK@ \KK@=32 +\xynew@{count}\Direction +\xynew@{dimen}\K@dXdY +\xynew@{dimen}\K@dYdX +\xydef@\cosDirection{} +\xydef@\sinDirection{} +\xywarnifdefined\DirectionChar +\xywarnifdefined\SemiDirectionChar +\xynew@{read}\xyread@ +\xynew@{write}\xywrite@ +\xynew@{count}\csp@ +\xynew@{dimen}\quotPTK@ +\message{utility macros;} +\xydef@\addtotoks@#1{\toks@=\expandafter{\the\toks@#1}} +\xydef@\xyinputorelse@#1#2{% + \expandafter\let\expandafter\next@\csname#1loaded\endcsname + \ifx\next@\empty \else + \DN@{\xyinputorelse@@{#1}{\xyinputorelse@@{#1.doc}{#2}}}% + \fi \next@} +\xydef@\xyinputorelse@@#1#2{\openin\xyread@=#1 + \ifeof\xyread@ \DN@{#2}\else \DN@{\closein\xyread@\input#1 }\fi \next@} +\global\csp@=\z@ +\xydef@\enter@#1{\global\advance\csp@\@ne + \expandafter\xdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces} +\xydef@\nter@#1{\global\advance\csp@\@ne + \expandafter\gdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces} +\xydef@\dontleave@{\csname cs@\number\csp@\endcsname} +\xydef@\unenter@{\global\advance\csp@\m@ne} +\xydef@\leave@{\expandafter\unenter@\csname cs@\number\csp@\endcsname} +\quotPTK@=\p@ \divide\quotPTK@\K@ +\xylet@\quotsign@@=\empty +\xywarnifdefined\removePT@ +{\catcode`p=12 \catcode`t=12 \gdef\removePT@#1pt{#1}} +\xydef@\quotient@#1#2#3{\A@=#2\relax \B@=#3\relax + \ifdim\A@<\z@\def\quotsign@@{-}\else\def\quotsign@@{+}\fi + \ifdim\quotsign@@\A@<15pt \multiply\A@\K@ + \else\ifdim\quotsign@@\A@<511pt \multiply\A@\KK@ + \advance\B@\ifdim\B@<\z@-\fi 16sp \divide\B@\KK@ + \else + \advance\B@\ifdim\B@<\z@-\fi 512sp \divide\B@\K@ + \fi\fi + \ifdim\ifdim\B@<\z@-\fi\B@<\quotPTK@ \xywarning@{division overflow}% + \else \advance\A@.5\B@ \divide\A@\B@ \fi + \multiply\A@\quotPTK@ \edef#1{\expandafter\removePT@\the\A@}} +\xydef@\quotient@@#1#2#3{\A@=#2\relax \B@=#3\relax \multiply\A@\KK@ + \advance\B@\ifdim\B@<\z@-\fi 128sp \divide\B@\KK@ \divide\B@ 8 + \ifdim\B@=\z@\else \advance\A@.5\B@ \divide\A@\B@ \fi + \B@=.125\quotPTK@ \multiply\A@\B@ \edef#1{\expandafter\removePT@\the\A@}} +\xydef@\loop@#1\repeat@{\def\body@{#1}\iterate@}\xylet@\repeat@=\fi +\xydef@\iterate@{\body@\expandafter\iterate@\else\fi} +\xydef@\xyinitial@#1#2{\DN@{#1}% + \xyerror@{command used out of context: \codeof\next@}{}} +\xylet@\xy@=\xyinitial@ +\xylet@\oxy@=\xy@ +\xydef@\change@oxy@#1{\let\oxy@=#1\relax +} +\xydef@\inxy@{T\ifx\xy@\xyinitial@ F\else T\fi} +\xydef@\xyxy@@ix@{\begingroup + \xyuncatcodes\afterassignment\endgroup\global\toks9=} +\xydef@\xy@@{\xy@{}} +\xydef@\plainxy@{\let\xy@=\xyxy@ \change@oxy@\xy@ \let\xy@@ix@=\xyxy@@ix@} +\message{pictures: \string\xy,} +\xydef@\xy{\ifmmode\expandafter\xymath@\else\expandafter\xynomath@\fi} +\xydef@\xymath@{\hbox\bgroup \dimen@=\the\fontdimen22\textfont\tw@ \xyinside@} +\xydef@\xynomath@{\hbox\bgroup \dimen@=\z@ \xyinside@} +\xydef@\xyinside@{% + \saveXyStyle@ \aftergroup\xycheck@end + \setboxz@h\bgroup + \plainxy@ + \X@c=\z@ \Y@c=\z@ \czeroEdge@ + \X@p=\z@ \Y@p=\z@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}% + \X@min=\hsize \X@max=-\hsize \Y@min=\hsize \Y@max=-\hsize + \mathsurround=\z@ + \expandafter\POS\everyxy@@} +\xydef@\czeroEdge@{\U@c=\z@ \D@c=\U@c \L@c=\U@c \R@c=\U@c \Edge@c={\zeroEdge}} +\xydef@\xyxy@#1#2{#2} +\xywarnifdefined\everyxy +\expandafter\def\addEQ@\everyxy#1{\def\everyxy@@{#1}\ignorespaces} +\xylet@\everyxy@@=\empty +\xydef@\endxy{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi + \relax + \dimen@=\Y@max \advance\dimen@-\Y@min + \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi + \dimen@=\X@max \advance\dimen@-\X@min + \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi + \edef\tmp@{\egroup + \setboxz@h{\kern-\the\X@min\boxz@}% + \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@ + \noexpand\maybeunraise@ \raise\dimen@\boxz@ + \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end + \U@c=\the\Y@max \D@c=-\the\Y@min \L@c=-\the\X@min \R@c=\the\X@max}\tmp@} +\xydef@\maybeunraise@{\if\inxy@\else \dimen@ii=\dp\z@ + \ifdim\dimen@ii<\z@ \advance\dimen@\dimen@ii \fi\fi} +\xydef@\xycheck@end{\xyFN@\xycheck@end@} +\xydef@\xycheck@end@{\ifx\next\xy@end\DN@\xy@end{}\else\DN@{\xy@end}\fi\next@} +\xydef@\xy@end{% + \xyerror@{An \string\xy\space environment is not closed correctly.}% + {I expected \string\endxy. You probably have an umatched {} grouping.}} +\message{positions,} +\xydef@\POS{\afterPOS{}} +\xydef@\afterPOS#1{% + \DN@##1{\def\afterPOS@{\def\afterPOS@{##1}#1}}% + \expandafter\next@\expandafter{\afterPOS@}% + \afterCOORD{\xyFN@\POS@}} +\xylet@\afterPOS@=\empty +\xydef@\afterCOORD#1{% + \DN@##1{\def\afterCOORD@{\def\afterCOORD@{##1}#1}}% + \expandafter\next@\expandafter{\afterCOORD@}% + \afterVECTORorEMPTY{\xy@@\czeroEdge@ \afterCOORD@}{\xyFN@\COORD@}} +\xylet@\afterCOORD@=\empty +\xydef@\afterVECTORorEMPTY#1#2{% + \DN@##1{\def\afterVECTOR@{\def\afterVECTOR@{##1}% + \ifVECTORempty@\DN@{#2}\else\DN@{#1}\fi \next@}}% + \expandafter\next@\expandafter{\afterVECTOR@}% + \xyFN@\VECTOR@} +\xynew@{if}\ifVECTORempty@ +\xylet@\afterVECTOR@=\empty +\xydef@\xyVECTOR@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\VECTOR@}% + \else \ifcat A\noexpand\next \let\next@=\VECTOR@letter + \else \let\next@=\VECTOR@other \fi\fi \next@} +\xylet@\VECTOR@=\xyVECTOR@ +\def\notrelaxorelse@#1#2{\ifx#1\relax \expandafter#2\else\expandafter#1\fi} +\xydef@\VECTOR@letter{% + \ifx a\next \expandafter\VECTOR@a \else \expandafter\CORNER@ \fi} +\xydef@\VECTOR@a a(#1){\xy@{a(#1)}{\vfromcartesianangle@{#1}}% + \VECTORempty@false \afterVECTOR@} +\xydef@\CORNER@{% + \xy@{}{\A@=-.5\L@c \advance\A@.5\R@c \B@=-.5\D@c \advance\B@.5\U@c + \let\nextii@=\zeroit@}% + \VECTORempty@true\CORNER@i} +\xydef@\zeroit@#1{#1=\z@} +\xydef@\CORNER@i{% + \ifx D\next \DN@ D{\xy@{D}{\Y@c=-\D@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}% + \else\ifx U\next \DN@ U{\xy@{U}{\Y@c= \U@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}% + \else\ifx L\next \DN@ L{\xy@{L}{\X@c=-\L@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}% + \else\ifx R\next \DN@ R{\xy@{R}{\X@c= \R@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}% + \else\ifx C\next \DN@ C{\xy@{C}{\X@c= \A@ \Y@c= \B@}\CORNER@ii}% + \else\ifx E\next \DN@ E{\xy@{E}{% + \A@=\X@c \B@=\Y@c \the\Edge@c\z@ \advance\X@c-\A@ \advance\Y@c-\B@}% + \CORNER@ii}% + \else\ifx P\next \DN@ P{\xy@{P}{% + \A@=\X@c \B@=\Y@c \the\Edge@c\thr@@ \advance\X@c-\A@ \advance\Y@c-\B@}% + \CORNER@ii}% + \else\ifx (\next + \DN@(##1){\xy@{(##1)}{\X@c=##1\X@c \Y@c=##1\Y@c}\afterVECTOR@}% + \else \let\next@=\afterVECTOR@ + \fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\CORNER@ii{\xy@@{\let\nextii@=\eat@}% + \VECTORempty@false \xyFN@\CORNER@i} +\xydef@\VECTOR@other{% + \addLT@\ifx \next + \addGT@{\addLT@\DN@##1}{\xy@{<##1>}{\vfromabsolute@{##1}}% + \VECTORempty@false\afterVECTOR@}% + \else\ifx (\next + \DN@({\xyFN@\VECTOR@other@open}% + \else\ifx /\next + \DN@/##1/{\xy@@ix@{{##1}}% + \xy@{/##1/}{\expandafter\vfromslide@\the\toks9 }% + \VECTORempty@false\afterVECTOR@}% + \else\ifx 0\next + \DN@ 0{\xy@{0}{\X@c=\z@ \Y@c=\z@}\VECTORempty@false\afterVECTOR@}% + \else + \DN@{\VECTORempty@true\afterVECTOR@}% + \fi\fi\fi\fi \next@} +\xydef@\VECTOR@other@open{% + \ifx *\next \DN@{\VECTORempty@true \xyFN@\afterVECTOR@(}% + \else + \DN@##1){\xy@{(##1)}{\vfromcartesian@{##1}}\VECTORempty@false\afterVECTOR@}% + \fi \next@} +\xydef@\xyCOORD@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\COORD@}% + \else \ifcat A\noexpand\next \let\next@=\xyCOORD@letter + \else \let\next@=\xyCOORD@other \fi\fi \next@} +\xylet@\COORD@=\xyCOORD@ +\xydef@\xyCOORD@letter{% + \ifx c\next + \DN@ c{\xy@{c}{}\afterCOORD@}% + \else\ifx p\next + \DN@ p{\xy@{p}\cfromp@ \afterCOORD@}% + \else\ifx x\next + \DN@ x{\xy@{x}{\R@c=\X@xbase \U@c=\Y@xbase \intersect@}\afterCOORD@}% + \else\ifx y\next + \DN@ y{\xy@{y}{\R@c=\X@ybase \U@c=\Y@ybase \intersect@}\afterCOORD@}% + \else\ifx s\next + \DN@ s##1{\xy@{s{##1}}{\cfroms@{##1}}\afterCOORD@}% + \else \let\next@=\afterCOORD@ \fi\fi\fi\fi\fi \next@} +\xydef@\xyCOORD@other{% + \ifx "\next + \DN@"##1"{\xy@{"##1"}{\cfromid@{##1}}\afterCOORD@}% + \else\ifx \bgroup\next + \DN@##1{\xy@{{##1}}{\enter@{\pfromthep@\basefromthebase@}}% + \silencexy@ \POS##1\relax \unsilencexy@ \xy@@\leave@ \afterCOORD@}% + \else\ifx (\next + \DN@({\xyFN@\xyCOORD@other@open}% + \else \let\next@=\afterCOORD@ \fi\fi\fi \next@} +\xynew@{if}\ifsilentxy@ +\xydef@\silencexy@{% + \ifsilentxy@ \nter@{}% + \else \nter@{\silentxy@false \let\xy@=\unsilent@@xy@} + \silentxy@true \let\unsilent@@xy@=\xy@ \def\xy@##1##2{\unsilent@@xy@{}{##2}}% + \fi} +\xydef@\unsilencexy@{\leave@} +\xydef@\xyCOORD@other@open{% + \ifx *\next + \DN@*##1*){\xy@{(*}{\enter@{\pfromthep@\basefromthebase@}}% + \POS##1\relax \xy@{*)}\leave@ \afterCOORD@}% + \else \DN@{\xyFN@\afterCOORD@(}% + \fi \next@} +\xydef@\xyPOS@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\POS@}% + \else\addPLUS@\ifx \next + \addPLUS@\DN@{\xy@+{\enter@\cplusthec@}% + \afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% + \else\addDASH@\ifx \next + \addDASH@\DN@{\xy@-{\enter@\cplusthec@}% + \afterCOORD{\xy@@{\X@c=-\X@c \Y@c=-\Y@c\leave@}\xyFN@\POS@}}% + \else\ifx !\next + \DN@ !{\xy@!{\enter@\cskewthec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% + \else\addDOT@\ifx \next + \addDOT@\DN@{\xy@.{\enter@\cmergethec@}% + \afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% + \else\ifx ,\next + \DN@ ,{\xy@,{\comma@@}\afterCOORD{\xyFN@\POS@}}% + \else\ifx ;\next + \DN@ ;{\xy@;{\swap@}\afterCOORD{\xyFN@\POS@}}% + \else\ifx :\next + \DN@ :{\xyFN@\POS@colon}% + \else\addEQ@\ifx \next + \addEQ@\DN@{\xyFN@\saveid@}% + \else\ifx *\next + \DN@ *{\xyFN@\POS@star}% + \else \ifx ?\next + \DN@?{\xy@?{}\afterPLACE{\xyFN@\POS@}}% + \else \addAT@\ifx \next + \addAT@\DN@{\xyFN@\STACK@}% + \else + \let\next@=\afterPOS@ + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xylet@\comma@@=\relax +\xylet@\POS@=\xyPOS@ +\xydef@\POS@colon{\DNii@{\afterCOORD{\xyFN@\POS@}}% + \ifx :\next \xy@{::}{\setbase@@\X@c\Y@c}\DN@:{\nextii@}% + \else \xy@:{\setbase@\X@p\Y@p\X@c\Y@c}\let\next@=\nextii@ \fi + \next@} +\xydef@\POS@star{% + \ifx *\next + \DN@*##1##{\nextii@{##1}}% + \DNii@##1##2{\xy@@ix@{{##1}{##2}}% + \xy@{**##1{##2}}{\expandafter\connect@\the\toks9 }\xyFN@\POS@}% + \else + \DN@##1##{\nextii@{##1}}% + \DNii@##1##2{\xy@@ix@{{##1}{##2}}% + \xy@{*##1{##2}}{\expandafter\drop@\the\toks9 }\xyFN@\POS@}% + \fi + \next@} +\xydef@\cfromp@{\X@c=\X@p \Y@c=\Y@p \U@c=\U@p \D@c=\D@p \L@c=\L@p \R@c=\R@p + \Edge@c=\expandafter{\the\Edge@p}} +\xydef@\pfromc@{\X@p=\X@c \Y@p=\Y@c \U@p=\U@c \D@p=\D@c \L@p=\L@c \R@p=\R@c + \Edge@p=\expandafter{\the\Edge@c}} +\xydef@\swapdimen@#1#2{\dimen@=#1\relax #1=#2\relax #2=\dimen@} +\xynew@{toks}\swaptoks@@ +\xydef@\swap@{\swapdimen@\X@c\X@p \swapdimen@\Y@c\Y@p + \swapdimen@\U@c\U@p\swapdimen@\D@c\D@p \swapdimen@\L@c\L@p\swapdimen@\R@c\R@p + \swaptoks@@=\Edge@c \Edge@c=\Edge@p \Edge@p=\swaptoks@@} +\xydef@\vfromabsolute@#1{\vfromabsolute@@#1,@} +\xydef@\vfromabsolute@@#1,#2@{\X@c=#1\relax + \DN@{#2}\ifx\next@\empty \Y@c=\X@c + \else \DN@##1,{\Y@c=##1}\next@#2\relax \fi +} +\xydef@\cfromthec@{\X@c=\the\X@c \Y@c=\the\Y@c + \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c + \Edge@c={\expandafter\noexpand\the\Edge@c}} +\xydef@\cfromthep@{\X@c=\the\X@p \Y@c=\the\Y@p + \U@c=\the\U@p \D@c=\the\D@p \L@c=\the\L@p \R@c=\the\R@p + \Edge@c={\expandafter\noexpand\the\Edge@p}} +\xydef@\pfromthep@{\X@p=\the\X@p \Y@p=\the\Y@p + \U@p=\the\U@p \D@p=\the\D@p \L@p=\the\L@p \R@p=\the\R@p + \Edge@p={\expandafter\noexpand\the\Edge@p}} +\xydef@\pfromthec@{\X@p=\the\X@c \Y@p=\the\Y@c + \U@p=\the\U@c \D@p=\the\D@c \L@p=\the\L@c \R@p=\the\R@c + \Edge@p={\expandafter\noexpand\the\Edge@c}} +\xydef@\cplusthec@{\advance\X@c\the\X@c \advance\Y@c\the\Y@c} +\xydef@\cskewthec@{% + \noexpand\cskew@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}} +\xydef@\cskew@#1#2#3#4#5#6{% + \D@c=#3\advance\D@c \Y@c \ifdim\D@c<\z@ \D@c=\z@ \fi + \U@c=#4\advance\U@c-\Y@c \ifdim\U@c<\z@ \U@c=\z@ \fi + \advance\Y@c#1% + \L@c=#5\advance\L@c \X@c \ifdim\L@c<\z@ \L@c=\z@ \fi + \R@c=#6\advance\R@c-\X@c \ifdim\R@c<\z@ \R@c=\z@ \fi + \advance\X@c#2% + \Edge@c={\rectangleEdge}} +\xydef@\cmergethec@{% + \noexpand\cmerge@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}} +\xydef@\cmerge@#1#2#3#4#5#6{\the\Edge@c4% + \A@=#2\advance\A@-\X@c \B@=#1\advance\B@-\Y@c + \dimen@=#5\advance\L@c \A@ \ifdim\L@c<\dimen@ \L@c=\dimen@ \fi + \dimen@=#6\advance\R@c-\A@ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi + \dimen@=#3\advance\D@c \B@ \ifdim\D@c<\dimen@ \D@c=\dimen@ \fi + \dimen@=#4\advance\U@c-\B@ \ifdim\U@c<\dimen@ \U@c=\dimen@ \fi + \advance\X@c\A@ \advance\Y@c\B@} +\xydef@\halfroottwo{.70710678} +\xydef@\partroottwo{.29289322} +\xydef@\halfrootthree{.8660254} +\xydef@\vfromcartesian@#1{\vfromcartesian@@#1@} +\xydef@\vfromcartesian@@#1,#2@{% + \X@c=\X@origin \advance\X@c#1\X@xbase \advance\X@c#2\X@ybase + \Y@c=\Y@origin \advance\Y@c#1\Y@xbase \advance\Y@c#2\Y@ybase} +\xydef@\setbase@#1#2#3#4{% + \X@origin=#1\relax \Y@origin=#2\relax + \X@xbase=#3\relax \advance\X@xbase-\X@origin + \Y@xbase=#4\relax \advance\Y@xbase-\Y@origin + \X@ybase=-\Y@xbase \Y@ybase=\X@xbase} +\xydef@\setbase@@#1#2{% + \X@ybase=#1\relax \advance\X@ybase-\X@origin + \Y@ybase=#2\relax \advance\Y@ybase-\Y@origin} +\xydef@\basefromthebase@{\X@origin=\the\X@origin \Y@origin=\the\Y@origin + \X@xbase=\the\X@xbase \Y@xbase=\the\Y@xbase + \X@ybase=\the\X@ybase \Y@ybase=\the\Y@ybase} +\xydef@\vfromcartesianangle@#1{\enter@\basefromthebase@ \R@=#1\p@ + \B@=360\p@ + \loop@ \ifdim\R@<\z@ \advance\R@\B@ \repeat@ + \loop@ \ifdim\R@>\B@ \advance\R@-\B@ \repeat@ + \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@ + \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi + \B@=180\p@ + \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@ + \X@xbase=-\X@xbase \Y@xbase=-\Y@xbase \fi + \B@=90\p@ + \ifdim\R@<.5\B@ \let\nextiii@=\literal@ + \else \R@=-\R@ \advance\R@\B@ \def\nextiii@##1,##2@{##2,##1@}\fi + \dimen@=\z@ \DN@{1,0@}% + \dimen@ii=45\p@ \DNii@{.70710678,.70710678@}% + \chooseangleinterval@ + {\chooseangleinterval@ + {\chooseangleinterval@ + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {4.090909}{.99677570,.08023846@}% + {}}% + {6}{.99452190,.10452846@}% + {\chooseangleinterval@ + {}% + {8.181818}{.98982144,.14231484@}% + {}}}% + {10}{.98480775,.17364818@}% + {\chooseangleinterval@ + {}% + {12.857143}{.97492791,.22252093@}% + {}}}% + {15}{.96592583,.25881905@}% + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {16.363636}{.95949297,.28173256@}% + {}}% + {18}{.95105652,.30901699@}% + {\chooseangleinterval@ + {}% + {20}{.93969262,.34202014@}% + {}}}}% + {22.5}{.92387953,.38268343@}% + {\chooseangleinterval@ + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {24.545455}{.90963200,.41541501@}% + {}}% + {25.714286}{.90096887,.43388374@}% + {}}% + {30}{.86602540,.5@}% + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {32.727273}{.84125353,.54064082@}% + {}}% + {36}{.80901699,.58778525@}% + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {38.571429}{.78183148,.62348980@}% + {}}% + {40.909091}{.75574957,.65486073@}% + {\chooseangleinterval@ + {}% + {40}{.76604444,.64278761@}% + {}}}}}% + \A@=\R@ \advance\A@-\dimen@ + \ifdim\ifdim\A@<\z@-\fi\A@<.01\p@ \edef\next@{\expandafter\nextiii@\next@}% + \else \B@=\dimen@ii \advance\B@-\R@ + \ifdim\A@<\B@ \dimen@=\toradians@\A@ + \edef\next@{\next@ \expandafter\removePT@\the\dimen@ @}% + \else \dimen@=-\toradians@\B@ + \edef\next@{\nextii@ \expandafter\removePT@\the\dimen@ @}% + \fi + \expandafter\interpolatepoint@\next@ + \edef\next@{\expandafter\nextiii@\next@}% + \fi + \expandafter\vfromcartesian@@\next@ + \leave@} +\xydef@\chooseangleinterval@#1#2#3#4{% + \B@=#2\p@ \def\next{#3}% + \ifdim\R@<\B@ \dimen@ii=\B@ \let\nextii@=\next #1% + \else \dimen@=\B@ \let\next@=\next \ifdim\B@<\R@ #4\fi\fi} +\xydef@\interpolateinterval@#1,#2@#3,#4@{% + \A@=#1\p@ \dimen@=#3\p@ \advance\dimen@-\A@ \advance\A@\next\dimen@ + \B@=#2\p@ \dimen@=#4\p@ \advance\dimen@-\B@ \advance\B@\next\dimen@ + \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}} +\xydef@\toradians@{0.01745329} +\xydef@\interpolatepoint@#1,#2@#3@{% + \A@=#1\p@ \dimen@ii=#3\A@ \dimen@ii=-.5\dimen@ii \advance\A@#3\dimen@ii + \dimen@=-#2\p@ \advance\A@#3\dimen@ + \B@=#2\p@ \dimen@ii=#3\B@ \dimen@ii=-.5\dimen@ii \advance\B@#3\dimen@ii + \dimen@=#1\p@ \advance\B@#3\dimen@ + \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}} +\xydef@\drop@#1#2{% + \global\setbox\lastobjectbox@=\object#1{#2}% + \ifHidden@ \dimen@=\X@c \advance\dimen@-\L@c \else + \dimen@=\Y@c \advance\dimen@ \U@c \ifdim\Y@max<\dimen@ \Y@max=\dimen@ \fi + \dimen@=\Y@c \advance\dimen@-\D@c \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi + \dimen@=\X@c \advance\dimen@ \R@c \ifdim\X@max<\dimen@ \X@max=\dimen@ \fi + \dimen@=\X@c \advance\dimen@-\L@c \ifdim\dimen@<\X@min \X@min=\dimen@ \fi + \fi + \ifInvisible@\else + \setboxz@h{\kern\dimen@ \raise\Y@c\box\lastobjectbox@}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi} +\xydef@\connect@#1#2{\setupDirection@ \enter@{\cfromthec@}% + \global\setbox\lastobjectbox@=\object#1{#2}\leave@ + \Connect@@} +\xydef@\preconnect@#1#2{\setupDirection@ \enter@{\cfromthec@}% + \global\setbox\lastobjectbox@=\object#1{#2}\leave@ \connectStore@ + \ifInvisible@ \Connect@@ \else \Invisible@true\Connect@@\Invisible@false \fi} +\xynew@{box}\connectobjectbox@@ +\xylet@\connectDrop@@=\empty +\xylet@\connectpreXY@style@=\empty +\xylet@\connectpostXY@style@=\empty +\xylet@\connectRest@@=\empty +\xydef@\connectStore@{% + \global\setbox\connectobjectbox@@=\copy\lastobjectbox@ + \let\connectDrop@@=\Drop@@ + \let\connectpreXY@style@ =\preXY@style@ + \let\connectpostXY@style@=\postXY@style@ + \xdef\connectRest@@{% + \def\noexpand\Upness@{\Upness@}% + \def\noexpand\Leftness@{\Leftness@}% + \ifInvisible@ \noexpand\Invisible@true \else \noexpand\Invisible@false \fi + \ifHidden@ \noexpand\Hidden@true \else \noexpand\Hidden@false \fi}} +\xydef@\connectRestore@{% + \ifvbox\connectobjectbox@@ + \setbox\lastobjectbox@=\copy\voidb@x + \else + \global\setbox\lastobjectbox@=\copy\connectobjectbox@@ + \fi + \let\Drop@@=\connectDrop@@ + \global\let\preXY@style@ =\connectpreXY@style@ + \global\let\postXY@style@=\connectpostXY@style@ + \connectRest@@} +\xydef@\afterPLACE#1{% + \DN@##1{\def\afterPLACE@{\xy@@\leave@ \def\afterPLACE@{##1}#1}}% + \expandafter\next@\expandafter{\afterPLACE@}% + \def\PLACEf@{{.5}}% + \xy@@{\enter@{\pfromthep@}% + \Creset@@ \def\PLACEf@{{.5}}% + \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@}% + \xyFN@\PLACE@} +\xydef@\PLACEf@{} +\xydef@\PLACEedgep@@{} +\xydef@\PLACEedgec@@{} +\xydef@\PLACEedgep@{\Cshavep@@ \def\PLACEedgep@@{\Cslidep@@\jot}} +\xydef@\PLACEedgec@{\Cshavec@@ \def\PLACEedgec@@{\Cslidec@@{-\jot}}} +\xylet@\afterPLACE@=\empty +\xydef@\PLACE@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@}% + \else\addLT@\ifx \next + \addLT@\DN@{\addLT@\xy@{\def\PLACEf@{{0}}\PLACEedgep@@}\xyFN@\PLACE@}% + \else\addGT@\ifx \next + \addGT@\DN@{\addGT@\xy@{\def\PLACEf@{{1}}\PLACEedgec@@}\xyFN@\PLACE@}% + \else\ifx (\next + \DN@(##1){\def\PLACEf@{{##1}}\xy@{(##1)}{\def\PLACEf@{{##1}}}\xyFN@\PLACE@}% + \else\ifx !\next + \DN@!{\xyFN@\PLACE@intercept}% + \else + \DN@{\xy@@{\expandafter\Calong@@\PLACEf@ \czeroEdge@}\PLACE@@}% + \fi\fi\fi\fi\fi \next@} +\xydef@\PLACE@intercept{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@intercept}% + \else\ifx \bgroup\next + \DN@##1{\xy@{!{##1}}{}\PLACE@intercept@{##1}}% + \else\ifx (\next + \DN@(*##1*){\xy@{!(*##1*)}{}\PLACE@intercept@{##1}}% + \else \DN@{\xyerror@{{} expected after ! in }{}}% + \fi\fi\fi \next@} +\xydef@\PLACE@intercept@#1{% + \xy@@{\enter@{\pfromthep@\basefromthebase@}\begingroup}% + \xy@@ix@{#1}\xy@@{\plainxy@ \expandafter\POS\the\toks9\relax + \edef\next@{\endgroup + \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p}% + \next@ \Cintercept@@ \leave@}% + \PLACE@@} +\xydef@\PLACE@@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@@}% + \else\ifx /\next \DN@/##1/{\xy@{/##1/}{\Cslidec@@{##1}}\afterPLACE@}% + \else \let\next@=\afterPLACE@ + \fi\fi \next@} +\xydef@\intersect@{% + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p + \A@=\X@c \advance\A@-\X@origin \B@=\Y@c \advance\B@-\Y@origin + \edef\next@{\expandafter\removePT@\the\R@c}% + \edef\nextii@{\expandafter\removePT@\the\U@c}% + \D@c=\next@\d@Y \advance\D@c-\nextii@\d@X \divide\D@c\KK@ + \L@c=\next@\B@ \advance\L@c-\nextii@\A@ \divide\L@c\KK@ + \ifdim\D@c=\z@\zeroDivide@\else \quotient@\next@\L@c\D@c \fi + \advance\X@c-\next@\d@X \advance\Y@c-\next@\d@Y + \czeroEdge@} +\xydef@\zeroDivide@@{\zeroDivide@message{\intersect@}{treated as 0}\DN@{0}} +\xydef@\zeroDivide@message#1#2{\xywarning@{division by 0 in \string#1, #2}} +\xylet@\zeroDivide@=\zeroDivide@@ +\xydef@\zeroDivideLimit@@{\ifdim\L@c=\z@ \DN@{0}% + \else\ifdim\L@c<\z@\DN@{-\zeroDivide@Limit}% + \else\DN@{\zeroDivide@Limit}\fi\fi + \zeroDivide@message{\intersect@}{replaced by \zeroDivide@Limit}} +\xydef@\zeroDivideLimit@#1{\edef\zeroDivide@Limit{#1}% + \let\zeroDivide@=\zeroDivideLimit@@} +\xylet@\zeroDivideLimit=\zeroDivideLimit@ +\xydef@\vfromslide@#1{\enter@\DirectionfromtheDirection@ \begingroup + \plainxy@\afterDIRECTIONorEMPTY\vfromslide@i\vfromslide@i#1@} +\xydef@\vfromslide@i#1@{\DN@{#1}% + \edef\next{\endgroup + \ifx\next@\empty \dimen@=.5pc \else \dimen@=#1\relax \fi + \X@c=\cosDirection\dimen@ \Y@c=\sinDirection\dimen@}\next + \leave@} +\xydef@\s@bot{-1} +\xydef@\s@top{-1} +\xydef@\cfroms@#1{\tests@{#1}\runs@\outofranges@} +\xydef@\tests@#1#2#3{\DN@{#3}% + \count@=\s@top \advance\count@-#1\relax + \ifnum\count@>\s@bot\relax \ifnum\count@>\s@top\else\DN@{#2}\fi\fi + \next@} +\xydef@\runs@{\csname S@\the\count@\endcsname} +\xydef@\outofranges@{\count@=\s@top \advance\count@-\s@bot + \xyerror@{stack index out of range (should be 0..\the\count@)}{}} +\xydef@\STACK@{% + \addPLUS@\ifx\next + \addPLUS@\DN@{\xy@{@+}{}\afterCOORD{\xy@@\spushc@ \xyFN@\POS@}}% + \else\addDASH@\ifx\next + \addDASH@\DN@{\xy@{@-}{}\afterCOORD{\xy@@\spop@ \xyFN@\POS@}}% + \else \ifx i\next \DN@ i{\xy@{@i}\sinit@ \xyFN@\POS@}% + \else \ifx (\next \DN@ ({\xy@{@(}\senter@ \xyFN@\POS@}% + \else \ifx )\next \DN@ ){\xy@{@)}\sleave@ \xyFN@\POS@}% + \else\addEQ@\ifx\next \addEQ@\DN@{\STACK@load}% + \else\addAT@\ifx\next \addAT@\DN@{\xy@{@@}{}\smap@}% + \else \DN@##1{\xyerror@{illegal stack command ##1}{}\afterCOORD{\xyFN@\POS@}}% + \fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\STACK@load{\xy@{@=}{% + \if\sempty@\else \xywarning@{loading on top of non-empty stack}\sinit@ \fi + \let\comma@@=\spushc@}% + \afterCOORD{\xy@@{\spushc@ \let\comma@@=\relax}\xyFN@\POS@}} +\xydef@\spushc@{% + \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}% + \expandafter\edef\csname S@\s@top\endcsname{\cfromthec@}} +\xydef@\spushid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}% + \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname + \ifx\next@\relax \xyerror@{ \string"\nextii@\string" not defined}{}% + \else + \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}% + \DNii@##1{\expandafter\def\csname S@\s@top\endcsname{##1}}% + \expandafter\nextii@\expandafter{\next@}% + \fi} +\xydef@\idfroms@#1#2{% + \tests@{#2}{\DN@{\idfromxy@{#1}}% + \expandafter\expandafter\expandafter\next@ + \expandafter\expandafter\expandafter{\csname S@\the\count@\endcsname}% + }\outofranges@} +\xydef@\spop@{\count@=\s@top + \ifnum\count@>\s@bot \advance\count@\m@ne \edef\s@top{\the\count@}% + \else \xyerror@{nothing to pop from stack}{}\fi} +\xydef@\sinit@{\edef\s@top{\s@bot}} +\xydef@\senter@{% + \count@=\s@top \advance\count@\@ne + \expandafter\edef\csname S@\the\count@\endcsname{\s@bot}% + \edef\s@bot{\the\count@}\edef\s@top{\the\count@}} +\xydef@\sleave@{% + \ifnum\s@bot=\s@top\else \xywarning@{leaving non-empty stack}\sinit@ \fi + \ifnum\s@bot>\m@ne \edef\s@bot{\csname S@\s@top\endcsname}% + \count@=\s@top \advance\count@\m@ne \edef\s@top{\the\count@}% + \edef\sbot{\the\count@}\fi} +\xydef@\sempty@{\ifnum\s@top=\s@bot TT\else TF\fi} +\xydef@\xytotoks@#1#2{\addtotoks@{#2}} +\xydef@\xytotoks@@toksix@#1{\addtotoks@{\toks9={#1}}} +\xydef@\smap@{% + \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@ + \let\xy@@ix@=\xytotoks@@toksix@ + \afterCOORD{\expandafter\endgroup + \expandafter\smapxy@@\expandafter{\the\toks@}\xyFN@\POS@}} +\xydef@\smapxy@@#1{\xy@@{\edef\smapp@@{\s@bot}\smapxy@i{#1}}} +\xylet@\smapp@@=\empty +\xydef@\smapxy@i#1{% + \ifnum\smapp@@<\s@top + \count@=\smapp@@ \advance\count@\@ne \edef\smapp@@{\the\count@}% + \DN@{\csname S@\smapp@@\endcsname #1\relax \smapxy@i{#1}}% + \else \let\next@=\relax + \fi \next@} +\xydef@\saveid@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\saveid@}% + \else \ifx "\next\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\POS@}% + \else \ifx :\next\DN@:##1"##2"{\xy@{=:"##2"}{\idfrombase@{##2}}\xyFN@\POS@}% + \else\addAT@\ifx\next + \addAT@\DN@"##1"{\xy@{=@"##1"}{\idfromstack@{##1}}\xyFN@\POS@}% + \else \ifx s\next + \DN@ s##1"##2"{\xy@{=s##1"##2"}{\idfroms@{##2}{##1}}\xyFN@\POS@}% + \else\addEQ@\ifx\next \let\saveid@COORD@@=\saveid@COORDii + \addEQ@\DN@{\xyFN@\saveid@COORD}% + \else \let\saveid@COORD@@=\saveid@COORDi \let\next@=\saveid@COORD + \fi\fi\fi\fi\fi\fi \next@} +\xylet@\saveid@COORD@@=\relax +\xydef@\idfromc@#1{\DN@{#1}% + \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@}} +\xydef@\idfrombase@#1{\DN@{#1}% + \expandafter\edef\csname Q@\codeof\next@\endcsname{\basefromthebase@}} +\xydef@\idfromstack@#1{% + \toks@={\if\sempty@\else + \xywarning@{loading on top of non-empty stack}\sinit@ \fi}% + \count@=\s@bot \advance\count@\@ne + \ifnum\count@>\s@top\else + \loop@ + \expandafter\let\expandafter\next@\csname S@\the\count@\endcsname + \expandafter\addtotoks@\expandafter{\next@}% + \ifnum\count@<\s@top \advance\count@\@ne \addtotoks@{\spushc@}\repeat@ + \fi + \DN@{#1}\edef\next@##1{% + \def\expandafter\noexpand\csname Q@\codeof\next@\endcsname{##1}}% + \expandafter\next@\expandafter{\the\toks@}} +\xydef@\saveid@COORD{% + \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@ + \let\xy@@ix@=\xytotoks@@toksix@ + \afterCOORD{\expandafter\saveid@COORDi\expandafter{\the\toks@}}} +\xydef@\saveid@COORDi#1#2"#3"{\endgroup \xy@@{\idfromxy@{#3}{#1}}\xyFN@\POS@} +\xydef@\saveid@COORDii#1#2"#3"{\endgroup \xy@@{\idfromcxy@{#3}{#1}}\xyFN@\POS@} +\xydef@\idfromxy@#1#2{\DN@{#1}% + \expandafter\def\csname Q@\codeof\next@\endcsname{#2}} +\xydef@\idfromcxy@#1#2{\DN@{#1}% + \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@#2}} +\xydef@\cfromid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}% + \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname + \ifx\next@\relax \xyerror@{ \string"\nextii@\string" not defined}{}% + \else \expandafter\next@\fi} +\message{objects,} +\xydef@\OBJECT@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\OBJECT@}% + \else\ifcat A\noexpand\next \let\next@=\OBJECT@letter + \else \let\next@=\OBJECT@other \fi\fi \next@} +\xydef@\OBJECT@letter{% + \ifx i\next \DN@ i{\addtotoks@\Invisible@true \xyFN@\OBJECT@}% + \else\ifx h\next\DN@ h{\addtotoks@\Hidden@true \xyFN@\OBJECT@}% + \else\ifx o\next\DN@ o{\xywarning@{Obsolete o modifier used}\OBJECT@shape{o}}% + \else\ifx x\next\DN@ x{\xywarning@{Obsolete x modifier used}\OBJECT@shape{}}% + \else\ifx @\next\DN@ @##1##{% +\xywarning@{Impossible @ (letter) should not be here!!} + \OBJECT@@{\dir##1}}% + \else \let\next@=\OBJECT@direction + \fi\fi\fi\fi\fi \next@} +\xydef@\OBJECT@other{% + \ifx !\next \DN@!{\OBJECT@shift}% + \else\addPLUS@\ifx \next \DN@{\OBJECT@change}% + \else\addDASH@\ifx \next \DN@{\OBJECT@change}% + \else\addEQ@\ifx \next \DN@{\OBJECT@set}% + \else\ifx [\next + \DN@[##1]{\xy@{[##1]}{\OBJECT@shape{##1}}}% + \else\ifx ^\next \let\next@=\OBJECT@direction + \else\ifx _\next \let\next@=\OBJECT@direction + \else\ifx :\next \let\next@=\OBJECT@direction + \else\ifx ?\next + \DN@ ?{\xywarning@{\string? modifier used}\xyFN@\OBJECT@direction}% + \else\ifx (\next + \let\next@=\OBJECT@direction + \else\addAT@\ifx\next \addAT@\DN@##1##{\OBJECT@@{\dir##1}}% + \else \DN@##1##{\OBJECT@@{##1}}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\prevEdge@@{\zeroEdge} +\xydef@\OBJECT@@#1#2{% + \expandafter\def\expandafter\prevEdge@@\expandafter{\the\Edge@c}% + \expandafter\Edge@c\expandafter{\objectEdge}% + \Invisible@false\Hidden@false + \def\Leftness@{.5}\def\Upness@{.5}% + \gdef\preXY@style@{}\gdef\postXY@style@{}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}% + \DN@{#1}\ifx\next@\empty \DNii@{#2}% + \ifx\nextii@\empty \DN@{\hbox\bgroup\no@}\else \let\next@=\objectbox \fi\fi + \setbox\z@=\next@{#2}\L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c + \D@c=\dp\z@ \advance\D@c\ht\z@ \U@c=\Upness@\D@c \advance\D@c-\U@c + \R@p=\z@ \L@p=\L@c \U@p=\U@c \advance\U@p-\ht\z@ \D@p=-\U@p + \the\toks@\toks@={}\setboxz@h{\kern\R@p \raise\U@p\boxz@}% + \checkZeroEdge@ + \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c \boxz@ + \OBJECT@x} +\xydef@\adjustLR@{% + \ifdim\zz@\wdz@ \L@c=\z@ \R@c=\z@ \dimen@=\Leftness@\p@ + \ifdim\dimen@<\z@ \L@c=\dimen@ \R@c=-\L@c + \else\ifdim\dimen@>\p@ \L@c=\dimen@ \advance\L@c-\p@ \R@c=-\L@c \fi\fi + \else \L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c \fi} +\xydef@\adjustUD@{\dimen@=\ht\z@ \advance\dimen@\dp\z@ + \ifdim\zz@\dimen@ \U@c=\z@ \D@c=\z@ \dimen@=\Upness@\p@ + \ifdim\dimen@<\z@ \U@c=\dimen@ \D@c=-\L@c + \else\ifdim\dimen@>\p@ \U@c=\dimen@ \advance\U@c-\p@ \D@c=-\L@c \fi\fi + \else \D@c=\dimen@ \U@c=\Upness@\dimen@ \advance\D@c-\U@c \fi} +\def\checkZeroEdge@{% + \DN@{}% + \ifdim\zz@\L@c \ifdim\zz@\R@c \ifdim\zz@\U@c \ifdim\zz@\D@c + \DN@{\Edge@c={\zeroEdge}}\fi\fi\fi\fi + \next@} +\xydef@\OBJECT@x{\toks@={\egroup\def\Drop@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}% + \edef\tmp@{\D@c=\the\D@c \U@c=\the\U@c \L@c=\the\L@c \R@c=\the\R@c + \Edge@c={\expandafter\noexpand\the\Edge@c}% + \ifInvisible@\noexpand\Invisible@true\else\noexpand\Invisible@false\fi + \ifHidden@\noexpand\Hidden@true\else\noexpand\Hidden@false\fi + \def\noexpand\Leftness@{\Leftness@}\def\noexpand\Upness@{\Upness@}}% + \expandafter\addtotoks@\expandafter{\tmp@}\the\toks@} +\xynew@{if}\ifInvisible@ +\xynew@{if}\ifHidden@ +\xydef@\Leftness@{} +\xydef@\Upness@{} +\xydef@\Drop@@{\styledboxz@} +\xydef@\Connect@@{} +\xydef@\objectbox#1{\hbox{$\m@th\objectstyle{#1}$}} +\xylet@\objectstyle=\textstyle +\xydef@\object{\hbox\bgroup\resetStyle@\object@} +\xydef@\object@{% + \edef\next@{={\DirectionfromtheDirection@}}\expandafter\toks@\next@ + \plainxy@ \xyFN@\OBJECT@} +\xydef@\composite#1#{\hbox\bgroup\composite@{#1}} +\xydef@\composite@#1#2{% + \DN@{#1}\ifx\next@\empty\else\xywarning@{no variants of + \string\composite\space allowed}\fi + \global\setbox9=\hbox\bgroup + \D@p=-\maxdimen \U@p=-\maxdimen \L@p=-\maxdimen \R@p=-\maxdimen + \xyFN@\composite@i#2@} +\xydef@\composite@i{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@i}% + \else\ifx *\next \DN@ *{\xyFN@\composite@i}% + \else\ifx @\next \DN@ @{\composite@x}% + \xyerror@{ object expected}{}\czeroEdge@ + \else \DN@{\composite@ii}\fi\fi\fi \next@} +\xydef@\composite@ii#1#{\composite@iii{#1}} +\xydef@\composite@iii#1#2{% + \setbox\z@=\object#1{#2}% + \ifInvisible@ \setboxz@h{}\else + \setboxz@h{\kern-\L@c \boxz@}\ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi + \ifHidden@\else + \ifdim\U@p<\U@c \U@p=\U@c \fi \ifdim\D@p<\D@c \D@p=\D@c \fi + \ifdim\R@p<\R@c \R@p=\R@c \fi \ifdim\L@p<\L@c \L@p=\L@c \fi + \fi + \xyFN@\composite@iv} +\xydef@\composite@iv{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@iv}% + \else \ifx @\next \DN@ @{\composite@x}% + \else \let\next@=\composite@i \fi\fi \next@} +\xydef@\composite@x{% + \edef\tmp@{\egroup + \D@c=\the\D@p \U@c=\the\U@p \L@c=\the\L@p \R@c=\the\R@p}\tmp@ + \setboxz@h{\kern\L@c\box9}\ht\z@=\U@c \dp\z@=\D@c + \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ + \Edge@c={\rectangleEdge}\computeLeftUpness@ \boxz@ + \OBJECT@x} +\xydef@\computeLeftUpness@{% + \dimen@=\L@c \advance\dimen@\R@c + \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}% + \ifdim\zz@\L@c\else + \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}% + \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi + \else \quotient@\Leftness@\L@c\dimen@ \fi + \dimen@=\U@c \advance\dimen@\D@c + \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}% + \ifdim\zz@\U@c\else + \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}% + \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi + \else \quotient@\Upness@\U@c\dimen@ \fi} +\xydef@\xybox#1{\xy#1\endxy \Edge@c={\rectangleEdge}\computeLeftUpness@} +\xydef@\OBJECT@shift{% + \let\xy@=\xytotoks@ \afterVECTORorEMPTY + {\OBJECT@shift@}% + {\addtotoks@{\X@c=-\L@c \advance\X@c\R@p \advance\X@c\L@p \Y@c=\U@p}% + \OBJECT@shift@}} +\xydef@\OBJECT@shift@{% + \addtotoks@{\advance\U@p-\Y@c + \advance\L@c\X@c \advance\R@c-\X@c \advance\D@c\Y@c \advance\U@c-\Y@c + \computeLeftUpness@}% + \let\xy@=\oxy@ \xyFN@\OBJECT@} +\xylet@\objectmargin@=\jot +\xylet@\objectwidth@=\z@ +\xylet@\objectheight@=\z@ +\xydef@\objectmargin{\afterADDOP{\Addop@@\objectmargin@}} +\xydef@\objectwidth{\afterADDOP{\Addop@@\objectwidth@}} +\xydef@\objectheight{\afterADDOP{\Addop@@\objectheight@}} +\xydef@\OBJECT@change{% + \afterADDOP{% + \addEQ@\ifx \next + \addtotoks@{\X@c=\D@c \advance\X@c\U@c \Y@c=\L@c \advance\Y@c\R@c}% + \else + \addtotoks@{\X@c=\objectmargin@ \advance\X@c\X@c \Y@c=\X@c}% + \fi + \let\xy@=\xytotoks@ + \afterVECTORorEMPTY\OBJECT@change@\OBJECT@change@}} +\xydef@\OBJECT@set{% + \afterADDOP{% + \let\xy@=\xytotoks@ \afterVECTORorEMPTY\OBJECT@change@ + {\addtotoks@{\X@c=\objectwidth@ \Y@c=\objectheight@}\OBJECT@change@}}} +\xydef@\OBJECT@change@{% + \addtotoks@{\advance\R@c\L@c \advance\R@p-\L@c \let\tmp@=\R@c}% + \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\X@c\R@c=\tmp@ + \L@c=\Leftness@\R@c \advance\R@p\L@c \advance\R@c-\L@c}% + \addtotoks@{\advance\D@c\U@c \let\tmp@=\D@c}% + \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\Y@c\D@c=\tmp@ + \U@c=\Upness@\D@c \advance\D@c-\U@c}% + \let\xy@=\oxy@ \xyFN@\OBJECT@} +\xydef@\afterADDOP#1{\def\afterADDOP@{#1}\xyFN@\ADDOP@} +\xylet@\afterADDOP@=\empty +\xydef@\ADDOP@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\ADDOP@}% + \else\addPLUS@\ifx \next \addPLUS@\DN@{\xyFN@\ADDOP@plus}% + \else\addDASH@\ifx \next \addDASH@\DN@{\xyFN@\ADDOP@minus}% + \else\addEQ@\ifx \next + \addEQ@\DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}% + \else + \DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}% + \fi\fi\fi\fi \next@} +\xydef@\ADDOP@plus{% + \addEQ@\ifx \next + \addEQ@\DN@{\def\Addop@@{\Addop@0+<}\afterADDOP@}% + \else + \DN@{\def\Addop@@{\Addop@1+=}\afterADDOP@}% + \fi \next@} +\xydef@\ADDOP@minus{% + \addEQ@\ifx \next + \addEQ@\DN@{\def\Addop@@{\Addop@0+>}\afterADDOP@}% + \else + \DN@{\def\Addop@@{\Addop@1-=}\afterADDOP@}% + \fi \next@} +\xydef@\Addop@#1#2#3#4#5{% + \dimen@=#4\relax \edef#4{\the\dimen@}% + \dimen@=#1\dimen@ \advance\dimen@#2#5\relax + \ifdim\dimen@#3#4\else \edef#4{\the\dimen@}\fi + \ifx\xy@\xyinitial@\else \DN@##1{\xy@@{\edef#4{##1}\checkZeroEdge@}}% + \expandafter\next@\expandafter{#4}\fi} +\xydef@\objectEdge{\rectangleEdge} +\xydefcsname@{shape [r]}{\advance\U@p\D@c \centerobject@ + \ifdim\L@c>\D@c + \advance\R@c\L@c \L@c=.5\U@c \advance\L@c.5\D@c \advance\R@c-\L@c \fi + \advance\U@p-\D@c} +\xydefcsname@{shape [l]}{\advance\U@p\D@c \centerobject@ + \ifdim\L@c>\D@c + \advance\L@c\R@c \R@c=.5\U@c \advance\R@c.5\D@c \advance\L@c-\R@c \fi + \advance\U@p-\D@c} +\xydefcsname@{shape [u]}{\advance\U@p\D@c \centerobject@ + \ifdim\D@c>\L@c + \advance\U@c\D@c \D@c=.5\L@c \advance\D@c.5\R@c \advance\U@c-\D@c \fi + \advance\U@p-\D@c} +\xydefcsname@{shape [d]}{\advance\U@p\D@c \centerobject@ + \ifdim\D@c>\L@c + \advance\D@c\U@c \U@c=.5\L@c \advance\U@c.5\R@c \advance\D@c-\U@c \fi + \advance\U@p-\D@c} +\xydefcsname@{shape [c]}{\advance\U@p\D@c \centerobject@ \advance\U@p-\D@c} +\xydef@\centerobject@{% + \advance\D@c\U@c \D@c=.5\D@c \U@c=\D@c \advance\L@c\R@c \L@c=.5\L@c \R@c=\L@c} +\xydef@\OBJECT@shape#1{\DN@{shape [#1]}% + \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname + \ifx\nextii@\relax\DN@{style [#1]}% + \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname + \ifx\nextii@\relax \DN@{\OBJECT@shapei[#1]}% + \else\DN@{\nextii@\xyFN@\OBJECT@}\fi + \else \expandafter\addtotoks@\expandafter{\nextii@}% + \DN@{\xyFN@\OBJECT@}% + \fi \next@} +\xydefcsname@{shape []}{\the\Edge@c5\relax}% +\xydefcsname@{shape [Outer]}{\the\Edge@c5\relax}% +\xydefcsname@{shape [Inner]}{\the\Edge@c4\relax}% +\xydefcsname@{shape [o]}{\Edge@c={\circleEdge}\the\Edge@c5\relax + \Edge@c={\circleEdge}\def\prevEdge@@{\circleEdge}} +\xydefcsname@{shape [.]}{\czeroEdge@} +\def\OBJECT@shapei[#1#2]{\DN@{shape [#1...]}% + \expandafter\let\expandafter\next\csname\codeof\next@\endcsname + \ifx\next\relax\DN@{*stylechar@#1@}% + \expandafter\let\expandafter\next\csname\codeof\next@\endcsname + \ifx\next\relax\DNii@{shape [#1#2]}% + \xywarning@{illegal [] ignored: \codeof\nextii@\space not defined}% + \DN@{\xyFN@\OBJECT@}% + \else% Delete this: \expandafter\addtotoks@\expandafter{\next{#2}}% + \DN@{\next{#2}\xyFN@\OBJECT@}% + \fi + \else +\expandafter\addtotoks@\expandafter{\next{#2}}\DN@{\next{#2}\xyFN@\OBJECT@}% + \fi \next@} +\xydef@\preXY@style@{} +\xydef@\postXY@style@{} +\xydef@\resetStyle@{\gdef\preXY@style@{}\gdef\postXY@style@{}} +\xynew@{toks}{\styletoks@} +\xydef@\addtostyletoks@#1{% + \expandafter\styletoks@\expandafter{\the\styletoks@#1}} +\xydef@\styledboxz@{% + \xypre@Style@@ + \boxz@ + \xypost@Style@@} +\xydef@\xypre@Style@{\styletoks@={}\saveXyStyle@\preXY@style@ + \expandafter\DN@\expandafter{\the\styletoks@}% + \ifx\next@\empty \DN@{\let\xypre@Style@@=\relax + \let\xypost@Style@@=\relax \xypre@skipStyle@}% + \else + \let\xypre@Style@@=\relax \let\xypost@Style@@=\xypost@Style@ + \DN@{\expandafter\xydoprestyles@\expandafter{\the\styletoks@}}% + \fi \next@ } +\xydef@\xypost@Style@{\styletoks@={}\postXY@style@ + \expandafter\xydopoststyles@\expandafter{\the\styletoks@}% + \let\xypost@Style@@=\relax \let\xypre@Style@@=\xypre@Style@ } +\xydef@\xypre@skipStyle@#1\xypost@Style@@{#1\relax + \let\xypre@Style@@=\xypre@Style@ } +\xydef@\xydoprestyles@@{\literal@} +\xydef@\xydopoststyles@@{\literal@} +\xylet@\xydoprestyles@=\xydoprestyles@@ +\xylet@\xydopoststyles@=\xydopoststyles@@ +\xydef@\modXYstyle@{% + \ifx\xy@style@\empty\resetStyle@\fi \checkXyStyle@ + \expandafter\expandafter\expandafter\DN@ + \expandafter\expandafter\expandafter{\preXYstyle@@}% + \ifx\next@\empty\else\DN@{\modXYstyle@@}\fi \next@ } +\xydef@\modXYstyle@@{% + \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}% + \expandafter\next@\expandafter{\preStyle@@}% + \DN@##1{\expandafter\gdef\expandafter\preXY@style@\expandafter{% + \preXY@style@ ##1}}\expandafter\next@\expandafter{\tmp@}% + \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}% + \expandafter\next@\expandafter{\postStyle@@}% + \DN@##1{\expandafter\gdef\expandafter\postXY@style@\expandafter{% + \tmp@ ##1}}\expandafter\next@\expandafter{\postXY@style@}} +\xydef@\xy@style@{} +\xydef@\checkXyStyle@{\ifx\xy@style@\empty\resetStyle@\fi + \let\xy@style@=\relax} +\xydef@\preStyle@@{} +\xydef@\postStyle@@{} +\xydef@\preXYstyle@@{\relax} +\xydef@\loadxystyle@{% + \let\xypre@Style@@=\xypre@Style@ \def\preXYstyle@@{\preStyle@@}} +\loadxystyle@ +\xydef@\Unloadstyle@{% + \let\xypre@Style@@=\relax \let\xypost@Style@@=\relax + \def\preXYstyle@@{\relax}} +\xydefcsname@{shape [=...]}#1{\checkXyStyle@ \addtotoks@{\xynamestyle@{#1}}} +\xydef@\xynamestyle@#1{\checkXyStyle@ + \expandafter\DNii@\expandafter{\csname shape [#1]\endcsname}% + \expandafter\ifx\nextii@\relax + \else\xywarning@{Redefining style [#1]}\fi + \expandafter\xynamestyle@@\csname shape [#1]\endcsname } +\xydef@\xynamestyle@@#1{% + \expandafter\def\expandafter\tmp@\expandafter{\preXY@style@}% + \DN@##1{\def\tmp@{\checkXyStyle@\gdef\preXY@style@{##1}}}% + \expandafter\next@\expandafter{\preXY@style@}% + \DN@##1{\expandafter\gdef\expandafter#1\expandafter{\tmp@ + \gdef\postXY@style@{##1}}}% + \expandafter\next@\expandafter{\postXY@style@}\DN@{}} +\xydef@\prevXypreStyle@@{} +\xydef@\prevXypostStyle@@{} +\xydef@\saveXyStyle@{\expandafter + \def\expandafter\prevXypreStyle@@\expandafter{\preXY@style@}% + \expandafter\def\expandafter\prevXypostStyle@@\expandafter{% + \postXY@style@}} +\xydef@\recoverXyStyle@{\expandafter + \gdef\expandafter\preXY@style@\expandafter{\prevXypreStyle@@}% + \expandafter\gdef\expandafter\postXY@style@\expandafter{% + \prevXypostStyle@@}} +\xydef@\newxystyle#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{% + \xyundefinedStyle@{#1}{}@@}% + \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi} +\xydef@\xyundefinedStyle@#1#2@@{% + \xywarning@{style #1 not defined, nothing to apply}} +\xydef@\applyFIFOstyle@#1#2#3#4{\bgroup + \styletoks@={\egroup\gdef\preXY@style@}% + \expandafter\toks@\expandafter{\preXY@style@}% + \expandafter\addtotoks@\expandafter{\expandafter#1\expandafter{#2}}% + \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}% + \gdef\postXY@style@}% + \expandafter\toks@\expandafter{\expandafter#3\expandafter{#4}}% + \expandafter\addtotoks@\expandafter{\postXY@style@}% + \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}% + \the\styletoks@ } +\xydef@\applyLIFOstyle@#1#2#3#4{\bgroup + \styletoks@={\egroup\gdef\preXY@style@}% + \expandafter\toks@\expandafter{\expandafter#1\expandafter{#2}}% + \expandafter\addtotoks@\expandafter{\preXY@style@}% + \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}% + \gdef\postXY@style@}% + \expandafter\toks@\expandafter{\postXY@style@}% + \expandafter\addtotoks@\expandafter{\expandafter#3\expandafter{#4}}% + \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}% + \the\styletoks@ } +\xydef@\OBJECT@direction{\afterDIRECTIONorEMPTY{% + \edef\next@{{\DirectionfromtheDirection@}}\expandafter\addtotoks@\next@ + \xyFN@\OBJECT@}% + {\xyFN@\OBJECT@}} +\xydef@\afterDIRECTIONorEMPTY#1#2{% + \DN@##1{\def\afterDIRECTION@{\def\afterDIRECTION@{##1}% + \ifDIRECTIONempty@\DN@{#2}\else\DN@{#1}\fi \next@}}% + \expandafter\next@\expandafter{\afterDIRECTION@}% + \xyFN@\DIRECTION@} +\xylet@\afterDIRECTION@=\empty +\xynew@{if}\ifDIRECTIONempty@ +\xydef@\DIRECTION@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\DIRECTION@}% + \else\ifx v\next \DN@ v{\DIRECTION@v}% + \else\ifx \bgroup\next \let\next@=\DIRECTION@group + \else\ifx (\next \DN@({\xyFN@\DIRECTION@open}% + \else + \DN@{\count@=8 + \afterDIAG{\ifnum\count@=8 \DN@{\DIRECTIONempty@true \xyFN@\DIRECTION@i}% + \else \DN@{\xy@@{\dimen@=\xydashl@}\Directionfromdiag@}\fi \next@}}% + \fi\fi\fi\fi \next@} +\xydef@\DIRECTION@open{% + \ifx *\next \DN@*##1*){\DIRECTION@group{##1}}% + \else \DN@{\xyerror@{(* *) expected}{} \xyFN@\DIRECTION@i}% + \fi \next@} +\def\afterDIAG#1{\def\afterDIAG@{#1}\xyFN@\DIAG@} +\xydef@\DIAG@{% + \ifx d\next \DN@ d{\count@=1 \xyFN@\DIAG@@}% + \else\ifx r\next \DN@ r{\count@=3 \xyFN@\DIAG@@}% + \else\ifx u\next \DN@ u{\count@=5 \xyFN@\DIAG@@}% + \else\ifx l\next \DN@ l{\count@=7 \xyFN@\DIAG@@}% + \else \let\next@=\afterDIAG@ + \fi\fi\fi\fi \next@} +\xydef@\DIAG@@{\ifcase\count@ \or + \DIAG@@@ l0r2\or\or \DIAG@@@ d2u4\or\or \DIAG@@@ r4l6\or\or \DIAG@@@ u6d0% + \else\xybug@{impossible number}\fi + \next@} +\xydef@\DIAG@@@#1#2#3#4{% + \ifx #1\next \count@=#2\DN@#1{\afterDIAG@}% + \else \ifx #3\next \count@=#4\DN@#3{\afterDIAG@}% + \else \let\next@=\afterDIAG@ \fi\fi} +\xydef@\Directionfromdiag@{\ifcase\count@ + \xy@@{\dlDirection@\dimen@}% + \or \xy@@{\dDirection@\dimen@}% + \or \xy@@{\drDirection@\dimen@}% + \or \xy@@{\rDirection@\dimen@}% + \or \xy@@{\urDirection@\dimen@}% + \or \xy@@{\uDirection@\dimen@}% + \or \xy@@{\ulDirection@\dimen@}% + \or \xy@@{\lDirection@\dimen@}% + \or + \else\xybug@{impossible }\fi + \DIRECTIONempty@false \xyFN@\DIRECTION@i} +\xydef@\DIRECTION@v{% + \xy@{v}{\enter@{\cfromthec@ \X@origin=\the\X@origin \Y@origin=\the\Y@origin + \X@p=\the\X@p \Y@p=\the\Y@p}% + \X@origin=\z@ \Y@origin=\z@}% + \afterVECTORorEMPTY + {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}% + {\xy@@\leave@ \xyerror@{ expected after v}{}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}} +\xydef@\DIRECTION@group#1{% + \xy@@{\begingroup}\xy@@ix@{#1}\xy@@{\plainxy@\expandafter\POS\the\toks9\relax + \setupDirection@\edef\next@{\endgroup \DirectionfromtheDirection@}\next@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i} +\xydef@\DIRECTION@i{% + \ifx ^\next \DN@ ^{\xy@^{\aboveDirection@\xydashl@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}% + \else\ifx _\next \DN@ _{\xy@_{\belowDirection@\xydashl@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}% + \else\ifx :\next \DN@ :{% + \xy@{:}{\enter@{\cfromthec@ \basefromthebase@ \X@p=\the\X@p \Y@p=\the\Y@p}% + \X@origin=\z@ \Y@origin=\z@ + \X@xbase=\cosDirection\xydashl@ \Y@xbase=\sinDirection\xydashl@ + \X@ybase=-\Y@xbase \Y@ybase=\X@xbase}% + \afterVECTORorEMPTY + {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}% + {\xy@@\leave@ \xyerror@{ expected after :}{}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}}% + \else + \let\next@=\afterDIRECTION@ + \fi\fi\fi \next@} +\message{decorations;} +\xydef@\drop#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% + \xy@{\drop#1{##1}}{\expandafter\drop@\the\toks9 }\ignorespaces}\next@} +\xydef@\connect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% + \xy@{\connect#1{##1}}{\expandafter\connect@\the\toks9 }\ignorespaces}\next@} +\xydef@\preconnect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% + \xy@{\connect#1{##1}}{\expandafter\preconnect@\the\toks9 }\ignorespaces}\next@} +\xydef@\save{\relax\saveC} +\xydef@\saveC{\xy@\save\save@ \POS} +\xydef@\save@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}} +\xydef@\restore{\xy@\restore\leave@ \ignorespaces} +\xydef@\xyecho{% + \xy@\xyecho{\let\xy@=\xyecho@ \message{\string\xyecho}}\POS} +\xydef@\xyecho@#1#2{{\def\1{#1}\ifx\1\empty\else\message{\codeof\1}\fi}% + \oxy@{#1}{#2}} +\xydef@\xyverbose{% + \xy@\xyverbose{\let\xy@=\xyverbose@ + \W@{Xy: \string\xyverbose\xytracelineno@}}\POS} +\xydef@\xyverbose@#1#2{% + {\def\1{#1}\ifx\1\empty\else\W@{Xy: \codeof\1\xytracelineno@}\fi}% + \oxy@{#1}{#2}} +\xydef@\xytracing{% + \xy@\xytracing{\let\xy@=\xytracing@ + \W@{Xy TRACE: \string\xytracing\xytracelineno@}\xystatus@:}\POS} +\xydef@\xytracing@#1#2{{\def\1{#1}\def\2{#2}% + \W@{Xy TRACE: \codeof\1 {\codeof\2}\xytracelineno@}}\oxy@{#1}{#2}\xystatus@:} +\xydef@\xystatus@#1{\xystatus@cp{#1}% + \W@{#1 d=<\the\d@X,\the\d@Y> + Direction=\the\Direction=\string(\cosDirection,\sinDirection\string)}% + \W@{#1 base=<\the\X@origin,\the\Y@origin>+% + <\the\X@xbase,\the\Y@xbase>x+<\the\X@ybase,\the\Y@ybase>y}% + \W@{#1 min/max=<\the\X@min,\the\Y@min>/<\the\X@max,\the\Y@max> + S=\the\csp@}} +\xydef@\xystatus@cp#1{% + \W@{#1 c=<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c + \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string] + \ifInvisible@ I\fi\ifHidden@ H\fi}% + \W@{#1 p=<\the\X@p,\the\Y@p> \expandafter\string\the\Edge@p + \string[\the\L@p+\the\R@p,\the\D@p+\the\U@p\string]}} +\xydef@\xystatus@c#1{% + \W@{#1<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c + \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string]}} +\xydef@\xyquiet{\xy@\xyquiet{\let\xy@=\oxy@}} +\xydef@\xyignore#1{\xy@\xyignore{\xyignore@{#1}}\ignorespaces} +\xydef@\xyignore@#1{{\let\xy@=\xyeat@ \change@oxy@\xy@ \POS#1\relax}} +\xydef@\xyeat@#1#2{} +\xydef@\xycompile@@{\jobname-} +\xydef@\xycompileno@@{0} +\xydef@\CompilePrefix#1{% + \def\xycompile@@{#1}\xdef\xycompile@@{\codeof\xycompile@@}% + \xdef\xycompileno@@{0}} +\xydef@\xycompile{% + \count@=\xycompileno@@ \advance\count@\@ne + \xdef\xycompileno@@{\ifnum10>\count@ 0\fi \the\count@}% + \edef\next{\noexpand\xycompileto{\xycompile@@\xycompileno@@}}\next} +\xylet@\compilename@@=\empty +\xylet@\xyrecompile@@=\relax +\xydef@\xycompileto#1#2{% + \if\inxy@ \DN@{\xy@@{\nter@{}}}% + \else \DN@{\xy \xy@@{\nter@{\endxy}}}\fi \next@ + \ifxysaving@ \xyerror@{Compilations can not be nested}{}\fi + \DN@{#1}\edef\compilename@@{\codeof\next@}\DNii@{#2}% + \def\xyrecompile@@{recompiling TRUNCATED}% + \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyc}% + {\def\xyrecompile@@{compiling to}}% + \ifx\xyrecompile@@\relax \else \expandafter\xyrecompile@ \fi + \xy@@\leave@ \ignorespaces} +\xydef@\xyrecompile@{% + \message{(\xyrecompile@@\space\string`\compilename@@.xyc\string'}% + \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyc + \immediate\write\xywrite@{% + \string\xycompiled{\compilename@@}% + {\the\year/\the\month/\the\day\string:\the\time\xytracelineno@}% + {Xy-pic \xyversion}\xycomment@}% + \immediate\write\xywrite@{{\codeof\nextii@}\relax}% + {\xysaving@ \expandafter\POS\nextii@ \relax}% + \immediate\write\xywrite@{\string\xyendcompiled}% + \immediate\closeout\xywrite@ \message{done)}% + \expandafter\input\compilename@@.xyc + \outlines@@\writeoutline@\writeoutline@} +\xydef@\xysaving@{\let\xy@=\xysave@ \change@oxy@\xy@ + \let\xy@@ix@=\xysave@@toksix@ \xysaving@true} +\xynew@{if}\ifxysaving@ \xysaving@false +\xydef@\xysave@#1#2{{\DN@{{#1}{#2}}% + \immediate\write\xywrite@{\string\xy@\codeof\next@\xycomment@}}} +\xydef@\xysave@@toksix@#1{{\DN@{{#1}}% + \immediate\write\xywrite@{\string\xy@@ix@\codeof\next@\relax}}} +\xywarnifdefined\xycomment@ +{\catcode`\%=12 \catcode`\(=1 \catcode`\)=2 \gdef\xycomment@(%)} +\xydef@\xycompiled#1#2#3#4{\DN@{#1}\edef\next@{\codeof\next@}% + \ifx\next@\compilename@@\else + \xywarning@{This file does not contain the result of + \string\xycompileto{\compilename@@}{...}^^J% + but of \string\xycompileto{\next@}}\fi + \edef\next{Xy-pic \xyversion}\DN@{#3}\ifx\next\next@ + \DN@{#4}\ifx\next@\nextii@ \xycatcodes \outlines@@\relax\readoutline@ + \else \def\xyrecompile@@{recompiling to}\endinput \fi + \else \def\xyrecompile@@{Xy-pic version change - recompiling}\endinput \fi} +\xydef@\xyendcompiled{\let\xyrecompile@@=\relax \xyuncatcodes\endinput} +\xydef@\CompileFixPoint#1{% + \expandafter\ifx\csname#1FIX@@\endcsname\relax + \expandafter\xdef\csname#1FIX@@\endcsname{\xycompileno@@}% + \else + \xdef\xycompileno@@{\csname#1FIX@@\endcsname}\fi} +\xydef@\outlines@no#1#2{} +\xydef@\outlines@make#1#2{#1} +\xydef@\outlines@only#1#2{#2} +\xylet@\outlines@@=\outlines@no +\xylet@\writeoutline@@=\relax +\xylet@\readoutline@@=\relax +\xydef@\MakeOutlines{\let\outlines@@=\outlines@make} +\xydef@\OnlyOutlines{\xywarning@{Compiled pictures only shown as outlines}% + \let\outlines@@=\outlines@only} +\xydef@\ShowOutlines{\let\readoutline@@=\typesetoutline@} +\xydef@\NoOutlines{\let\outlines@@=\outlines@no} +\xydef@\writeoutline@{% + \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyd + \immediate\write\xywrite@{\xycomment@\space\compilename@@.xyd} + \immediate\write\xywrite@{% + \string\X@min=\the\X@min \string\X@max=\the\X@max + \string\Y@min=\the\Y@min \string\Y@max=\the\Y@max \string\relax}% + \writeoutline@@ + \immediate\closeout\xywrite@} +\xynew@{if}\ifoutlineread@ +\xydef@\readoutline@{\outlineread@true + \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyd}% + {\def\xyrecompile@@{outline missing - recompiling to}\outlineread@false}% + \ifoutlineread@ \readoutline@@ + \writeoutline@\expandafter\xyendcompiled\fi} +\xydef@\typesetoutline@{% + \xy@@{\czeroEdge@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}% + \X@p=\X@min \Y@p=\Y@min \X@c=\X@min \Y@c=\Y@max \connect@\dir{.}% + \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@max \connect@\dir{.}% + \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@min \connect@\dir{.}% + \X@p=\X@c \Y@p=\Y@c \X@c=\X@min \Y@c=\Y@min \connect@\dir{.}}} +\message{kernel objects:} +\message{directionals,} +\xydef@\dir{\hbox\bgroup\xyFN@\dir@i} +\xydef@\dir@i{\ifx *\next \DN@*{\resetStyle@\object@}% + \else \let\next@=\dir@ii \fi \next@} +\xydef@\dir@ii#1#{\dir@{#1}} +\xydef@\dir@#1#2{\DN@{dir#1{#2}}% + \expandafter\let\expandafter\next\csname\codeof\next@\endcsname + \ifx\next\relax \DN@{dir{#2}}% + \expandafter\let\expandafter\next\csname\codeof\next@\endcsname + \ifx\next\relax \DN@{\dir#1{#2}}% + \xyerror@{illegal : \codeof\next@\space not defined}{}% + \let\next=\no@ \fi\fi \next} +\xydefcsname@{dir{}}{\no@} +\xyletcsnamecsname@{dir0{}}{dir{}} +\xyletcsnamecsname@{dir1{}}{dir{}} +\xyletcsnamecsname@{dir^{}}{dir{}} +\xyletcsnamecsname@{dir_{}}{dir{}} +\xyletcsnamecsname@{dir2{}}{dir{}} +\xyletcsnamecsname@{dir3{}}{dir{}} +\xyletcsnamecsname@{dir{ }}{dir{}} +\xydef@\no@{\egroup \czeroEdge@ + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\setbox\z@=\copy\voidb@x}\def\Connect@@{\no@@}} +\xydefcsname@{dir1{-}}{\line@} +\xydefcsname@{dir2{-}}{\line@ \double@\xydashh@} +\xydefcsname@{dir3{-}}{\line@ \triple@\xydashh@} +\xyletcsnamecsname@{dir0{-}}{dir{}} +\xyletcsnamecsname@{dir{-}}{dir1{-}} +\xyletcsnamecsname@{dir{=}}{dir2{-}} +\xydef@\line@{\dimen@=\sd@Y\sinDirection\xydashl@ + \ifnum\SemiDirectionChar<31 \D@c=\z@ \U@c=\dimen@ \DN@{\d@Y<\z@}% + \else\ifnum\SemiDirectionChar<64 \D@c=\dimen@ \U@c=\z@ \DN@{\z@<\d@Y}% + \else\ifnum\SemiDirectionChar<96 \D@c=\dimen@ \U@c=\z@ \DN@{\d@X<\z@}% + \else \D@c=\z@ \U@c=\dimen@ \DN@{\d@X<\z@}\fi\fi\fi + \setboxz@h{\line@@}\ht\z@=\U@c \dp\z@=\D@c + \L@c=\z@ \R@c=\wdz@ + \ifdim\next@ \dimen@=\R@c \R@c=\L@c \L@c=\dimen@ + \dimen@=\U@c \U@c=\D@c \D@c=\dimen@ \advance\dimen@-\U@c + \lower\dimen@\boxz@ + \else \boxz@ \fi + \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c}% + \tmp@ + \Edge@c={\rectangleEdge}% + \ifdim\z@<\U@c \def\Upness@{1}\else \def\Upness@{0}\fi + \ifdim\z@<\L@c \def\Leftness@{1}\else \def\Leftness@{0}\fi + \def\Drop@@{\styledboxz@}\def\Connect@@{\solid@}} +\xydef@\line@@{{\xydashfont\SemiDirectionChar\/}} +\xydef@\solid@{% + \checkXy@rules@\solidhrule@\solidvrule@{\straight@\solidSpread@}} +\xydef@\checkXy@rules@#1#2#3{% + \dimen@=\Y@c \advance\dimen@-\Y@p + \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#1}% + \else \dimen@=\X@c \advance\dimen@-\X@p + \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#2}% + \else \DN@{#3}\fi\fi \next@} +\xydef@\solidSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi} +\xylet@\ifjusthvtest@=\ifdim +\xydef@\NoRules{\let\ifjusthvtest@=\iffalse} +\xydef@\UseRules{\let\ifjusthvtest@=\ifdim} +\xydef@\solidvrule@{\no@@ \solidvrule@typeset \ifHidden@\else\noinsert@\fi + \solidvrule@pre} +\xydef@\solidvrule@pre{% + \def\Cbreak@@{% + \connectRestore@ \swap@\lastbreak@@\swap@ + \solidvrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}% + \def\Clast@@{% + \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@ + \solidvrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}% +} +\xydef@\solidvrule@typeset{% + \ifInvisible@ \let\next@=\relax \else \let\next@=\solidvrule@typeset@ \fi + \checkoverlap@@ \next@} +\xydef@\solidvrule@typeset@{{% + \advance\X@c\X@p \X@c=.5\X@c \X@p=\X@c + \advance\X@c-.5\xydashw@ \advance\X@p.5\xydashw@ + \ifdim\Y@c<\Y@p \advance\Y@c\U@c \advance\Y@p-\D@p + \else \swapdimen@\Y@c\Y@p \advance\Y@c\U@p \advance\Y@p-\D@c \fi + \Droprule@}} +\xydef@\solidhrule@{\no@@ \solidhrule@typeset \ifHidden@\else\noinsert@\fi + \solidhrule@pre} +\xydef@\solidhrule@pre{% + \def\Cbreak@@{% + \connectRestore@ \swap@\lastbreak@@\swap@ + \solidhrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}% + \def\Clast@@{% + \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@ + \solidhrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}% +} +\xydef@\solidhrule@typeset{% + \ifInvisible@ \let\next@=\relax \else \let\next@=\solidhrule@typeset@ \fi + \checkoverlap@@ \next@} +\xydef@\solidhrule@typeset@{{% + \ifdim\X@c<\X@p \advance\X@c\R@c \advance\X@p-\L@p + \else \swapdimen@\X@c\X@p \advance\X@c\R@p \advance\X@p-\L@c \fi + \advance\Y@c\Y@p \Y@c=.5\Y@c \Y@p=\Y@c + \advance\Y@c-.5\xydashw@ \advance\Y@p.5\xydashw@ + \Droprule@}} +\xydef@\Droprule@{\advance\X@p-\X@c + \setboxz@h{\kern\X@c \vrule width\X@p depth-\Y@c height\Y@p}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ \Drop@@} +\xydef@\zerodot{\copy\zerodotbox@} +\xydefcsname@{dir1{.}}{\point@} +\xydefcsname@{dir2{.}}{\point@ \double@\xydashh@} +\xydefcsname@{dir3{.}}{\point@ \triple@\xydashh@} +\xyletcsnamecsname@{dir0{.}}{dir{}} +\xyletcsnamecsname@{dir{.}}{dir1{.}} +\xyletcsnamecsname@{dir{:}}{dir2{.}} +\xydef@\point@{\pointlike@\zerodot\p@} +\xydef@\pointlike@#1#2{% + \setboxz@h{#1}\wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@\egroup + \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@ + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@{#2}}}} +\xydef@\dottedSpread@#1{% + \dimen@=#1\relax \DN@{\A@=2\A@ \B@=2\B@ \dottedSpread@i}% + \A@=\sd@X\cosDirection\dimen@ \B@=\sd@Y\sinDirection\dimen@ + \dimen@=\A@ \advance\dimen@\B@ + \dimen@ii=\sd@X\d@X \advance\dimen@ii\sd@Y\d@Y + \ifdim\dimen@>\dimen@ii \DN@{\count@@=\z@}\fi + \next@} +\xydef@\dottedSpread@i{% + \global\setbox8=\hbox to\A@{\hss + \kern.5\A@\box\lastobjectbox@\kern.5\A@\hss}\dp8=.5\B@ \ht8=.5\B@ + \advance\d@X\sd@X\A@ \advance\d@Y\sd@Y\B@ + \advance\X@c\sd@X.5\A@ \advance\Y@c\sd@Y.5\B@ + \ifdim\sd@Y\d@Y<\sd@X\d@X \dimen@=\sd@X\d@X + \ifdim\zz@\A@\else \divide\dimen@\A@ \fi \count@@=\dimen@ + \else \dimen@=\sd@Y\d@Y + \ifdim\zz@\B@\else \divide\dimen@\B@ \fi \count@@=\dimen@ + \fi \advance\count@@\@ne} +\xydefcsname@{dir1{~}}{\squiggle@} +\xydefcsname@{dir2{~}}{\squiggle@ \double@\xybsqlh@} +\xydefcsname@{dir3{~}}{\squiggle@ \triple@\xybsqlh@} +\xyletcsnamecsname@{dir0{~}}{dir{}} +\xyletcsnamecsname@{dir{~}}{dir1{~}} +\xydef@\squiggle@{\xybsqlfont + \dimen@=\sd@X\cosDirection\xybsqll@ \advance\dimen@.1\p@ + \dimen@ii=\sd@Y\sinDirection\xybsqll@ + \kern\dimen@\squiggle@@ + \edef\tmp@{\egroup \U@c=\the\dimen@ii \L@c=\the\dimen@}\tmp@ + \wdz@=2\L@c \R@c=\L@c \ht\z@=\U@c \D@c=\U@c \dp\z@=\U@c + \Edge@c={\rectangleEdge}% + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\squiggledSpread@}} +\xydef@\squiggle@@{\DirectionChar \count@=\DirectionChar + \advance\count@-64 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@} +\xydef@\squiggledSpread@{% + \dimen@=\d@X \advance\dimen@-\sd@X\count@@\A@ \advance\dimen@\sd@X.3\p@ + \advance\X@c-.5\dimen@ \advance\d@X-\dimen@ + \dimen@=\d@Y \advance\dimen@-\sd@Y\count@@\B@ \advance\dimen@\sd@Y.3\p@ + \advance\Y@c-.5\dimen@ \advance\d@Y-\dimen@} +\xydef@\double@#1{\edef\Drop@@{\dimen@=#1\relax + \dimen@=.5\dimen@ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@ + \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}% + \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 + \setbox2=\hbox{\kern-\A@\raise-\B@ \noexpand\boxz@}% + \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 }% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}} +\xydef@\triple@#1{\edef\Drop@@{\dimen@=#1\relax + \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@ + \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}% + \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 + \setbox2=\hbox{\kern-\A@\raise-\B@\copy\z@}% + \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 + \dp\z@=\z@ \ht\z@=\z@ \wdz@=\z@ \noexpand\boxz@}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}} +\xydefcsname@{dir1{--}}{\dash@} +\xydefcsname@{dir2{--}}{\dash@ \double@\xydashh@} +\xydefcsname@{dir3{--}}{\dash@ \triple@\xydashh@} +\xyletcsnamecsname@{dir0{--}}{dir{}} +\xyletcsnamecsname@{dir{--}}{dir1{--}} +\xyletcsnamecsname@{dir{==}}{dir2{--}} +\xydef@\dash@{\line@ \wdz@=2\wdz@ \ht\z@=2\ht\z@ \dp\z@=2\dp\z@ + \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@ + \def\Connect@@{\straight@\dashedSpread@}} +\xydef@\dashedSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi + \advance\d@X\sd@X.5\A@ \advance\d@Y\sd@Y.5\B@ + \ifdim\z@<\d@X \advance\X@c.5\A@ \fi \advance\Y@c\sd@Y.5\B@} +\xydefcsname@{dir1{~~}}{\dashsquiggle@} +\xydefcsname@{dir2{~~}}{\dashsquiggle@ \double@\xybsqlh@} +\xydefcsname@{dir3{~~}}{\dashsquiggle@ \triple@\xybsqlh@} +\xyletcsnamecsname@{dir0{~~}}{dir{}} +\xyletcsnamecsname@{dir{~~}}{dir1{~~}} +\xydef@\dashsquiggle@{\squiggle@ + \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@ + \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c + \def\Connect@@{\straight@\dashsquiggledSpread@}} +\xydef@\dashsquiggledSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi + \advance\X@c.5\A@ \advance\d@X.5\A@ \advance\Y@c.25\B@ \advance\d@Y.5\B@} +\xyletcsnamecsname@{dir1{..}}{dir{.}} +\xyletcsnamecsname@{dir2{..}}{dir2{.}} +\xyletcsnamecsname@{dir3{..}}{dir3{.}} +\xyletcsnamecsname@{dir{..}}{dir1{.}} +\xyletcsnamecsname@{dir{::}}{dir2{.}} +\xylet@\ctipEdge@=\czeroEdge@ +\xydefcsname@{dir1{>}}{\tip@} +\xydefcsname@{dir^{>}}{\atip@} +\xydefcsname@{dir_{>}}{\btip@} +\xyletcsnamecsname@{dir0{>}}{dir{}} +\xyletcsnamecsname@{dir{>}}{dir1{>}} +\xydefcsname@{dir1{<}}{\reverseDirection@\tip@} +\xydefcsname@{dir^{<}}{\reverseDirection@\btip@} +\xydefcsname@{dir_{<}}{\reverseDirection@\atip@} +\xyletcsnamecsname@{dir0{<}}{dir{}} +\xyletcsnamecsname@{dir{<}}{dir1{<}} +\xydef@\tip@{\tip@x\tip@@} +\xydef@\atip@{\tip@x\atip@@} +\xydef@\btip@{\tip@x\btip@@} +\xydef@\tip@x#1{#1\egroup + \ctipEdge@ + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} +\xydef@\tip@@{\atip@@\btip@@} +\xydef@\atip@@{\xyatipfont\DirectionChar} +\xydef@\btip@@{\xybtipfont\DirectionChar} +\xydefcsname@{dir2{>}}{\Tip@} +\xydefcsname@{dir2{<}}{\reverseDirection@\Tip@} +\xydef@\Tip@{\kern2.5pt \vrule height2.5pt depth2.5pt width\z@ + \Tip@@ \kern2.5pt \egroup + \U@c=2.5pt \D@c=2.5pt \L@c=2.5pt \R@c=2.5pt \Edge@c={\circleEdge}% + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} +\xydef@\Tip@@{\count@=\DirectionChar + \advance\count@-4 \ifnum\count@<\z@ \advance\count@128 \fi + \xyatipfont\char\count@ + \advance\count@ 8 \ifnum127<\count@ \advance\count@-128 \fi + \xybtipfont\char\count@} +\xydefcsname@{dir3{>}}{\Ttip@} +\xydefcsname@{dir3{<}}{\composite@{}{:(-1,0)\dir3{>}}} +\xydef@\Ttip@{\kern3.2pt \vrule height3.2pt depth3.2pt width\z@ + \Ttip@@ \kern3.2pt \egroup + \U@c=3.2pt \D@c=3.2pt \L@c=3.2pt \R@c=3.2pt \Edge@c={\circleEdge}% + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} +\xydef@\Ttip@@{% + \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ + \kern-\L@c \boxz@ \kern\L@c + {\vDirection@(1,-.31)\xydashl@ \xyatipfont\char\DirectionChar}% + {\vDirection@(1,+.31)\xydashl@ \xybtipfont\char\DirectionChar}} +\xydefcsname@{dir1{|}}{\stopper@} +\xydefcsname@{dir^{|}}{\aboveDirection@\xydashl@ + \shiftdir@\line@\z@ \pointlike@{}\xydashh@} +\xydefcsname@{dir_{|}}{\belowDirection@\xydashl@ + \shiftdir@\line@\z@ \pointlike@{}\xydashh@} +\xydefcsname@{dir2{|}}{\stopper@ \double@\xydashh@} +\xydefcsname@{dir3{|}}{\stopper@ \double@{2\xydashh@}} +\xyletcsnamecsname@{dir0{|}}{dir{}} +\xyletcsnamecsname@{dir{|}}{dir1{|}} +\xydef@\stopper@{\tip@x\stopper@@} +\xydef@\stopper@@{\setboxz@h{\count@=\SemiDirectionChar \advance\count@64 + \ifnum127<\count@ \advance\count@-128 \fi \xydashfont\char\count@\/}% + \setboxz@h{\kern-.5\wdz@ \dimen@=\sd@Y\cosDirection\xydashl@ + \ifnum\SemiDirectionChar=95 \dimen@=\sd@X\sd@Y\dimen@ \fi + \raise.5\dimen@\boxz@}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydefcsname@{dir1{(}}{\hook@} +\xydefcsname@{dir^{(}}{\ahook@} +\xydefcsname@{dir_{(}}{\bhook@} +\xyletcsnamecsname@{dir0{(}}{dir{}} +\xyletcsnamecsname@{dir{(}}{dir1{(}} +\xydefcsname@{dir1{)}}{\reverseDirection@\hook@} +\xydefcsname@{dir^{)}}{\reverseDirection@\bhook@} +\xydefcsname@{dir_{)}}{\reverseDirection@\ahook@} +\xyletcsnamecsname@{dir0{)}}{dir{}} +\xyletcsnamecsname@{dir{)}}{dir1{)}} +\xydef@\hook@{\tip@x\hook@@} +\xydef@\hook@@{\setboxz@h{\xybsqlfont + \vDirection@(1,-1){.707107\xybsqll@}% + \hbox{\DirectionChar + \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32 + \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\ahook@{\tip@x\ahook@@} +\xydef@\ahook@@{\setboxz@h{\xybsqlfont + \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X + \lower\d@Y\hbox{\DirectionChar + \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32 + \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\bhook@{\tip@x\bhook@@} +\xydef@\bhook@@{\setboxz@h{\xybsqlfont + \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar + \kern\d@X\raise\d@Y\hbox{\count@=\DirectionChar \advance\count@-96 + \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydefcsname@{dir^{'}}{\reverseDirection@\bturn@} +\xydefcsname@{dir_{'}}{\reverseDirection@\aturn@} +\xydefcsname@{dir^{`}}{\aturn@} +\xydefcsname@{dir_{`}}{\bturn@} +\xydef@\aturn@{\tip@x\aturn@@} +\xydef@\aturn@@{\setboxz@h{\xybsqlfont + \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X + \lower\d@Y\hbox{\DirectionChar}}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\bturn@{\tip@x\bturn@@} +\xydef@\bturn@@{\setboxz@h{\xybsqlfont + \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\newdir#1#{\newdir@{#1}} +\xydef@\newdir@#1#2#3{\xydefcsname@{dir#1{#2}}{\composite@{}{#3}}} +\xydef@\shiftdir@#1#2{% + \setbox\z@=\hbox\bgroup#1\relax + \setboxz@h{\dimen@ii=#2\relax + \dimen@=-\cosDirection\dimen@ii \advance\dimen@-\L@c + \kern\dimen@ \lower\sinDirection\dimen@ii\boxz@}% + \wdz@\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xylet@\tipjot@=\jot +\xydefcsname@{dir1{>>}}{\shiftdir@\tip@\tipjot@ \tip@} +\xydefcsname@{dir^{>>}}{\shiftdir@\atip@\tipjot@ \atip@} +\xydefcsname@{dir_{>>}}{\shiftdir@\btip@\tipjot@ \btip@} +\xydefcsname@{dir2{>>}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}}} +\xydefcsname@{dir3{>>}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}}} +\xyletcsnamecsname@{dir0{>>}}{dir{}} +\xyletcsnamecsname@{dir{>>}}{dir1{>>}} +\xydefcsname@{dir1{<<}}{\reverseDirection@ \shiftdir@\tip@\tipjot@ \tip@} +\xydefcsname@{dir^{<<}}{\reverseDirection@ \shiftdir@\btip@\tipjot@ \btip@} +\xydefcsname@{dir_{<<}}{\reverseDirection@ \shiftdir@\atip@\tipjot@ \atip@} +\xydefcsname@{dir2{<<}}{\composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}}} +\xydefcsname@{dir3{<<}}{\composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}}} +\xyletcsnamecsname@{dir0{<<}}{dir{}} +\xyletcsnamecsname@{dir{<<}}{dir1{<<}} +\xydefcsname@{dir1{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ + \pointlike@{}\jot} +\xydefcsname@{dir^{||}}{\shiftdir@{\aboveDirection@\xydashl@\line@}\xydashh@ + \shiftdir@{\aboveDirection@\xydashl@\line@}\z@ \pointlike@{}\jot} +\xydefcsname@{dir_{||}}{\shiftdir@{\belowDirection@\xydashl@\line@}\xydashh@ + \shiftdir@{\belowDirection@\xydashl@\line@}\z@ \pointlike@{}\jot} +\xydefcsname@{dir2{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ + \pointlike@{}\jot \double@\xydashh@} +\xydefcsname@{dir3{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ + \pointlike@{}\jot \double@{2\xydashh@}} +\xyletcsnamecsname@{dir0{||}}{dir{}} +\xyletcsnamecsname@{dir{||}}{dir1{||}} +\xydefcsname@{dir1{>|}}{\shiftdir@\stopper@\z@ \tip@} +\xydefcsname@{dir2{>|}}{\composite@{}{\dir2{>}*\dir2{|}}} +\xydefcsname@{dir3{>|}}{\composite@{}{\dir3{>}*\dir3{|}}} +\xyletcsnamecsname@{dir0{>|}}{dir{}} +\xyletcsnamecsname@{dir{>|}}{dir1{>|}} +\xydefcsname@{dir1{>>|}}{\shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@} +\xydefcsname@{dir2{>>|}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}*\dir2{|}}} +\xydefcsname@{dir3{>>|}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}*\dir3{|}}} +\xyletcsnamecsname@{dir0{>>|}}{dir{}} +\xyletcsnamecsname@{dir{>>|}}{dir1{>>|}} +\xydefcsname@{dir1{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \tip@} +\xydefcsname@{dir2{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Tip@} +\xydefcsname@{dir3{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Ttip@} +\xyletcsnamecsname@{dir0{|<}}{dir{}} +\xyletcsnamecsname@{dir{|<}}{dir1{|<}} +\xydefcsname@{dir1{|<<}}{\reverseDirection@ + \shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@} +\xydefcsname@{dir2{|<<}}{% + \composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}*\dir2{|}}} +\xydefcsname@{dir3{|<<}}{% + \composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}*\dir3{|}}} +\xyletcsnamecsname@{dir0{|<<}}{dir{}} +\xyletcsnamecsname@{dir{|<<}}{dir1{|<<}} +\xydefcsname@{dir1{|-}}{\shiftdir@\stopper@\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot} +\xydefcsname@{dir^{|-}}{\shiftdir@{\aboveDirection@\xydashl@ \line@}\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot} +\xydefcsname@{dir_{|-}}{\shiftdir@{\belowDirection@\xydashl@ \line@}\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot} +\xydefcsname@{dir2{|-}}{\shiftdir@\stopper@\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot \double@\xydashh@} +\xydefcsname@{dir3{|-}}{\shiftdir@\stopper@\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot \triple@\xydashh@} +\xyletcsnamecsname@{dir0{|-}}{dir{}} +\xyletcsnamecsname@{dir{|-}}{dir1{|-}} +\xyletcsnamecsname@{dir{|=}}{dir2{|-}} +\xydefcsname@{dir{+}}{% + \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@} +\xyletcsnamecsname@{dir0{+}}{dir{}} +\xydefcsname@{dir{x}}{\vDirection@(1,1)\jot + \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@} +\xyletcsnamecsname@{dir0{x}}{dir{}} +\xydefcsname@{dir{/}}{\vDirection@(1,-.3)\jot \stopper@} +\xyletcsnamecsname@{dir0{/}}{dir{}} +\xydefcsname@{dir{//}}{\vDirection@(1,-.3)\jot + \shiftdir@\stopper@\xydashh@ \stopper@} +\xyletcsnamecsname@{dir0{//}}{dir{}} +\xydefcsname@{dir{*}}{\solidpoint@} +\xydef@\solidpoint@{% + \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\bullet$}}\jot} +\xyletcsnamecsname@{dir0{*}}{dir{}} +\xydefcsname@{dir{o}}{\hollowpoint@} +\xydef@\hollowpoint@{% + \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\circ$}}\jot} +\xyletcsnamecsname@{dir0{o}}{dir{}} +\message{circles,} +\xydef@\cir#1#{\hbox\bgroup + \afterVECTORorEMPTY{\xy@@{\R@=\X@c}\cir@}{\xy@@{\R@=\R@c}\cir@}#1@} +\xydef@\cir@#1@#2{% + \DN@{#1}\ifx\next@\empty\else \xyerror@{illegal circle : must be + or }{}\fi + \afterCIRorDIAG{\xyFN@\cir@cir}{\xyFN@\cir@diag}#2@} +\xydef@\cir@cir{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\cir@cir}% + \else \ifx @\next \DN@ @{\cir@i}% + \else \xyerror@{illegal : must have form or + }{}% + \fi\fi \next@} +\xydef@\cir@diag{% + \DN@{\xyerror@{illegal : must have form or + }{}}% + \ifx @\next \ifnum\count@=8 + \DN@ @{\def\CIRin@@{0}\def\CIRorient@@{\CIRfull@}\def\CIRout@@{7}\cir@i}% + \fi\fi \next@} +\xydef@\cir@i{% + \ifnum\CIRin@@=8 \xyerror@{incomplete specification}{% +The you specified as is not sufficiently specific.}% + \def\CIRin@@{0}\fi + \ifdim\R@<.5\p@ \R@=\z@ \zerodot + \else \CIRorient@@ \cirbuild@ \fi + \L@c=\R@ \R@c=\R@ \D@c=\R@ \U@c=\R@ \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}% + \Edge@c={\circleEdge}\OBJECT@x} +\xydef@\CIRin@@{3} +\xydef@\CIRout@@{3} +\xylet@\CIRorient@@=\empty +\xydef@\afterCIRorDIAG#1#2{\def\afterCIR@{#1}\def\afterCIRDIAG@{#2}\xyFN@\CIR@} +\xylet@\afterCIR@=\empty +\xylet@\afterCIRDIAG@=\empty +\xydef@\CIR@{\count@=8 \afterDIAG{\edef\CIRin@@{\the\count@}\xyFN@\CIR@@}} +\xydef@\CIR@@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\CIR@@}% + \else\ifx ^\next + \DN@ ^{\def\CIRorient@@{\CIRacw@}% + \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}% + \else\ifx _\next + \DN@_{\def\CIRorient@@{\CIRcw@}% + \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}% + \else + \DN@{\def\CIRorient@@{\relax}\afterCIRDIAG@}% + \fi\fi\fi \next@} +\xylet@\CIRtest@@=\relax +\xydef@\CIRlo@@{0} +\xydef@\CIRhi@@{0} +\xydef@\CIRfull@{\def\CIRtest@@##1##2{##2}} +\xydef@\cirbuild@{\cirrestrict@@ \multiply\count@8 + \circhar@0\circhar@7\kern\dimen@ + \circhar@1\circhar@6\kern\dimen@ + \circhar@2\circhar@5\kern\dimen@ + \circhar@3\circhar@4\kern\dimen@} +\xydef@\circhar@#1{% + \setboxz@h{\circhar@@{#1}}\dimen@=\wdz@ \wdz@=\z@ \ht\z@=\R@ \dp\z@=\R@ + \CIRtest@@#1{\styledboxz@}\setbox\z@=\copy\voidb@x} +\xydef@\circhar@@#1{{\xycircfont \advance\count@#1\relax \char\count@}} +\xydef@\cirrestrict@@{\begingroup \dimen@=\R@ + \setboxz@h{\xycircfont\char\z@\char\@ne}\A@=\wdz@ + \ifdim\R@<8\A@ \count@=\dimen@ \divide\count@\A@ \advance\count@\m@ne + \else\ifdim\R@<16\A@ \count@=\dimen@ + \dimen@=2\A@ \divide\count@\dimen@ \advance\count@3 + \else\ifdim\R@<32\A@ \count@=\dimen@ + \dimen@=4\A@ \divide\count@\dimen@ \advance\count@7 + \else \count@=15 \fi\fi\fi + \R@=\A@ + \ifnum\count@<8 \multiply\R@\count@ \advance\R@\A@ + \else\ifnum\count@<12 \multiply\R@\count@ \multiply\R@\tw@ \advance\R@-6\A@ + \else\ifnum\count@<16 \multiply\R@\count@ \multiply\R@ 4 \advance\R@-28\A@ + \else \multiply\R@ 32 \fi\fi\fi + \edef\@tmp{\endgroup \R@=\the\R@ \count@=\the\count@}\@tmp} +\xydef@\CIRacw@{\count@@=\CIRin@@ \count@=\CIRout@@ + \ifnum\count@=8 \count@=\count@@ + \ifnum\count@<6 \advance\count@\tw@ \else \advance\count@-6 \fi \fi + \ifnum\count@@<\@ne \advance\count@@7 \else \advance\count@@\m@ne \fi + \ifnum\count@<\@ne \advance\count@7 \else \advance\count@\m@ne \fi + \ifnum\count@@>\count@ \let\CIRtest@@=\CIRtest@outside + \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}% + \else \let\CIRtest@@=\CIRtest@inside + \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}% + \fi} +\xydef@\CIRcw@{\count@@=\CIRin@@ \count@=\CIRout@@ + \ifnum\count@=8 \count@=\count@@ + \ifnum\count@>\@ne \advance\count@-\tw@ \else \advance\count@6 \fi \fi + \ifnum\count@@<5 \advance\count@@\thr@@ \else \advance\count@@-5 \fi + \ifnum\count@<5 \advance\count@\thr@@ \else \advance\count@-5 \fi + \ifnum\count@@<\count@ \let\CIRtest@@=\CIRtest@outside + \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}% + \else \let\CIRtest@@=\CIRtest@inside + \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}% + \fi} +\xydef@\CIRtest@inside#1#2{\let\next@=\relax + \ifnum\CIRlo@@>#1\else \ifnum#1<\CIRhi@@\DN@{#2}\fi\fi \next@} +\xydef@\CIRtest@outside#1#2{\let\next@=\relax + \ifnum\CIRlo@@>#1\DN@{#2}\else \ifnum#1<\CIRhi@@\else\DN@{#2}\fi\fi \next@} +\message{text;} +\xydef@\txt{\hbox\bgroup \xyFN@\txt@} +\xydef@\txt@{% + \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\txt@i}% + \else \DN@{\A@=\maxdimen \txt@i}\fi \next@} +\xydef@\txt@i#1#{% + \setboxz@h{#1\mathstrut}\dimen@=\ht\z@ \advance\dimen@\dp\z@ + \baselineskip=1.1\dimen@ \lineskip=.2\dimen@ \lineskiplimit=\lineskip + \def\txtline@@##1{\txtline@{#1}{##1}}\object@\txt@ii} +\xylet@\txtline@@=\eat@ +\xydef@\txtline@#1#2{\relax\setboxz@h{#1{\ignorespaces #2\unskip}}% + \ifdim\A@<\wdz@ \setboxz@h{\hsize=\A@ + \leftskip=0pt plus4em \rightskip=\leftskip + \parfillskip=0pt \parindent=0pt + \spaceskip=.3333em \xspaceskip=.5em + \pretolerance=9999 \tolerance=9999 + \hyphenpenalty=9999 \exhyphenpenalty=9999 + \vbox{#1\noindent\ignorespaces #2\unskip}}% + \else\ifdim\A@<\maxdimen\setboxz@h to\A@{\hfil\boxz@\hfil}\fi\fi + \boxz@} +\xydef@\txt@ii#1{\vbox{% + \let\\=\cr + \tabskip=\z@skip \halign{\relax\hfil\txtline@@{##}\hfil\cr\leavevmode#1\crcr}}} +\message{options;} +\xylet@\xyoption@@=\relax +\xydef@\xyoption#1{\DN@{#1}\edef\next@{\codeof\next@}% + \csname xyeveryrequest@\next@ @\endcsname + \xyinputorelse@{xy#1}{\xyoption@truncated#1@@@@@@@@@,#1@}% + \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@} + \expandafter\let\expandafter\next@\csname xy\xyoption@@ version\endcsname + \expandafter\let\csname xy\xyoption@@ loaded\endcsname=\next@ + \runxywith@ \ignorespaces} +\xydef@\xyoption@truncated#1#2#3#4#5#6#7@#8,#9@{% + \DN@{#7}\ifx\next@\empty \DN@##1##2{##2}\else\let\next@=\xyinputorelse@ \fi + \next@{xy#1#2#3#4#5#6}% + {\DN@{#1#2#3#4#5#6}\edef\next@{\codeof\next@}% + \xyerror@{No `\next@' option}{% +Your \xyoption{#9} request could not be granted: the required^^J% +file `xy#9.tex' could not be located. Please make sure that it is^^J% +properly installed before continuing.}}} +\xydef@\xyrequire#1{\DN@{#1}\edef\next@{\codeof\next@}% + \csname xyeveryrequest@\next@ @\endcsname + \expandafter\let\expandafter\next@\csname xy\codeof\next@ loaded\endcsname + \ifx \next@\relax \DN@{\xyoption{#1}}\else \DN@{\ignorespaces}\fi \next@} +\xylet@\xywith@@=\empty +\xydef@\runxywith@{\let\xywithdo@@=\xywithtest@ \xywith@@} +\xydef@\xywithoption#1#2{\DN@{#1}\edef\next@{\codeof\next@}% + \expandafter\let\expandafter\nextii@\csname xy\next@ loaded\endcsname + \ifx \nextii@\relax + \expandafter\def\expandafter\xywith@@\expandafter{\xywith@@ + \xywithdo@@{#1}{#2}}% + \else \expandafter\xywithrun@\expandafter{\next@}{#2}\fi} +\xydef@\xywithtest@#1#2{\DN@{#1}\edef\next@{\codeof\next@}% + \ifx\next@\xyoption@@ \expandafter\xywithrun@\expandafter{\next@}{#2}\fi} +\xydef@\xywithrun@#1#2{\csname xyeverywithoption@#1@\endcsname #2} +\xydef@\xyevery@#1#2#3{\DN@{#2}\edef\next@{\codeof\next@}% + \expandafter\ifx\csname xyevery#1@\next@ @\endcsname\relax + \expandafter\let\csname xyevery#1@\next@ @\endcsname=\empty \fi + \DNii@##1{\expandafter\def\expandafter##1\expandafter{##1#3}}% + \expandafter\nextii@\csname xyevery#1@\next@ @\endcsname} +\xydef@\xyeveryrequest{\xyevery@{request}} +\xydef@\xyeverywithoption{\xyevery@{withoption}} +\xydef@\xyprovide#1#2#3#4#5#6{% + \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@}\edef\next@{#3}% + \message{ Xy-pic option: #2 v.\next@}% + \expandafter\let\expandafter\nextii@\csname xy\xyoption@@ loaded\endcsname + \ifx \next@\nextii@ \message{not reloaded}\endinput + \else + \ifx \nextii@\relax\else \xyerror@{Option `\xyoption@@' version mismatch}{% +You previously loaded, or the format has preloaded, a different version^^J% +of this option. Just continue to try to load this version instead (and^^J% +be prepared for a lot of warnings about redefinitions).}% + \fi + \expandafter\let\csname xy\xyoption@@ version\endcsname=\next@ + \expandafter\let\expandafter\xyenddocmode@\csname DOCMODE\endcsname + \expandafter\let\csname DOCMODE\endcsname\xyprovidedocmode@ + \xycatcodes + \fi \ignorespaces} +\xydef@\xyendinput{\expandafter\let\csname DOCMODE\endcsname=\xyenddocmode@ + \message{loaded}\xyuncatcodes\endinput} +\expandafter\xylet@\expandafter\xyprovidedocmode@\csname DOCMODE\endcsname +\xylet@\xyenddocmode@=\relax +\xydef@\xydriversloaded@@{\do{unload}} +\xylet@\xydriversselected@@=\empty +\xylet@\xydriver@unload@support@@=\empty +\xydef@\selectdriver@#1{\DN@{#1}\edef\next@{\codeof\next@}% + \expandafter\selectdriver@@\expandafter{\next@}} +\xydef@\selectdriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}% + \xyLoadDrivers@}\let\selectdriver@@=\changedriver@single} +\xydef@\changedriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}% + \xyReloadDrivers@}} +\xydef@\selectdriver@multiple#1{\expandafter\xysetup@@\expandafter{% + \expandafter\def\expandafter\xydriversselected@@\expandafter{% + \xydriversselected@@ \do{#1}}% + \let\do=\activatedriver@ \xydriversselected@@}} +\xydef@\UseSingleDriver{\let\selectdriver@@=\selectdriver@single} +\xydef@\MultipleDrivers{\let\selectdriver@@=\selectdriver@multiple} +\xydef@\xyLoadDrivers@{\let\do=\activatedriver@ \xydriversselected@@} +\xydef@\xyReloadDrivers@{\activatedriver@{unload}\xyLoadDrivers@} +\xylet@\xyReloadDrivers=\xyReloadDrivers@ +\xydef@\activatedriver@#1{% + \let\doii=\activatedriversupport@ \csname xydriver@#1@support@@\endcsname} +\xydef@\activatedriversupport@#1#2{% + \expandafter\ifx\csname xy#1loaded\endcsname\relax\DN@{}% + \else\DN@{#2}\fi \next@} +\UseSingleDriver +\xydef@\xyselectoptionsupport@{\let\do=\activatedriver@ \xydriversselected@@} +\xydef@\xyShowDrivers{{\W@{Loaded:}\let\do=\doShow \xydriversloaded@@ + \let\next@=\empty + \def\do##1{\ifx\next@\empty \DN@{##1}% + \else \expandafter\DN@\expandafter{\next@, ##1}\fi}% + \xydriversselected@@\W@{Selected: \next@.}}} +\def\doShow#1{\let\next@=\empty + \def\doii##1##2{\ifx\next@\empty \DN@{##1}% + \else \expandafter\DN@\expandafter{\next@, ##1}\fi}% + \csname xydriver@#1@support@@\endcsname + \W@{ #1 supports \next@.}} +\xydef@\newdriver#1{% + \def\nextiii@##1{% + \expandafter\def\expandafter\xydriversloaded@@ + \expandafter{\xydriversloaded@@\do{##1}}% + \expandafter\let\csname xydriver@\xyoption@@ @support@@\endcsname=\empty}% + \def\do##1{\DNii@{##1}\ifx\xyoption@@\nextii@ \let\nextiii@=\eat@ \fi}% + \xydriversloaded@@ \expandafter\nextiii@\expandafter{\xyoption@@}% + #1\relax + \DN@##1{\xywithoption{##1}{% + \selectdriver@{##1}\xyeveryrequest{##1}{\selectdriver@{##1}}}}% + \expandafter\next@\expandafter{\xyoption@@}\ignorespaces} +\xydef@\xyaddsupport{\expandafter\xyadddriversupport@\expandafter{\xyoption@@}} +\xydef@\xyaddunsupport{\xyadddriversupport@{unload}} +\xydef@\xyadddriversupport@#1#2#3{% + \DNii@{#1}\edef\nextii@{\codeof\nextii@}% + \def\nextiii@{#2}\edef\nextiii@{\codeof\nextiii@}% +\def\next{\xybug@{ \nextii@\space not loaded}}% +\def\do##1{\DN@{##1}\edef\next@{\codeof\next@}% + \ifx\next@\nextii@ \let\next=\relax \fi}\xydriversloaded@@ \next +\def\next{\xybug@{ \nextii@\space already supports \nextiii@}}% +\def\doii##1##2{\DN@{##1}\edef\next@{\codeof\next@}% + \ifx\next@\nextiii@ \let\next=\relax \fi}\xydriversloaded@@ \next + \DN@##1##2{\ifx##1\relax \let##1=\empty \fi + \expandafter\def\expandafter##1\expandafter{##1\doii{##2}{#3}}}% + \expandafter\expandafter\expandafter\next@ + \expandafter\expandafter\csname xydriver@\nextii@ @support@@\endcsname + \expandafter{\nextiii@}% + \DN@##1{\expandafter\xyeverywithoption\expandafter{\nextiii@}{% + \xytestforsupport@{##1}}}% + \expandafter\next@\expandafter{\nextii@}\xydriversloaded@@ + \ignorespaces} +\xydef@\xytestforsupport@#1{\def\do##1{\DN@{##1}\DNii@{#1}% + \ifx\next@\nextii@ \expandafter\xyselectoptionsupport@ \fi}} +\xynew@{if}\ifunsupportwarnings@ +\xydef@\xyunsupportwarning@#1#2{{% + \DN@{#1}\edef\next@{\codeof\next@} + \expandafter\ifx\csname xywarn@unload@\next@ @\endcsname\relax + \expandafter\gdef\csname xywarn@unload@\next@ @\endcsname{}% + \ifunsupportwarnings@ \xyclosedown@@\xyunsupportwarnings@@ \fi + \global\unsupportwarnings@true + \expandafter\gdef\expandafter\xyunsupportwarnings@@\expandafter{% + \xyunsupportwarnings@@ \W@{ #2.}}% + \W@{}% + \W@{Xy-pic Warning: `\next@' reproduction is NOT EXACT\xytracelineno@:}% + \W@{ #2.}% + \W@{}% + \fi}} +\xydef@\xyunsupportwarnings@@{\W@{}% + \W@{Xy-pic Warning: The produced DVI file is NOT EXACT:}} +\xynew@{if}\ifsupportwarnings@ +\xydef@\xysupportwarning@#1#2{{% + \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}% + \expandafter\ifx\csname xywarn@\next@ @\nextii@ @\endcsname\relax + \expandafter\gdef\csname xywarn@\next@ @\nextii@ @\endcsname{}% + \ifsupportwarnings@ \xyclosedown@@\xysupportwarnings@@ \fi + \global\supportwarnings@true + \expandafter\gdef\expandafter\xysupportwarnings@@\expandafter{% + \xysupportwarnings@@ \driverextensioncomplain@{#1}{#2}}% + \W@{}% + \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE\xytracelineno@:}% + \driverextensioncomplain@{#1}{#2}% + \W@{}% + \fi}} +\xydef@\xysupportwarnings@@{% + \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE:}} +\xydef@\driverextensioncomplain@#1#2{% + \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}% + \W@{ It contains `\next@' \string\special s for the `\nextii@' + extension.}} +\xydef@\dvimessage@#1#2{\xysupportwarning@{#1}{#2}} +\xynew@{if}\ifxydrivernoloads@ +\xydef@\xydrivernoload@#1{\xyerror@{Could not load xy#1.tex}{}% + \xydrivernoloads@true} +\xydef@\xydriverfail@#1{\xyerror@{Sorry, #1 not supported.}{}} +\xydef@\xyunload@#1{\xywarning@{Unloading #1.}} +\message{algorithms: directions,} +\xydef@\DirectionfromtheDirection@{\noexpand\Direction=\the\Direction + \noexpand\d@X=\the\d@X \noexpand\d@Y=\the\d@Y + \def\noexpand\sd@X{\sd@X}\def\noexpand\sd@Y{\sd@Y}% + \noexpand\K@dXdY=\the\K@dXdY \noexpand\K@dYdX=\the\K@dYdX + \chardef\noexpand\DirectionChar=\the\DirectionChar + \chardef\noexpand\SemiDirectionChar=\the\SemiDirectionChar + \def\noexpand\cosDirection{\cosDirection}% + \def\noexpand\sinDirection{\sinDirection}% + \noexpand\resetupDirection@} +\xydef@\Directiontest@@#1#2{#2} +\xydef@\setupDirection@{% + \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p + \Directiontest@@\relax\setupDirection@i} +\xydef@\setupDirection@i{\DN@{\setupDirection@ii}% + \ifdim\d@X=\d@Y + \ifdim\zz@\d@Y \DN@{}% + \else\ifdim\d@X<\z@ \DN@{\dlDirection@{-1.4142\d@X}}% + \else \DN@{\urDirection@{1.4142\d@X}}\fi\fi + \else\ifdim\d@X<\d@Y + \ifdim\zz@\d@X \DN@{\uDirection@\d@Y}% + \else\ifdim\zz@\d@Y \DN@{\lDirection@{-\d@X}}% + \else\ifdim-\d@X=\d@Y \DN@{\ulDirection@{-1.4142\d@X}}\fi\fi\fi + \else + \ifdim\zz@\d@X \DN@{\dDirection@{-\d@Y}}% + \else\ifdim\zz@\d@Y \DN@{\rDirection@\d@X}% + \else\ifdim\d@X=-\d@Y \DN@{\drDirection@{1.4142\d@X}}\fi\fi\fi + \fi\fi \next@} +\xydef@\dlDirection@{\Direction=\z@ + \def\cosDirection{-.7071}\def\sinDirection{-.7071}\def\sd@X{-}\def\sd@Y{-}% + \chardef\DirectionChar=127\relax\chardef\SemiDirectionChar=127\relax + \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@} +\xydef@\dDirection@{\Direction=\K@ + \def\cosDirection{0}\def\sinDirection{-1}\def\sd@Y{-}% + \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}% + \chardef\DirectionChar=15\relax\chardef\SemiDirectionChar=31\relax + \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@} +\xydef@\drDirection@{\dimen@ii=2\K@ \Direction=\dimen@ii + \def\cosDirection{+.7071}\def\sinDirection{-.7071}\def\sd@X{+}\def\sd@Y{-}% + \chardef\DirectionChar=31\relax\chardef\SemiDirectionChar=63\relax + \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@} +\xydef@\rDirection@{\dimen@ii=3\K@ \Direction=\dimen@ii + \def\cosDirection{+1}\def\sinDirection{0}\def\sd@X{+}% + \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}% + \chardef\DirectionChar=47\relax\chardef\SemiDirectionChar=95\relax + \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@} +\xydef@\urDirection@{\dimen@ii=4\K@ \Direction=\dimen@ii + \def\cosDirection{+.7071}\def\sinDirection{+.7071}\def\sd@X{+}\def\sd@Y{+}% + \chardef\DirectionChar=63\relax\chardef\SemiDirectionChar=127\relax + \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@} +\xydef@\uDirection@{\dimen@ii=-3\K@ \Direction=\dimen@ii + \def\cosDirection{0}\def\sinDirection{+1}\def\sd@Y{+}% + \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}% + \chardef\DirectionChar=79\relax\chardef\SemiDirectionChar=31\relax + \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@} +\xydef@\ulDirection@{\dimen@ii=-2\K@ \Direction=\dimen@ii + \def\cosDirection{-.7071}\def\sinDirection{+.7071}\def\sd@X{-}\def\sd@Y{+}% + \chardef\DirectionChar=95\relax\chardef\SemiDirectionChar=63\relax + \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@} +\xydef@\lDirection@{\Direction=-\K@ + \def\cosDirection{-1}\def\sinDirection{0}\def\sd@X{-}% + \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}% + \chardef\DirectionChar=111\relax\chardef\SemiDirectionChar=95\relax + \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@} +\xydef@\fixedDirection@#1{\dimen@ii=#1\relax + \d@X=\cosDirection\dimen@ii \d@Y=\sinDirection\dimen@ii + \resetupDirection@} +\xydef@\setupDirection@ii{% + \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi + \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi + \K@dXdY=\sd@X\d@X \ifdim\K@dXdY<500pt \multiply\K@dXdY\KK@ \fi + \dimen@=\sd@Y\d@Y + \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@ + \ifdim\dimen@=\z@\else + \advance\K@dXdY by.5\dimen@\relax \divide\K@dXdY\dimen@ + \fi \K@dXdY=\sd@X\sd@Y\K@dXdY + \K@dYdX=\sd@Y\d@Y \ifdim\K@dYdX<500pt \multiply\K@dYdX\KK@ \fi + \dimen@=\sd@X\d@X + \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@ + \ifdim\dimen@=\z@\else + \advance\K@dYdX by.5\dimen@\relax \divide\K@dYdX\dimen@ + \fi \K@dYdX=\sd@X\sd@Y\K@dYdX + \Direction=\maxdimen + \ifnum\K@dXdY<-\K@ \else \ifnum\K@<\K@dXdY \else + \ifdim \d@Y<\z@ + \Direction=\K@ \advance\Direction-\K@dXdY + \else + \Direction=\K@ \multiply\Direction-\thr@@ \advance\Direction-\K@dXdY + \fi\fi\fi + \ifnum-\K@<\K@dYdX \ifnum\K@dYdX<\K@ + \ifdim \d@X<\z@ + \Direction=-\K@ \advance\Direction\K@dYdX + \else + \Direction=\K@ \multiply\Direction\thr@@ \advance\Direction\K@dYdX + \fi\fi\fi + \ifnum\Direction=\maxdimen + \Direction=\K@dYdX \advance\Direction-\K@dXdY + \advance\Direction\ifnum\Direction<\z@-\fi\@ne \divide\Direction\tw@ + \ifnum\K@dXdY<\z@ \advance\Direction\K@ \advance\Direction\K@ + \else \advance\Direction-\K@ \advance\Direction-\K@ \fi + \fi + \imposeDirection@i + \resetupDirection@ + } +\xydef@\imposeDirection@{\count@@=\Direction + \loop@\ifnum\count@@>4096 \advance\count@@-8192 \repeat@ + \loop@\ifnum\count@@<-4096 \advance\count@@8192 \repeat@ + \def\sd@X{+}\ifnum\count@@<\K@ \relax + \ifnum\count@@>-3072 \def\sd@X{-}\fi\fi + \def\sd@Y{+}\ifnum\count@@<3072 \relax + \ifnum\count@@>-\K@ \relax\def\sd@Y{-}\fi\fi + \imposeDirection@i + \d@X=\cosDirection\xydashl@ \d@Y=\sinDirection\xydashl@ + \resetupDirection@} +\xydef@\imposeDirection@i{% + \count@@=\K@ \multiply\count@@ by8 \advance\count@@\Direction + \count@=\count@@ \advance\count@\KK@ \divide\count@64 \advance\count@\m@ne + \loop@\ifnum127<\count@ \advance\count@-128 \repeat@ + \chardef\DirectionChar\count@ + \advance\count@@16 \divide\count@@\KK@ \advance\count@@\m@ne + \loop@\ifnum127<\count@@ \advance\count@@-128 \repeat@ + \chardef\SemiDirectionChar\count@@ + \setbox8=\hbox{\xydashfont\SemiDirectionChar\/}% + \quotient@@\cosDirection{\sd@X\wd8}\xydashl@ + \setbox8=\hbox{\xydashfont\count@=\SemiDirectionChar\advance\count@-64 + \ifnum\count@<\z@ \advance\count@128 \fi \char\count@\/}% + \quotient@@\sinDirection{\sd@Y\wd8}\xydashl@} +\xydef@\getxyDirection@#1{\xy@@\bgroup\xy@@ix@{#1}% + \xy@@{\expandafter\POS\the\toks9\relax\setupDirection@ + \edef\next@{\egroup \Direction=\the\Direction}\next@ \imposeDirection@ }} +\xydef@\reverseDirection@{% + \d@X=-\d@X \d@Y=-\d@Y + \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi + \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi + \dimen@=4\K@ \ifnum\Direction<\z@ \advance\Direction\dimen@ + \else \advance\Direction-\dimen@ \fi + \count@=\DirectionChar \ifnum\count@<64 \advance\count@64 + \else \advance\count@-64 \fi \chardef\DirectionChar=\count@ + \edef\cosDirection{\if-\cosDirection\else-\cosDirection\fi}% + \edef\sinDirection{\if-\sinDirection\else-\sinDirection\fi}% + \resetupDirection@} +\xydef@\aboveDirection@#1{% + \dimen@=\d@X \d@X=-\d@Y \d@Y=\dimen@ + \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@ + \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi + \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi + \dimen@=2\K@ \ifdim 1\Direction<\dimen@\else \dimen@=-6\K@ \fi + \advance\Direction\dimen@ + \count@=\DirectionChar \ifnum\count@<96 \advance\count@32 + \else \advance\count@-96 \fi \chardef\DirectionChar=\count@ + \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64 + \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@ + \let\tmp@=\cosDirection + \edef\cosDirection{\if-\sinDirection\else-\sinDirection\fi}% + \let\sinDirection=\tmp@ + \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@ + \resetupDirection@} +\xydef@\belowDirection@#1{% + \dimen@=\d@X \d@X=\d@Y \d@Y=-\dimen@ + \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@ + \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi + \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi + \dimen@=-2\K@\ifdim 1\Direction<\dimen@\dimen@=6\K@\fi + \advance\Direction\dimen@ + \count@=\DirectionChar \ifnum\count@<32 \advance\count@96 + \else \advance\count@-32 \fi \chardef\DirectionChar=\count@ + \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64 + \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@ + \let\tmp@=\sinDirection + \edef\sinDirection{\if-\cosDirection\else-\cosDirection\fi}% + \let\cosDirection=\tmp@ + \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@ + \resetupDirection@} +\xydef@\vDirection@(#1,#2)#3{\dimen@ii=#3\relax + \dimen@=#1\dimen@ii \dimen@ii=#2\dimen@ii + \d@X=\cosDirection\dimen@ \advance\d@X-\sinDirection\dimen@ii + \d@Y=\sinDirection\dimen@ \advance\d@Y \cosDirection\dimen@ii + \X@p=\X@c \advance\X@p-\d@X \Y@p=\Y@c \advance\Y@p-\d@Y + \setupDirection@\ignorespaces} +\xydef@\resetDirection@{% + \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p + \let\next@=\resetupDirection@ + \ifdim\sd@X\d@X<\z@ \let\next@=\setupDirection@i \fi + \ifdim\sd@Y\d@Y<\z@ \let\next@=\setupDirection@i \fi + \next@} +\xydef@\resetupDirection@{% + \edef\Directiontest@@##1##2{\noexpand\DN@{##2}% + \noexpand\ifdim\noexpand\d@X=\the\d@X\relax + \noexpand\ifdim\noexpand\d@Y=\the\d@Y\relax \noexpand\DN@{##1}% + \noexpand\fi\noexpand\fi \noexpand\next@}} +\xydef@\unsetupDirection@{\def\Directiontest@@##1##2{##2}} +\uDirection@\xydashl@ +\message{edges,} +\xynew@{if}\ifInside@ +\xydef@\zeroEdge#1{% + \ifcase#1\relax \or \Inside@false \or \dimen@=\z@ + \or \else \Edge@c={\rectangleEdge}\fi} +\xydef@\circleEdge#1{\ifcase#1\expandafter\circleEdge@ + \or \expandafter\circleUnder@ \or \dimen@=\R@c + \or \expandafter\circleProp@ \or \expandafter\circleInner@ + \else \expandafter\circleOuter@ \fi} +\xydef@\circleEdge@{\DN@{\ellipseEdge@}% + \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax + \ifdim\R@c=\U@c\DN@{\circlecentredEdge@}% + \else\DN@{\ellipsecentredEdge@}\fi + \fi\fi \next@} +\xydef@\circleProp@{\DN@{\reverseDirection@\ellipseEdge@}% + \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax + \ifdim\R@c=\U@c\DN@{\reverseDirection@\circlecentredEdge@}% + \else\DN@{\reverseDirection@\ellipsecentredEdge@}\fi + \fi\fi \next@} +\xydef@\circleUnder@{\Inside@false + \ifdim\X@p=\X@c \relax \ifdim\Y@p=\Y@c \Inside@true \fi \fi + \ifInside@ \else \expandafter \circleCentre@ \fi} +\xydef@\circleCentre@{{% + \ifdim\L@c=\R@c \relax\else + \dimen@=\R@c\advance\dimen@-\L@c \divide\dimen@\tw@ + \advance\X@c\dimen@ \advance\R@c-\dimen@ \fi + \d@X=\X@c \advance\d@X-\X@p \d@X=\ifdim\d@X<\z@-\fi\d@X + \ifdim\U@c=\D@c\relax \else + \dimen@=\U@c\advance\dimen@-\D@c \divide\dimen@\tw@ + \advance\Y@c\dimen@ \advance\U@c-\dimen@ \fi + \d@Y=\Y@c \advance\d@Y-\Y@p \d@Y=\ifdim\d@Y<\z@-\fi\d@Y + \DN@{}\ifdim\d@X>\R@c \relax \else \ifdim\d@Y>\U@c \relax + \else \ifdim\U@c=\R@c \DN@{\circlecentredUnder@}% + \else \DN@{\ellipsecentredUnder@}\fi + \fi\fi \next@}} +\xydef@\circleInner@{\DN@{\ellipseInner@}% + \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax + \ifdim\R@c=\U@c\DN@{\circlecentredInner@}% + \else\DN@{\ellipsecentredInner@}\fi + \fi\fi \next@} +\xydef@\circleOuter@{\DN@{\ellipseOuter@}% + \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax + \ifdim\R@c=\U@c\DN@{\circlecentredOuter@}% + \else\DN@{\ellipsecentredOuter@}\fi + \fi\fi \next@} +\xydef@\circlecentredEdge@{% + \dimen@=-\cosDirection\R@c \advance\X@c\dimen@ + \dimen@=-\sinDirection\R@c \advance\Y@c\dimen@} +\xydef@\circlecentredUnder@{% + \loop\ifdim\R@c>100\p@ \circlescale@ \repeat + \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@c + \edef\tmp@{\expandafter\removePT@\the\d@X}\advance\dimen@-\tmp@\d@X + \edef\tmp@{\expandafter\removePT@\the\d@Y}\advance\dimen@-\tmp@\d@Y + \ifdim\dimen@>\z@ \aftergroup\Inside@true \fi} +%%\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ } +\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ } +\xydef@\circlecentredInner@{% + \L@c=\sd@X\cosDirection\R@c \D@c=\sd@Y\sinDirection\R@c + \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}} +\xydef@\circlecentredOuter@{% + \L@c=\R@c \D@c=\R@c \U@c=\D@c \Edge@c={\rectangleEdge}} +\xydef@\ellipsecentredEdge@{\bgroup \X@p=\X@c \Y@p=\Y@c + \ifdim\U@c>\R@c + \X@c=\cosDirection\U@c \Y@c=\sinDirection\U@c + \quotient@\tmp@\U@c\R@c \X@c=\tmp@\X@c \R@c=\U@c + \else + \X@c=\cosDirection\R@c \Y@c=\sinDirection\R@c + \quotient@\tmp@\R@c\U@c \Y@c=\tmp@\Y@c + \fi + \advance\X@c\X@p \advance\Y@c\Y@p + \setupDirection@ \X@c=\X@p \Y@c=\Y@p \circlecentredEdge@ + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p + \ifdim\U@c>\L@c \quotient@\tmp@\L@c\U@c \d@X=\tmp@\d@X + \else \quotient@\tmp@\U@c\R@c \d@Y =\tmp@\d@Y \fi + \X@c=\X@p \advance\X@c\d@X \Y@c=\Y@p \advance\Y@c\d@Y + \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }% +\xydef@\ellipsecentredUnder@{% + \ifdim\R@c>64\p@ \circlescale@ \divide\U@c\KK@ + \else \ifdim\U@c>64\p@ \circlescale@ \divide\U@c\KK@ \fi\fi + \edef\tmp@{\expandafter\removePT@\the\R@c}\d@Y=\tmp@\d@Y + \edef\tmp@{\expandafter\removePT@\the\U@c}\d@X=\tmp@\d@X + \R@c=\tmp@\R@c \circlecentredUnder@ } +\xydef@\ellipsecentredOuter@{\Edge@c={\rectangleEdge}} +\xydef@\ellipsecentredInner@{% + \bgroup \X@p=\X@c \Y@p=\Y@c \ellipsecentredEdge@ + \advance\X@c-\X@p \L@c=\ifdim\X@c<\z@-\fi\X@c + \advance\Y@c-\Y@p \D@c=\ifdim\Y@c<\z@-\fi\Y@c + \edef\next@{\egroup \L@c=\the\L@c \D@c=\the\D@c}\next@ + \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}} +\xydef@\ellipseEdge@{\bgroup + \A@=\R@c \B@=\U@c + \ifdim\R@c=\L@c \d@X=\z@ + \else \d@X=.5\R@c \advance\d@X-.5\L@c + \advance\A@\L@c \divide\A@\tw@ \fi + \ifdim\U@c=\D@c \d@Y=\z@ + \else \d@Y=.5\U@c \advance\d@Y-.5\D@c + \advance\B@\D@c \divide\B@\tw@ \fi + \bgroup + \L@c=\A@ \U@c=\B@ + \R@p=\U@c \advance\R@p\L@c \multiply\R@p\tw@ + \ifdim\B@<\A@ \quotient@\tmp@\U@c\L@c \R@c=\tmp@\p@ \D@c=\p@ + \quotient@\tmp@\R@p\L@c \R@p=\tmp@\p@ + \else + \ifdim\A@<\B@ \quotient@\tmp@\L@c\U@c \D@c=\tmp@\p@ \R@c=\p@ + \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@ + \else + \R@c=\p@ \D@c=\p@ \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@ + \fi\fi + \quotient@\sd@X\d@X\L@c \d@X=\sd@X\p@ + \quotient@\sd@Y\d@Y\U@c \d@Y=\sd@Y\p@ + \loop + \bgroup \U@p=-\p@ \D@p=\z@ + \ifdim\R@c<\p@ + \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@p + \advance\d@X\cosDirection\dimen@ + \else \advance\d@X\cosDirection\R@p \fi + \edef\sd@X{\expandafter\removePT@\the\d@X}% + \advance\U@p\sd@X\d@X + \ifdim\R@c<\p@ + \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\d@X + \advance\D@p\cosDirection\dimen@ + \else \advance\D@p\cosDirection\d@X \fi + \ifdim\D@c<\p@ + \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\R@p + \advance\d@Y\sinDirection\dimen@ + \else \advance\d@Y\sinDirection\R@p \fi + \edef\sd@Y{\expandafter\removePT@\the\d@Y}% + \advance\U@p\sd@Y\d@Y + \ifdim\D@c<\p@ + \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\d@Y + \advance\D@p\sinDirection\dimen@ + \else \advance\D@p\sinDirection\d@Y \fi + \multiply\D@p\tw@ + \dimen@=\ifdim\U@p<\z@-\fi\U@p + \ifdim\dimen@<.01\p@ \U@p=\z@ + \else + \quotient@\tmp@\U@p\D@p \U@p=\tmp@\p@ + \ifdim\U@p<\z@\xywarning@{poor convergence}\U@p=\z@ + \else \advance\R@p-\U@p \U@p=\ifdim\U@p<\z@-\fi\U@p + \fi \fi + \edef\next@{\egroup \R@p=\the\R@p \U@p=\the\U@p \D@p=\the\D@p}\next@ + \ifdim\U@p>\z@ \repeat + \edef\next@{\egroup \dimen@=\the\R@p}\next@ + \edef\tmp@{\expandafter\removePT@\the\dimen@}% + \ifdim\B@<\A@ \dimen@=\tmp@\B@ \else \dimen@=\tmp@\A@ \fi + \dimen@=-\dimen@ + \advance\X@c\cosDirection\dimen@ + \advance\Y@c\sinDirection\dimen@ + \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }% +\xydef@\ellipseOuter@{\Edge@c={\rectangleEdge}} +\xydef@\ellipseInner@{% + \bgroup \X@p=\X@c \Y@p=\Y@c \ellipseEdge@ + \d@X=\X@c\advance\d@X-\X@p + \ifdim\d@X>\z@ \R@p=\d@X \L@p=\R@p + \ifdim\L@c=\R@c\else\advance\L@p\L@c \advance\L@p-\R@c \fi + \else \L@p=-\d@X \R@p=\L@p + \ifdim\L@c=\R@c \else\advance\R@p\R@c \advance\R@p-\L@c \fi + \fi + \d@Y=\Y@c\advance\d@Y-\Y@p + \ifdim\d@Y>\z@ \U@p=\d@Y \D@p=\U@p + \ifdim\D@c=\U@c\else\advance\D@p\D@c \advance\D@p-\U@c \fi + \else \D@p=-\d@Y \U@p=\D@p + \ifdim\D@c=\U@c\else\advance\U@p\U@c \advance\U@p-\D@c \fi + \fi + \edef\next@{\egroup + \L@c=\the\L@p \D@c=\the\D@p \R@c=\the\R@p \U@c=\the\U@p}% + \next@ \Edge@c={\rectangleEdge}} +\xydef@\rectangleEdge#1{\ifcase#1\expandafter\rectangleEdge@ + \or \expandafter\rectangleUnder@ \or \expandafter\rectangleDist@ + \or \expandafter\rectangleProp@ + \else \relax \fi} +\xydef@\rectangleEdge@{% + \ifdim\d@Y<-.05\p@ \rectangleEdge@i + \else\ifdim\d@Y<.05\p@ \rectangleEdge@ii + \else \rectangleEdge@iii\fi\fi + \resetupDirection@} +\xydef@\rectangleEdge@i{% + \ifdim\d@X<-.05\p@ + \settomin@\X@c+\R@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\R@c\d@Y\d@X%1a + \else\ifdim\d@X<.05\p@ \advance\Y@c\U@c + \else \settomin@\X@c-\L@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\L@c\d@Y\d@X + \fi\fi} +\xydef@\rectangleEdge@ii{% + \ifdim\d@X<-.05\p@ \advance\X@c\R@c + \else\ifdim\d@X<.05\p@ + \else \advance\X@c-\L@c + \fi\fi} +\xydef@\rectangleEdge@iii{% + \ifdim\d@X<-.05\p@ + \settomin@\X@c+\R@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\R@c\d@Y\d@X%3a + \else\ifdim\d@X<.05\p@ \advance\Y@c-\D@c + \else \settomin@\X@c-\L@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\L@c\d@Y\d@X + \fi\fi} +\xydef@\settomin@#1#2#3#4#5#6{% + \edef\nextii@{\A@=\the\A@ \B@=\the\B@}\quotient@\next@{#5}{#6}\nextii@ + \dimen@=\sd@X\sd@Y\next@#4\relax + \ifdim#3<\dimen@ \dimen@=#3\fi \advance#1#2\dimen@} +\xydef@\rectangleUnder@{\Inside@false + \ifdim\X@p=\X@c \ifdim\Y@p=\Y@c \Inside@true \fi\fi + \ifInside@ \else + \dimen@=\X@p \advance\dimen@-\X@c + \ifdim \dimen@>-\L@c \relax \ifdim\dimen@<\R@c + \dimen@=\Y@p \advance\dimen@-\Y@c + \ifdim \dimen@>-\D@c \relax \ifdim\dimen@<\U@c + \Inside@true + \fi\fi\fi\fi\fi } +\xydef@\rectangleDist@{\let\next@=\rectangleDist@i + \ifdim\d@X<-.05\p@ \dimen@=\R@c + \else\ifdim\d@X<.05\p@ \dimen@=\z@ \DN@{\dimen@=\dimen@ii}% + \else \dimen@=\L@c \fi\fi + \ifdim\d@Y<-.05\p@ \dimen@ii=\U@c + \else\ifdim\d@Y<.05\p@ \DN@{}% + \else \dimen@ii=\D@c \fi\fi + \next@} +\xydef@\rectangleDist@i{% + \begingroup \quotient@\next\p@{\sd@X\cosDirection\p@}% + \edef\next{\endgroup \dimen@=\next\dimen@}\next + \begingroup \quotient@\next\p@{\sd@Y\sinDirection\p@}% + \edef\next{\endgroup \dimen@ii=\the\dimen@ii}\next + \ifdim\dimen@ii<\dimen@ \dimen@=\dimen@ii \fi} +\xydef@\rectangleProp@{% + \enter@{\A@=\the\A@ \B@=\the\B@ \DirectionfromtheDirection@}% + \reverseDirection@ + \dimen@=1\Direction \count@=\K@ \multiply\count@\tw@ + \ifnum \Direction>\count@ + \DN@{0}% + \advance\dimen@-2\K@ \quotient@\nextii@{\dimen@}{2\K@}% + \else\ifnum \Direction>\z@ + \dimen@=-\dimen@ \advance\dimen@2\K@ \quotient@\next@{\dimen@}{2\K@}% + \DNii@{0}% + \else\ifnum \Direction>-\count@ + \DN@{1}% + \quotient@\nextii@{-\dimen@}{2\K@}% + \else + \advance\dimen@4\K@ \quotient@\next@{\dimen@}{2\K@}% + \DNii@{1}% + \fi\fi\fi + \advance\X@c-\L@c \dimen@=\L@c \advance\dimen@\R@c + \ifdim\dimen@=\z@ \advance\X@c 2\L@c \else \advance\X@c\next@\dimen@ \fi + \advance\Y@c+\U@c \dimen@=\D@c \advance\dimen@\U@c + \ifdim\dimen@=\z@ \advance\Y@c-2\U@c \advance\Y@c\Upness@\U@c + \else \advance\Y@c-\nextii@\dimen@ \fi + \leave@} +\message{connections;} +\xydef@\Creset@@{} +\xydef@\Cshavep@@{\noCshavep@@} +\xydef@\Cshavec@@{\noCshavec@@} +\xydef@\Cslidep@@{\noCslidep@@} +\xydef@\Cslidec@@{\noCslidec@@} +\xydef@\Calong@@{\noCalong@@} +\xydef@\Cintercept@@{\noCintercept@@} +\xydef@\Cbreak@@{\noCbreak@@} +\xydef@\Clast@@{\noClast@@} +\xylet@\lastbreak@@=\empty +\xydef@\noCshavep@@{\setupDirection@ + \enter@{\cfromthec@ \DirectionfromtheDirection@}% + \reverseDirection@ \cfromp@ \the\Edge@c\z@ + \pfromc@ \leave@ \resetDirection@} +\xydef@\noCshavec@@{\setupDirection@ \the\Edge@c\z@ \resetDirection@} +\xydef@\noCslidep@@#1{\dimen@=#1\relax + \advance\X@p\cosDirection\dimen@ \advance\Y@p\sinDirection\dimen@ + \resetDirection@} +\xydef@\noCslidec@@#1{\dimen@=#1\relax + \advance\X@c\cosDirection\dimen@ \advance\Y@c\sinDirection\dimen@ + \resetDirection@} +\xydef@\noCalong@@#1{% + \d@X=#1\d@X \d@Y=#1\d@Y \X@c=\X@p \Y@c=\Y@p \advance\X@c\d@X \advance\Y@c\d@Y + \resetupDirection@} +\xydef@\noCintercept@@{\enter@{\pfromthep@}% + \begingroup\Creset@@ \edef\tmp@{\endgroup + \X@origin=\the\X@p \Y@origin=\the\Y@p \R@c=\the\d@X \U@c=\the\d@Y}\tmp@ + \loop@\dimen@=\ifdim\R@c<\z@-\fi\R@c \advance\dimen@\ifdim\U@c<\z@-\fi\U@c + \ifdim\dimen@>10\p@ \advance\R@c \ifdim\R@c<\z@-\fi 16sp \divide\R@c\KK@ + \advance\U@c \ifdim\U@c<\z@-\fi 16sp \divide\U@c\KK@ \repeat@ + \intersect@ \leave@} +\xydef@\noCbreak@@{\edef\lastbreak@@{\cfromthec@}} +\xydef@\noClast@@{\Creset@@ \edef\lastbreak@@{\cfromthep@}} +\xydef@\no@@{\setupDirection@ \edef\lastbreak@@{\cfromthep@}% + \enter@{\cfromthec@\pfromthep@\DirectionfromtheDirection@}% + \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% + \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@ + \setupDirection@ \the\Edge@c\z@ + \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@ + \resetDirection@ + \edef\Cshavep@@{\DirectionfromtheDirection@ + \pfromthep@\noexpand\resetDirection@}% + \edef\Cshavec@@{\DirectionfromtheDirection@ + \cfromthec@\noexpand\resetDirection@}% + \leave@ + \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% + \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}% + \def\Cbreak@@{\noCbreak@@}\def\Clast@@{\noClast@@}\noinsert@} +\xydef@\noinsert@{\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} +\xydef@\Spread@@{} +\xydef@\checkoverlap@@{} +\xydef@\straight@#1{\setupDirection@ \def\Spread@@{#1}% + \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% + \edef\lastbreak@@{\cfromthep@}% + \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@ + \setupDirection@ \the\Edge@c\z@ + \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@ + \resetDirection@ + \edef\Cshavep@@{\DirectionfromtheDirection@ + \pfromthep@\noexpand\resetDirection@}% + \edef\Cshavec@@{\DirectionfromtheDirection@ + \cfromthec@\noexpand\resetDirection@}% + \noinsert@ + \straight@typeset + \def\Cbreak@@{\straightCbreak@}\def\Clast@@{\straightClast@}% + \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% + \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}% + \Creset@@} +\xydef@\straightcheckoverlap@#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}} +\xydef@\straight@typeset{% + \ifInvisible@ \let\next@=\relax + \else\ifdim 1\Direction<-2\K@ \DN@{\straightv@}% + \else\ifdim 1\Direction<\z@ \DN@{\straighth@}% + \else\ifdim 1\Direction<2\K@ \DN@{\straightv@}% + \else \DN@{\straighth@}% + \fi\fi\fi\fi \checkoverlap@@ \next@} +\xylet@\nextbreak@@=\empty +\xydef@\straightCbreak@{\connectRestore@ + \edef\nextbreak@@{\cfromthec@}% + \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@ + \swap@ \the\Edge@c4\enter@{\cmergethec@}\nextbreak@@ \leave@ + \setupDirection@ + \the\Edge@c\z@ + \swap@ \reverseDirection@ \the\Edge@c\z@ \swap@ \reverseDirection@ + \resetDirection@ \noinsert@ \straight@typeset + \Creset@@ \let\lastbreak@@=\nextbreak@@} +\xydef@\straightClast@{\connectRestore@ + \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@ + \swap@ + \setupDirection@ + \the\Edge@c\z@ + \swap@\reverseDirection@ \the\Edge@c\z@ \swap@\reverseDirection@ + \resetDirection@ \noinsert@ \straight@typeset + \Creset@@ \edef\lastbreak@@{\cfromthep@}} +\xydef@\straighth@{\setbox\z@=\hbox{% + \setbox8=\copy\lastobjectbox@ + \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax + \ifdim \A@=\z@ \count@@=\m@ne + \else \dimen@=\sd@X\d@X \divide\dimen@\A@ \count@@=\dimen@ \fi + \Spread@@ + \ifdim\d@X>\z@ \advance\X@c-\wd8\relax\fi + \dimen@=-\sd@X\wd8\relax + \multiply\dimen@\K@dYdX \divide\dimen@\K@ + \ifdim\d@X>\z@ \advance\Y@c\dimen@ \advance\Y@c-\Leftness@\dimen@ + \else \advance\Y@c\Leftness@\dimen@ \fi + \dimen@=\wd8\relax \A@=\sd@X\d@X \advance\A@-\dimen@ + \B@=\sd@X\dimen@ \multiply\B@\K@dYdX \divide\B@\K@ + \advance\B@-\d@Y \B@=\sd@Y\B@ + \count@=\count@@ \advance\count@\m@ne + \ifnum\z@<\count@ \divide\A@\count@ \divide\B@\count@ \fi + \A@=-\sd@X\A@ \B@=\sd@Y\B@ \wd8=\A@ + \kern\X@c \count@=\z@ + \loop@\ifnum\count@<\count@@ \advance\count@\@ne + \raise\Y@c\copy8\relax \advance\Y@c\B@ \repeat@}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}} +\xydef@\straightv@{\setbox\z@=\vtop{% + \setbox8=\copy\lastobjectbox@ + \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax + \ifdim \B@=\z@ \count@@=\m@ne + \else \dimen@=\sd@Y\d@Y \divide\dimen@\B@ \count@@=\dimen@ \fi + \Spread@@ + \dimen@=\dp8\relax \advance\dimen@\ht8\relax + \B@=\sd@Y\d@Y \advance\B@-\dimen@ + \A@=\sd@Y\dimen@ \multiply\A@\K@dXdY \divide\A@\K@ \advance\A@-\d@X + \A@=\sd@X\A@ \count@=\count@@ \advance\count@\m@ne + \ifnum\z@<\count@ \divide\B@\count@ \divide\A@\count@ \fi + \B@=\sd@Y\B@ \A@=\sd@X\A@ \ht8=\B@ \dp8=\z@ + \ifdim\d@Y<\z@ + \advance\Y@c\dimen@ \advance\Y@c\Upness@\B@ + \else + \advance\dimen@\Upness@\B@ \advance\Y@c-\dimen@ \advance\Y@c\B@ + \fi + \advance\Y@c\B@ + \ifdim\d@X<\z@ \else \advance\X@c-\wd8\relax \fi + \null \kern-\Y@c \count@=\z@ + \loop@\ifnum\count@<\count@@ \advance\count@\@ne + \nointerlineskip \moveright\X@c\copy8\relax \advance\X@c\A@ + \repeat@}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}} +\message{ Xy-pic loaded}\xyuncatcodes \endinput -- cgit v1.2.3