summaryrefslogtreecommitdiff
path: root/graphics/dratex/wotree.sty
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/dratex/wotree.sty')
-rw-r--r--graphics/dratex/wotree.sty106
1 files changed, 106 insertions, 0 deletions
diff --git a/graphics/dratex/wotree.sty b/graphics/dratex/wotree.sty
new file mode 100644
index 0000000000..78ec73999d
--- /dev/null
+++ b/graphics/dratex/wotree.sty
@@ -0,0 +1,106 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% wotree.sty 2000-06-29-20:18 %
+% Copyright (C) 2000 Eitan M. Gurari %
+% %
+% This program can redistributed and/or modified under %
+% the terms of the LaTeX Project Public License %
+% Distributed from CTAN archives in directory %
+% macros/latex/base/lppl.txt; either version 1 of the %
+% License, or (at your option) any later version. %
+% %
+% However, you are allowed to modify this program %
+% without changing its name, if you modify its %
+% signature. Changes to the signature can be introduced %
+% with a directive of the form %
+% \message{signature} %
+% %
+% gurari@cse.ohio-state.edu %
+% http://www.cse.ohio-state.edu/~gurari %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\immediate\write-1{version 2000-06-29-20:18}
+
+\expandafter\edef\csname wo:recall\endcsname{\catcode`:=\the\catcode`:}
+\catcode`\:=11
+
+\Define\WO:GetY(2){\Vb=#2;}
+
+\Define\WOEdge(2){
+ \CSeg\WO:GetY(#2,EdgeGuide)
+ \IF \GtDec(\Vb,0)
+ \MoveToNode(#2,0,-1)
+ \ELSE
+ \MoveToNode(#2,0,1)
+ \FI
+ \MarkLoc(*1) \Move(10,0) \MarkLoc(*2)
+ \MoveToLoc(EdgeGuide) \Move(0,10) \MarkLoc(*3)
+ \MoveToLL(*1,*2)(EdgeGuide,*3) \MarkLoc(*3)
+ \MoveToNode(#1,1,0) \Move(5,0) \LineToLoc(EdgeGuide)
+ \LineToLoc(*3) \CSeg[2]\Line(*1,#2)
+}
+\def\WOTree#1{%
+ \let\WO:tree=\empty
+ \def\:queue{\init:count#1,,//}\put:queue
+ \TreeSpec()()(\WOEdge)
+ \TreeAlign(H,-1,0)(0,0,0)%
+ \WO:TreeSpace
+ \def\wo:temp{\Tree()(}%
+ \expandafter\wo:temp\expandafter{\WO:tree})
+ }
+
+\def\put:queue{%
+ \let\put:woitem=\empty
+ \ifx \WO:tree\empty \else
+ \expandafter\def\expandafter\WO:tree\expandafter{\WO:tree//}%
+ \fi
+ \ifx \:queue\empty \def\wo:temp##1{}\else
+ \let\wo:temp=\:queue \let\:queue=\empty \fi
+ \wo:temp\put:queue }
+
+\def\init:count#1,{%
+ \def\WO:root{#1}\I=0;\WO:count}
+
+\edef\wo:temp{\catcode`\noexpand\&=\the\catcode`\&}
+\catcode`\&=13
+
+\def\WO:count#1,{%
+ \def\wo:temp{#1}\ifx \wo:temp\empty
+ \expandafter\checkWO:root\WO:root//%
+ \edef\wo:temp{\put:woitem\Val\I,\beforeWO:root}%
+ \def\put:woitem{\noexpand&}%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\WO:root
+ \expandafter\expandafter\expandafter
+ {\expandafter\wo:temp\WO:root}%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\WO:tree
+ \expandafter\expandafter\expandafter
+ {\expandafter\WO:tree \WO:root}%
+ \def\WO:root##1//{}\expandafter\WO:root
+ \else
+ \expandafter\def\expandafter\:queue
+ \expandafter{\:queue\init:count#1,,//}%
+ \I+1;\expandafter\WO:count
+ \fi }
+
+\wo:temp
+
+\def\checkWO:root{\futurelet\wo:temp\ckWO:root}
+\def\ckWO:root#1//{\edef\beforeWO:root{\ifx \wo:temp\WO \else
+ \ifx \WO:tree\empty\else
+ \noexpand\noexpand\noexpand\WO{}\fi\fi}}
+
+\def\WO#1{\csname :WO:#1\endcsname}
+\def\defWO#1#2{\expandafter\def\csname :WO:#1\endcsname{#2}}
+
+\defWO{}{\llap{$\triangleright$ }}
+\defWO{not}{\hrulefill~~\WO{}}
+\defWO{or}{~$\bigoplus$}
+\defWO{plus}{~$+$}
+\defWO{xor}{~$\bigotimes$}
+
+\Define\WOSpace(2){\def\WO:TreeSpace{\TreeSpace(C,#1,#2)}}
+\WOSpace(10,20)
+
+\wo:recall
+\endinput
+