%%
%% This is file `ottalt.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% ottalt.dtx  (with options: `package')
%% 
%% Copyright (C) 2011 by Jesse A. Tov
%% 
%% This file may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License, either version 1.2 of this license or (at
%% your option) any later version. The latest version of this license is
%% in:
%% 
%%    http://www.latex-project.org/lppl.txt
%% 
%% and version 1.2 or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%% 
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{ottalt}
 [2011/08/07 v0.10 alternate Ott layout style]
\RequirePackage{mathpartir}
\RequirePackage{ifthen}
\RequirePackage{keyval}
\RequirePackage{listproc}
\DeclareOption{implicitPremiseBreaks}{
  \renewcommand\ottaltpremisesep{\\}
  \renewcommand\ottaltpremisebreak{\\}
}
\DeclareOption{lineBreakHack}{
  \renewcommand\ottaltpremisesep{\and}
  \renewcommand\ottaltpremisebreak{\\\\}
}
\DeclareOption{implicitLineBreakHack}{
  \renewcommand\ottaltpremisesep{\\}
  \renewcommand\ottaltpremisebreak{\\\\}
}
\DeclareOption{alternateNonterms}{
  \let\ifnotalternateNonterms\@secondoftwo
}
\DeclareOption{supertabular}{
  \ottalt@supertabulartrue
}
\newcommand\ottaltpremisesep{\\}
\newcommand\ottaltpremisebreak{\\}
\let\ifnotalternateNonterms\@firstoftwo
\newif\ifottalt@supertabular
\ProcessOptions
\ifottalt@supertabular
  \RequirePackage{supertabular}
