%%
%% This is file `verse.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% verse.dtx  (with options: `usc')
%% 
%% -----------------------------------------------------------------
%%   Author: Peter Wilson
%%   Maintainer: Will Robertson (will dot robertson at latex-project dot org)
%%           Herries Press
%%   Copyright 2001--2007 Peter R. Wilson
%% 
%%   This work may be distributed and/or modified under the
%%   conditions of the LaTeX Project Public License, either
%%   version 1.3c of this license or (at your option) any
%%   later version: <http://www.latex-project.org/lppl.txt>
%% 
%%   This work has the LPPL maintenance status "maintained".
%%   The Current Maintainer of this work is Will Robertson.
%% 
%%   This work consists of the files listed in the README file.
%% -----------------------------------------------------------------
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{verse}[2014/05/10 v2.4b verse typesetting]
\newcounter{vslineno}
\newcounter{poemline}
\newcounter{fvsline}
  \setcounter{fvsline}{0}
\newcounter{modulo@vs}
\newcounter{verse@envctr}\setcounter{verse@envctr}{0}
\providecommand{\theHpoemline}{}
\renewcommand*{\theHpoemline}{\arabic{verse@envctr}.\arabic{poemline}}
\newcommand{\poemlines}[1]{%
  \ifnum#1>\z@
    \setcounter{modulo@vs}{#1}%
  \else
    \setcounter{modulo@vs}{0}%
  \fi
}
\poemlines{0}
\newcommand*{\verselinenumfont}[1]{\def\vlnumfont{#1}}
\verselinenumfont{\rmfamily}
\newcommand*{\setverselinenums}[2]{%
  \setcounter{poemline}{#1}\addtocounter{poemline}{\m@ne}%
  \refstepcounter{poemline}%
  \ifnum\c@modulo@vs>\z@
    \@tempcnta #2\relax
    \divide\@tempcnta\c@modulo@vs
    \multiply\@tempcnta\c@modulo@vs
    \c@fvsline #2\relax
    \advance\c@fvsline-\@tempcnta
  \fi
}
\newcommand{\getmodulo@vs}{\bgroup
  \ifnum\c@modulo@vs<\@ne   % no line numbers
  \else
    \ifnum\c@modulo@vs<\tw@ % every line numbered
      \vlnumfont\thepoemline
    \else
      \@tempcnta\c@poemline
      \advance\@tempcnta -\c@fvsline
      \divide\@tempcnta\c@modulo@vs
      \multiply\@tempcnta\c@modulo@vs
      \advance\@tempcnta\c@fvsline
      \ifnum\@tempcnta=\c@poemline\vlnumfont\thepoemline\fi
    \fi
  \fi
\egroup}
\newif\ifaltindent
\newif\ifpattern
\newif\ifstarpattern
\newlength{\versewidth}
\newlength{\vgap}
\setlength{\vgap}{1.5em}
\newcommand{\vin}{\hspace*{\vgap}}
\newlength{\vindent}
\setlength{\vindent}{2\vgap}
\newlength{\stanzaskip}
\setlength{\stanzaskip}{0.75\baselineskip}
\newlength{\vleftskip}
\setlength{\vleftskip}{30pt}
\newlength{\vrightskip}
\setlength{\vrightskip}{10pt}
\newcommand{\flagverse}[1]{%
  \hskip-\vleftskip\llap{#1}\hskip\vleftskip
  \ignorespaces
}
\newcommand*{\verselinebreak}[1][\z@]{%
  \newline\hspace*{#1}%
  \ignorespaces
}
\newcommand{\incr@vsline}{%
  \refstepcounter{poemline}%
  \stepcounter{vslineno}%
}
\newcommand{\@vsifbang}[1]{\@ifnextchar !{\@firstoftwo{#1}}}
\newcommand{\@vsifgt}[1]{\@ifnextchar >{\@firstoftwo{#1}}}
\newcommand*{\@vstypelinenumright}{%
  \hfill\rlap{\kern\vrightskip\kern\rightmargin\getmodulo@vs}%
}
\newcommand*{\@vstypelinenumleft}{%
  \hfill\rlap{\kern-\textwidth\kern-\vrightskip\getmodulo@vs}%
}
\newcommand*{\verselinenumbersright}{\def\@vstypelinenum{\@vstypelinenumright}}
\newcommand*{\verselinenumbersleft} {\def\@vstypelinenum{\@vstypelinenumleft}}
\verselinenumbersright
\newcommand{\@vscentercr}{%
  \ifhmode \unskip\else \@nolnerr\fi
  \@vstypelinenum
%%%%  \hfill\rlap{\kern\vrightskip\kern\rightmargin\getmodulo@vs}%
  \@vsifgt{\verselinebreak}{%
    \incr@vsline
    \par\@ifstar{\nobreak\@vsxcentercr}{%
      \@vsifbang{\@ifnextchar[ {\@vsicentercr}{}}{\@vsxcentercr}%
    }%
  }%
}
\newcommand{\@vsxcentercr}{%
  \addvspace{-\parskip}%
  \@ifnextchar[ {\@vsicentercr}{\start@vsline}%
}
\def\@vsicentercr[#1]{\vskip #1\ignorespaces \start@vsline}
\newcommand{\start@vsline}{%
  \ifaltindent\ifodd\c@vslineno\else\vin\fi\fi%
  \ifpattern\get@vsindent\fi%
  \ifstarpattern\getstar@vsindent\fi
}
\renewenvironment{verse}[1][\linewidth]{%
  \stepcounter{verse@envctr}%
  \setcounter{poemline}{0}\refstepcounter{poemline}%
  \setcounter{vslineno}{1}%
  \let\\=\@vscentercr
  \list{}{\itemsep \z@
          \itemindent  -\vindent%
          \listparindent\itemindent
          \parsep       \stanzaskip
          \ifdim #1 < \linewidth
            \rightmargin        \z@
            \setlength{\leftmargin}{\linewidth}%
            \addtolength{\leftmargin}{-#1}%
            \addtolength{\leftmargin}{-0.5\leftmargin}%
          \else
            \rightmargin        \leftmargin
          \fi
          \addtolength{\leftmargin}{\vindent}}%
  \item[]%
}
{\endlist}
\newenvironment{altverse}%
  {\starpatternfalse\patternfalse\altindenttrue\setcounter{vslineno}{1}}%
  {\altindentfalse}
\newcommand{\vs@nameedef}[1]{%
  \expandafter\protected@edef\csname #1\endcsname
}
\newif\ifbounderror
\newif\ifinteger
\newcounter{chrsinstr}  % CHARactersINSTRing
\newcommand{\newarray}[3]{%
  \vs@nameedef{#1-low}{#2}%
  \vs@nameedef{#1-high}{#3}%
  \ifnum #3<#2
    \PackageError{verse}{Limits for array #1 are in reverse order}{\@ehc}%
  \fi
}
\newcommand{\stringtoarray}[2]{%
  \def\@vsarrayname{#1}%
  \protected@edef\the@vsstring{#2}%
  \newarray{\@vsarrayname}{1}{1}%
  \@ifmtarg{#2}{%
    \c@chrsinstr \z@
    \@namedef{\@vsarrayname-1}{}%
  }{%
    \c@chrsinstr \@ne
    \expandafter\@vsstringtoarray \the@vsstring\@vsend
  }%
}
\def\@vsstringtoarray #1#2\@vsend{%
  \@namedef{\@vsarrayname-\the\c@chrsinstr}{#1}%
  \vs@nameedef{\@vsarrayname-high}{\the\c@chrsinstr}%
  \@ifmtarg{#2}{%
    \def\@vsinext{}%
  }{%
    \advance\c@chrsinstr \@ne
    \def\@vsinext{%
      \@vsstringtoarray #2\@vsend%
    }%
  }%
  \@vsinext
}
\newcommand{\setarrayelement}[3]{%
  \checkarrayindex{#1}{#2}%
  \vs@nameedef{#1-#2}{#3}%
}
\newcommand{\getarrayelement}[3]{%
  \checkarrayindex{#1}{#2}%
  \protected@edef#3{\@nameuse{#1-#2}}%
}
\newcommand{\checkarrayindex}[2]{%
  \bounderrorfalse
  \expandafter\ifx\csname #1-low\endcsname\relax
    \ifpattern\else
      \PackageError{verse}{No array called #1}{\@ehc}%
    \fi
    \bounderrortrue
  \fi
  \ifnum #2<\@nameuse{#1-low}\relax
    \ifpattern\else
      \PackageError{verse}{Index #2 outside limits for array #1}{\@ehc}%
    \fi
    \bounderrortrue
  \fi
  \ifnum #2>\@nameuse{#1-high}\relax
    \ifpattern\else
      \PackageError{verse}{Index #2 outside limits for array #1}{\@ehc}%
    \fi
    \bounderrortrue
  \fi
}
\begingroup
\catcode`\Q=3
\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil}
\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4}
\long\gdef\@ifnotmtarg#1{\@xifmtarg#1QQ\@firstofone\@gobble\@nil}
\endgroup
\newcommand{\arraytostring}[2]{%
  \def#2{}%
  \c@chrsinstr = \@nameuse{#1-low}%
  \@vsarraytostring{#1}{#2}%
}
\newcommand{\@vsarraytostring}[2]{%
  \ifnum\c@chrsinstr>\@nameuse{#1-high}\else
    \protected@edef#2{#2\@nameuse{#1-\thechrsinstr}}%
    \advance\c@chrsinstr\@ne%
    \@vsarraytostring{#1}{#2}%
  \fi%
}
\newcommand{\checkifinteger}[1]{%
  \protected@edef\@vsa{#1}%
  \ifcat _\ifnum9<1\gobm{#1} _\else A\fi
    \integertrue
  \else
    \integerfalse
  \fi
}
\newcommand{\gobm}[1]{#1}
\newcommand{\indentpattern}[1]{%
  \stringtoarray{Array@vs}{#1}%
}
\newcommand{\get@vsindent}{%
  \getarrayelement{Array@vs}{\number\value{vslineno}}{\@vspat}%
  \ifbounderror
    \arraytostring{Array@vs}{\@vsp@t}%
    \PackageWarning{verse}{%
      Index `\thevslineno' for pattern `\@vsp@t' is out of bounds}%
    \def\@vspat{0}%
  \else
    \checkifinteger{\@vspat}%
    \ifinteger\else
      \arraytostring{Array@vs}{\@vsp@t}%
      \PackageWarning{verse}{%
       `\@vspat' at index `\thevslineno' in pattern `\@vsp@t' is not a digit}%
      \def\@vspat{0}%
    \fi
  \fi
  \ifcase\@vspat\else\hspace*{\@vspat\vgap}\fi
}
\newcommand{\getstar@vsindent}{%
  \expandafter\ifx\csname Array@vs-high\endcsname\relax
    \PackageError{verse}{A pattern has not been specified}{\@ehc}%
  \else
    \ifnum\c@vslineno>\@nameuse{Array@vs-high}%
      \setcounter{vslineno}{1}%
     \fi
     \get@vsindent
  \fi
}
\newenvironment{patverse}
  {\starpatternfalse\patterntrue\altindentfalse\setcounter{vslineno}{1}}
  {\patternfalse}
\newenvironment{patverse*}
  {\starpatterntrue\patternfalse\altindentfalse\setcounter{vslineno}{1}}
  {\starpatternfalse}
\newcommand{\poemtitle}{%
  \par
  \secdef\@vsptitle\@vssptitle
}
\newcommand{\poemtoc}{section}
\def\@vsptitle[#1]#2{%
  \@nameuse{phantomsection}%
  \addcontentsline{toc}{\poemtoc}{#1}%
  \poemtitlemark{#1}%
  \@vstypeptitle{#2}%
  \@afterheading
}
\def\@vssptitle#1{%
  \@vstypeptitle{#1}
  \@afterheading
}
\newcommand{\@vstypeptitle}[1]{%
  \vspace{\beforepoemtitleskip}%
  {\poemtitlefont #1\par}%
  \vspace{\afterpoemtitleskip}%
}
\newcommand{\poemtitlefont}{\normalfont\large\bfseries\centering}
\newcommand{\poemtitlemark}[1]{}
\newlength{\beforepoemtitleskip}
\setlength{\beforepoemtitleskip}{3.5ex \@plus 1ex \@minus .2ex}
\newlength{\afterpoemtitleskip}
\setlength{\afterpoemtitleskip}{2.3ex \@plus.2ex}
\endinput
%%
%% End of file `verse.sty'.
