diff options
author | Norbert Preining <preining@logic.at> | 2007-11-18 21:27:39 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2007-11-18 21:27:39 +0000 |
commit | 8aedb83df207f78d4395c9ea8758a5d374584894 (patch) | |
tree | cb440d2a04c846b056cafea6731ac81ed25c402b /Master/texmf-dist/tex/generic/pst-asr | |
parent | 69e371308f9bfe810f2db4680dcd3ce0136e83d9 (diff) |
new packge pst-asr (->collection-pstricks)
git-svn-id: svn://tug.org/texlive/trunk@5504 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-asr')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-asr/pst-asr.tex | 729 |
1 files changed, 729 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-asr/pst-asr.tex b/Master/texmf-dist/tex/generic/pst-asr/pst-asr.tex new file mode 100644 index 00000000000..0427be4ce37 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pst-asr/pst-asr.tex @@ -0,0 +1,729 @@ + +\def\fileversion{1.2} +\def\filedate{2006/09/23} +\csname ASRLoaded\endcsname +\let\ASRLoaded\endinput +\ifx\PSTricksLoaded\endinput \else \input pstricks \fi\relax +\ifx\PSTXKeyLoaded\endinput \else \input pst-xkey \fi\relax +\edef\TheAtCode{\the\catcode`\@} +\catcode`\@=11\relax +%%% utilities from lingbasics +\def\@enamedef#1{\expandafter\edef\csname #1\endcsname} +\def\lingmkactive#1{% + \@enamedef{ling@restore\string#1}{\@makeaux#1=\the\catcode`#1}% + \catcode`#1=13\ignorespaces} +\def\lingmkletter#1{% + \@enamedef{ling@restore\string#1}{\@makeaux#1=\the\catcode`#1}% + \catcode`#1=11\ignorespaces} +\def\@makeaux{\noexpand\catcode\noexpand`\noexpand} +\def\lingrestore#1{\edef\tempa{ling@restore\string#1}% + \expandafter\csname\tempa\endcsname} +\def\writeln#1{\immediate\write16{#1}\ignorespaces} +\def\@gobbleignore#1{\ignorespaces} +\begingroup +\def\:{\ling@gobblespace} \expandafter\gdef\: {} +\endgroup +\def\ling@getpars#1{% + \def\k@@p{#1}\@ifnextchar[\ling@getpars@a\ling@getpars@e} +\def\ling@getpars@a[#1]{\def\pst@pars{#1}\ling@getpars@b} +\def\ling@getpars@b{\futurelet\TTemp\ling@getpars@c} +\def\ling@getpars@c{\ifx\TTemp\@sptoken \let\next\ling@getpars@d + \else \let\next\k@@p \fi \next} +\def\ling@getpars@d{\expandafter\k@@p\ling@gobblespace} +\def\ling@getpars@e{\let\pst@pars\@empty \k@@p} +%%% end utilities +\pst@addfams{ASR} +\def\asrsetkeys#1{\setkeys[psset]{ASR}{#1}\ignorespaces} +\def\pssetkeys#1{\setkeys[psset]{}{#1}\ignorespaces} +\def\pssetpst@pars{\expandafter\psset\expandafter{\pst@pars}} +\def\xaddto#1#2{% + \pssetxlength\pst@dimg{#2}% + \advance#1 by\pst@dimg} +\def\xsettosum#1#2#3{% + \pssetxlength#1{#2} + \xaddto#1{#3}\ignorespaces +} +\def\ysettodiff#1#2#3{% + \pssetylength#1{#2}% + \pssetlength\pst@dimg{#3}% + \advance#1 by -\pst@dimg + \ignorespaces +} +\def\ASR@addtotoks#1#2{\expandafter + #2\expandafter{\expandafter#1\the#2}} +\def\ASR@trimtoks#1{\expandafter\expandafter\expandafter#1% + \expandafter\expandafter\expandafter{% + \expandafter\@gobble\the#1}% +} +\long\def\XKVforn#1#2#3{% + \def#2{#1}% + \ifx#2\@empty + \XKV@for@break + \else + \expandafter\XKV@f@r + \fi + #2{#3}#1,\@nil,% +\ignorespaces} +\def\DefList#1{\XKVforn{#1}\@X{\expandafter\def\@X}% + \ignorespaces} +\def\interpolate(#1)(#2)#3#4{% + \begingroup + \SpecialCoor + \pst@getcoor{#1}\pst@tempa% + \pst@getcoor{#2}\pst@tempb% + \pnode(!% + \pst@tempa /YA exch \pst@number\psyunit div def + /XA exch \pst@number\psxunit div def + \pst@tempb /YB exch \pst@number\psyunit div def + /XB exch \pst@number\psxunit div def + /dx XB XA sub def + /dy YB YA sub def + dx #3\space mul XA add dy #3\space mul YA add){#4} + \endgroup + \ignorespaces +} +% \ASRyvalue{xxx} for \ASR@xxx, \ASRyvalue*{xxx} for \ASRxxx +% sets \temp and \pst@dima +\def\ASRyvalue{\pst@ifstar\ASRyvalue@a} +\def\ASRyvalue@a#1{\edef\temp{\if@star \else @\fi#1}% + \expandafter\ASRyvalue@b} +\def\ASRyvalue@b#1#2\@nil{% + \ifx#1!% + \pssetylength\pst@dimb{#2}% + \expandafter\pst@dima\csname ASR\temp\endcsname + \advance\pst@dima by \pst@dimb + \else + \pssetylength\pst@dima{#1#2}\fi +} +\newdimen\ASR@dima +\newdimen\ASR@dimb +\newdimen\ASR@dimc +\newdimen\ASR@dimd +\newdimen\ASR@dime +\newdimen\ASR@dimf +% \dbox, \dput resources and definitions +\newbox\ASR@hbox +\newbox\tmpbox +\newdimen\ASR@left +\newdimen\ASR@down +\newdimen\ASR@xpos +\newdimen\ASR@ypos +\newdimen\ASR@maxleft +\newdimen\ASR@maxright +\newdimen\ASR@maxup +\newdimen\ASR@maxdown +\newdimen\ASR@dputht +% +\def\dput#1(#2,#3){% + \def\pst@par{}% + \def\ASR@dput{#1(#2,#3)}% + \pssetlength\ASR@xpos{#2}% + \pssetlength\ASR@ypos{#3}% + \ASR@addtotoks\ASR@egg\everyhbox + \expandafter\rput\ASR@dput +} +\def\ASR@egg{\aftergroup\ASR@updateafter} +\def\ASR@updateafter{% + \ASR@trimtoks\everyhbox + \ASR@dputht=\ht\pst@hbox + \expandafter\pssetkeys\expandafter{\pst@par}% + \advance\ASR@xpos by -\psk@xref\wd\pst@hbox + \ifdim\ASR@xpos<\ASR@maxleft \ASR@maxleft=\ASR@xpos \fi + \advance\ASR@xpos by \wd\pst@hbox + \ifdim\ASR@xpos>\ASR@maxright \ASR@maxright=\ASR@xpos \fi + \ifx\psk@yref\relax + \advance\ASR@ypos by \ASR@dputht + \advance\ASR@dputht by \dp\pst@hbox + \else + \advance\ASR@dputht by \dp\pst@hbox + \advance\ASR@ypos by \ASR@dputht + \advance\ASR@ypos by -\psk@yref\ASR@dputht + \fi + \ifdim\ASR@ypos>\ASR@maxup \ASR@maxup=\ASR@ypos \fi + \advance\ASR@ypos by -\ASR@dputht + \ifdim\ASR@ypos<\ASR@maxdown \ASR@maxdown=\ASR@ypos \fi +} +\def\dbox{\setbox\ASR@hbox=\hbox\bgroup + \ASR@maxleft=\maxdimen + \ASR@maxright=-\maxdimen + \ASR@maxup=0pt + \ASR@maxdown=0pt +} +\def\ASR@Maxtransfer{% + \xdef\ASR@MaxAfter{% + \noexpand\ASR@maxleft=\the\ASR@maxleft + \noexpand\ASR@maxright=\the\ASR@maxright + \noexpand\ASR@maxdown=\the\ASR@maxdown + \noexpand\ASR@maxup=\the\ASR@maxup}% + \aftergroup\ASR@MaxAfter +} +\def\ASR@asrBtransfer{% + \xdef\ASR@asrBAfter{% + \noexpand\def\noexpand\ASR@asrB{\ASR@asrB}}% + \aftergroup\ASR@asrBAfter +} +\def\enddbox{% + \ASR@Maxtransfer + \ASR@asrBtransfer + \egroup + \dp\ASR@hbox=-\ASR@maxdown + \ht\ASR@hbox=\ASR@maxup + \leavevmode + \kern-\ASR@maxleft\lower\ASR@asrB\box\ASR@hbox\kern\ASR@maxright} +% \newtier, defines a list of tiers +\def\newtier#1{\Newtier@A#1,\@nil,\@nil} +\def\Newtier@A#1#2,{\ifx#1\@nil \let\temp\@gobbleignore + \else \Newtier@B{#1#2}\let\temp\Newtier@A \fi \temp} +\def\Newtier@B#1{% + \@enamedef{ASR#1B}{0pt}% + \@enamedef{ASR@#1dp}{.7ex}% + \@enamedef{ASR@#1ht}{1.8ex}% + \define@key[psset]{ASR}{#1B}{% + \ASRyvalue*{#1B}##1\@nil + \@enamedef{ASR#1B}{\the\pst@dima}% + \pst@dimb=\pst@dima + \advance\pst@dimb by \@nameuse{ASR@#1ht}% + \@enamedef{ASR#1t}{\the\pst@dimb}% + \pst@dimb=\@nameuse{ASR@#1dp}% + \advance\pst@dima by -\pst@dimb + \@enamedef{ASR#1b}{\the\pst@dima}% + }% + \define@key[psset]{ASR}{#1ht}{% + \ASRyvalue{#1ht}##1\@nil + \@enamedef{ASR@#1ht}{\the\pst@dima}% + \advance\pst@dima by \@nameuse{ASR#1B}% + \@enamedef{ASR#1t}{\the\pst@dima}% + }% + \define@key[psset]{ASR}{#1dp}{% + \ASRyvalue{#1dp}##1\@nil + \@enamedef{ASR@#1dp}{\the\pst@dima}% + \pst@dima=-\pst@dima + \advance\pst@dima by \@nameuse{ASR#1B}% + \@enamedef{ASR#1b}{\the\pst@dima}% + }% + \define@key[psset]{ASR}{#1}{% + \TierSet@##1 {} {} \@nil + \if@star \expandafter\ASR@dima\@nameuse{ASR#1B} + \else + \@enamedef{ASR#1B}{\the\ASR@dima}\fi + \@enamedef{ASR@#1dp}{\the\pst@dimb}% + \@enamedef{ASR@#1ht}{\the\pst@dimc}% + \pst@dimb=-\pst@dimb + \advance\pst@dimb by \ASR@dima + \@enamedef{ASR#1b}{\the\pst@dimb}% + \advance\pst@dimc by \ASR@dima + \@enamedef{ASR#1t}{\the\pst@dimc}% + }% +} +\def\TierSet@{\futurelet\temp\TierSet@@} +\def\TierSet@@{% + \@starfalse + \ifx\temp(\let\next\TierSet@a + \else \ifx\temp*\let\next\TierSet@b + \else \let\next\TierSet@c \fi\fi \next} +\def\TierSet@a(#1) #2 {% + \pssetylength\ASR@dima{#2}% + \expandafter\pst@dimb\@nameuse{ASR#1B}% + \advance\ASR@dima by \pst@dimb + \TierSet@d +} +\def\TierSet@b#1 {\@startrue\TierSet@d} +\def\TierSet@c#1 {\pssetylength\ASR@dima{#1}\TierSet@d} +\def\TierSet@d{\@ifnextchar(\TierSet@e{\TierSet@e() }} +\def\TierSet@e(#1) #2 #3 #4\@nil{% + \setbox\tmpbox=\hbox{#1}% + \def\tempb{#2}% + \ifx\tempb\@empty % \pst@dimb = depth + \pst@dimb=\ASR@extragap % \pst@dimc = height + \pst@dimc=\pst@dimb + \else + \pssetylength\pst@dimc{#2}% + \def\tempa{#3}% + \ifx\tempa\@empty + \pst@dimb=\pst@dimc + \else + \pssetylength\pst@dimb{#3} + \fi + \fi + \advance\pst@dimb by \dp\tmpbox + \advance\pst@dimc by \ht\tmpbox +} +\define@key[psset]{ASR}{extragap}{% + \pssetylength\pst@dima{#1}% + \@enamedef{ASR@extragap}{\the\pst@dima}} +\psset{extragap=.5ex} +% +% \tierput onto a tier, and drawing associations +% +\newdimen\ASR@dimf +\newdimen\ASR@dime +\def\tierput{\ASR@dimf=0pt + \@ifnextchar[\tierput@a\tierput@b} +\def\tierput@a[#1]{\pssetxlength\ASR@dimf{#1}\tierput@b} +\def\tierput@b(#1,#2){% + \pssetxlength\ASR@dime{#1}% + \advance\ASR@dime by \ASR@dimf + \edef\ASR@lasttierx{\the\ASR@dime}\edef\ASR@lasttier{#2}% + \edef\ASR@lasttierB{\@nameuse{ASR#2B}}% + \dput[B](\ASR@dime,\ASR@lasttierB)% +} +\def\assoc{\ling@getpars\assoc@a} +\def\assoc@a#1(#2,#3){% + \pssetxlength\pst@dima{#2}% + \edef\tempc{\the\pst@dima}% + \def\tempd{#3}% + \assoc@b} +\def\assoc@b{% + \bgroup + \pssetpst@pars + \@ifnextchar(\assoc@c\assoc@d +} +\def\assoc@c#1(#2){% + \let\ASR@lasttierx=\tempc + \let\ASR@lasttier=\tempd + \edef\ASR@lasttierB{\@nameuse{ASR\tempd B}}% + \assoc@e(#2)} +\def\assoc@d{% + \edef\tempe{(\tempc,\tempd)}% + \expandafter\assoc@e\tempe} +\def\assoc@e(#1,#2){% + \ifdim\ASR@lasttierB<\@nameuse{ASR#2B}% + \@tierorder bt% + \else + \@tierorder tb% + \fi + \edef\temp{(#1,\@nameuse{ASR#2\tempa})% + (\ASR@lasttierx,\@nameuse{ASR\ASR@lasttier\tempb})}% + \expandafter\psline\temp + \ifASR@xed + \expandafter\putxed\temp + \fi + \egroup\ignorespaces +} +\def\@tierorder#1#2{\def\tempa{#1}\def\tempb{#2}} + +\def\tiershortcuts{\let\@=\tierput \let\-=\assoc} +% +\define@cmdkey[psset]{ASR}[ASR@]{everyph}[]{} +\def\putph#1{% + \dput[B](\xpos,\ASRphB){\ASR@everyph #1} + \psline(\xpos,\ASRtsb)(\xpos,\ASRpht) + \dput[B](\xpos,\ASRtsB){\ASR@tssym} + \advance\xpos by\ASRxgap + \ignorespaces +} +\def\putgem#1{% + \ASR@dima=\xpos + \advance\ASR@dima by .5\ASRxgap + \dput[B](\ASR@dima,\ASRphB){\ASR@everyph #1} + \dput[B](\xpos,\ASRtsB){\ASR@tssym} + \psline(\xpos,\ASRtsb)(\ASR@dima,\ASRpht) + \advance\xpos by \ASRxgap + \dput[B](\xpos,\ASRtsB){\ASR@tssym} + \psline(\xpos,\ASRtsb)(\ASR@dima,\ASRpht) + \advance\xpos by \ASRxgap + \ignorespaces +} +\def\notsputph#1{% + \tierput(\xpos,ts){#1}% + \stepxpos{1}% +} +\def\notsputgem#1{% + \notsputph{#1}% + \notsputph{#1}% +} +\define@key[psset]{ASR}{reptype}{% + \@nameuse{ASRreptype@#1}% +} +\def\ASRreptype@ts{% + \let\ASR@putobj\putph + \let\ASR@putgemobj\putgem +} +\def\ASRreptype@nots{% + \let\ASR@putobj=\notsputph + \let\ASR@putgemobj=\notsputgem + \asrsetkeys{ts=* (ky),syB=!.35ex}% +} +\ASRreptype@ts +\def\LevelsIncrement{% + \pssetylength\ASR@dima{\ASRtsB}% + \ASR@dima=-\ASR@dima + \ASR@dimb=\ASRsyB + \advance\ASR@dima by 2\ASR@dimb + \asrsetkeys{tsB=\ASRsyB,syB=\the\ASR@dima}% +} +%%%% timing slot matters (including \xpos) +% +\newdimen\xpos +\newdimen\ASRxgap +\define@boolkey[psset]{ASR}[ASR@]{unitxgap}% + {\setkeys[psset]{}{xunit=\ASRxgap}} +\define@key[psset]{ASR}{xgap}% + {\@setxgapaux#1\@nil + \edef\ASR@xgap{\the\pst@dima}% + \ASRxgap=\pst@dima + \ifASR@unitxgap \psset{xunit=\pst@dima}\fi +} +\def\@setxgapaux{\@ifnextchar!\@setxgapauxA\@setxgapauxB} +\def\@setxgapauxA#1#2\@nil{\pssetxlength\pst@dima{#2}% + \advance\pst@dima by \ASRxgap} +\def\@setxgapauxB#1\@nil{\pssetxlength\pst@dima{#1}} +\define@cmdkey[psset]{ASR}[ASR@]{tssym}[$\times$]{} +\def\bare#1{% + \dput[B](\xpos,\ASRtsB){#1}% + \advance\xpos by \ASRxgap + \ignorespaces +} +\def\X{\bare{\ASR@tssym}} +\def\setxpos#1{% + \pssetxlength\xpos{#1}% + \ignorespaces +} +\def\stepxpos#1{% + \pssetxlength\pst@dima{#1}% + \advance\xpos by \pst@dima + \ignorespaces +} +% +%%% placing and associating a phoneme +\def\varph{\ling@getpars\varph@a} +\def\varph@a#1#2{% + \xsettosum\ASR@dima\xpos{#2}% + \dput[B](\ASR@dima,\ASRphB){\ASR@everyph #1}% + \begingroup + \pssetpst@pars + \psline(\xpos,\ASRtsb)(\ASR@dima,\ASRpht)% + \xdef\temp{\ASR@tssym}% + \endgroup + \bare{\temp}% + \ignorespaces +} +%%% syllables +\define@cmdkey[psset]{ASR}[ASR@]{sysym}[$\sigma$]{} +\def\monosysym{$\sigma^{\mu}\mskip-10mu$} +\def\bisysym{$\sigma^{\mu\mu}\mskip-18mu$} +\def\varsyl{\ling@getpars\varsyl@a} +\def\varsyl@a#1#2{% + \begingroup + \pssetpst@pars + \xsettosum\pst@dimc{\xpos}{#1}% + \tierput(\pst@dimc,sy){\ASR@sysym}% + \XKV@for@n{#2}\N{% + \xsettosum\pst@dimd{\xpos}{\N}% + \psline(\pst@dimc,\ASRsyb)(\pst@dimd,\ASRtst)% + }% + \ASR@Maxtransfer + \endgroup + \ignorespaces +} +\def\qsyl{\@ifnextchar(\qsyl@a{\qsyl@a(\ASR@sysym)}} +\def\qsyl@a(#1)#2{% + \pssetxlength\pst@dimd{#2}% + \advance\pst@dimd by -\ASRxgap + \xsettosum\pst@dimc{\xpos}{.5\pst@dimd}% + \tierput(\pst@dimc,sy){#1}% + \pst@cnta=0 + \loop \ifnum\pst@cnta<#2 + {\advance\xpos by \the\pst@cnta\ASRxgap + \assoc(\xpos,ts)}\advance\pst@cnta by 1 \repeat + \ignorespaces +} +\def\1{\qsyl 1} +\def\2{\qsyl 2} +\def\3{\qsyl 3} +\def\4{\qsyl 4} +\def\5{\qsyl 5} +% +% xed crossout, parameters: xed, xedsep,xedht,xedratio,xedtype +% +\define@boolkey[psset]{ASR}[ASR@]{xed}{} +\define@key[psset]{ASR}{xedsep}{% + \pssetlength\pst@dima{#1}% + \edef\ASR@xedsep{\the\pst@dima}% +} +\define@key[psset]{ASR}{xedht}{% + \pssetlength\pst@dima{#1}% + \edef\ASR@xedht{\the\pst@dima}% +} +\define@cmdkey[psset]{ASR}[ASR@]{xedratio}{} +\define@cmdkey[psset]{ASR}[ASR@]{xedlinewidth}{} +\define@key[psset]{ASR}{xedtype}{\def\ASR@xedtype{#1}} +\def\xedparlines{% + \ASR@dima=\ASR@xedsep \ASR@dima=.5\ASR@dima + \ASR@dimb=\ASR@xedht \ASR@dimb=.5\ASR@dimb + \psline(-\ASR@dima,-\ASR@dimb)(-\ASR@dima,\ASR@dimb) + \psline(\ASR@dima,-\ASR@dimb)(\ASR@dima,\ASR@dimb)% +} +\def\xedcirc{% + \pscircle[linestyle=solid,linewidth=.5pt](0,0){.7ex}% +} +\setkeys[psset]{ASR}{xedsep=2.2pt,xedht=8pt,xedratio=.5, + xedlinewidth=1pt,xedtype=\xedparlines,xed=false} +\def\putxed{\def\pst@pars{}\@ifnextchar[\putxed@a\putxed@b} +\def\putxed@a[#1]{\def\pst@pars{#1}\putxed@b} +\def\putxed@b#1(#2,#3)#4(#5,#6){% + \begingroup + \pssetpst@pars + \pssetxlength\ASR@dimc{#2}\pssetxlength\ASR@dime{#5} + \advance\ASR@dime by -\ASR@dimc + \advance\ASR@dimc by \ASR@xedratio\ASR@dime + \pssetylength\ASR@dimd{#3}\pssetylength\ASR@dimf{#6} + \advance\ASR@dimf by -\ASR@dimd + \advance\ASR@dimd by \ASR@xedratio\ASR@dimf + \pssetkeys{linewidth=\ASR@xedlinewidth} + \SpecialCoor + \rput{(\ASR@dime,\ASR@dimf)}(\ASR@dimc,\ASR@dimd){\ASR@xedtype} + \NormalCoor + \endgroup + \ignorespaces +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% \ASR ... \endasr boxing +\define@cmdkey[psset]{ASR}[ASR@]{everyasr}[]{} +\lingmkactive | +% fixed 20 Sept 06, JF. non-active | now handled correctly +% when it appears as the initial character after \asr +\def\asr{% +\leavevmode\dbox \ASR@everyasr \xpos=0pt +\catcode`|=\active \let|=\ASRpush +\asr@ +} +\def\asr@{\ling@getpars\asr@@} +\def\asr@@{\pssetpst@pars\ASR@d} +% end fix +%\def\asr{\ling@getpars\asr@@} +%\lingmkactive | +%\def\asr@@{\leavevmode\dbox \ASR@everyasr \xpos=0pt +% \catcode`|=\active \let|=\ASRpush +% \pssetpst@pars +% \ASR@d} +%\lingrestore | +\def\endasr{\enddbox} +% parsing the contents of \ASR ... \endASR +\def\ASR@d{\futurelet\temp\ASR@dd} +\def\ASR@dd{% + \ifx\temp\bgroup \let\next=\ASR@char \else + \ifx\temp|\let\next=\ASRpush\else + \ifx\temp'\let\next=\ASR@juncture\else + \ifx\temp<\let\next=\ASR@displace\else + \ifx\temp\endasr\let\next=\ASR@finish \else + \ifcat\noexpand\temp\noexpand\ASR\let\next=\ASR@cs + \else \let\next=\ASR@char + \fi\fi\fi\fi\fi\fi\next +} +\def\ASR@gobble#1{\ASR@d #1} +\def\ASRpush#1{\let|\ASRpop \ignorespaces} +\def\ASR@popasr{\let|\ASRpush \ASR@d} +\def\ASRpop{% + \let|\ASRpush + \@ifnextchar\sptoken{\ASR@d\relax}\ASR@d +} +\lingrestore | +% junctures on the timing tier +\def\ASR@juncture#1#2{\edef\@juncs{\JunctureChoose#2}\ASR@junctureA} +\def\ASR@junctureA{\@ifnextchar'\ASR@junctureB\ASR@junctureC} +\define@cmdkey[psset]{ASR}[ASR@]{juncsep}{} +\def\ASR@junctureB#1#2{% + \edef\@juncs{\@juncs\kern\ASR@juncsep\JunctureChoose{#2}}% + \ASR@junctureA +} +\def\NormalJunctureChoose#1% + {\ifx#1<\langle\else\ifx#1>\rangle\else#1\fi\fi} +\let\JunctureChoose=\NormalJunctureChoose +\def\ASR@junctureC{% + \ASR@dima=\xpos \advance\ASR@dima by -.5\ASRxgap + \ASR@currjuncput[B](\ASR@dima,\ASRtsB){$\@juncs$}\ASR@d +} +\define@boolkey[psset]{ASR}[ASR@]{phantomjunctures}{% + \ifASR@phantomjunctures \let\ASR@currjuncput\rput + \else \let\ASR@currjuncput\dput \fi +} +% displaced evaluation +\def\ASR@displace#1{\def\@displace{-1}% + \@ifnextchar[\ASR@displaceA\ASR@displaceB} +\def\ASR@displaceA[#1]{\def\@displace{#1}\ASR@displaceB} +\def\ASR@displaceB#1{{\advance\xpos by \@displace\ASRxgap #1}\ASR@d} +% +\def\ASR@finish#1{\enddbox} +\def\ASR@cs#1{#1\ASR@d} +\def\ASR@char#1{\def\ASR@hold{#1}\@ifnextchar:\ASR@gem\ASR@charA} +\def\ASR@charA{\ASR@putobj{\ASR@hold}\ASR@d} +\def\ASR@gem#1{\ASR@putgemobj{\ASR@hold}\ASR@d} +\define@key[psset]{ASR}{asrB}{% + \ASRyvalue{asrB}#1\@nil + \edef\ASR@asrB{\the\pst@dima}} +%%%%%% +%% reptype=DM +\newcount\morphcount +\def\ASRreptype@DM{% +% \let\ASR@putobj=\ASR@putmorph + \let\ASR@char=\ASR@putmorph + \morphcount=1 +} +\def\ASR@putmorph#1{% + \expandafter\parse@putmorph #1,,\@nil + \setbox\tmpbox\hbox{\tempa}% + \pst@dima=\wd\tmpbox + \advance\xpos by .5\pst@dima + \@enamedef{morphcoord@A\the\morphcount}{\the\xpos,\ASRtst}% + \advance\morphcount by 1 + \dput[B](\xpos,\ASRtsB){\box\tmpbox}% + \ifx\tempb\@empty + \else + \dput[B](\xpos,\ASRphB){\ASR@everyph \tempb} + \expandafter\psline\expandafter[\ASR@realstyle]% + (\xpos,\ASRtsb)(\xpos,\ASRpht) + \fi + \advance\xpos by .5\pst@dima + \advance\xpos by \ASRxgap + \@ifnextchar:\ASR@d\ASR@d +} +\def\parse@putmorph #1,#2,#3\@nil{% + \def\tempa{#1}% + \def\tempb{#2}% +} +\def\@getASRcoord#1#2#3{% + \edef\temp{\@nameuse{morphcoord@#3}}% + \expandafter\@getcoord@a + \expandafter#1\expandafter#2\temp\@nil +} +\def\@getcoord@a#1#2#3,#4\@nil{% + #1=#3\relax #2=#4\relax +} +\def\merge{\ling@getpars\merge@a} +\def\merge@a#1{% + \ASR@parsecoors#1\@nil + \begingroup + \pssetpst@pars + \ling@getpars\merge@b +} +\def\ASR@parsecoors#1,#2,#3\@nil{% + \@getASRcoord\pst@dima\pst@dimb{#1}% + \@getASRcoord\pst@dimc\pst@dimd{#2}% + \def\@tar{#3}% +} +\def\merge@b{% + \ifx\pst@pars\@empty + \def\@@directive{}% + \else + \expandafter\mk@@directive\pst@pars\@nil + \fi + \@ifnextchar\bgroup\merge@label\merge@nolabel +} +\def\mk@@directive #1#2\@nil{\def\@@directive{#1}} +\def\merge@label#1{% + \ifdim\pst@dimb>\pst@dimd + \ASR@dimb=\pst@dimb + \else + \ASR@dimb=\pst@dimd + \fi + \advance\ASR@dimb by \ASR@mlevelsep + \ifx \pst@pars\@empty + \@binupmirror + \else \expandafter \ifx \@@directive M% + \@binupmirror + \else \expandafter\ifx \@@directive C% + \@binupratio{.5}% + \else + \expandafter\@binupratio\expandafter{\pst@pars}% + \fi\fi\fi + \@morphdrawbranches + \def\temp{#1}% + \ifx\temp\@empty + \else + \advance\ASR@dimb by \ASR@tsdp + \dput[B](\xpos,\ASR@dimb){#1}% + \advance\ASR@dimb by \ASR@tsht + \fi + \ASR@endbinup +} +\def\@morphdrawbranches{% + \expandafter\psline\expandafter[\ASR@lbstyle]% + (\pst@dima,\pst@dimb)(\xpos,\ASR@dimb)% + \expandafter\psline\expandafter[\ASR@rbstyle]% + (\pst@dimc,\pst@dimd)(\xpos,\ASR@dimb)% +} +\define@key[psset]{ASR}{mlevelsep}{% + \pssetylength\pst@dima{#1}% + \edef\ASR@mlevelsep{\the\pst@dima}% +} +\def\@binupratio#1{% + \ASR@dima=\pst@dimc + \advance\ASR@dima by -\pst@dima + \xpos=\pst@dima + \advance\xpos by #1\ASR@dima +} +\def\@binupmirror{% + \ASR@dimd=\ASR@dimb + \advance\ASR@dimd by -\pst@dimb + \ASR@dime=\ASR@dimb + \advance\ASR@dime by -\pst@dimd + \advance\ASR@dime by \ASR@dimd + \pst@divide\ASR@dimd\ASR@dime\temp% + \@binupratio{\temp}% +} +\def\ASR@endbinup{% + \xdef\@message{\noexpand\xpos=\the\xpos\relax + \noexpand\ASR@dimb=\the\ASR@dimb}% + \aftergroup\@message + \ASR@Maxtransfer + \endgroup + \@enamedef{morphcoord@\@tar}{\the\xpos,\the\ASR@dimb}% + \ignorespaces +} +\def\merge@nolabel{% + \ifx\pst@pars\@empty + \else + \edef\ASR@mslope{\pst@pars}% + \fi + \pssetylength\ASR@dima{\ASR@mslope} + \pssetxlength\ASR@dimb{1} + \pst@divide\ASR@dima\ASR@dimb\@slope + \pst@divide\ASR@dimb\ASR@dima\@recipslope + \xpos=.5\pst@dima + \advance\xpos by .5\pst@dimc + \ASR@dimb=.5\pst@dimd + \advance\ASR@dimb by -.5\pst@dimb + \advance\xpos by \@recipslope\ASR@dimb + \ASR@dimb=.5\pst@dimb + \advance\ASR@dimb by .5\pst@dimd + \ASR@dimc=.5\pst@dimc + \advance\ASR@dimc by -.5\pst@dima + \advance\ASR@dimb by \@slope\ASR@dimc + \@morphdrawbranches + \dput(\xpos,\ASR@dimb){}% + \ASR@endbinup +} +\define@cmdkey[psset]{ASR}[ASR@]{mslope}[1]{} +\asrsetkeys{mslope=1}% +\define@key[psset]{ASR}{lbstyle}{% + \def\ASR@lbstyle{style=BS@#1}} +\define@key[psset]{ASR}{rbstyle}{% + \def\ASR@rbstyle{style=BS@#1}} +\define@key[psset]{ASR}{realstyle}{% + \def\ASR@realstyle{style=BS@#1}} +\def\newbranchstyle#1{\newpsstyle{BS@#1}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% the settings below can be changed or overwritten to suit the user +%% settings for reptype=normal and reptype=nots +\newtier{ts,ph,sy} +\newpsstyle{assoc}{linestyle=solid,linewidth=.08ex} +\setkeys[psset]{ASR}{asrB=0,unitxgap=true,phantomjunctures=false} +\asrsetkeys{tssym,sysym,everyph,everyasr} % all have defaults +\newpsstyle{medsyls}{extragap=.5ex,unitxgap=true,xgap=2.5ex, + ts=0pt ($\times$),sy=3.5ex ($\sigma$),ph=-3.5ex (pf), + juncsep=0pt} +\newpsstyle{bigsyls}{extragap=.6ex,unitxgap=true,xgap=3.5ex, + ts=0pt ($\times$),sy=5.5ex ($\sigma$) .7ex,ph=-4.5ex (pf)} +\psset{unit=1em,style=medsyls} +%% settings for reptype=DM +\newbranchstyle{normal}{linewidth=.1ex,linestyle=solid} +\newbranchstyle{spell}{linewidth=.1ex,linestyle=solid, + arrowsize=.6ex 1.3,arrows=->} +\newbranchstyle{head}{linewidth=.3ex,linestyle=solid,arrows=c-} +\newbranchstyle{adjunct}{linewidth=.1ex,yunit=.8ex, + linestyle=dashed} +\asrsetkeys{lbstyle=normal,rbstyle=normal,realstyle=spell, + mslope=1,mlevelsep=1em} + +\catcode`\@\TheAtCode |