%%%%%
%%%%%
%%
%%      songbook.sty - Generic SongBook style.
%%
%%      Version 2.4, 30 May, 1996
%%
%%      Copyright 1992--96 Christopher Rath
%%      crath@cyberus.ca
%%
%%      You may distribute under the terms of the Artistic License,
%%      as specified in the relnotes.txt file.
%%
%%%%%
%%%%%
\typeout{SongBook Style version 2.4  <30 May 96>}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                      %%
%%       R E Q U I R E D   M A C R O   F I L E S        %%
%%                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%
% Donald Arseneau's conditionals.sty.
%%%
\input conditionals.sty


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                      %%
%%                      F O N T S                       %%
%%                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%
% The majority of the fonts have been defined as LaTeX commands so
% that traditional LaTeX font selection can be utilized.  The font
% commands are defined as:
%
%       \ChBassFont - Sets the font for the bass note in chords as
%               printed by the \Ch and \ChX commands. 
%       \ChFont - Sets the font for chords as printed by the \Ch and
%               \ChX commands. 
%       \CpyRtFont - sets the font used to print the copyright line
%               produced by the \CpyRt command. 
%       \CpyRtInfoFont - sets the font used to print the copyright
%               licensing information parameter of the \song
%               environment; which appears after the copyright
%               information parameter under the song title.
%       \SBChorusTagFont - sets the font used to print the chorus tag
%               (``Ch:'').
%       \SBDefaultFont - sets the default font for the songbook.  For
%               this command to be effective it should appear within
%               the songbook itself.
%       \SBOccursBrktFont - sets the font used to create the large
%               left and right square brackets used to delimit the
%               \SBOccurs environment.
%       \SBIntroTagFont - sets the font used to print the introduction
%               tag (``Intro:'').
%       \SBOccursTagFont - sets the font used to create the \SBOccurs
%               tag.
%       \SBRefFont - sets the font used in the marginal reference
%               printed by the \SBRef command.
%       \SBVerseNumberFont - sets the font used to print the
%               \SBVerseCnt in front of verses in an SBVerse
%               environment.
%       \SBSectionNumberFont - sets the font used to print the
%               \SBSectionCnt in front of sections in an SBSection
%               environment.
%       \STitleFont - sets the font used to print the song title, as
%               generated by the \STitle command.
%       \STitleKeyFont - sets the font used to print the key a song is
%               written in, as generated by the \STitle command.
%       \STitleNumberFont - sets the font used to print the \SBSongCnt
%               in front of the song title, as generated by the
%               \STitle command.
%       \ScriptRefFont - sets the font used to print the scripture
%               reference generated by the \ScriptRef command.
%       \WandMFont - sets the font used to print the lyricist and
%               composer line generated by the \B\bs WandM command.
%       \lyricNoteFont - sets the font used in comments placed within
%               the lyrics giving musical direction.  This is the only
%               font command commonly used by the writer of a
%               songbook.
%%%
\font\STNFont=cmtt12 at 20pt
\font\SBOBFont=cmss17 at 30pt
\newcommand{\ChBassFont}{\normalsize\bf\sf}     % = cmss12 at ??pt
\newcommand{\ChFont}{\bf\sf}                    % = cmss12 at 14.4pt
\newcommand{\CpyRtFont}{\footnotesize}          % = cmr10  at 10pt
\newcommand{\CpyRtInfoFont}{\tiny}%\sf}         % = cmss8  at  8pt
\newcommand{\SBChorusTagFont}{\small\bf\sf}     % = cmss10 at 10.9pt
\newcommand{\SBDefaultFont}{\large}             % = cmr12  at 14.4pt
\newcommand{\SBIntroTagFont}{\small\bf\sf}      % = cmss10 at 10.9pt
\newcommand{\SBOccursBrktFont}{\SBOBFont}       % = cmss17 at 30pt
\newcommand{\SBOccursTagFont}{\small\bf\sf}     % = cmss10 at 10.0pt
\newcommand{\SBRefFont}{\scriptsize}            % = cmti8  at  8pt
\newcommand{\SBVerseNumberFont}{\small\bf\sf}   % = cmss10 at 10.9pt
\newcommand{\SBSectionNumberFont}{\small\bf\sf} % = cmss10 at 10.9pt
\newcommand{\STitleFont}{\bf\sf}                % = cmss12 at 14.4pt
\newcommand{\STitleKeyFont}{\large}             % = cmr12  at 14.4pt
\newcommand{\STitleNumberFont}{\STNFont}        % = cmtt12 at 20pt
\newcommand{\ScriptRefFont}{\footnotesize}      % = cmr10  at 10pt
\newcommand{\WandMFont}{\footnotesize}          % = cmr10  at 10pt
\newcommand{\lyricNoteFont}{\footnotesize\sf}   % = cmss10 at 10pt


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                      %%
%%      C O N S T A N T S   &   V A R I A B L E S       %%
%%                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%
% Boolean Contants.
%       \False - Defined for use in \if macro contructs and the other
%                constants in this style.
%       \True - Defined for use in \if macro contructs and the other
%                constants in this style.
%%
%       \ChordBk - Are we processing a chordbk.sty document?
%       \HangAmt - Amount to indent when a line wraps.  This has been
%               defined using \newcommand instead of \newlength so that
%               any unit definitions are evaluated at the time the
%               \HangAmt command is used.
%       \Overhead - Are we processing an overhead.sty document?
%       \SongEject - Do we want to end the current page at the end of
%               every {song} environment?  A value of \True means
%               eject after every {song} environment.  
%       \WordBk - Are we processing a wordbk.sty document?
%       \WordsOnly - Is equal to \True if we're in words only mode.
%               The default value will be false, as that is how all of
%               the commands in this file will act.
%%%
\newcommand{\False}{0}
\newcommand{\True}{1}
\newcommand{\ChordBk}{\False}
\newcommand{\HangAmt}{1.5em}
\newcommand{\Overhead}{\False}
\newcommand{\SongEject}{\True}
\newcommand{\WordBk}{\False}
\newcommand{\WordsOnly}{\False}

