% 30 March 07.  Many changes from 1.2, mostly in the inclusion of
% some useful macros from eplain (particularly \@futurenonspacelet)
% and their systematic use throughout this file.  This fixes some
% erratic behavior when a macro immediately followed \asr[...]
%
% 20 Feb 10.  Fixed problem with latest version of pstricks
% 2011/04/20 fixed problem with pstricks v2.19 (2011/03/25)
\def\fileversion{1.6}
\def\filedate{2011/04/20}
\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
% eplain utilities
% \@futurenonspacelet, \@getoptionalarg, \ifempty
\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
}
\def\ifempty#1{\@@ifempty #1\@emptymarkA\@emptymarkB}%
\def\@emptymarkA{\@emptymarkB}%
\def\@@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
% end eplain utilities
% other utilities
\def\@enamedef#1{\expandafter\edef\csname #1\endcsname}
\def\writeln#1{\immediate\write16{#1}\ignorespaces}
\def\@gobbleignore#1{\ignorespaces}
\def\psset@useoptionalarg{%
  \ifx\@optionalarg\empty \else
     \expandafter\psset\expandafter{\@optionalarg}\fi
}
\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}%
}
% \XKVforn is \XKV@for@n from XKeyVal with \ignorespaces trailer
\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)}%
  \pssetxlength\ASR@xpos{#2}%
  \pssetylength\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\psset\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}
% -------------------------------------------------------------
% finally, we can can start to build the ASR specific macros
% \newtier, defines a list of tiers
\pst@addfams{ASR}
\def\asrsetkeys#1{\setkeys[psset]{ASR}{#1}\ignorespaces}
%\def\pssetkeys#1{\setkeys[psset]{}{#1}\ignorespaces}
\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{\@getoptionalarg\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
  \psset@useoptionalarg
  \@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
}
% bug fix, 12/08/07: everyph did not apply in nots mode
\def\notsputph#1{%
  \tierput(\xpos,ts){\ASR@everyph #1}%
  \stepxpos{1}%
}
\def\notsputgem#1{%
  \notsputph{#1}%
  \notsputph{#1}%
}
\define@key[psset]{ASR}{reptype}{%
  \@nameuse{ASRreptype@#1}%
}
\def\ASRreptype@ts{%
  \let\ASR@dd=\ASR@standard
  \let\ASR@putobj\putph
  \let\ASR@putgemobj\putgem
}
\def\ASRreptype@nots{%
  \let\ASR@dd=\ASR@standard
  \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}%
  {\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{\@getoptionalarg\varph@a}
\def\varph@a#1#2{%
  \xsettosum\ASR@dima\xpos{#2}%
  \dput[B](\ASR@dima,\ASRphB){\ASR@everyph #1}%
  \begingroup
     \psset@useoptionalarg
     \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{\@getoptionalarg\varsyl@a}
\def\varsyl@a#1#2{%
  \begingroup
  \psset@useoptionalarg
  \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{\@getoptionalarg\putxed@b}
\def\putxed@b#1(#2,#3)#4(#5,#6){%
  \begingroup
  \psset@useoptionalarg
  \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
  \psset{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}[]{}
\edef\TheBarCode{\the\catcode`\|}
\catcode`\|=\active
\def\asr{%
  \leavevmode\dbox
  \ASR@everyasr
  \xpos=0pt
  \catcode`|=\active
  \let|=\ASRpush
  \@getoptionalarg\asr@a
}
\let\endasr\enddbox
\def\asr@a{\psset@useoptionalarg\ASR@d}
\def\ASR@d{\@futurenonspacelet\temp\ASR@dd}
\def\ASR@standard{%
  \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=\relax \else
  \ifcat\noexpand\temp\noexpand\ASR\let\next=\ASR@cs
  \else \let\next=\ASR@char
  \fi\fi\fi\fi\fi\fi\next
}
\let\ASR@dd=\ASR@standard
\def\ASRpush#1{\let|\ASRpop \ignorespaces}
\def\ASRpop{\let|\ASRpush \ASR@d}
\catcode`\|=\TheBarCode
% 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@dd=\ASR@standard
  \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{\@getoptionalarg\merge@a}
\def\merge@a#1{%
  \ASR@parsecoors#1\@nil
  \begingroup
  \psset@useoptionalarg
  \@getoptionalarg\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\@optionalarg\@empty
     \def\@@directive{}%
  \else
     \expandafter\mk@@directive\@optionalarg\@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 \@optionalarg\@empty
     \@binupmirror
  \else \expandafter \ifx \@@directive M%
     \@binupmirror
  \else \expandafter\ifx \@@directive C%
     \@binupratio{.5}%
  \else
     \expandafter\@binupratio\expandafter{\@optionalarg}%
  \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\@optionalarg\@empty
  \else
     \edef\ASR@mslope{\@optionalarg}%
  \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