summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/ecltree
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:54:33 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:54:33 +0000
commit805344f28ed18694af2af866bb17dcd325dff2a6 (patch)
tree5baedcbb70109480948132583616eb7b25854f45 /Master/texmf-dist/tex/latex/ecltree
parent5d42018a330f8685e7f2025488d58476673f2cbd (diff)
ecltree
git-svn-id: svn://tug.org/texlive/trunk@845 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/ecltree')
-rw-r--r--Master/texmf-dist/tex/latex/ecltree/eclbip.sty112
-rw-r--r--Master/texmf-dist/tex/latex/ecltree/ecltree.sty142
2 files changed, 254 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/ecltree/eclbip.sty b/Master/texmf-dist/tex/latex/ecltree/eclbip.sty
new file mode 100644
index 00000000000..478ecd2bcc5
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ecltree/eclbip.sty
@@ -0,0 +1,112 @@
+% eclbip.sty (C) Hideki ISOZAKI Nov. 24, 1990
+% \ignorespaces Dec.2, 1990
+% draw a bipartite graph with epic.sty
+
+\typeout{ECL Bipartite graph style file by isozaki Dec.2, 1990}
+
+\endlinechar=-1\relax
+\makeatletter
+
+\newdimen\bip@len
+\newbox\bip@box
+
+% #1...Width of Left Node Group
+% #2...Width of Gap between Left Node Group and Right Node Group
+% #3...Width of Right Node Group
+% #4...Height of Vertical Gap between Nodes
+% #5...Width of a Bullet and its Label
+
+\def\bipartite#1#2#3#4#5{
+ \bip@init\bip@sep{#4}
+ \bip@init\bip@lW{#1}
+ \bip@init\bip@eW{#2}
+ \bip@init\bip@rW{#3}
+ \let\bip@lX=\bip@lW
+ \bip@init\bip@rX{\bip@lX\p@}\bip@add\bip@rX{#2}
+ \bip@init\bip@tX{\bip@rX\p@}\bip@add\bip@tX{#3}
+ \bip@init\bip@lY{\z@}
+ \bip@init\bip@rY{\z@}
+ \xdef\bip@bot{0.0}
+ \bip@init\bip@elX{\bip@lX\p@}
+ \bip@add\bip@elX{#5}
+ \bip@init\bip@erX{\bip@rX\p@}
+ \bip@add\bip@erX{-#5}
+ \unitlength=\p@
+ \def\endbipartite{\endpicture
+ \hbox{\vrule\@depth\bip@bot\p@\@height\z@\@width\z@}}
+ \picture(\bip@tX,0)(0,0)\ignorespaces}
+
+%
+% \leftnode[#1]{#2}
+% #1=label, #2=content
+%
+% \leftnode{#1}=\leftnode[#1]{#1}
+%
+
+\def\leftnode{\@dblarg{\@leftnode}}
+
+\def\@leftnode[#1]#2{
+ \setbox\bip@box=\hbox to \z@{\hss
+ \@iparbox[c]{\bip@lW\p@}{\raggedleft #2}}
+ \bip@init\bip@halfH{-.5\ht\bip@box}
+ \bip@add\bip@halfH{-.5\dp\bip@box}
+ \bip@init\bip@corrY{\bip@halfH\p@}
+ \bip@add\bip@corrY{\dp\bip@box}
+ \bip@add\bip@lY{\bip@halfH\p@}
+ \put(\bip@lX,\bip@lY){\raise\bip@corrY\p@\box\bip@box}
+ \put(\bip@elX,\bip@lY){\makebox(0,0){$\bullet$}}
+ \expandafter\edef\csname bip@L#1\endcsname{\bip@lY}
+ \bip@add\bip@lY{\bip@halfH\p@}
+ \bip@max\bip@bot{-\bip@lY\p@}
+ \bip@add\bip@lY{-\bip@sep\p@}\ignorespaces}
+
+\def\rightnode{\@dblarg{\@rightnode}}
+
+\def\@rightnode[#1]#2{
+ \setbox\bip@box=\hbox to \z@{
+ \@iparbox[c]{\bip@rW\p@}{\raggedright #2}\hss}
+ \bip@init\bip@halfH{-.5\ht\bip@box}
+ \bip@add\bip@halfH{-.5\dp\bip@box}
+ \bip@init\bip@corrY{\bip@halfH\p@}
+ \bip@add\bip@corrY{\dp\bip@box}
+ \bip@add\bip@rY{\bip@halfH\p@}
+ \put(\bip@rX,\bip@rY){\raise\bip@corrY\p@\box\bip@box}
+ \put(\bip@erX,\bip@rY){\makebox(0,0){$\bullet$}}
+ \expandafter\edef\csname bip@R#1\endcsname{\bip@rY}
+ \bip@add\bip@rY{\bip@halfH\p@}
+ \bip@max\bip@bot{-\bip@rY\p@}
+ \bip@add\bip@rY{-\bip@sep\p@}\ignorespaces}
+
+%
+% Draw Edges between Nodes
+%
+
+\def\brush#1{\def\bip@brush{#1}\ignorespaces}
+\brush{\drawline}
+
+\def\match#1#2{
+ \bip@brush(\bip@elX,\@nameuse{bip@L#1})(\bip@erX,\@nameuse{bip@R#2})
+ \ignorespaces}
+
+%
+% (1) Avoidance of too much use of dimen.
+% (2) Easy conversion between picture coord and real dimen
+% ---> Keep dimen without 'pt'
+%
+
+\def\bip@init#1#2{\bip@len=#2\relax
+ \edef#1{\expandafter\@RemoveDim\the\bip@len}}
+
+\def\bip@add#1#2{\bip@len=#1\p@\relax\advance\bip@len by #2\relax
+ \edef#1{\expandafter\@RemoveDim\the\bip@len}}
+
+\def\bip@max#1#2{\bip@len=#1\p@\relax
+ \ifdim\bip@len<#2\relax\bip@len=#2
+ \xdef#1{\expandafter\@RemoveDim\the\bip@len}\fi}
+
+{\catcode`\p=12 \catcode`\t=12
+\gdef\@RemoveDim#1pt{#1}}
+
+\endlinechar=13\relax
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/ecltree/ecltree.sty b/Master/texmf-dist/tex/latex/ecltree/ecltree.sty
new file mode 100644
index 00000000000..927f50a54b0
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ecltree/ecltree.sty
@@ -0,0 +1,142 @@
+% ecltree.sty (C) hideki isozaki Nov. 12, 1990
+%
+% In this style file, I intentionally didn't use ordinary
+% terms such as \tree, \subtree, \leaf etc.
+% because I will use different tree macros in one file.
+%
+% This macro needs epic.sty
+% Confirm your epic.sty does not contain \makeatother at EOF.
+
+\makeatletter
+\typeout{ECL Tree graph macro by isozaki, Nov. 12, 1990}
+
+% Ignore End Of Line
+
+\endlinechar=-1\relax
+
+% Dimensions and Boxes : See below
+
+\newdimen\@BundleWidth
+\newdimen\@BundleDepth
+\newdimen\@BundleHeight
+\newbox\@NodeBox
+\newdimen\GapDepth
+\GapDepth=15\p@
+\newdimen\GapWidth
+\GapWidth=4\p@
+\newdimen\EdgeLabelSep
+\EdgeLabelSep=7\p@
+
+%
+% --------------- -
+% | \@TopLabel | |
+% --------------- - |
+% (\@SupportX,\@SupportY) | |
+% / \ | |
+% / \ | |
+% / \ | \GapDepth | \@BundleHeight
+% / \ | |
+% / \ | |
+%(\@HandleX,0) \ | |
+% -------------- -------------- - -
+% | \@NodeBox | | \@NodeBox | | \@BundleDepth
+% | | -------------- |
+% -------------- -
+% |---|
+% \GapWidth
+%
+% |-----------------------------|
+% \@PicWidth
+
+%
+% The main environment to make a (sub)tree: bundle
+% \begin{bundle} \chunk_1 \chunk_2 ... \chunk_n \end{bundle}
+%
+\def\bundle#1{\leavevmode\hbox\bgroup
+ \endlinechar=-1
+ \def\@TopLabel{#1}
+ \def\@HandleList{}
+ \def\@EdgeLabels{}
+ \edef\@EdgeLabelsY{\expandafter\@RemoveDim\the\EdgeLabelSep}
+ \unitlength=\p@
+ \@BundleWidth=\z@
+ \@BundleHeight=\z@
+ \@BundleDepth=\z@
+ \ignorespaces}
+
+\def\endbundle{
+ \advance\@BundleWidth by -\GapWidth
+ \hskip-\GapWidth
+ \setbox\@NodeBox=\hbox{\vbox{\null\@TopLabel}}
+ \advance\@BundleHeight by \GapDepth
+ \advance\@BundleHeight by \ht\@NodeBox
+ \advance\@BundleHeight by \dp\@NodeBox
+ \vrule\@height\@BundleHeight\@width\z@\@depth\@BundleDepth
+ \edef\@SupportY{\expandafter\@RemoveDim\the\GapDepth}
+ \edef\@SupportX{\expandafter\@RemoveDim\the\@BundleWidth}
+ \setbox\@NodeBox=\hbox to \z@{\hss\@TopLabel\hss}
+ \hskip-\@BundleWidth
+ \edef\@EdgeLabels{\@EdgeLabels{}}
+ \edef\@PicWidth{\expandafter\@RemoveDim\the\@BundleWidth}
+ \@BundleWidth=0.5\@BundleWidth
+ \edef\@SupportX{\expandafter\@RemoveDim\the\@BundleWidth}
+ \@DrawBundle}
+
+
+\def\@DrawBundle{
+ \begin{picture}(\@PicWidth,0)(0,0)
+ \edef\@HandleList{\expandafter\@cdr\@HandleList\@nil}
+ \@for\@HandleX:=\@HandleList\do{
+ \@DrawLine(\@SupportX,\@SupportY)(\@HandleX,0)
+ \put(\@HandleX,\@EdgeLabelsY){
+ \makebox(0,0){\expandafter\@car\@EdgeLabels\@nil}}
+ \edef\@EdgeLabels{\expandafter\@cdr\@EdgeLabels\@nil}}
+ \put(\@SupportX,\@SupportY){\raise\dp\@NodeBox\box\@NodeBox}
+ \end{picture}\egroup}
+
+
+%
+% \chunk[#1]{#2} means a leaf or a subtree.
+% #1 ... Label for the edge which connects the leaf or the subtree
+% with its parent node. (optional argument)
+% #2 ... Label for the leaf or the subtree
+%
+
+\def\chunk{\@ifnextchar[{\@chunk}{\@chunk[]}}
+
+\def\@chunk[#1]#2{\edef\@EdgeLabels{\@EdgeLabels{#1}}
+ \setbox\@NodeBox=\vtop{\null\hbox{#2}}
+ \advance\@BundleWidth by 0.5\wd\@NodeBox
+ \ifnum\@BundleDepth<\dp\@NodeBox
+ \@BundleDepth=\dp\@NodeBox\fi
+ \edef\@HandleList{\@HandleList,
+ \expandafter\@RemoveDim\the\@BundleWidth}
+ \advance\@BundleWidth by 0.5\wd\@NodeBox
+ \advance\@BundleWidth by \GapWidth
+ \box\@NodeBox\hskip\GapWidth
+ \ignorespaces}
+
+% To change line attribute
+% ex.
+% \drawwith{\path} ... efficient solid line defined by eepic.sty
+% \drawwith{\dashline{2}}
+
+\def\drawwith#1{\def\@DrawLine{#1}}
+
+% Default
+\drawwith{\drawline}
+
+% Ordinary catcode for p and t is 11
+% Application of \the to dimen generates text such as 1.0pt.
+% This pt's catcode is 12.
+
+{\catcode`\p=12 \catcode`\t=12
+\gdef\@RemoveDim#1pt{#1}}
+
+% Restore original End Of Line
+
+\endlinechar=13\relax
+
+\endinput
+
+