%%%
% Define Counters used herein.
%
%       \theSBSongCnt - This counter is used for numbering the
%               songs.  When a song is listed multiple times (for
%               multiple keys) the songs number must remain the same
%               each time.
%       \theSBVerseCnt - The verse counter is used for numbering
%               verses as they occur within a song.
%       \theSBSectionCnt - The section counter is used for numbering
%               sections as they occur within a song.
%%%
\newcounter{SBSongCnt}
\newcounter{SBVerseCnt}
\newcounter{SBSectionCnt}

%%%
% Define spaces to leave in various situations.
%
% All of these spaces are defined as LaTeX commands to overcome
% limitations in length evaluation.  For example, if
% \LeftMarginSBVerse were to be defined as a length, and then
% immediately set to 4em's the specific length would be evaluated with
% respect to the current font.  This is not be what is desired;
% instead a length evaluated with respect to the font in place at the
% start of an SBVerse is what is desired.  This can only be done by
% making these lengths LaTeX commands.
%
%       \SpaceAboveSTitle - The space skipped by the \STitle macro
%               before it prints the song title.
%       \LeftMarginSBChorus - The amount of left margin left in front
%               of named choruses in the songbook.
%       \LeftMarginSBVerse - The amount of left margin left in front
%               of verses in the songbook.
%       \LeftMarginSBSection - The amount of left margin left in front
%               of sections in the songbook.
%%%
\newcommand{\SpaceAboveSTitle}{.5in}
\newcommand{\LeftMarginSBChorus}{4em}
\newcommand{\LeftMarginSBVerse}{4em}
\newcommand{\LeftMarginSBSection}{4em}


%%%
% Declare song attribute variables.
%
% These variables are intended for consumption within the songbook 
% style itself, so they will not be documented on the manual page.
%
%       \theSongComposer - The composer and lyricist of the last song.
%       \theSongKey - The key of the last song.  This variable must be
%               reset within the \STitle command, as well as at the
%               start of the song environment, because of the way in
%               which extra keys are handled.
%       \theSongLicense - The copyright license info.
%       \theSongTitle - The title of the last song.
%       \theCopyRtInfo - The copyright information of the last song.
%               This includes the copyright licensing information.
%       \theScriptureRef - The scripture reference of the last song.
%       \theXlatnBy - Who translated the song.
%       \theXlatnPerm - The permission details for the last song-
%               translation.  This variable is reset to an empty
%               string at the start of each song environment.
%       \theXlatnTitle - The title of the last song-translation.  This
%               variable is reset to an empty string at the start of
%               each song environment.
%%%
\newcommand{\theSongComposer}{the Composer}
\newcommand{\theSongCopyRt}{the Copyright}
\newcommand{\theSongKey}{the Key}
\newcommand{\theSongLicense}{the License}
\newcommand{\theSongScriptRef}{the Scripture}
\newcommand{\theSongTitle}{the Title}
\newcommand{\theXlatnBy}{the Translator}
\newcommand{\theXlatnPerm}{the Permission}
\newcommand{\theXlatnTitle}{the Translation Title}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                      %%
%%          S P E C I A L   C H A R A C T E R S         %%
%%                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%
% \SBem - em-dash macro definition.
%       Parameters:  None.
%
% Generate an em-dash within a songbook.  This macro is used to place
% in em-dash within text when we're NOT in words-only mode.  This
% allows us to place dashes within text in order to make room for
% chords that are bigger than their sylables; yet, that dash will not
% appear in the words-only book. The words-only version of this macro
% is a no-op.
%%%
\newcommand{\SBem}{\if\WordsOnly\False ---\fi}

