% 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
