summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pst-jtree
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-12-30 23:50:06 +0000
committerKarl Berry <karl@freefriends.org>2010-12-30 23:50:06 +0000
commit58679cc130f6f05e33c54456b379a2b878211c29 (patch)
tree8e69c516776b653ec6d28fe8559b630a5422862f /Master/texmf-dist/tex/generic/pst-jtree
parent93125edaad6060997d02d972a15f2543b145e676 (diff)
pst-jtree
git-svn-id: svn://tug.org/texlive/trunk@20894 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-jtree')
-rw-r--r--Master/texmf-dist/tex/generic/pst-jtree/pst-jtree.tex432
1 files changed, 282 insertions, 150 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-jtree/pst-jtree.tex b/Master/texmf-dist/tex/generic/pst-jtree/pst-jtree.tex
index 0bbd8d0ea1e..898a84f50cc 100644
--- a/Master/texmf-dist/tex/generic/pst-jtree/pst-jtree.tex
+++ b/Master/texmf-dist/tex/generic/pst-jtree/pst-jtree.tex
@@ -1,21 +1,58 @@
+% Author: John Frampton, j.frampton@neu.edu
+%
% Users should feel free to modify this file in any way they
% see fit. If these modification go beyond your personal
% use, please send me a careful description of the
% modifications that have been made and the reasons that
% they were made.
-\def\fileversion{2.5}
-\def\filedate{2010/02/22}
-\message{ v\fileversion, \filedate}
-
+%
+% Please NOTIFY ME about bugs and incompatibilities.
+%
+\def\fileversion{2.6}
+\def\filedate{2010/12/17}
+\message{`PST-jTree' v\fileversion\space\space <\filedate> (jf)}
+%
\csname JTreeLoaded\endcsname
\let\JTreeLoaded\endinput
\ifx\PSTricksLoaded\endinput \else \input pstricks \fi\relax
\ifx\PSTnodesLoaded\endinput \else \input pst-node \fi\relax
\ifx\PSTXKeyLoaded\endinput \else \input pst-xkey \fi\relax
-\edef\TheAtCode{\the\catcode`\@}
-
-\catcode`@=12 \let\OtherAt=@
+%
+% commands for manipulating character codes
+\begingroup
\catcode`@=11
+\gdef\jStoreCat#1{%
+ \expandafter\edef\csname @OldCat\string#1\endcsname
+ {\noexpand\catcode\noexpand`\noexpand#1=\the\catcode`#1}%
+}
+\gdef\jRestoreCat#1{\edef\tempa{@OldCat\string#1}%
+ \expandafter\csname\tempa\endcsname \ignorespaces}
+\catcode`@=12
+\global\let\OtherAt=@
+\endgroup
+\def\jTempChangeCat#1#2{\jStoreCat#1\catcode`#1=#2\ignorespaces}
+\jTempChangeCat @{11}
+\def\j@StoreCats#1{%
+ \XKV@for@n{#1}\@char{\expandafter\jStoreCat\@char}%
+}
+\def\j@ChangeCat#1#2{\catcode`#1=#2}
+\def\j@MakeAllOther#1{%
+ \XKV@for@n{#1}\@char{\expandafter\j@ChangeCat\@char{12}}%
+}
+\def\j@TempMakeAllOther#1{%
+ \XKV@for@n{#1}\@char{\expandafter\jTempChangeCat\@char{12}}%
+ \ignorespaces
+}
+\def\j@RestoreCats#1{%
+ \XKV@for@n{#1}\@char{\expandafter\jRestoreCat\@char}%
+ \ignorespaces
+}
+\def\tempjtree@cats{\jTempChangeCat ^{7}\j@TempMakeAllOther{",>,<}}
+\def\jtree@cats{\catcode`^=7 \j@MakeAllOther{",>,<}}
+\def\unjtree@cats{\j@RestoreCats{^,",>,<}}
+\tempjtree@cats
+%
+% register resources
\newdimen\@xpos
\newdimen\@ypos
\newdimen\@@xpos
@@ -33,9 +70,44 @@
\newtoks\jtEverytree
\newtoks\jteverytree
\newtoks\jteverylabel
-\newif\if@omit
\newcount\@CurrState
-%%%
+%
+\newif\if@omit
+%
+% from eplain - \@futurenonspacelet, \@getoptionalarg
+\def\@futurenonspacelet#1{\def\cs{#1}%
+ \afterassignment\@stepone\let\@nexttoken=
+}
+\begingroup
+\def\\{\global\let\@stoken= }%
+\\ %
+\endgroup
+\def\@stepone{\expandafter\futurelet\cs\@steptwo}%
+\def\@steptwo{\expandafter\ifx\cs\@stoken\let\@@next=\@stepthree
+ \else\let\@@next=\@nexttoken\fi \@@next}%
+\def\@stepthree{\afterassignment\@stepone\let\@@next= }%
+\def\@getoptionalarg#1{%
+ \let\@optionaltemp = #1%
+ \let\@optionalnext = \relax
+ \@futurenonspacelet\@optionalnext\@bracketcheck
+}
+\def\@bracketcheck{%
+ \ifx [\@optionalnext
+ \expandafter\@@getoptionalarg
+ \else
+ \let\@optionalarg = \empty
+ \expandafter\@optionaltemp
+ \fi
+}
+\def\@@getoptionalarg[#1]{%
+ \def\@optionalarg{#1}%
+ \@optionaltemp
+}
+% end eplain utilities
+\def\psset@optionalarg{%
+ \ifx\@optionalarg\empty \else
+ \expandafter\psset\expandafter{\@optionalarg}\fi
+}
\def\jt@xovery#1#2{%
\jt@ytox@a#1//\@nil#2\ignorespaces}
\def\jt@ytox@a#1/#2/#3\@nil#4{%
@@ -44,18 +116,9 @@
\pst@dimc=\@denom pt \pst@dimd=#1pt \pst@dimd=-\pst@dimd
\pst@divide\pst@dimc\pst@dimd#4}
%%%
-\def\Expandafter#1#2{\expandafter\expandafter\expandafter#1#2}
+\def\expandaftertwice{\expandafter\expandafter\expandafter}
\def\@empty{}
\def\@nullbox{\omit}
-\begingroup
-\def\:{\jf@gobblespace} \expandafter\gdef\: {}
-\endgroup
-%%% this is also in @lingbasics
-\def\ling@getpars#1{%
- \def\k@@p{#1}\@ifnextchar[\ling@getparsA\ling@getparsB}
-\def\ling@getparsA[#1]{\def\pst@pars{#1}\k@@p}
-\def\ling@getparsB{\let\pst@pars\@empty \k@@p}
-%%%
\def\psinterpolate(#1)(#2)#3#4{{\SpecialCoor
\pst@getcoor{#1}\pst@tempa%
\pst@getcoor{#2}\pst@tempb%
@@ -68,7 +131,6 @@
/dy YB YA sub def
dx #3\space mul XA add dy #3\space mul YA add){#4}
}\ignorespaces}
-
%% PSTricks parameters
%%
% labelgap,labelgapt,labelgapb,everytree,everylabel,branch,triratio
@@ -80,29 +142,23 @@
\else
\pssetlength\pst@dima{#2#3}\fi }
\pst@addfams{jtree}
-\define@key[psset]{jtree}{labelgapt}%
- {\jtreevalue{labelgapt}#1\@nil
- \edef\jt@labelgapt{\the\pst@dima}}
-\define@key[psset]{jtree}{labelgapb}
- {\jtreevalue{labelgapb}#1\@nil
- \edef\jt@labelgapb{\the\pst@dima}}
+\def\define@inckey#1{% incremental key
+ \define@key[psset]{jtree}{#1}%
+ {\jtreevalue{#1}##1\@nil
+ \expandafter\edef\csname jt@#1\endcsname{\the\pst@dima}}%
+}
+\def\defin@inckeys#1{\XKV@for@n{#1}\@parname{%
+ \expandafter\define@inckey\expandafter{\@parname}%
+}}
+\defin@inckeys{labelgapt,labelgapb,labeloffset,%
+ labelstrutt,labelstrutb,baretopadjust}
\define@key[psset]{jtree}{labelgap}
{\psset{labelgapt=#1,labelgapb=#1}}
-\define@key[psset]{jtree}{labeloffset}{%
- \jtreevalue{labeloffset}#1\@nil
- \edef\jt@labeloffset{\the\pst@dima}}
-\define@key[psset]{jtree}{labelstrutt}{%
- \jtreevalue{labelstrutt}#1\@nil
- \edef\jt@labelstrutt{\the\pst@dima}}
-\define@key[psset]{jtree}{labelstrutb}{%
- \jtreevalue{labelstrutb}#1\@nil
- \edef\jt@labelstrutb{\the\pst@dima}}
\define@key[psset]{jtree}{everylabel}{\jteverylabel={#1}}
\define@key[psset]{jtree}{everytree}{\jteverytree={#1}}
+% 12/29/09 parameter eval added
+\define@key[psset]{jtree}{eval}{#1}
\define@key[psset]{jtree}{triratio}{\edef\jt@triratio{#1}}
-\define@key[psset]{jtree}{baretopadjust}{%
- \jtreevalue{baretopadjust}#1\@nil
- \edef\jt@baretopadjust{\the\pst@dima}}
\define@key[psset]{jtree}{treevshift}{%
\jtreevalue{labelgapt}#1\@nil
\edef\jt@treevshift{\the\pst@dima}}
@@ -131,7 +187,7 @@
% syntax: \psset{dirA=(1:1)} (note :) sets angleA to point in
% the (1,1) direction
% end new parameter
-
+%
\def\jt@maxafter{\xdef\jt@@maxafter{%
\noexpand\max@left=\the\max@left
\noexpand\max@right=\the\max@right
@@ -145,17 +201,22 @@
\noexpand\@@xpos=\the\@@xpos
\noexpand\@@ypos=\the\@@ypos}%
\aftergroup\vartri@@after}
-%%%%%%%%%%%%%%%%%%%%%%
-%%%%% leaf definitions
-\def\defbranch{\ling@getpars\defbranch@a}
+%
+% leaf definitions
+\def\defenter{\j@TempMakeAllOther{>,<}\@getoptionalarg}
+\def\defreturn{\j@RestoreCats{>,<}}
+%
+\def\defbranch{\defenter\defbranch@a}
\def\defbranch@a<#1>#2(#3)#4(#5){%
\jt@xovery{#5}\temp
- \Expandafter\edef\@nameuse{leaf@#1}%
+ \expandaftertwice\edef\@nameuse{leaf@#1}%
{\noexpand\def\noexpand\@leaf{%
- \noexpand\@@branch{\pst@pars}{#3}{\temp}}%
- }\ignorespaces}
+ \noexpand\@@branch{\@optionalarg}{#3}{\temp}}}%
+ \defreturn
+ \ignorespaces
+}
\def\@@branch#1#2#3{\@@xpos=\@xpos \@@ypos=\@ypos
- {\psset{#1}\expandafter\psset\expandafter{\pst@pars}%
+ {\psset{#1}\psset@optionalarg
\pssetylength\pst@dimd{#2}
\pst@dimc=#3\pst@dimd
\pst@divide\psxunit\psyunit\temp
@@ -171,16 +232,18 @@
\ifdim\@ypos < \max@down \max@down=\@ypos \fi
\jt@maxafter}%
}
-\def\deftriangle{\ling@getpars\deftriangle@a}
+\def\deftriangle{\defenter\deftriangle@a}
\def\deftriangle@a#1<#2>#3(#4)#5(#6)#7(#8){%
\jt@xovery{#6}\tempA
\jt@xovery{#8}\tempB
- \Expandafter\edef\@nameuse{leaf@#2}%
+ \expandaftertwice\edef\@nameuse{leaf@#2}%
{\noexpand\def\noexpand\@leaf{%
- \noexpand\@@triangle{\pst@pars}{#4}{\tempA}{\tempB}}}%
+ \noexpand\@@triangle{\@optionalarg}{#4}{\tempA}{\tempB}}}%
+ \defreturn
+ \ignorespaces
}
\def\@@triangle#1#2#3#4{\@@xpos=\@xpos \@@ypos=\@ypos
- {\psset{#1}\expandafter\psset\expandafter{\pst@pars}
+ {\psset{#1}\psset@optionalarg
\jt@dima=\@xpos \jt@dimb=\@ypos
\pssetylength\jt@dimc{#2}
\jt@dimd=#3\jt@dimc
@@ -206,17 +269,19 @@
\jt@positionafter}%
\edef\triwd{\temp}%
}
-\def\defvartriangle{\ling@getpars\defvartriangle@a}
+\def\defvartriangle{\defenter\defvartriangle@a}
\def\defvartriangle@a#1<#2>#3(#4){%
- \Expandafter\edef\@nameuse{leaf@#2}%
+ \expandaftertwice\edef\@nameuse{leaf@#2}%
{\noexpand\@CurrState=\State@vartri
\noexpand\def\noexpand\@leaf{%
- \noexpand\@@vartriangle{\pst@pars}{#4}}}%
+ \noexpand\@@vartriangle{\@optionalarg}{#4}}}%
+ \defreturn
+ \ignorespaces
}
\def\@@vartriangle#1#2{\@@xpos=\@xpos \@@ypos=\@ypos
{\expandafter\psset\expandafter{\jf@@pars}%
\edef\@vartriratio{\jt@triratio}%
- \psset{#1}\expandafter\psset\expandafter{\pst@pars}%
+ \psset{#1}\psset@optionalarg
\pssetylength\jt@dimc{#2}
\jt@dimc=\jt@scaleyby\jt@dimc
\advance\@ypos by -\jt@dimc
@@ -276,22 +341,14 @@
\def\@ifCurrState#1{\ifnum\@CurrState=#1}
\def\start{\xdef\@topadjust{\jt@baretopadjust}\@CurrState=\State@root
\jtp@parse }
-% 23 June 05 removed \expandafter
-
-
-%%% utility used extensive by the parser
-%%% removes following space token and expands the token
-%%% which follows
-\def\@preparenext#1{\def\@@hold{#1}\@pn@}
-\def\@pn@{\futurelet\temp\@pn@a}
-\def\@pn@a{\ifx\temp\@sptoken \let\next\@pn@b
- \else \let\next\@pn@c \fi \next}
-\def\@pn@b{\expandafter\@pn@c\jf@gobblespace}
-\def\@pn@c{\futurelet\temp\@pn@d}
-\def\@pn@d{\ifcat\noexpand\temp\noexpand\relax
- \let\next\@pn@e \else \let\next\@@hold \fi \next}
-\def\@pn@e{\expandafter\@@hold}
-%%% main parser
+%
+% \@preparenext is used extensive by the parser. It removes a
+% following space token and expands the token which follows.
+\def\@preparenext#1{%
+ \def\@@hold{\expandafter #1}%
+ \@futurenonspacelet\temp\@@hold % \temp is a dummy
+}
+%%%% main parser
\def\jtp@parse{\@preparenext\jtp@parseA}
\def\jtp@parseA{\futurelet\temp\jtp@parseD}
\def\jtp@parseD{%
@@ -301,7 +358,6 @@
\ifx\temp:\let\next\jtp@colon \else
\ifx\temp!\let\next\jtp@insertlabel \else
\ifx\temp\OtherAt \let\next\jtp@insertlabel \else
-% \ifx\temp;\let\next\jtp@semicolon \else
\ifx\temp(\let\next\jtp@lparen \else
\ifx\temp)\let\next\jtp@rparen \else
\ifx\temp.\let\next\jtp@exit \else
@@ -316,19 +372,22 @@
\def\jtp@TestForOmitA{\global\@omittrue
\ifx\temp\omit \let\next\@gobble
\else \ifx\temp\pnode \let\next\relax
- \else \global\@omitfalse
- \def\next{\the\jteverylabel}\fi\fi \next
+ \else \ifx\temp\elc \let\next\relax
+ \else \global\@omitfalse
+ \def\next{\the\jteverylabel}\fi\fi\fi \next
}
%%
-\def\jtp@label#1{\def\@stuff{#1}\@preparenext\jtp@labelA}
-\def\jtp@labelA{\expandafter\ling@getpars\expandafter\jtp@labelB}
+\def\jtp@label{\unjtree@cats\jtp@label@}
+\def\jtp@label@#1{\def\@stuff{#1}\jtree@cats\@preparenext\jtp@labelA}
+%\def\jtp@label#1{\def\@stuff{#1}\@preparenext\jtp@labelA}
+\def\jtp@labelA{\expandafter\@getoptionalarg\expandafter\jtp@labelB}
\def\jtp@labelB{\@preparenext\jtp@labelC}
\def\jtp@labelC{\@ifnextchar \OtherAt
\jtp@labelD{\def\@explabel{}\jtp@labelE}}
\def\testlabel#1.#2\@nil{\def\temp{#2}\ifx\temp\@empty
\else \jtp@err{SPACE MUST FOLLOW @TAG OR !TAG}\fi}
\def\jtp@labelD#1#2 {\def\@explabel{#2}\testlabel#2.\@nil\jtp@labelE}
-\def\jtp@labelE{\bgroup\expandafter\psset\expandafter{\pst@pars}%
+\def\jtp@labelE{\bgroup\psset@optionalarg
\setbox\@nodebox\hbox{\expandafter\jtp@TestForOmit\@stuff}%
\@ifCurrState\State@vartri \@leaf \fi
\jt@setnode\vartri@after\jt@positionafter\egroup
@@ -336,13 +395,11 @@
\@ifnextchar !\jtp@labelF\jtp@labelG}
\def\jtp@labelF #1 {%
\testlabel#1.\@nil
- \Expandafter\xdef\@nameuse{coords@#1}{%
+ \expandaftertwice\xdef\@nameuse{coords@#1}{%
\noexpand\@xpos=\the\@xpos\noexpand\@ypos=\the\@ypos}%
\jtp@labelH
}
\def\jtp@labelG{\@ifnextchar (\jtp@lparen\jtp@labelH}
-%\def\jtp@labelH{%
-% \@ifnextchar;{\expandafter\jtp@labelHa\@gobble}\jtp@labelHa}
\def\jtp@labelH{%
\@ifCurrState\State@colonB
\jt@maxafter\egroup \@CurrState=\State@normal
@@ -355,36 +412,70 @@
%%%% branches
\def\colon@error{\jtp@err{(pars) + target should follow : operator}}
\def\jtp@branch<#1>{%
- \ifnum\@CurrState=\State@root \@CurrState=\State@normal
- \else\ifnum\@CurrState=\State@colonA \@CurrState=\State@colonB
- \else\ifnum\@CurrState=\State@colonB \colon@error \fi\fi\fi
- \Expandafter\ifx\@nameuse{leaf@#1}\relax
- \jtp@err{unknown branch, <#1>}\fi
- \@nameuse{leaf@#1}\@preparenext\jtp@branchA}
-\def\jtp@branchA{\expandafter\ling@getpars\expandafter\jtp@branchB}
+ \ifnum\@CurrState=\State@root
+ \@CurrState=\State@normal
+ \else
+ \ifnum\@CurrState=\State@colonA
+ \@CurrState=\State@colonB
+ \else
+ \ifnum\@CurrState=\State@colonB
+ \colon@error
+ \fi
+ \fi
+ \fi
+ \expandaftertwice\ifx\@nameuse{leaf@#1}\relax
+ \jtp@err{unknown branch, <#1>}%
+ \fi
+ \@nameuse{leaf@#1}%
+ \@preparenext
+ \jtp@branchA
+}
+\def\jtp@branchA{\expandafter\@getoptionalarg\expandafter\jtp@branchB}
\def\jtp@branchB{%
- \@ifCurrState\State@vartri \edef\jf@@pars{\pst@pars}%
- \let\next\jtp@varbranch\else
- \let\next\jtp@mkbranch\fi \next}
+ \@ifCurrState\State@vartri
+ \edef\jf@@pars{\@optionalarg}%
+ \let\next\jtp@varbranch
+ \else
+ \let\next\jtp@mkbranch
+ \fi
+ \next
+}
\def\jtp@mkbranch{\@leaf\jtp@parse}
\def\jtp@varbranch{\@preparenext\jtp@varbranchA}
\def\jtp@varbranchA{\@ifnextchar\bgroup \jtp@label
{\jtp@err{vartriangle (pars) should be followed by a label}%
\fi \next}}
%%% the rest
-\def\jtp@colon#1{\ifnum\@CurrState<\State@colonB
+\def\jtp@colon#1{%
+ \ifnum\@CurrState<\State@colonB
\else \colon@error \fi
- \bgroup \@CurrState=\State@colonA
- \jtp@parse <colonA>}
-%\def\jtp@semicolon#1{\jtp@parse ()}
-\def\jtp@lparen#1{\@ifCurrState\State@root
- \global\@CurrState=\State@normal \gdef\@topadjust{0pt}%
- \fi \bgroup \@CurrState=\State@normal \jtp@parse}
-\def\jtp@rparen#1{\jt@maxafter\egroup
+ \bgroup
+ \@CurrState=\State@colonA
+ \jtp@parse <colonA>%
+}
+\def\jtp@lparen#1{%
+ \@ifCurrState\State@root
+ \global\@CurrState=\State@normal
+ \gdef\@topadjust{0pt}%
+ \fi
+ \bgroup
+ \@CurrState=\State@normal
+ \jtp@parse
+}
+\def\jtp@rparen#1{%
+ \jt@maxafter\egroup
\@ifCurrState\State@colonB
- \def\next{\jt@maxafter\egroup\@CurrState=\State@normal
- \jtp@parse <colonB>}\else
- \def\next{\jtp@parse}\fi \next }
+ \def\next{%
+ \jt@maxafter
+ \egroup
+ \@CurrState=\State@normal
+ \jtp@parse <colonB>%
+ }%
+ \else
+ \def\next{\jtp@parse}%
+ \fi
+ \next
+}
\def\jtp@exit#1{\ignorespaces}
\def\jtp@insertlabel{\jtp@parse{\omit}}
\def\jtp@HatOp#1{\@ifCurrState\State@normal \else
@@ -393,97 +484,138 @@
\def\jtp@evalnext#1#2{\ifnum\@CurrState>1
\jtp@err{misplaced " evaluation}\fi #2\jtp@parse}
%%% end of parser
-
-\def\adjoin at #1 {\Expandafter\ifx\@nameuse{coords@#1}\relax
- \writeln{* * coords@#1 unknown * *}\let\next\more@gobble\else
- \@nameuse{coords@#1}\let\next\jtp@parse \fi \next}
+%
+\def\adjoin at #1 {%
+ \expandaftertwice\ifx\@nameuse{coords@#1}\relax
+ \writeln{* * coords@#1 unknown * *}%
+ \let\next\more@gobble
+ \else
+ \@nameuse{coords@#1}%
+ \let\next\jtp@parse
+ \fi
+ \next
+}
\def\more@gobble#1.{\ignorespaces}
-\def\adjoinop#1 ={\@ifCurrState\State@root
- \xdef\@topadjust{\jt@baretopadjust}\fi
- \adjoin at !#1 }
-
-\def\jtree{\ling@getpars\jtree@a}
+\def\adjoinop#1 ={%
+ \@ifCurrState\State@root
+ \xdef\@topadjust{\jt@baretopadjust}\fi
+ \adjoin at !#1
+}
+\def\jtree{\@getoptionalarg\jtree@a}
\def\jtree@a{\leavevmode
\setbox\tree@box\hbox\bgroup
- \Expandafter\def\@nameuse{coords@!}{\@xpos=0pt \@ypos=0pt}%
+ \tempjtree@cats
+ \expandaftertwice\def\@nameuse{coords@!}{\@xpos=0pt \@ypos=0pt}%
\ifjt@normallabelstrut \NormalLabelStrut \fi
\the\jtEverytree
\the\jteverytree
- \expandafter\psset\expandafter{\pst@pars}%
+ \psset@optionalarg
\@CurrState=\State@root
\def\@topadjust{\jt@baretopadjust}%
\@xpos=0pt \@ypos=0pt
\max@left=\maxdimen \max@right=-\maxdimen \max@down=0pt
\ignorespaces
}
-\def\jt@topadjustafter{\pssetlength\jt@dime\@topadjust
+\define@key[psset]{jtree}{bbadjust}{\@bbadjust#1 \@nil}
+\def\@bbadjust{\futurelet\temp\@@bbadjust}
+\def\@@bbadjust{\ifx\temp\@nil \let\next\@gobble
+ \else \let\next\@@@bbadjust \fi \next}
+\def\@@@bbadjust #1 #2 {%
+ \expandafter\def\csname jt@bb#1adjust\endcsname{#2}%
+ \@bbadjust
+}
+\psset{bbadjust=height 0pt depth 0pt left 0pt right 0pt}
+\def\jt@afterpic{%
+ \pssetlength\jt@dime\@topadjust
\psaddtolength\jt@dime\jt@treevshift
- \xdef\jt@@topadjustafter
- {\noexpand\def\noexpand\@topadjust{\the\jt@dime}}%
- \aftergroup\jt@@topadjustafter
+ \xdef\jt@@afterpic
+ {%
+ \noexpand\def\noexpand\@topadjust{\the\jt@dime}%
+ \noexpand\edef\noexpand\@extraht{\jt@bbheightadjust}%
+ \noexpand\edef\noexpand\@extraleft{\jt@bbleftadjust}%
+ \noexpand\edef\noexpand\@extraright{\jt@bbrightadjust}%
+ }%
+ \aftergroup\jt@@afterpic
}
-\def\endjtree{\jt@maxafter\jt@topadjustafter\egroup
+\def\endjtree{%
+ \advance\max@down by -\jt@bbdepthadjust
+ \jt@afterpic\jt@maxafter\egroup
+ \advance\max@left by -\@extraleft
+ \advance\max@right by \@extraright
\dp\tree@box=-\max@down
- \kern-\max@left
- \raise\@topadjust
- \box\tree@box\kern\max@right
+ \vbox{%
+ \kern\@extraht
+ \hbox{\kern-\max@left
+ \raise\@topadjust \box\tree@box
+ \kern\max@right}%
+ }%
}
-
-%%%%
-%% alternates to \psline for drawing branches
+% alternates to \psline for drawing branches
\let\branch@type=\psline
\def\blank(#1)(#2){\ignorespaces}
% branch with centered elision
-\def\brokenbranch(#1,#2)(#3,#4){{\psline(#1,#2)(#3,#4)
- \dimpuba=#1\dimpubb=#2\dimpubc=#3\dimpubd=#4%
- \dimpuba=.5\dimpuba \advance\dimpuba by .5\dimpubc
- \dimpubb=.5\dimpubb \advance\dimpubb by .5\dimpubd
- \rput(\dimpuba,\dimpubb){\pscirclebox*{\vrule
- height3pt width0pt\dots}}}\ignorespaces
+\def\brokenbranch(#1,#2)(#3,#4){%
+ {\psline(#1,#2)(#3,#4)
+ \jt@dima=#1\jt@dimb=#2\jt@dimc=#3\jt@dimd=#4%
+ \jt@dima=.5\jt@dima \advance\jt@dima by .5\jt@dimc
+ \jt@dimb=.5\jt@dimb \advance\jt@dimb by .5\jt@dimd
+ \rput(\jt@dima,\jt@dimb){\pscirclebox*{\vrule
+ height3pt width0pt\dots}}}%
+ \ignorespaces
}
% \etc branches (trail off into ...)
\def\psset@etcratio#1{\edef\jt@etcratio{#1}}
% determines the proportion of the branch devoted to ...
\newpsstyle{etc}{nodesepB=0,nodesepA=1pt,linestyle=dotted,
linewidth=1.2pt,dotsep=2pt}
-\def\etcbranch(#1,#2)(#3,#4){{\dimpuba=#1\dimpubb=#3%
- \dimpubc=\dimpubb
- \advance\dimpubc by \jt@etcratio\dimpuba
- \advance\dimpubc by -\jt@etcratio\dimpubb
- \dimpuba=#2\dimpubb=#4%
- \dimpubd=\dimpubb
- \advance\dimpubd by \jt@etcratio\dimpuba
- \advance\dimpubd by -\jt@etcratio\dimpubb
- \psline[arrows=-cc](#1,#2)(\dimpubc,\dimpubd)
- \pcline[style=etc](\dimpubc,\dimpubd)(#3,#4)}%
+\def\etcbranch(#1,#2)(#3,#4){{\jt@dima=#1\jt@dimb=#3%
+ \jt@dimc=\jt@dimb
+ \advance\jt@dimc by \jt@etcratio\jt@dima
+ \advance\jt@dimc by -\jt@etcratio\jt@dimb
+ \jt@dima=#2\jt@dimb=#4%
+ \jt@dimd=\jt@dimb
+ \advance\jt@dimd by \jt@etcratio\jt@dima
+ \advance\jt@dimd by -\jt@etcratio\jt@dimb
+ \psline[arrows=-cc](#1,#2)(\jt@dimc,\jt@dimd)
+ \pcline[style=etc](\jt@dimc,\jt@dimd)(#3,#4)}%
\ignorespaces
}
\def\etc{[branch=\etcbranch,scaleby=.7]}
% the default is that \etc is 70% the length of \rb and 75% of
% it is dots
% Incremental tree building
-\def\stuff{\ling@getpars\stuff@A}
-\def\stuff@A{\ifx\pst@pars\@empty no def\else
- \Expandafter\ifx\@nameuse{stuff@@\pst@pars}\relax
- {\tt [}\expandafter\tt\pst@pars]\else
- \@nameuse{stuff@@\pst@pars}\fi\fi
+\def\stuff{\@getoptionalarg\stuff@A}
+\def\stuff@A{\ifx\@optionalarg\@empty no def\else
+ \expandaftertwice\ifx\@nameuse{stuff@@\@optionalarg}\relax
+ {\tt [}\expandafter\tt\@optionalarg]\else
+ \@nameuse{stuff@@\@optionalarg}\fi\fi
}
\def\defstuff[#1]#2{%
- \Expandafter\def\@nameuse{stuff@@#1}{#2}\ignorespaces}
+ \expandaftertwice\def\@nameuse{stuff@@#1}{#2}\ignorespaces}
% support for multiline labels
\def\multiline{\setbox0=\hbox{\strut}\vrule height\ht0 width0pt
\xdef\@temp@{\the\dp0}%
\vtop\bgroup\let\\=\cr\halign\bgroup \hfil##\hfil\cr}
\def\endmultiline{\vrule depth\@temp@ width0pt
\crcr\egroup\egroup}
-
+%
\def\triline#1{\hbox to\triwd{#1}}
-\catcode`\@=\TheAtCode\relax
-
+% empty label comment
+\defin@inckeys{elcxoffset,elcyoffset}
+\define@key[psset]{jtree}{elcref}
+ {\edef\jt@elcref{#1}}
+\psset{elcxoffset=.8ex,elcyoffset=0,elcref=bl}
+\def\elc{\@getoptionalarg\@elc}
+\def\@elc#1{\psset@optionalarg
+ \rput[\jt@elcref]%
+ (\jt@elcxoffset,\jt@elcyoffset){#1}}
+%
+\unjtree@cats
+\jRestoreCat @
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% the lines below can be commented out and replaced by
-%% personalized settings
-
+% the lines below can be commented out and replaced by
+% personalized settings
+%
\defbranch<left>(1)(1)
\defbranch<4left>(1)(2)
\defbranch<bigleft>(2)(1)