\fi
\newcommand\inputott[2][ott]{
  \input{#2}
  \renewottcommands[#1]
}
\newcommand\ottaltcurrentprefix{ott}
\newcommand\renewottcommands[1][ott]{
  \renewcommand\ottaltcurrentprefix{#1}
  \def\renewottcomm@nd##1{
    \expandafter\renewcommand\csname #1##1\endcsname
  }
  \renewottcomm@nd{drule}[4][]{
    \def\ottalt@nextpremise{}
    \ottalt@premisetoks={ }
    ##2
    \expandafter\ottalt@inferrule\expandafter
      {\the\ottalt@premisetoks}{##3}{##4}{##1}
  }
  \renewottcomm@nd{premise}[1]{%
    \ottalt@premisetoks=
        \expandafter\expandafter\expandafter
                {\expandafter\the\expandafter\ottalt@premisetoks
                 \ottalt@nextpremise##1}
    \ottalt@iflinebreakhack##1\ottlinebreakhack\ottalt@iflinebreakhack{
      \let\ottalt@nextpremise\ottaltpremisebreak
    }{
      \let\ottalt@nextpremise\ottaltpremisesep
    }
  }
  \renewottcomm@nd{usedrule}[1]{%
    \ifottalt@firstrule
      \ottalt@firstrulefalse
    \else
      \and
    \fi
    \ensuremath{##1}
  }
  \renewenvironment{#1defnblock}[3][]
    {\begin{drulepar}{##2}{##3}}
    {\end{drulepar}}
  \renewottcomm@nd{drulename}[1]{%
    \ottalt@replace@cs\ranchor\_-{}##1\\
  }
  \renewottcomm@nd{prodline}[6]{
    \ifthenelse{\equal{##3}{}}{
      \\ & & $##1$ & $##2$ & & $##5$ & $##6$
    }{}
  }
  \renewottcomm@nd{prodnewline}{\relax}
  \renewottcomm@nd{grammartabular}[1]{%
    \begin{ottaltgrammar}##1\end{ottaltgrammar}%
  }
}
\newcommand*\drule@h@lper[3]{%
  \expandafter\ifx\csname\ottaltcurrentprefix drule#3\endcsname\relax
    \PackageWarning{ottalt}{Unknown ott rule: #3}%
    \mbox{\textbf{(#2?)}}%
  \else
    \csname\ottaltcurrentprefix usedrule\endcsname
      {\csname\ottaltcurrentprefix drule#3\endcsname{#1}}%
  \fi
}
\newcommand*\nonterm@h@lper[1]{\csname\ottaltcurrentprefix#1\endcsname}
\newcommand\rrefruletext{rule}
\newcommand\Rrefruletext{\expandafter\MakeUppercase\rrefruletext}
\newcommand\rrefrulestext{\rrefruletext s}
\newcommand\Rrefrulestext{\Rrefruletext s}
\newcommand\rrefstyle{\normalfont\scshape}
\newcommand\ranchorstyle{\rrefstyle}
\providecommand\wraparoundrref{\relax}
\newcommand*\rref{%
  \@ifnextchar*
    {\rref@star}
    {\rref@with\rrefruletext\rrefrulestext}}
\newcommand*\Rref{%
  \@ifnextchar*
    {\rref@star}
    {\rref@with\Rrefruletext\Rrefrulestext}}
\newcommand*\rref@with[2]{\FormatList{#1~}{#2~}{\one@rref}}
\newcommand*\rref@star[1]{\FormatList{}{}{\one@rref}}
\newcommand*\@one@rref@nohyper[1]{\wraparoundrref{{\rrefstyle{#1}}}}
\newcommand*\@ranchor@nohyper[1]{{\ranchorstyle{#1}}}
\AtBeginDocument{
  \ifcsname hypertarget\endcsname
    \newcommand*\one@rref[1]{%
      \hyperlink
        {ottalt:rule:\ottaltcurrentprefix:#1}
        {\@one@rref@nohyper{#1}}%
    }
    \newcommand*\ranchor[1]{%
      \hypertarget
        {ottalt:rule:\ottaltcurrentprefix:#1}
        {\@ranchor@nohyper{#1}}%
    }
  \else
    \newcommand\one@rref{\@one@rref@nohyper}
    \newcommand\ranchor{\@ranchor@nohyper}
  \fi
}
\newcommand*{\drules}[4][\relax]{%
  \begin{drulepar}[#1]{#2}{#3}
    \@for\@ottalt@each:=#4\do{%
      \expandafter\drule\expandafter{\@ottalt@each}
    }
  \end{drulepar}%
}
\newenvironment{drulepar}[3][\relax]
  {\begin{rulesection}[#1]{#2}{#3}%
   \begin{mathparpagebreakable}}
  {\end{mathparpagebreakable}%
   \end{rulesection}}
\newenvironment{drulepar*}[3][\relax]
  {\begin{rulesection*}[#1]{#2}{#3}%
   \begin{mathparpagebreakable}}
  {\end{mathparpagebreakable}%
   \end{rulesection*}}
\newenvironment{rulesection}[3][\relax]
  {\trivlist\item
   \ifx#1\relax\else\def\ottalt@rulesection@prefix{#1-}\fi
   \drulesectionhead{#2}{#3}%
   \noindent}
  {\endtrivlist}
\newenvironment{rulesection*}[3][\relax]
  {\trivlist\item
   \ifx#1\relax\else\def\ottalt@rulesection@prefix{#1-}\fi
   \drulesectionhead*{#2}{#3}%
   \noindent}
  {\endtrivlist}
\newcommand\ottalt@rulesection@prefix{}
\newcommand*{\drulesectionhead}{%
  \@ifnextchar *{\drulesectionheadMany}{\drulesectionheadOne}%
}
\newcommand*{\drulesectionheadOne}[2]{%
  \FormatDruleSectionHead{#1}%
  \hfill\FormatDruleSectionHeadRight{#2}%
  \par
}
\newcommand*{\drulesectionheadMany}[3]{%
  {%
    \let\FormatListSepTwo\FormatDruleSepTwo
    \let\FormatListSepMore\FormatDruleSepMore
    \let\FormatListSepLast\FormatDruleSepLast
    \FormatList{}{}{\FormatDruleSectionHeads}{#2}%
  }%
  \hfill\FormatDruleSectionHeadRight{#3}%
  \par
}
\newcommand*\FormatDruleSepTwo{\,,~}
\newcommand*\FormatDruleSepMore{\FormatDruleSepTwo}
\newcommand*\FormatDruleSepLast{\FormatDruleSepTwo}
\newcommand*\FormatDruleSectionHead[1]{\fbox{#1}}
\newcommand*\FormatDruleSectionHeads[1]{\fbox{\strut#1}}
\newcommand*\FormatDruleSectionHeadRight[1]{\emph{(#1)}}
\newcommand*\drule[2][]{%
  \expandafter\drule@helper\expandafter{\ottalt@rulesection@prefix}{#1}{#2}%
}
\newcommand*\drule@helper[3]{%
  \ottalt@replace@cs{\drule@h@lper{#2}{#1#3}}-{XX}{}#1#3\\
}
\newcommand\ottaltinferrule[4]{
  \inferrule*[narrower=0.3,lab=#1,#2]
    {#3}
    {#4}
}
\newcommand\ottalt@inferrule[4]{
  \ottaltinferrule{#3}{#4}{#1}{#2}
}
\newif\ifottalt@firstrule \ottalt@firstruletrue
\newcommand{\ottalt@nextpremise}{\relax}
\newtoks\ottalt@premisetoks
\newcommand{\ottlinebreakhack}{\relax}
\def\ottalt@iflinebreakhack#1\ottlinebreakhack #2\ottalt@iflinebreakhack{%
  \ifthenelse{\equal{#2}{}}\@secondoftwo\@firstoftwo
}
\newcommand\ottalt@replace@cs[5]{%
  \ifx\\#5\relax
    \def\ottalt@replace@cs@kont{#1{#4}}%
  \else
    \ifx#2#5\relax
      \def\ottalt@replace@cs@kont{\ottalt@replace@cs{#1}{#2}{#3}{#4#3}}%
    \else
      \def\ottalt@replace@cs@kont{\ottalt@replace@cs{#1}{#2}{#3}{#4#5}}%
    \fi
  \fi
  \ottalt@replace@cs@kont
}
\newcommand*\nonterms[2][8pt]{
  \begin{ottaltgrammar}[#1]
    \@for\@ottalt@each:=#2\do{%
      \expandafter\nt\expandafter{\@ottalt@each}
    }
  \end{ottaltgrammar}
}
\newenvironment{ottaltgrammar}[1][8pt]{%
  \begingroup
  \trivlist\item
  \def\OTTALTNEWLINE{\\[#1]}%
  \def\nt##1{\OTTALTNEWLINE\relax\nonterm@h@lper{##1}\ignorespaces}%
  \newcommand\ottaltintertext[2]{%
    \multicolumn{8}{l}{%
      \begin{minipage}{##1}%
        ##2%
      \end{minipage}%
    }%
  }%
  \ifottalt@supertabular
    \begin{supertabular}{llcllllll}
  \else
    \begin{tabular}{llcllllll}
  \fi
  \let\OTTALTNEWLINE\relax
  \ignorespaces
}
{%
  \@ifundefined{ottafterlastrule}{\\}{\ottafterlastrule}%
  \ifottalt@supertabular
    \end{supertabular}
  \else
    \end{tabular}
  \fi
  \endtrivlist
  \endgroup
  \ignorespaces
}
\newcommand\newNTclass[2][\ifnotalternateNonterms]{
  \expandafter\newcommand\csname new#2s\endcsname[4][]{
    #1{
      \expandafter\newcommand\csname ottalt@NT@#2@##2\endcsname{##1{##3}}
    }{
      \expandafter\newcommand\csname ottalt@NT@#2@##2\endcsname{##4}
    }
  }
  \expandafter\newcommand\csname new#2\endcsname[3][]{
    \csname new#2s\endcsname[##1]{##2}{##3}{##3}
  }
  \expandafter\newcommand\csname #2\endcsname[1]{%
    \csname ottalt@NT@#2@##1\endcsname
  }
}
\providecommand\@ifToif[1]{%
  #1\iftrue\iffalse
}
\providecommand\ifTo@if[1]{%
  #1%
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\newcommand\NTOVERLINE{\NTCAPTURE\overline}
\newcommand\NTUNDERLINE{\NTCAPTURE\underline}
\newcommand\NTTEXTCOLOR[1]{\NTCAPTURE{\textcolor{#1}}}
\newcommand\NTCAPTURE[1]{\NTCAPTURELOW{\NTCAPTURE@FINISH{#1}}}
\newcommand\NTCAPTURE@FINISH[4]{#1{#2_{#3}#4}}
\newcommand\NTCAPTURELOW[2]{\NT@CAPTURE@LOOP{#1}{#2}\relax\relax}
\newcommand\NT@CAPTURE@LOOP[4]{%
  \@ifnextchar _{%
    \NT@CAPTURE@SUB{#1}{#2}{#3}{#4}%
  }{\@ifnextchar '{%
    \NT@CAPTURE@PRIME{#1}{#2}{#3}{#4}%
  }{%
    {#1{#2}{#3}{#4}}%
  }}%
}
\def\NT@CAPTURE@SUB#1#2#3#4_#5{\NT@CAPTURE@LOOP{#1}{#2}{#3#5}{#4}}
\def\NT@CAPTURE@PRIME#1#2#3#4'{\NT@CAPTURE@LOOP{#1}{#2}{#3}{#4'}}
\endinput
%%
%% End of file `ottalt.sty'.