%%%
% \SBen - en-dash macro definition.
%       Parameters:  None.
%
% Generate an en-dash within a songbook.  This macro is used to place
% in en-dash within text when we're NOT in words-only mode.  This
% allows us to place dashes within text in order to make room for
% chords that are bigger than their sylables; yet, that dash will not
% appear in the words-only book. The words-only version of this macro
% is a no-op.
%%%
\newcommand{\SBen}{\if\WordsOnly\False --\fi}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                      %%
%%          T A B L E   O F   C O N T E N T S           %%
%%                                                      %%
%%                A N D   I N D I C E S                 %%
%%                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%
% \makeKeyIndex - Start creation of an index of songs by key.
%       Parameters:  None.
%
% This code is stolen from latex.tex.
%%%
\def\makeKeyIndex{\if@filesw \newwrite\@keyIndexfile
  \immediate\openout\@keyIndexfile=\jobname.kIdx
  \def\keyIndex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrKeyIndex}\typeout
  {Writing index file \jobname.kIdx }\fi}

%%%
% \keyIndex - Make an entry in the index of songs by key.
%       Parameters:
%               [1] Song key and title.
%               [2] Song number.
%
% This code is stolen from latex.tex.
%%%
\def\@wrKeyIndex#1#2{\let\thepage\relax
   \xdef\@gtempa{\write\@keyIndexfile{\string
      \indexentry{#1}{#2}}}\endgroup\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}

\def\keyIndex{\@bsphack\begingroup \@sanitize\@keyIndex}

\def\@keyIndex#1#2{\endgroup\@esphack}

%%%
% \makeTitleIndex - Start creation of a title & first line index.
%       Parameters:  None.
%
% This code is stolen from latex.tex.
%%%
\def\makeTitleIndex{\if@filesw \newwrite\@titleIndexfile
  \immediate\openout\@titleIndexfile=\jobname.tIdx
  \def\titleIndex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrTitleIndex}\typeout
  {Writing index file \jobname.tIdx }\fi}

%%%
% \titleIndex - Make an entry in the title & first line index.
%       Parameters:
%               [1] Song title or first line.
%               [2] Song number.
%
% This code is stolen from latex.tex.
%%%
\def\@wrTitleIndex#1#2{\let\thepage\relax
   \xdef\@gtempa{\write\@titleIndexfile{\string
      \indexentry{#1}{#2}}}\endgroup\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}

\def\titleIndex{\@bsphack\begingroup \@sanitize\@titleIndex}

\def\@titleIndex#1#2{\endgroup\@esphack}

%%%
% \makeTitleContents - Start creation of a table of contents
%       Parameters:  None.
%
% This code is stolen from latex.tex.
%%%
\def\makeTitleContents{\if@filesw \newwrite\@titleContentsfile
  \immediate\openout\@titleContentsfile=\jobname.toc
  \def\titleContents{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrTitleContents}\typeout
  {Writing table of contents file \jobname.toc }\fi}

%%
% \titleContents - Make an entry in the table of contents file
%       Parameters:
%               [1] Song number.
%               [2] Song title.
%
% This code is stolen from latex.tex.
%%%
\def\@wrTitleContents#1#2{\let\thepage\relax
   \xdef\@gtempa{\write\@titleContentsfile{\string
       \item\ \theSBSongCnt. #1\protect\hbox{, \thepage}}}\endgroup\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}

\def\titleContents{\@bsphack\begingroup \@sanitize\@titleContents}

\def\@titleContents#1#2{\endgroup\@esphack}

%%%
% \FLineIdx - Add a first line of song entry to index/idx file.
%       Parameters:
%               [1] First line of song.
%%%
\newcommand{\FLineIdx}[1]{\titleIndex{#1@{\it #1\/}}{\theSBSongCnt}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                      %%
%%    P R I M A R Y   S O N G B O O K   M A C R O S     %%
%%                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%
% \STitle - Song title macro definition.
%       Paramaters:
%               [1] Song's title.
%               [2] Song's Key.
%
% Before printing the title we reset the SBVerseCnt and SBSectionCnt 
% counters back to zero.  This is for songs which are printed in more 
% than one key, because the verse count always begins at 1. for each key.
%
% This macro also makes an entry in the table of contents.
%%%
\newcommand{\STitle}[2]{\setcounter{SBVerseCnt}{0}\setcounter{SBSectionCnt}{0}
        \keyIndex{#2 -- #1}{\theSBSongCnt} %
        \vspace{\SpaceAboveSTitle}
        \centerline{{\STitleNumberFont\theSBSongCnt}{\STitleFont\ --- #1}
                \if\WordsOnly\False {\STitleKeyFont\ [{\Chord #2\relax}]} \fi}}

%%%
% \CpyRt - Copyright info. macro definition.
%       Paramaters:
%               [1] Copyright information.
%               [2] Copyright licensing information.
%%%
\newcommand{\CpyRt}[2]{\centerline{\CpyRtFont\copyright #1 #2}}

%%%
% \WAndM - Words and Music macro definition.
%       Paramaters:
%               [1] Name(s) of the composer and lyricist.
%%%
\newcommand{\WAndM}[1]{\centerline{\WandMFont W\&M:  #1}}

%%%
% \ScriptRef - Scripture reference macro definition.
%       Paramaters:
%               [1] Address of scripture reference for the song.
%
% Used to indicate a scripture reference for the song.  May either be
% the scripture being quoted in the song, or a scripture which
% supports the theology presented in the song.
%%%
\newcommand{\ScriptRef}[1]{\centerline{\ScriptRefFont #1}}

%%%
% {song} - Song environment definition.
%               [1] Title of song.
%               [2] Key song is written in.
%               [3] Copyright information.
%               [4] Name(s) of composer and lyricist.
%               [5] Scripture reference for the song.
%               [6] Copyright licensing information.
%
% The song environment encapsulates a song, including multiple
% appearances for multiple keys and translations.  We increment
% the song counter and then cause the title and other paramater
% information to be displayed.
%
% NOTE:  This environment makes use of \everypar.
%%%
\newenvironment{song}[6]{                       % Comment marker negates the newline.
        \if\WordsOnly\True                      %
                \setlength{\parindent}{0pt}     %
        \fi                                     %
        \renewcommand{\theSongComposer}{#4}     %
        \renewcommand{\theSongCopyRt}{#3}       %
        \renewcommand{\theSongKey}{#2}          %
        \renewcommand{\theSongLicense}{#6}      %
        \renewcommand{\theSongScriptRef}{#5}    %
        \renewcommand{\theSongTitle}{#1}        %
        \renewcommand{\theXlatnBy}{}            %
        \renewcommand{\theXlatnPerm}{}          %
        \renewcommand{\theXlatnTitle}{}         %
        %
        \addtocounter{SBSongCnt}{1}                %
        \titleIndex{\theSongTitle}{\theSBSongCnt}  %
        \titleContents{\theSongTitle}{\theSongKey} %
        %
        \STitle{\theSongTitle}{\theSongKey}
        \vspace{-.5ex}
        \CpyRt{\theSongCopyRt}{\theSongLicense}
        \vspace{-.5ex}
        \WAndM{\theSongComposer}
        \if\naught{#5}\relax\else%
          \vspace{-.5ex}
          \ScriptRef{\theSongScriptRef}
        \fi%
        \vspace{.5ex}
        \everypar={\hangafter=1\hangindent=\HangAmt}%
}{\if\SongEject\True \vfill\pagebreak \else \vspace{0ex plus15ex minus0ex} \pagebreak[1]\fi}

%%%
% {xlatn} - Song-tranlation environment definition.
%               [1] Title of the translated song.
%               [2] Translation permission.
%               [3] Who performed the translation.
%
% The xlatn environment always occurs within a song environment.
% We reset the verse counter then cause the title and other
% parameter information to be displayed.  It is important for the
% xlatn environment to occur within a song environment, because the
% xlatn environment inherits the song environment's \everypar
% definition.
%%%
\newenvironment{xlatn}[3]{                      % Comment marker negates the newline.
        \renewcommand{\theXlatnBy}{#3}          %
        \renewcommand{\theXlatnPerm}{#2}        %
        \renewcommand{\theXlatnTitle}{#1}       %
        %
        \titleIndex{\theXlatnTitle}{\theSBSongCnt} %
        \titleContents{\theXlatnTitle}{\theSongKey} %
        %
        \STitle{\theXlatnTitle}{\theSongKey}
        \CpyRt{\theSongCopyRt}{\theSongLicense}
        \vspace{-.5ex}
        \centerline{\CpyRtFont\theXlatnPerm}
        \vspace{-.5ex}
        \centerline{\CpyRtFont\theXlatnBy}
        %
        \setcounter{SBVerseCnt}{0}              %
        \setcounter{SBSectionCnt}{0}            %
}{}


%%%
% \Chord - Change the sequence of characters into a chord.
%       Parameters:
%               [1] Chord.
%

% The original version of this function was written by Philip
% Hirschhorn (psh@math.mit.edu or phirschhorn@lucy.wellesley.edu).
%
% Scan the sequence of characters in Chord.  Replace `#' characters
% with $\sharp$'s and `b' characters with $\flat$.  This produces more
% realistic looking chord symbols (which also take up less space than
% their phoney counterparts).  We also look for '/' characters, and
% insert a \ChBassFont command into the stream when a '/' is found.
% This makes the bass note of the chord to appear in a smaller font.
% 
\def\Chord#1{\ifx#1\relax
                \let\next=\relax
             \else
                \ifx#1##% double sharp because we're inside a \def
                  $\sharp$%
                \else
                  \ifx#1b%
                    $\flat$%
                  \else
                    \ifx#1/%
                      \ChBassFont /%
                    \else
                      #1%
                    \fi
                  \fi
                \fi
                \let\next=\Chord
             \fi
             \next}

%%%
% \Ch  - Chord over lyrics macro definition.
% \ChX - Chord over lyrics macro, deleting trailing spaces.
%       Paramaters:
%               [1] Chord.
%               [2] Syllable that chord is to be left justified over.
%
% The words-only style file turns off the chord generation and just
% prints the second parameter.  The \ChX version of this macro is used
% in the words only style to ensure that spaces following the macro
% are removed.  For example, a line ending with an extra couple of
% dangling chords could be written as:
%               \ChX{D7}{ing.} \ChX{E}{} \ChX{D}{}
%
\newcommand{\Ch}[2]{\if\WordsOnly\False{\leavevmode\vbox{\hbox{\strut\ChFont\Chord#1\relax}\hbox{#2\strut}}}\else#2\fi}
\newcommand{\ChX}[2]{\if\WordsOnly\False\Ch{#1}{#2}\else\if\naught{#2}\ignorespaces\else#2\fi\fi}

%%%
% \SBMargNote - Songbook marginal note.
%       Paramaters:
%               [1] Text of note to place in margin.
%
% Used to place a note of some kind in the margin of a songbook.  In words
% only mode this macro is a no-op.
%%%
\newcommand{\SBMargNote}[1]{\if\WordsOnly\True \else
        \marginpar{{\begin{flushleft}\SBRefFont{#1}\end{flushleft}}}
        \fi}

%%%
% \SBRef - Song reference definition.
%       Paramaters:
%               [1] Songbook name.
%               [2] Page/Song number within book ref'ed by [1].
%
% Used to indicate a source for the full SATB music for this song.
% In words only mode this macro is a no-op.
%%%
\newcommand{\SBRef}[2]{\if\WordsOnly\True \else
        \marginpar{{\begin{flushleft}\SBRefFont{\em #1}, {#2}.\end{flushleft}}}
        \fi}

%%%
% \begin{SBVerse} - Verse environment definition.
%       Parameters:  None.
%
% Very much like LaTeX's verse environment, except that here the
% verses are numbered.  The indent amount for lines that are too long
% is set with the \HangAmt command (see the constant definitions at
% the top of this file).
%%%
\newenvironment{SBVerse}{
  \addtocounter{SBVerseCnt}{1}
  \begin{list}{{\SBVerseNumberFont \theSBVerseCnt .}\hskip\HangAmt}
    {\setlength{\leftmargin}{\LeftMarginSBVerse}
      \setlength{\parsep}{0pt}\addtolength{\leftmargin}{\HangAmt}
      \setlength{\listparindent}{-\HangAmt}\addtolength{\labelwidth}{\HangAmt}
      }
  \item\hskip -\HangAmt
}{\end{list}\par}

%%%
% \begin{SBSection} - Section environment definition.
%       Parameters:  None.
%
% Very much like LaTeX's verse environment, except that here the
% sections are numbered.  The indent amount for lines that are too long
% is set with the \HangAmt command (see the constant definitions at
% the top of this file).
%%%
\newenvironment{SBSection}{
  \addtocounter{SBSectionCnt}{1}
  \begin{list}{{\SBSectionNumberFont\alph{SBSectionCnt})}\hskip\HangAmt}
    {\setlength{\leftmargin}{\LeftMarginSBSection}
      \setlength{\parsep}{0pt}\addtolength{\leftmargin}{\HangAmt}
      \setlength{\listparindent}{-\HangAmt}\addtolength{\labelwidth}{\HangAmt}
      }
  \item\hskip -\HangAmt
}{\end{list}\par}

%%%
% \begin{SBChorus} - Chorus environment definition.
%       Parameters:  None.
%
% Very much like LaTeX's verse environment, except that here a `Ch:'
% tag is inserted to demark the start of the chorus.  The indent
% amount for lines that are too long is set with the \HangAmt command
% (see the constant definitions at the top of this file).
%%%
\newenvironment{SBChorus}{
  \begin{list}{{\SBChorusTagFont Ch:}\hskip\HangAmt}
    {\setlength{\leftmargin}{\LeftMarginSBChorus}
      \setlength{\parsep}{0pt}\addtolength{\leftmargin}{\HangAmt}
      \setlength{\listparindent}{-\HangAmt}\addtolength{\labelwidth}{\HangAmt}
      }
    \item\hskip -\HangAmt
}{\end{list}\par}

%%%
% \SBIntro - Introduction definition.
%       Parameters:
%               [1] The Introduction.
%
% This command is used to encapsulate any introduction to a song.  In
% words only mode this command is a no-op.
%%%
\newcommand{\SBIntro}[1]{\if\WordsOnly\False
        \begin{list}{{\SBIntroTagFont Intro:}}
                        {\setlength{\leftmargin}{\LeftMarginSBChorus}
                        \setlength{\parsep}{0pt}}
                \item #1
        \end{list}\par
\fi}

%%%
% \begin{SBOccurs} - Occurance environment definition.
%       Parameters:
%               [1] Occurance number(s).  For example "1,3" would
%                   designate that this passage applies to the 1st and
%                   3rd occurances.
%%%
\newenvironment{SBOccurs}[1]{
        {\SBOccursTagFont #1\SBOccursBrktFont [}
}{{\SBOccursBrktFont ]}}

%%%
% \begin{SBExtraKeys} - Extra song keys environment definition.
%       Parameters:
%               [1] This paramater actually is used to either pass or
%                   not pass all the content of the environment on to
%                   the LaTeX processor.
%
% Songs are frequently listed in more than one key.  This is ok for
% books with chords, however the words only edition should only print
% one occurance of a song.  So, any extra keys are placed in a
% SBExtraKey environment.  This allows them to be "shut off" when
% they're not needed.
%%%
\newenvironment{SBExtraKeys}[1]{\if\WordsOnly\True \else #1 \fi}{}

%%%
% \CBPageBrk - Generate a page break here if we're in Chordbk mode.
%       Parameters:  None.
%%%
\newcommand{\CBPageBrk}{\if\ChordBk\True \vfill\pagebreak \else \fi}

%%%
% \NotWOPageBrk - Generate a page break here if we're NOT in Words Only mode.
%       Parameters:  None.
%%%
\newcommand{\NotWOPageBrk}{\if\WordsOnly\False \pagebreak \else \fi}

%%%
% \OHPageBrk - Generate a page break here if we're in OverHead mode.
%       Parameters:  None.
%%%
\newcommand{\OHPageBrk}{\if\Overhead\True \pagebreak \else \fi}

%%%
% \WOPageBrk - Generate a page break here if we're in Words Only mode.
%       Parameters:  None.
%%%
\newcommand{\WOPageBrk}{\if\WordsOnly\True \pagebreak \else \fi}

%
%%%
% End of songbook.sty file.
%%%
