%% %% This is file `songs.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% songs.dtx (with options: `package') %% %% This is a generated file. %% %% Copyright (C) 2017 by Kevin W. Hamlen %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.3a 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.3a or later is part of all distributions of LaTeX version %% 2004/10/01 or later. %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{songs} [2017/06/05 v3.0 Songs package] \newif\ifSB@etex \ifx\eTeXversion\undefined\else \ifx\eTeXversion\relax\else \SB@etextrue \ifx\e@alloc\@undefined \IfFileExists{etex.sty}{\RequirePackage{etex}}{} \fi \fi \fi \newif\ifSB@pdf\SB@pdffalse \ifx\pdfoutput\undefined\else \ifx\pdfoutput\relax\else \ifnum\pdfoutput<\@ne\else \SB@pdftrue \fi \fi \fi \newif\ifSB@preamble \SB@preambletrue \newif\ifSB@test \newif\ifSB@testii \newcommand\SB@temp{} \newcommand\SB@tempii{} \newcommand\SB@tempiii{} \newcommand\SB@tempiv{} \newcommand\SB@tempv{} \newcommand\SB@newcount[1]{\@ifdefinable#1{\newcount#1}} \newcommand\SB@newdimen[1]{\@ifdefinable#1{\newdimen#1}} \newcommand\SB@newbox[1]{\@ifdefinable#1{\newbox#1}} \newcommand\SB@newtoks[1]{\@ifdefinable#1{\newtoks#1}} \newcommand\SB@newwrite[1]{\@ifdefinable#1{\newwrite#1}} \SB@newdimen\SB@dimen \SB@newdimen\SB@dimenii \SB@newdimen\SB@dimeniii \SB@newdimen\SB@dimeniv \SB@newbox\SB@box \SB@newbox\SB@boxii \SB@newbox\SB@boxiii \SB@newtoks\SB@toks \SB@newcount\SB@cnt \SB@newcount\SB@cntii \newlength\SB@skip \SB@newbox\SB@envbox \RequirePackage{keyval} \newcommand\SB@app[3]{% \expandafter#1\expandafter#2\expandafter{#2#3}% } \newcommand\lyricfont{\normalfont\normalsize} \newcommand\stitlefont{% \sffamily\ifslides\Huge\else\slshape\Large\fi% } \newcommand\versefont{} \newcommand\chorusfont{} \newcommand\notefont{} \newcommand\meterfont{\tiny\sffamily\upshape} \newcommand\echofont{% \ifdim\fontdimen\@ne\font>\z@\upshape\else\slshape\fi% } \newcommand\scripturefont{% \usefont{OT1}{pzc}{mb}{it}% \shiftdblquotes{-1.1\p@}\z@{-2\p@}\z@% } \newcommand\printscrcite[1]{\sffamily\small#1} \newcommand\snumbgcolor{SongbookShade} \newcommand\notebgcolor{SongbookShade} \newcommand\idxbgcolor{SongbookShade} \newcommand\versejustify{\justifyleft} \newcommand\chorusjustify{\justifyleft} \newcommand\notejustify{% \advance\baselineskip\p@\relax% \leftskip\z@skip\rightskip\z@skip% \parfillskip\@flushglue\parindent\z@% } \newcommand\placenote[1]{% \leftskip\z@skip\rightskip\@flushglue\SB@cbarshift% \noindent#1\par% } \newcounter{songnum} \newcounter{versenum} \renewcommand\thesongnum{\songnumstyle{songnum}} \newcommand\songnumstyle{} \let\songnumstyle\arabic \renewcommand\theversenum{\versenumstyle{versenum}} \newcommand\versenumstyle{} \let\versenumstyle\arabic \newcommand\printsongnum[1]{\sffamily\bfseries\LARGE#1} \newcommand\printversenum[1]{\lyricfont#1.\ } \newcommand\placeversenum[1]{% \hskip-\leftskip\hskip-\parindent\relax% \box#1% } \newcommand\everyverse{} \newcommand\everychorus{} \newcommand\printchord[1]{\sffamily\slshape\large#1} \newcommand\chordlocals{} \newlength\versesep \versesep123456789sp\relax \newlength\afterpreludeskip \afterpreludeskip=2\p@\@plus4\p@ \newlength\beforepostludeskip \beforepostludeskip=2\p@\@plus4\p@ \newlength\baselineadj \baselineadj\z@skip \newcommand\clineparams{% \baselineskip\f@size\p@% \advance\baselineskip-2\p@% \lineskiplimit-2\p@% \lineskip-2\p@% } \parindent.25in \newlength\idxheadwidth \setlength\idxheadwidth{1.5cm} \newlength\songnumwidth \settowidth\songnumwidth{\printsongnum{999.}} \newlength\versenumwidth \settowidth\versenumwidth{\printversenum{9\kern1em}} \newlength\cbarwidth \setlength\cbarwidth\p@ \newlength\sbarheight \setlength\sbarheight\p@ \interlinepenalty\@m \SB@newcount\vvpenalty\vvpenalty200 \SB@newcount\ccpenalty\ccpenalty200 \SB@newcount\vcpenalty\vcpenalty200 \SB@newcount\cvpenalty\cvpenalty200 \SB@newcount\brkpenalty\brkpenalty200 \SB@newcount\spenalty\spenalty100 \newcommand\songmark{} \newcommand\versemark{} \newcommand\chorusmark{} \newcommand\extendprelude{\showrefs\showauthors} \newcommand\extendpostlude{\songcopyright\ \songlicense\unskip} \newcommand\idxheadfont{\sffamily\bfseries\LARGE} \newcommand\idxtitlefont{\sffamily\slshape} \newcommand\idxlyricfont{\rmfamily} \newcommand\idxscripfont{\sffamily\small\slshape} \newcommand\idxauthfont{\small\bfseries} \newcommand\idxrefsfont{\normalfont\normalsize} \newcommand\idxbook[1]{\small\bfseries#1} \newcommand\idxcont[1]{\small\textbf{#1} (continued)} \newcommand\colbotglue{} \let\colbotglue\z@skip \newcommand\lastcolglue{} \let\lastcolglue\@flushglue \SB@newcount\minfrets\minfrets4 \SB@newdimen\SB@colwidth \DeclareOption{slides}{\slides} \newcommand\slides{% \slidestrue% \def\lyricfont{\normalfont\huge}% \def\chorusfont{\slshape}% \def\versejustify{\justifycenter}% \let\chorusjustify\versejustify \def\placenote##1{\justifycenter\noindent##1\par}% \scriptureoff% \onesongcolumn% \ifSB@preamble\ifSB@chordedspec\else\SB@chordsoff\fi\fi% \spenalty-\@M% \let\colbotglue\@flushglue% \setlength\cbarwidth\z@% \setlength\sbarheight\z@% } \newcommand\justifyleft{% \leftskip\parindent% \ifSB@inverse\advance\leftskip\versenumwidth\fi% \SB@cbarshift% \parindent-\parindent% } \newcommand\justifycenter{% \centering\SB@cbarshift\rightskip\leftskip% \def\placeversenum##1{% \hskip-\leftskip\hskip-\parindent\relax% \hangindent-\wd##1\hangafter\m@ne% \box##1\hfil% }% } \newcommand\SB@outer{\outer} \DeclareOption{unouter}{\let\SB@outer\relax} \DeclareOption{rawtext}{\rawtexttrue\indexesoff} \DeclareOption{noshading}{\SB@colorboxesfalse} \DeclareOption{noindexes}{\indexesoff} \newcommand\indexeson{\songindexestrue} \newcommand\indexesoff{\songindexesfalse} \DeclareOption{nopdfindex}{% \let\songtarget\@gobbletwo% \let\songlink\@secondoftwo% } \newif\ifSB@measurespec \newif\ifSB@chordedspec \DeclareOption{chorded}{\chordson} \DeclareOption{lyric}{\chordsoff} \newcommand\chordson{\SB@chordedspectrue\SB@chordson} \newcommand\chordsoff{\SB@chordedspectrue\SB@chordsoff} \newcommand\SB@chordson{% \ifrawtext% \SB@errrtopt% \else% \chordedtrue\lyricfalse% \let\SB@bracket\SB@chord% \let\SB@rechord\SB@@rechord% \let\SB@ch\SB@ch@on% \ifSB@measurespec% \ifmeasures\SB@measureson\else\SB@measuresoff\fi% \else% \SB@measureson% \fi% \ifSB@preamble\def\colbotglue{\z@\@plus.5\textheight}\fi% \SB@setbaselineskip% \fi% } \newcommand\SB@chordsoff{% \chordedfalse\lyrictrue% \def\SB@bracket##1]{\ignorespaces}% \let\SB@rechord\relax% \let\SB@ch\SB@ch@off% \ifSB@measurespec% \ifmeasures\SB@measureson\else\SB@measuresoff\fi% \else% \SB@measuresoff% \fi% \ifSB@preamble\let\colbotglue\z@skip\fi% \SB@setbaselineskip% } \DeclareOption{showmeasures}{\measureson} \DeclareOption{nomeasures}{\measuresoff} \newcommand\measureson{\SB@measurespectrue\SB@measureson} \newcommand\measuresoff{\SB@measurespectrue\SB@measuresoff} \newcommand\SB@measureson{% \measurestrue% \let\SB@mbar\SB@makembar% \ifchorded% \let\SB@mch\SB@mch@on% \else% \let\SB@mch\SB@mch@m% \fi% \ifSB@inverse\SB@loadactives\fi% \ifSB@inchorus\SB@loadactives\fi% } \newcommand\SB@measuresoff{% \measuresfalse% \let\SB@mbar\@gobbletwo% \ifchorded% \let\SB@mch\SB@ch@on% \else% \let\SB@mch\SB@ch@off% \fi% \ifSB@inverse\SB@loadactives\fi% \ifSB@inchorus\SB@loadactives\fi% } \DeclareOption{transposecapos}{\transcapostrue} \DeclareOption{noscripture}{\SB@omitscriptrue} \newcommand\scriptureon{\SB@omitscripfalse} \newcommand\scriptureoff{\SB@omitscriptrue} \DeclareOption{twosongcolumns}{\SB@numcols\tw@} \DeclareOption{onesongcolumn}{\SB@numcols\@ne} \newcommand\songcolumns[1]{% \SB@cnt#1\relax% \ifnum\SB@cnt=\SB@numcols\else% \ifSB@preamble\else{\SB@clearpage}\fi% \fi% \SB@numcols\SB@cnt% \ifnum\SB@numcols>\z@% \SB@colwidth-\columnsep% \multiply\SB@colwidth\SB@numcols% \advance\SB@colwidth\columnsep% \advance\SB@colwidth\textwidth% \divide\SB@colwidth\SB@numcols% \else% \ifrepchorus\SB@warnrc\fi% \fi% } \newcommand\onesongcolumn{\songcolumns\@ne} \newcommand\twosongcolumns{\songcolumns\tw@} \newcommand\songlist{} \newcommand\includeonlysongs[1]{% \ifSB@songsenv\SB@errpl\else% \partiallisttrue% \renewcommand\songlist{#1}% \fi% } \newcommand\nosongnumbers{\setlength\songnumwidth\z@} \newcommand\noversenumbers{% \renewcommand\printversenum[1]{}% \setlength\versenumwidth\z@% } \ifSB@etex \newcommand\repchoruses{% \ifnum\SB@numcols<\@ne\SB@warnrc\fi% \repchorustrue% } \else \newcommand\repchoruses{\SB@erretex} \fi \newcommand\norepchoruses{\repchorusfalse} \newcommand\sepverses{% \vvpenalty-\@M% \ccpenalty100 % \vcpenalty\vvpenalty% \cvpenalty\vvpenalty% \let\colbotglue\@flushglue% } \AtBeginDocument{ \SB@setversesep \songcolumns\SB@numcols \SB@preamblefalse } \SB@newbox\SB@songbox \SB@newcount\SB@numcols\SB@numcols\tw@ \SB@newcount\SB@colnum \SB@newbox\SB@colbox \SB@newbox\SB@pgbox \SB@newbox\SB@mrkbox \newcommand\SB@maxmin[3]{\ifdim#1#2#3#1#3\fi} \newcommand\SB@mkpage[4]{% \ifvoid#2\else\begingroup% \edef\SB@temp{\ifnum#2=\SB@box\SB@boxii\else\SB@box\fi}% \edef\SB@tempii{\ifnum#2=\SB@boxiii\SB@boxii\else\SB@boxiii\fi}% \splitmaxdepth\maxdepth\splittopskip\z@skip% \ifnum#1=\z@\global\setbox#2\vbox{\unvbox#2\vfil}\fi% \loop\ifnum#3<\SB@numcols% \ifnum#1=\z@\setbox\SB@tempii\copy#2\fi% \setbox\SB@temp\vsplit#2to#4\relax% \ifvoid#2% \ifnum#1=\z@% \global\setbox#2\box\SB@tempii% \else% \SB@updatepage% \global\advance#3\@ne% \fi% #3\SB@numcols% \else% \SB@updatepage% \global\advance#3\@ne% \ifrepchorus\ifvoid\SB@chorusbox\else% \SB@insertchorus#2% \fi\fi% \fi% \repeat% \ifnum#1=\z@\global\setbox#2\vbox{\unvbox#2\unskip}\fi% \endgroup\fi% } \newcommand\SB@migrate[1]{% \SB@toks\expandafter{#1}% \edef\SB@temp{\the\SB@toks}% \ifx\SB@temp\@empty\else\mark{\the\SB@toks}\fi% } \newcommand\SB@updatepage{% \global\setbox\SB@mrkbox\vbox{% \unvbox\SB@mrkbox% \SB@migrate\splitfirstmark% \SB@migrate\splitbotmark% }% \global\setbox\SB@pgbox\hbox{% \SB@dimen\SB@colwidth% \advance\SB@dimen\columnsep% \multiply\SB@dimen\SB@colnum% \advance\SB@dimen-\wd\SB@pgbox% \unhbox\SB@pgbox% \ifdim\SB@dimen=\z@\else\hskip\SB@dimen\relax\fi% \box\SB@temp% }% } \newcommand\SB@droppage{\setbox\SB@temp\box\voidb@x} \newcommand\SB@output[1]{% \ifnum\SB@numcols>\z@\begingroup% \loop% \SB@dimen\textheight% \ifinner\else\advance\SB@dimen-\pagetotal\fi% \SB@mkpage#1\SB@colbox\SB@colnum\SB@dimen% \SB@testfalse\SB@testiitrue% \ifnum#1>\@ne\ifvoid\SB@colbox\ifnum\SB@colnum>\z@% \SB@testtrue\SB@testiifalse% \fi\fi\fi% \ifnum\SB@colnum<\SB@numcols\SB@testiifalse\else\SB@testtrue\fi% \ifSB@test% \unvbox\SB@mrkbox% \ifinner\else\kern\z@\fi% \box\SB@pgbox% \ifinner\else\vfil\break\vskip\vsize\relax\fi% \global\SB@colnum\z@% \fi% \ifSB@testii\repeat% \endgroup\else% \unvbox\SB@colbox\unskip% \fi% } \newcommand\SB@putboxes[1]{% \SB@dimen\ifnum\SB@numcols>\z@\ht\SB@colbox\else\p@\fi% #1\SB@colbox% \ifdim\SB@dimen>\z@% \SB@breakpoint\spenalty% \ifdim\sbarheight>\z@% \vskip-\sbarheight\relax% \fi% \fi% #1\SB@songbox% } \newcommand\SB@nextcol[2]{% \ifnum#1>\z@% \ifnum\SB@numcols>\z@% \global\setbox\SB@colbox\vbox{% \SB@cnt#1\relax% \SB@dimen\ht\SB@colbox% \unvbox\SB@colbox% \unskip% \ifdim\SB@dimen>\z@% \vskip#2\relax% \break% \advance\SB@cnt\m@ne% \fi% \loop\ifnum\SB@cnt>\z@% \nointerlineskip% \null% \vfil% \break% \advance\SB@cnt\m@ne% \repeat% }% \SB@output1% \else% \ifnum\lastpenalty=-\@M\null\fi% \break% \fi% \fi% } \newcommand\SB@selectcol{} \newcommand\SB@@selectcol{% \begingroup% \SB@cnt\z@% \vbadness\@M\vfuzz\maxdimen% \let\SB@updatepage\SB@droppage% \SB@dimen\textheight% \ifinner\else\advance\SB@dimen-\pagetotal\fi% \setbox\SB@boxii\vbox{\SB@putboxes\unvcopy}% \SB@cntii\SB@colnum% \SB@mkpage0\SB@boxii\SB@cntii\SB@dimen% \SB@spos% \global\SB@cnt\SB@cnt% \endgroup% \SB@nextcol\SB@cnt\colbotglue% } \newcommand\SB@spbegnew{% \setbox\SB@boxiii\copy\SB@songbox% \SB@cntii\z@% \SB@mkpage0\SB@boxiii\SB@cntii\textheight% } \newcommand\SB@spextold{% \ifodd\c@page\else% \SB@cntii\z@% \SB@mkpage0\SB@boxii\SB@cntii\textheight% \fi% } \newcommand\SB@spextnew{% \SB@cntii\z@% \SB@mkpage0\SB@boxiii\SB@cntii\textheight% } \newcommand\SB@spdblpg{% \ifnum\SB@cntii<\SB@numcols% \SB@cnt\SB@numcols% \advance\SB@cnt-\SB@colnum% \if@twoside\ifodd\c@page\else% \advance\SB@cnt\SB@numcols% \fi\fi% \fi% } \newcommand\SB@sposi{% \ifnum\SB@cntii<\SB@numcols\else\if@twoside% \SB@spextold% \fi\fi% \ifnum\SB@cntii<\SB@numcols\else% \SB@spbegnew% \ifnum\SB@cntii<\SB@numcols\else\if@twoside% \SB@spextnew% \fi\fi% \SB@spdblpg% \fi% } \newcommand\SB@sposii{% \ifnum\SB@cntii<\SB@numcols\else% \SB@spbegnew% \ifnum\SB@cntii<\SB@numcols% \SB@cnt\SB@numcols% \advance\SB@cnt-\SB@colnum% \else% \if@twoside% \SB@spextold% \ifnum\SB@cntii<\SB@numcols\else% \SB@spextnew% \SB@spdblpg% \fi% \fi% \fi% \fi% } \newcommand\SB@sposiii{% \ifnum\SB@cntii>\SB@colnum% \SB@cnt\SB@colnum% \advance\SB@cnt\@ne% \ifnum\SB@cnt<\SB@numcols% \setbox\SB@boxiii\copy\SB@songbox% \SB@mkpage0\SB@boxiii\SB@cnt\SB@dimen% \advance\SB@cnt\m@ne% \fi% \ifnum\SB@cnt>\SB@colnum% \SB@cnt\z@% \SB@sposii% \else% \SB@cnt\@ne% \fi% \fi% } \newcommand\songpos[1]{% \ifcase#1% \let\SB@selectcol\relax% \let\SB@spos\relax% \or% \let\SB@selectcol\SB@@selectcol% \let\SB@spos\SB@sposi% \or% \let\SB@selectcol\SB@@selectcol% \let\SB@spos\SB@sposii% \or% \let\SB@selectcol\SB@@selectcol% \let\SB@spos\SB@sposiii% \else% \SB@errspos% \fi% } \newcommand\SB@spos{} \songpos\thr@@ \newcommand\SB@clearpage{% \SB@testtrue% \ifvoid\SB@pgbox% \ifdim\ht\SB@colbox=\z@\ifdim\dp\SB@colbox=\z@% \SB@testfalse% \fi\fi% \fi% \ifSB@test% \SB@cnt\SB@numcols% \advance\SB@cnt-\SB@colnum% \SB@nextcol\SB@cnt\lastcolglue% \SB@output2% \fi% } \newcommand\SB@cleardpage{% \SB@clearpage% \if@twoside\ifodd\c@page% \SB@nextcol\SB@numcols\@flushglue% \SB@output2% \fi\fi% } \newcommand\SB@stype{\SB@stypcol} \newcommand\SB@stypcol{% \ifnum\SB@numcols>\z@% \SB@selectcol% \global\setbox\SB@colbox\vbox{\SB@putboxes\unvbox}% \SB@output0% \else% \unvbox\voidb@x% \SB@breakpoint\spenalty% \ifdim\sbarheight>\z@% \vskip-\sbarheight\relax% \fi% \unvbox\SB@songbox% \fi% } \newcommand\SB@styppage{% \ifnum\SB@numcols>\z@% \SB@clearpage% \unvbox\SB@songbox% \nointerlineskip\null% \else% \unvbox\SB@songbox% \fi% \nointerlineskip% } \newcommand\SB@sgroup{} \let\SB@sgroup\@empty \SB@newcount\SB@groupcnt \newcommand\SB@clearpboxes{} \newcommand\SB@partbox[1]{% \SB@newbox#1% \SB@app\gdef\SB@clearpboxes{\setbox#1\box\voidb@x}% \global\setbox#1\box% } \newcommand\SB@submitpart{% \ifx\SB@sgroup\@empty\else% \SB@testfalse \@for\SB@temp:=\songlist\do{\ifx\SB@temp\SB@sgroup\SB@testtrue\fi}% \ifSB@test% \edef\SB@tempii{\SB@sgroup @\the\SB@groupcnt}% \expandafter\SB@partbox \csname songbox@\SB@tempii\endcsname\SB@songbox% \global\expandafter\let% \csname stype@\SB@tempii\endcsname\SB@stype% \ifrepchorus\ifvoid\SB@chorusbox\else% \expandafter\SB@partbox \csname chbox@\SB@tempii\endcsname\SB@chorusbox% \fi\fi% \fi% \global\advance\SB@groupcnt% \ifnum\SB@groupcnt<\z@\m@ne\else\@ne\fi% \fi% \setbox\SB@songbox\box\voidb@x% \setbox\SB@chorusbox\box\voidb@x% } \newcommand\SB@submitsong{% \ifpartiallist\SB@submitpart\else\SB@stype\fi% } \newcommand\SB@submitenv{% \begingroup% \let\SB@songbox\SB@envbox% \SB@styppage% \endgroup% } \newcommand\SB@songlistbrk{} \def\SB@songlistbrk{brk} \newcommand\SB@songlistnc{} \def\SB@songlistnc{nextcol} \newcommand\SB@songlistcp{} \def\SB@songlistcp{sclearpage} \newcommand\SB@songlistcdp{} \def\SB@songlistcdp{scleardpage} \newcommand\commitsongs{% \ifpartiallist% \ifnum\SB@numcols>\z@% \@for\SB@temp:=\songlist\do{% \ifx\SB@temp\SB@songlistnc\SB@nextcol\@ne\@flushglue\else% \ifx\SB@temp\SB@songlistbrk\SB@nextcol\@ne\colbotglue\else% \ifx\SB@temp\SB@songlistcp\SB@clearpage\else% \ifx\SB@temp\SB@songlistcdp\SB@cleardpage\else% \SB@groupcnt\m@ne\SB@finloop% \SB@groupcnt\z@\SB@finloop% \fi\fi\fi\fi% }% \else% \@for\SB@temp:=\songlist\do{% \ifx\SB@temp\SB@songlistnc\vfil\break\else% \ifx\SB@temp\SB@songlistbrk\break\else% \ifx\SB@temp\SB@songlistcp\clearpage\else% \ifx\SB@temp\SB@songlistcdp% \clearpage% \ifodd\c@page\null\newpage\fi% \else% \SB@groupcnt\m@ne\SB@finloop% \SB@groupcnt\z@\SB@finloop% \fi\fi\fi\fi% }% \fi% \SB@clearpboxes% \fi% \SB@clearpage% } \newcommand\SB@finloop{% \loop\edef\SB@tempii{\SB@temp @\the\SB@groupcnt}% \expandafter\ifx% \csname songbox@\SB@tempii\endcsname\relax\else% \setbox\SB@songbox\expandafter\copy% \csname songbox@\SB@tempii\endcsname% \expandafter\ifx\csname chbox@\SB@tempii\endcsname\relax% \repchorusfalse% \else% \repchorustrue% \setbox\SB@chorusbox\expandafter\copy% \csname chbox@\SB@tempii\endcsname% \fi% \csname stype@\SB@tempii\endcsname% \advance\SB@groupcnt\ifnum\SB@groupcnt<\z@\m@ne\else\@ne\fi% \repeat% } \newcommand\SB@insertchorus[1]{{% \vbadness\@M\vfuzz\maxdimen% \setbox\SB@box\copy#1% \setbox\SB@box\vsplit\SB@box to\maxdimen% \edef\SB@temp{\splitfirstmarks\SB@nocmarkclass}% \ifx\SB@temp\SB@nocmark\else% \edef\SB@temp{\splitfirstmarks\SB@cmarkclass}% \ifx\SB@temp\SB@cmark% \SB@dimen4096\p@% \SB@dimenii\maxdimen% \SB@dimeniii\SB@dimen% \loop% \SB@dimeniii.5\SB@dimeniii% \setbox\SB@box\copy#1% \setbox\SB@box\vsplit\SB@box to\SB@dimen% \edef\SB@temp{\splitfirstmarks\SB@cmarkclass}% \ifx\SB@temp\SB@cmark% \SB@dimenii\SB@dimen% \advance\SB@dimen-\SB@dimeniii% \else% \advance\SB@dimen\SB@dimeniii% \fi% \ifdim\SB@dimeniii>2\p@\repeat% \setbox\SB@box\vsplit#1to\SB@dimenii% \global\setbox#1\vbox{% \unvbox\SB@box\unskip% \SB@inversefalse\SB@prevversetrue\SB@stanzabreak% \SB@putbox\unvcopy\SB@chorusbox% \SB@inversetrue\SB@prevversefalse\SB@stanzabreak% \unvbox#1% }% \else\ifx\SB@temp\SB@lastcmark% \global\setbox#1\vbox{% \unvbox#1% \unskip% \ifdim\sbarheight>\z@% \setbox\SB@box\lastbox% \unskip\unpenalty% \fi% \setbox\SB@box\lastbox% \unskip\unskip% \SB@inversefalse\SB@prevversetrue\SB@stanzabreak% \marks\SB@nocmarkclass{\SB@nocmark}% \unvcopy\SB@chorusbox% \vskip\versesep\vskip\beforepostludeskip\relax% \nointerlineskip\box\SB@box% \ifdim\sbarheight>\z@% \nobreak\vskip2\p@\@plus\p@% \hrule\@height\sbarheight\@width\SB@colwidth% \fi% }% \fi\fi% \fi% }} \newcommand\nextcol{% \@ifstar{\SB@nextcol\@ne\@flushglue}% {\ifpartiallist\else\SB@nextcol\@ne\@flushglue\fi}% } \newcommand\sclearpage{% \@ifstar\SB@clearpage{\ifpartiallist\else\SB@clearpage\fi}% } \newcommand\scleardpage{% \@ifstar\SB@cleardpage{\ifpartiallist\else\SB@cleardpage\fi}% } \newcommand\SB@lop[1]{\expandafter\SB@@lop\the#1\SB@@lop#1} \newcommand\SB@@lop{} \def\SB@@lop\\#1\\#2\SB@@lop#3#4{\global#3{\\#2}\global#4{#1}} \newcommand\SB@emptylist{} \def\SB@emptylist{\\} \newcommand\SB@ifempty[3]{% \edef\SB@temp{\the#1}% \ifx\SB@temp\SB@emptylist#2\else#3\fi% } \SB@newtoks\SB@titlelist \SB@newtoks\SB@titletail \newcommand\songtitle{} \newcommand\resettitles{% \global\SB@titletail\SB@titlelist% \nexttitle% } \newcommand\nexttitle{% \SB@ifempty\SB@titletail{% \global\let\songtitle\relax% }{% \SB@lop\SB@titletail\SB@toks% \edef\songtitle{\the\SB@toks}% }% } \newcommand\foreachtitle[1]{% \ifx\songtitle\relax\else% \loop#1\nexttitle\ifx\songtitle\relax\else\repeat% \fi% } \newif\ifSB@songsenv\SB@songsenvfalse \newif\ifSB@insong\SB@insongfalse \newif\ifSB@intersong\SB@intersongfalse \newif\ifSB@inverse\SB@inversefalse \newif\ifSB@inchorus\SB@inchorusfalse \newcommand\SB@closeall{} \newcommand\SB@rawrefs{} \newcommand\songauthors{} \newcommand\songcopyright{} \newcommand\songlicense{} \newcommand\songrefs{} \newcommand\setlicense{\gdef\songlicense} \newcommand\SB@clearbskeys{} \newcommand\newsongkey[2]{% \SB@app\gdef\SB@clearbskeys{#2}% \define@key{beginsong}{#1}% } \newsongkey{sr}{\def\SB@rawrefs{}\gdef\songrefs{}} {\def\SB@rawrefs{#1}\SB@parsesrefs{#1}} \newsongkey{by}{\def\songauthors{}}{\def\songauthors{#1}} \newsongkey{cr}{\def\songcopyright{}}{\def\songcopyright{#1}} \newsongkey{li}{\setlicense{}}{\setlicense{#1}} \newsongkey{index}{}{\indexentry{#1}} \newsongkey{ititle}{}{\indextitleentry{#1}} \newenvironment{song}{\beginsong}{\SB@endsong} \newcommand\beginsong[1]{% \ifSB@insong\SB@errboo\SB@closeall\fi% \ifSB@intersong\SB@errbor\SB@closeall\fi% \SB@insongtrue% \def\SB@closeall{\endsong}% \SB@parsetitles{#1}% \global\setbox\SB@songwrites\box\voidb@x% \SB@clearbskeys% \@ifnextchar[\SB@bskvfmt\SB@@beginsong% } \newcommand\SB@@beginsong{% \@ifnextchar\bgroup\SB@bsoldfmt\SB@@@beginsong% } \newcommand\SB@bsoldfmt[3]{% \SB@bskvfmt[sr={#1},by={#2},cr={#3}]% } \newcommand\SB@bskvfmt{} \def\SB@bskvfmt[#1]{% \setkeys{beginsong}{#1}% \SB@@@beginsong% } \newcommand\SB@@@beginsong{% \global\SB@stanzafalse% \setbox\SB@chorusbox\box\voidb@x% \SB@gotchorusfalse% \setbox\SB@songbox\vbox\bgroup\begingroup% \ifnum\SB@numcols>\z@\hsize\SB@colwidth\fi% \leftskip\z@skip\rightskip\z@skip% \parfillskip\@flushglue\parskip\z@skip% \SB@raggedright% \global\SB@transposefactor\z@% \global\SB@cr@{\\}% \protected@edef\@currentlabel{\p@songnum\thesongnum}% \setcounter{versenum}{1}% \SB@prevversetrue% \meter44% \resettitles% \SB@addtoindexes\songtitle\SB@rawrefs\songauthors% \nexttitle% \foreachtitle{\expandafter\SB@addtotitles\expandafter{\songtitle}}% \resettitles% \lyricfont\relax% \SB@setbaselineskip% } \newcommand\SB@endsong{% \ifSB@insong% \ifSB@inverse\SB@erreov\endverse\fi% \ifSB@inchorus\SB@erreoc\endchorus\fi% \global\SB@skip\versesep% \unskip% \ifrepchorus\ifvoid\SB@chorusbox\else% \ifSB@prevverse\ifvnumbered% \marks\SB@cmarkclass{\SB@lastcmark}% \fi\fi% \fi\fi% \endgroup\egroup% \begingroup% \ifnum\SB@numcols>\z@% \hsize\ifpagepreludes\textwidth\else\SB@colwidth\fi% \fi% \leftskip\z@skip\rightskip\z@skip% \parfillskip\@flushglue\parskip\z@skip\parindent\z@% \global\setbox\SB@envbox\vbox{% \songmark% \unvbox\SB@songwrites% \ifpagepreludes\else\ifdim\sbarheight>\z@% \hrule\@height\sbarheight\@width\hsize% \nobreak\vskip5\p@\relax% \fi\fi% \resettitles% \begingroup% \songtarget{\ifnum\c@section=\z@1\else2\fi}% {song\theSB@songsnum-\thesongnum}% \endgroup% \vbox{\makeprelude}% \nobreak\vskip\SB@skip% \vskip\afterpreludeskip\relax% }% \ifnum\SB@numcols>\z@\hsize\SB@colwidth\fi% \global\setbox\SB@songbox\vbox{% \ifpagepreludes\else\unvbox\SB@envbox\fi% \unvbox\SB@songbox% \nobreak\vskip\SB@skip% \vskip\beforepostludeskip\relax% \nointerlineskip% \vbox{\makepostlude}% \ifdim\sbarheight>\z@% \nobreak\vskip2\p@\@plus\p@% \nointerlineskip% \hbox{\vrule\@height\sbarheight\@width\hsize}% \fi% }% \endgroup% \SB@insongfalse% \edef\SB@sgroup{\thesongnum}% \global\SB@groupcnt\z@% \ifpagepreludes\SB@submitenv\fi% \SB@submitsong% \ifnum\SB@grouplvl=\z@\let\SB@sgroup\@empty\fi% \stepcounter{songnum}% \else% \ifSB@intersong\SB@erreor\SB@closeall% \else\SB@erreot\fi% \fi% } \newcommand\SB@setbaselineskip{% \SB@dimen\f@size\p@% \baselineskip\SB@dimen\relax% \ifchorded% \setbox\SB@box\hbox{{\printchord{ABCDEFG\shrp\flt/j7}}}% \advance\baselineskip\ht\SB@box% \advance\baselineskip2\p@% \fi% \ifslides% \advance\baselineskip.2\SB@dimen\@plus.5\SB@dimen% \@minus.2\SB@dimen% \else% \advance\baselineskip\z@\@plus.1\SB@dimen\relax% \fi% \advance\baselineskip\baselineadj% } \newcommand\SB@setversesep{% \SB@dimen123456789sp% \edef\SB@temp{\the\SB@dimen}% \edef\SB@tempii{\the\versesep}% \ifx\SB@temp\SB@tempii% \begingroup% \lyricfont\relax% \SB@dimen\f@size\p@% \ifchorded% \setbox\SB@box\hbox{{\printchord{ABCDEFG\shrp\flt/j7}}}% \advance\SB@dimen\ht\SB@box% \fi% \ifslides% \global\versesep1.2\SB@dimen\@plus.3\SB@dimen% \@minus.3\SB@dimen% \else% \global\versesep.75\SB@dimen\@plus.25\SB@dimen% \@minus.13\SB@dimen% \fi% \endgroup% \fi% } \newcommand\makeprelude{% \resettitles% \ifslides% \hbox to\hsize{{\hfil\stitlefont\relax\songtitle\hfil}}% \vskip5\p@% \hbox to\hsize{% \hfil% \vbox{% \divide\hsize\tw@\parskip\p@\relax% \centering\small\extendprelude% }% \hfil% }% \else% \ifdim\songnumwidth>\z@% \setbox\SB@boxii\hbox{{\SB@colorbox\snumbgcolor{% \hbox to\songnumwidth{% \printsongnum{\thesongnum}\hfil% }% }}}% \fi% \setbox\SB@box\vbox{% \ifdim\songnumwidth>\z@% \SB@dimen\wd\SB@boxii% \advance\SB@dimen3\p@% \ifpagepreludes\multiply\SB@dimen\tw@\fi% \advance\hsize-\SB@dimen% \fi% \ifpagepreludes\centering\else\SB@raggedright\fi% \offinterlineskip\lineskip\p@% {\stitlefont\relax% \songtitle\par% \nexttitle% \foreachtitle{(\songtitle)\par}}% \ifdim\prevdepth=\z@\kern\p@\fi% \parskip\p@\relax\tiny% \extendprelude% \kern\z@% }% \ifdim\songnumwidth>\z@% \hbox{% \ifdim\ht\SB@boxii>\ht\SB@box% \box\SB@boxii% \kern3\p@% \vtop{\box\SB@box}% \else% \SB@colorbox\snumbgcolor{\vbox to\ht\SB@box{{% \hbox to\songnumwidth{% \printsongnum{\thesongnum}\hfil% }\vfil% }}}% \kern3\p@% \box\SB@box% \fi% }% \else% \unvbox\SB@box% \fi% \fi% } \newcommand\makepostlude{% \SB@raggedright\baselineskip\z@skip\parskip\z@skip\parindent\z@% \tiny\extendpostlude% } \newcommand\showauthors{% \setbox\SB@box\hbox{\bfseries\sfcode`.\@m\songauthors}% \ifdim\wd\SB@box>\z@\unhbox\SB@box\par\fi% } \newcommand\showrefs{% \setbox\SB@box\hbox{\slshape\songrefs\vphantom,}% \ifdim\wd\SB@box>\z@\unhbox\SB@box\par\fi% } \newcommand\SB@next{} \newcommand\SB@donext{} \newcommand\SB@dothis{} \newcommand\SB@nextname{} \newcommand\SB@appendsp[1]{#1\expandafter{\the#1 }} \newcommand\SB@parsetitles[1]{% \begingroup% \global\SB@titlelist{\\}% \SB@toks{}% \let\\\SB@titlesep% \SB@pthead#1\SB@endparse% \endgroup% } \newcommand\SB@pthead{\futurelet\SB@next\SB@@pthead} \newcommand\SB@@pthead{% \ifcat\noexpand\SB@next\@sptoken% \expandafter\SB@@@pthead% \else% \expandafter\SB@ptmain% \fi% } \newcommand\SB@@@pthead{% \afterassignment\SB@pthead% \let\SB@next= } \newcommand\SB@ptloop{\futurelet\SB@next\SB@ptmain} \newcommand\SB@ptmain{% \ifcat\noexpand\SB@next\@sptoken% \let\SB@donext\SB@ptsp% \else\ifcat\noexpand\SB@next\bgroup% \let\SB@donext\SB@ptbg% \else\ifx\SB@next\SB@endparse% \global\SB@titlelist\expandafter{\the\SB@titlelist\\}% \let\SB@donext\@gobble% \else\ifx\SB@next\\% \SB@toks{}% \def\SB@donext{\SB@ptstep\SB@pthead}% \else% \def\SB@donext{\SB@ptstep\SB@ptloop}% \fi\fi\fi\fi% \SB@donext} \newcommand\SB@ptstep[2]{% \global\SB@titlelist\expandafter\expandafter\expandafter{% \expandafter\the\expandafter\SB@titlelist\the\SB@toks#2}% \SB@toks{}% #1} \newcommand\SB@ptbg[1]{\SB@ptstep\SB@ptloop{{#1}}} \newcommand\SB@ptsp{ \SB@appendsp\SB@toks% \afterassignment\SB@ptloop% \let\SB@next= } \newcommand\SB@titlesep{SB@titlesep} \newcommand\SB@endparse{% \SB@Error{Title parsing failed}{This error should not occur.}% } \newcommand\SB@parsesrefs[1]{% \begingroup% \SB@toks{\begingroup\SB@sractives}% \SB@prloop#1\SB@endparse% \xdef\songrefs{\the\SB@toks\endgroup}% \endgroup% } \newcommand\SB@prloop{\futurelet\SB@next\SB@prstep} \newcommand\SB@prstep{% \ifcat\noexpand\SB@next A% \expandafter\SB@prcpy% \else% \expandafter\SB@@prstep% \fi% } \newcommand\SB@@prstep{% \ifcat\noexpand\SB@next\@sptoken% \let\SB@donext\SB@prspace% \else\ifx\SB@next-% \let\SB@donext\SB@prhyphen% \else\ifx\SB@next,% \let\SB@donext\SB@prcomma% \else\ifx\SB@next\SB@endparse% \let\SB@donext\@gobble% \else\ifcat\noexpand\SB@next\bgroup% \let\SB@donext\SB@prgr% \else% \let\SB@donext\SB@prcpy% \fi\fi\fi\fi\fi% \SB@donext% } \newcommand\SB@prcpy[1]{\SB@toks\expandafter{\the\SB@toks#1}\SB@prloop} \newcommand\SB@prgr[1]{\SB@toks\expandafter{\the\SB@toks{#1}}\SB@prloop} \newcommand\SB@prcomma[1]{} {\catcode`,\active \gdef\SB@prcomma#1{\SB@toks\expandafter{\the\SB@toks,}\SB@prloop}} \newcommand\SB@prhyphen[1]{} {\catcode`-\active \gdef\SB@prhyphen#1{\SB@toks\expandafter{\the\SB@toks-}\SB@prloop}} \newcommand\SB@prspace[1]{} {\obeyspaces \gdef\SB@prspace{\SB@toks\expandafter{\the\SB@toks }\SB@@prspace}} \newcommand\SB@@prspace{\afterassignment\SB@prloop\let\SB@temp= } \newcommand\SB@sractives{} {\catcode`,\active\catcode`-\active\obeyspaces% \gdef\SB@sractives{% \let,\SB@srcomma\let-\SB@srhyphen\let \SB@srspace% \SB@srspacing}% } \newcommand\SB@srspacing{% \nonfrenchspacing\sfcode`\;=1500\sfcode`\,=1250\relax% } \newcommand\SB@srcomma{,\futurelet\SB@next\SB@@srcomma} \newcommand\SB@@srcomma{% \ifx\SB@next\SB@srspace\else% \nobreak\thinspace% \fi% } \newcommand\SB@srhyphen{\futurelet\SB@next\SB@@srhyphen} \newcommand\SB@@srhyphen{% \ifx\SB@next\SB@srhyphen\expandafter\SB@srdash\else--\fi% } \newcommand\SB@srdash[1]{\futurelet\SB@next\SB@@srdash} \newcommand\SB@@srdash{% \ifx\SB@next\SB@srhyphen---\expandafter\@gobble\else--\fi% } \newcommand\SB@srspace{\futurelet\SB@next\SB@@srspace} \newcommand\SB@@srspace{% \let\SB@donext\relax% \ifx\SB@next\SB@srspace\else% \ifnum\spacefactor>\@m% \ifnum\spacefactor>1499 % \ifcat\noexpand\SB@next0% \let\SB@donext\SB@srcso% \else% \penalty-5\enskip% \fi% \else% \space% \fi% \else% \nobreak\space% \fi% \fi% \SB@donext% } \newcommand\SB@srcso[1]{\futurelet\SB@temp\SB@@srcso} \newcommand\SB@@srcso{% \ifx\SB@temp\SB@srspace% \penalty-5\enskip% \else% \space% \fi% \SB@next% } \newif\ifSB@stanza \newcommand\SB@stanzabreak{% \ifhmode\par\fi% \ifSB@stanza% \SB@breakpoint{% \ifSB@inverse% \ifSB@prevverse\vvpenalty\else\cvpenalty\fi% \else% \ifSB@prevverse\vcpenalty\else\ccpenalty\fi% \fi% }% \vskip\versesep% \fi% } \newcommand\SB@breakpoint[1]{% \begingroup% \ifnum#1<\@M% \SB@skip\colbotglue\relax% \SB@skip-\SB@skip% \else% \SB@skip\z@skip% \fi% \advance\SB@skip\lastskip% \unskip% \nobreak% \ifnum#1<\@M% \vskip\colbotglue\relax% \penalty#1% \fi% \vskip\SB@skip% \endgroup% } \newcommand\SB@putbox[2]{% \begingroup% \SB@dimen\dp#2% #1#2% \setbox\SB@box\hbox{{\lyricfont\relax p}}% \ifdim\SB@dimen<\dp\SB@box% \advance\SB@dimen-\dp\SB@box% \vskip-\SB@dimen% \fi% \setbox\SB@box\box\voidb@x% \endgroup% } \newcommand\SB@obeylines{% \let\par\SB@par% \obeylines% \let\@par\SB@@par% } \newcommand\SB@par{% \ifhmode% \SB@cnt\interlinepenalty% \interlinepenalty\@M% \endgraf% \interlinepenalty\SB@cnt% \ifSB@inchorus% \ifdim\cbarwidth>\z@\nobreak\else\SB@ilpenalty\fi% \else% \SB@ilpenalty% \fi% \fi% } \newcommand\SB@ilpenalty{% \ifnum\interlinepenalty=\z@\else% \penalty\interlinepenalty% \fi% } \newcommand\SB@@par{\let\par\SB@par\par} \SB@newdimen\SB@parindent \newcommand\SB@everypar{} \newcommand\SB@raggedright{% \SB@parindent\parindent% \raggedright% \parindent\SB@parindent% } \newif\ifvnumbered \newif\ifSB@prevverse \CheckCommand\verse{% \let\\\@centercr% \list{}{% \itemsep\z@% \itemindent-1.5em% \listparindent\itemindent% \rightmargin\leftmargin% \advance\leftmargin1.5em% }% \item\relax% } \renewenvironment{verse} {\vnumberedtrue\SB@beginverse} {\SB@endverse} \newenvironment{verse*} {\vnumberedfalse\SB@beginverse} {\SB@endverse} \newcommand\beginverse{% \begingroup% \SB@loadactives% \@ifstar{\endgroup\vnumberedfalse\SB@beginverse}% {\endgroup\vnumberedtrue\SB@beginverse}% } \newcommand\SB@beginverse{% \ifSB@insong% \ifSB@inverse\SB@errbvv\endverse\fi% \ifSB@inchorus\SB@errbvc\endchorus\fi% \else% \SB@errbvt\beginsong{Unknown Song}% \fi% \ifrepchorus\ifvoid\SB@chorusbox\else% \SB@gotchorustrue% \ifSB@prevverse\ifvnumbered% \marks\SB@cmarkclass{\SB@cmark}% \fi\fi% \fi\fi% \SB@inversetrue% \def\SB@closeall{\endverse\endsong}% \SB@stanzabreak% \versemark\nobreak% \global\SB@stanzatrue% \SB@ifempty\SB@cr@\memorize{\replay[]}% \setbox\SB@box\vbox\bgroup\begingroup% \ifvnumbered% \protected@edef\@currentlabel{\p@versenum\theversenum}% \def\SB@everypar{% \setbox\SB@box\hbox{{\printversenum{\theversenum}}}% \ifdim\wd\SB@box<\versenumwidth% \setbox\SB@box% \hbox to\versenumwidth{\unhbox\SB@box\hfil}% \fi% \ifchorded\vrule\@height\baselineskip\@width\z@\@depth\z@\fi% \placeversenum\SB@box% \gdef\SB@everypar{}% }% \else% \def\SB@everypar{% \ifchorded\vrule\@height\baselineskip\@width\z@\@depth\z@\fi% \gdef\SB@everypar{}% }% \fi% \everypar{\SB@everypar\everypar{}}% \versefont\relax\SB@setbaselineskip\versejustify% \SB@loadactives% \SB@obeylines% \penalty12345 % \everyverse\relax% } \newcommand\SB@endverse{% \ifSB@insong% \ifSB@inverse% \unpenalty% \endgroup\egroup% \SB@putbox\unvbox\SB@box% \SB@inversefalse% \def\SB@closeall{\endsong}% \ifvnumbered\stepcounter{versenum}\fi% \SB@prevversetrue% \else\ifSB@inchorus\SB@errevc\endchorus% \else\SB@errevo\fi\fi% \else% \SB@errevt% \fi% } \newif\ifSB@chorustop \SB@newbox\SB@chorusbox \newif\ifSB@gotchorus \ifSB@etex \@ifundefined{newmarks}{ \@ifundefined{newmark}{ \mathchardef\SB@cmarkclass83 \mathchardef\SB@nocmarkclass84 }{ \newmark\SB@cmarkclass \newmark\SB@nocmarkclass } }{ \newmarks\SB@cmarkclass \newmarks\SB@nocmarkclass } \fi \newcommand\SB@cmark{} \def\SB@cmark{SB@cmark} \newcommand\SB@lastcmark{} \def\SB@lastcmark{SB@lastcmark} \newcommand\SB@nocmark{} \def\SB@nocmark{SB@nocmark} \newenvironment{chorus}{\beginchorus}{\SB@endchorus} \newcommand\beginchorus{% \ifSB@insong \ifSB@inverse\SB@errbcv\endverse\fi% \ifSB@inchorus\SB@errbcc\endchorus\fi% \else% \SB@errbct\beginsong{Unknown Song}% \fi% \SB@inchorustrue% \def\SB@closeall{\endchorus\endsong}% \SB@chorustoptrue% \vnumberedfalse% \SB@stanzabreak% \chorusmark% \ifrepchorus% \ifSB@gotchorus\else\ifSB@prevverse\else% \global\setbox\SB@chorusbox\vbox{% \unvbox\SB@chorusbox% \SB@stanzabreak% \chorusmark% }% \fi\fi% \fi% \global\SB@stanzatrue% \replay[]% \SB@@beginchorus% \everychorus\relax% } \newcommand\SB@@beginchorus{% \ifrepchorus\marks\SB@cmarkclass{}\fi% \setbox\SB@box\vbox\bgroup\begingroup% \ifchorded% \def\SB@everypar{% \vrule\@height\baselineskip\@width\z@\@depth\z@% \gdef\SB@everypar{}% }% \everypar{\SB@everypar\everypar{}}% \fi% \chorusfont\relax\SB@setbaselineskip\chorusjustify% \SB@loadactives% \SB@obeylines% \penalty12345 % } \newcommand\SB@endchorus{% \ifSB@insong% \ifSB@inchorus% \unpenalty% \endgroup\egroup% \SB@inchorusfalse% \def\SB@closeall{\endsong}% \setbox\SB@box\vbox{% \SB@chorusbar\SB@box% \SB@putbox\unvbox\SB@box% } \ifrepchorus\ifSB@gotchorus\else% \global\setbox\SB@chorusbox\vbox{% \unvbox\SB@chorusbox% \unvcopy\SB@box% }% \fi\fi% \unvbox\SB@box% \SB@prevversefalse% \else\ifSB@inverse\SB@errecv\endverse% \else\SB@erreco\fi\fi% \else% \SB@errect% \fi% } \newcommand\SB@cbarshift{% \ifSB@inchorus\ifdim\cbarwidth>\z@% \advance\leftskip\cbarwidth% \advance\leftskip5\p@\relax% \fi\fi% } \newcommand\SB@chorusbar[1]{% \ifdim\cbarwidth>\z@% \SB@dimen\ht#1% \SB@dimenii\dp#1% \advance\SB@dimen% \ifSB@chorustop\ifchorded\else2\fi\fi\SB@dimenii% \SB@skip\SB@dimen\relax% \SB@computess\SB@skip1\@plus#1% \SB@computess\SB@skip{-1}\@minus#1% \nointerlineskip\null\nobreak% \leaders\vrule\@width\cbarwidth\vskip\SB@skip% \ifSB@chorustop\ifchorded\else% \advance\SB@skip-\SB@dimenii% \fi\fi% \nobreak\vskip-\SB@skip% \fi% } \newcommand\SB@computess[4]{% \begingroup% \vbadness\@M\vfuzz\maxdimen% \SB@dimen4096\p@% \setbox\SB@box\vbox spread#2\SB@dimen{\unvcopy#4}% \ifnum\badness=\z@% \global\advance#1\z@#31fil\relax% \else% \SB@dimenii\SB@dimen% \loop% \SB@dimenii.5\SB@dimenii% \ifnum\badness<100 % \advance\SB@dimen\SB@dimenii% \else \advance\SB@dimen-\SB@dimenii% \fi% \setbox\SB@box\vbox spread#2\SB@dimen{\unvcopy#4}% \ifnum\badness=100 \SB@dimenii\z@\fi% \ifdim\SB@dimenii>.1\p@\repeat% \ifdim\SB@dimen<.1\p@\SB@dimen\z@\fi% \global\advance#1\z@#3\SB@dimen\relax% \fi% \endgroup% } \newcommand\brk{% \ifSB@insong% \ifhmode\penalty-5 \else% \unpenalty% \ifSB@inchorus% \ifdim\cbarwidth=\z@% \ifrepchorus\marks\SB@cmarkclass{}\fi% \SB@breakpoint\brkpenalty% \else% \endgroup\egroup% \ifrepchorus\ifSB@gotchorus\else% \global\setbox\SB@chorusbox\vbox{% \unvbox\SB@chorusbox% \SB@chorusbar\SB@box% \unvcopy\SB@box% \SB@breakpoint\brkpenalty% }% \fi\fi% \SB@chorusbar\SB@box% \unvbox\SB@box% \SB@breakpoint\brkpenalty% \SB@chorustopfalse% \SB@@beginchorus% \fi% \else% \SB@breakpoint\brkpenalty% \fi% \fi% \else% \ifpartiallist\else\SB@nextcol\@ne\colbotglue\fi% \fi% } \newcommand\SB@boxup[1]{% \setbox\SB@box\hbox{{\notefont\relax#1}}% \SB@dimen\wd\SB@box% \advance\SB@dimen6\p@% \advance\SB@dimen\leftskip% \advance\SB@dimen\rightskip% \ifdim\SB@dimen>\hsize% \vbox{{% \advance\hsize-6\p@% \advance\hsize-\leftskip% \advance\hsize-\rightskip% \notejustify% \unhbox\SB@box\par% \kern\z@% }}% \else% \vbox{\box\SB@box\kern\z@}% \fi% } \newcommand\textnote[1]{% \ifhmode\par\fi% \ifnum\lastpenalty=12345\else% \ifSB@inverse% \vskip2\p@\relax% \else\ifSB@inchorus% \vskip2\p@\relax% \else\ifSB@stanza% \nobreak\vskip\versesep% \fi\fi\fi% \fi% \begingroup% \everypar{}% \ifchorded\chordedfalse\SB@setbaselineskip\chordedtrue\fi% \placenote{\SB@colorbox\notebgcolor{\SB@boxup{#1}}}% \endgroup% \nobreak% \ifSB@inverse% \vskip2\p@\relax% \else\ifSB@inchorus% \vskip2\p@\relax% \else\ifSB@stanza\else% \nobreak\vskip\versesep% \fi\fi\fi% } \newcommand\musicnote[1]{\ifchorded\textnote{#1}\fi} \ifSB@etex \newcommand\echo{\begingroup\@sanitize\SB@echo} \newcommand\SB@echo[1]{% \endgroup% \begingroup% \echofont\relax% \endlinechar\m@ne% \scantokens{(#1)}% \endgroup% } \else \newcommand\echo{% \begingroup% \echofont\relax% \afterassignment\SB@echo% \setbox\SB@box\hbox% } \newcommand\SB@echo{\aftergroup\SB@@echo(} \newcommand\SB@@echo{\unhbox\SB@box)\endgroup} \fi \newcommand\rep[1]{% (\raise.25ex\hbox{% \fontencoding{OMS}\fontfamily{cmsy}\selectfont\char\tw@% }#1)% } \newenvironment{songgroup}{% \ifnum\SB@grouplvl=\z@% \edef\SB@sgroup{\thesongnum}% \global\SB@groupcnt\m@ne% \fi% \advance\SB@grouplvl\@ne% }{% \advance\SB@grouplvl\m@ne% \ifnum\SB@grouplvl=\z@\let\SB@sgroup\@empty\fi% } \SB@newcount\SB@grouplvl \newenvironment{intersong}{% \ifSB@insong\SB@errbro\SB@closeall\fi% \ifSB@intersong\SB@errbrr\SB@closeall\fi% \setbox\SB@chorusbox\box\voidb@x% \SB@intersongtrue% \def\SB@closeall{\end{intersong}}% \setbox\SB@songbox\vbox\bgroup\begingroup% \ifnum\SB@numcols>\z@\hsize\SB@colwidth\fi% \ifdim\sbarheight>\z@% \hrule\@height\sbarheight\@width\hsize% \nobreak% \fi% }{% \ifSB@intersong \ifdim\sbarheight>\z@% \ifhmode\par\fi% \SB@skip\lastskip% \unskip\nobreak\vskip\SB@skip% \hbox{\vrule\@height\sbarheight\@width\hsize}% \fi% \endgroup\egroup% \ifSB@omitscrip% \setbox\SB@songbox\box\voidb@x% \else% \SB@submitsong% \fi% \SB@intersongfalse% \else% \ifSB@insong\SB@errero\SB@closeall\else\SB@errert\fi% \fi% } \newenvironment{intersong*}{% \ifSB@insong\SB@errbro\SB@closeall\fi% \ifSB@intersong\SB@errbrr\SB@closeall\fi% \setbox\SB@chorusbox\box\voidb@x% \SB@intersongtrue% \def\SB@closeall{\end{intersong*}}% \setbox\SB@songbox\vbox\bgroup\begingroup% }{% \ifSB@intersong% \endgroup\egroup% \ifSB@omitscrip% \setbox\SB@songbox\box\voidb@x% \else% \def\SB@stype{\SB@styppage}% \SB@submitsong% \def\SB@stype{\SB@stypcol}% \fi% \SB@intersongfalse% \else% \ifSB@insong\SB@errero\SB@closeall\else\SB@errert\fi% \fi% } \newenvironment{scripture}{\beginscripture}{\SB@endscripture} \newcommand\beginscripture[1]{% \begin{intersong}% \SB@parsesrefs{#1}% \setbox\SB@envbox\hbox{{\printscrcite\songrefs}}% \def\SB@closeall{\endscripture}% \nobreak\vskip5\p@% \SB@parindent\parindent\parindent\z@% \parskip\z@skip\parfillskip\@flushglue% \leftskip\SB@parindent\rightskip\SB@parindent\relax% \scripturefont\relax% \baselineskip\f@size\p@\@plus\p@\relax% \advance\baselineskip\p@\relax% \emergencystretch.3em% } \newcommand\SB@endscripture{% \ifSB@intersong \scitehere% \ifhmode\par\fi% \vskip-3\p@% \end{intersong}% \fi% } \newcommand\scitehere{% \ifSB@intersong% \ifvoid\SB@envbox\else% \ifvmode% \setbox\SB@box\lastbox% \nointerlineskip\noindent\hskip-\leftskip% \unhbox\SB@box\unskip% \fi% \unskip\nobreak\hfil\penalty50\hskip.8em\null\nobreak\hfil% \box\SB@envbox\kern-\SB@parindent% {\parfillskip\z@\finalhyphendemerits2000\par}% \fi% \else% \SB@errscrip\scitehere% \fi% } \newcommand\Acolon{\SB@colon2\Acolon} \newcommand\Bcolon{\SB@colon1\Bcolon} \newcommand\SB@colon[2]{% \ifSB@intersong\else% \SB@errscrip#2% \beginscripture{Unknown}% \fi% \ifhmode\par\fi% \begingroup% \rightskip\SB@parindent\@plus4em% \advance\leftskip2\SB@parindent% \advance\parindent-#1\SB@parindent% \def\par{\endgraf\endgroup}% \obeylines% } \newcommand\strophe{% \ifSB@intersong\else% \SB@errscrip\strophe\beginscripture{Unknown}% \fi% \vskip.9ex\@plus.45ex\@minus.68ex\relax% } \newcommand\SB@scripdent[2]{% \ifSB@intersong\else% \SB@errscrip#2\beginscripture{Unknown}% \fi% \ifhmode\par\fi% \advance\leftskip#1\SB@parindent\relax% } \newcommand\scripindent{\SB@scripdent1\scripindent} \newcommand\scripoutdent{\SB@scripdent-\scripoutdent} \newcommand\SB@quotesactive{% \catcode`'\active% \catcode``\active% } \newcommand\shiftdblquotes[4]{} \newcommand\SB@ldqleft{} \newcommand\SB@ldqright{} \newcommand\SB@rdqleft{} \newcommand\SB@rdqright{} \newcommand\SB@scanlq{} \newcommand\SB@scanrq{} \newcommand\SB@dolq{} \newcommand\SB@dorq{} { \SB@quotesactive \gdef\shiftdblquotes#1#2#3#4{% \def\SB@ldqleft{\kern#1}% \def\SB@ldqright{\kern#2}% \def\SB@rdqleft{\kern#3}% \def\SB@rdqright{\kern#4}% \SB@quotesactive% \def`{\futurelet\SB@next\SB@scanlq}% \def'{\futurelet\SB@next\SB@scanrq}% } \gdef\SB@scanlq{% \ifx\SB@next`% \expandafter\SB@dolq% \else% \expandafter\lq% \fi% } \gdef\SB@scanrq{% \ifx\SB@next'% \expandafter\SB@dorq% \else% \expandafter\rq% \fi% } \gdef\SB@dolq`{% \ifvmode\leavevmode\else\/\fi% \vadjust{}% \SB@ldqleft\lq\lq\SB@ldqright% \vadjust{}% } \gdef\SB@dorq'{% \ifvmode\leavevmode\else\/\fi% \vadjust{}% \SB@rdqleft\rq\rq\SB@rdqright% \vadjust{}% } } \SB@newcount\SB@transposefactor \newif\ifSB@convertnotes \newcommand\notenameA{} \newcommand\notenameB{} \newcommand\notenameC{} \newcommand\notenameD{} \newcommand\notenameE{} \newcommand\notenameF{} \newcommand\notenameG{} \newcommand\printnoteA{} \newcommand\printnoteB{} \newcommand\printnoteC{} \newcommand\printnoteD{} \newcommand\printnoteE{} \newcommand\printnoteF{} \newcommand\printnoteG{} \newcommand\notenamesin[7]{% \def\notenameA{#1}% \def\notenameB{#2}% \def\notenameC{#3}% \def\notenameD{#4}% \def\notenameE{#5}% \def\notenameF{#6}% \def\notenameG{#7}% \SB@convertnotestrue% } \newcommand\notenamesout[7]{% \def\printnoteA{#1}% \def\printnoteB{#2}% \def\printnoteC{#3}% \def\printnoteD{#4}% \def\printnoteE{#5}% \def\printnoteF{#6}% \def\printnoteG{#7}% \SB@convertnotestrue% } \newcommand\notenames[7]{% \notenamesin{#1}{#2}{#3}{#4}{#5}{#6}{#7}% \notenamesout{#1}{#2}{#3}{#4}{#5}{#6}{#7}% \SB@convertnotesfalse% } \newcommand\alphascale{\notenames ABCDEFG} \newcommand\solfedge{\notenames{LA}{SI}{DO}{RE}{MI}{FA}{SOL}} \alphascale \newif\ifSB@prefshrps \newif\ifSB@needkey \newcommand\transpose[1]{% \advance\SB@transposefactor by#1\relax% \SB@cnt\SB@transposefactor% \divide\SB@cnt12 % \multiply\SB@cnt12 % \advance\SB@transposefactor-\SB@cnt% \SB@needkeytrue% } \newcommand\capo[1]{% \iftranscapos\transpose{#1}\else\musicnote{capo #1}\fi% } \newcommand\prefersharps{\SB@prefshrpstrue\SB@needkeyfalse} \newcommand\preferflats{\SB@prefshrpsfalse\SB@needkeyfalse} \newcommand\transposehere[1]{% \ifnum\SB@transposefactor=\z@% \ifSB@convertnotes% \SB@dotranspose{#1}% \the\SB@toks% \else% #1% \fi% \else% \ifSB@convertnotes% {\SB@transposefactor\z@% \SB@dotranspose{#1}% \xdef\SB@tempv{\the\SB@toks}}% \else% \def\SB@tempv{#1}% \fi% \SB@dotranspose{#1}% \expandafter\trchordformat\expandafter{\SB@tempv}{\the\SB@toks}% \fi% } \newcommand\notrans[1]{% \begingroup% \SB@transposefactor\z@% \transposehere{#1}% \endgroup% } \newcommand\SB@dotranspose[1]{% \SB@toks{}% \let\SB@dothis\SB@trmain% \SB@trscan#1\SB@trend% } \newcommand\trchordformat[2]{#2} \newcommand\SB@trscan{\futurelet\SB@next\SB@dothis} \newcommand\SB@trmain{% \ifx\SB@next\bgroup% \let\SB@donext\SB@trgroup% \else\ifx\SB@next\egroup% \SB@toks\expandafter{\the\SB@toks\egroup}% \let\SB@donext\SB@trskip% \else\ifcat\noexpand\SB@next\@sptoken% \SB@appendsp\SB@toks% \let\SB@donext\SB@trskip% \else% \let\SB@donext\SB@trstep% \fi\fi\fi% \SB@donext% } \newcommand\SB@trgroup[1]{% \SB@toks\expandafter{\the\SB@toks{#1}}% \SB@trscan% } \newcommand\SB@trskip{% \afterassignment\SB@trscan% \let\SB@next= } \newcommand\SB@trstep[1]{% \let\SB@donext\SB@trscan% \ifcat\noexpand\SB@next A% \ifnum\uccode`#1=`#1% \def\SB@temp{#1}% \let\SB@dothis\SB@trnote% \else% \SB@toks\expandafter{\the\SB@toks#1}% \fi% \else\ifx\SB@next\SB@trend \let\SB@donext\relax% \else% \SB@toks\expandafter{\the\SB@toks#1}% \fi\fi% \SB@donext% } \newcommand\SB@trnote{% \ifcat\noexpand\SB@next A% \let\SB@donext\SB@trnotestep% \else\ifnum\SB@transposefactor=\z@% \SB@cnt\z@% \let\SB@donext\SB@trtrans% \else\ifx\SB@next\flt% \SB@cnt\m@ne% \let\SB@donext\SB@tracc% \else\ifx\SB@next\shrp% \SB@cnt\@ne% \let\SB@donext\SB@tracc% \else% \SB@cnt\z@% \let\SB@donext\SB@trtrans% \fi\fi\fi\fi% \SB@donext% } \newcommand\SB@trnotestep[1]{% \ifnum\uccode`#1=`#1% \SB@app\def\SB@temp{#1}% \expandafter\SB@trscan% \else% \SB@cnt\z@% \expandafter\SB@trtrans\expandafter#1% \fi% } \newcommand\SB@tracc[1]{\futurelet\SB@next\SB@trtrans} \newcommand\SB@trtrans{% \advance\SB@cnt% \ifx\SB@temp\notenameA\z@% \else\ifx\SB@temp\notenameB\tw@% \else\ifx\SB@temp\notenameC\thr@@% \else\ifx\SB@temp\notenameD5 % \else\ifx\SB@temp\notenameE7 % \else\ifx\SB@temp\notenameF8 % \else\ifx\SB@temp\notenameG10 % \else-99 \fi\fi\fi\fi\fi\fi\fi% \ifnum\SB@cnt<\m@ne% \SB@toks\expandafter\expandafter\expandafter{% \expandafter\the\expandafter\SB@toks\SB@temp}% \else% \advance\SB@cnt\SB@transposefactor% \ifnum\SB@cnt<\z@\advance\SB@cnt12 \fi% \ifnum\SB@cnt>11 \advance\SB@cnt-12 \fi% \ifSB@needkey\ifnum\SB@transposefactor=\z@\else\SB@setkeysig\fi\fi% \edef\SB@temp{% \the\SB@toks% \ifSB@prefshrps% \ifcase\SB@cnt\printnoteA\or\printnoteA\noexpand\shrp\or% \printnoteB\or\printnoteC\or\printnoteC\noexpand\shrp\or% \printnoteD\or\printnoteD\noexpand\shrp\or\printnoteE\or% \printnoteF\or\printnoteF\noexpand\shrp\or\printnoteG\or% \printnoteG\noexpand\shrp\fi% \else% \ifcase\SB@cnt\printnoteA\or\printnoteB\noexpand\flt\or% \printnoteB\or\printnoteC\or\printnoteD\noexpand\flt\or% \printnoteD\or\printnoteE\noexpand\flt\or\printnoteE\or% \printnoteF\or\printnoteG\noexpand\flt\or\printnoteG\or% \printnoteA\noexpand\flt\fi% \fi}% \SB@toks\expandafter{\SB@temp}% \fi% \let\SB@dothis\SB@trmain% \SB@trscan% } \newcommand\SB@setkeysig{% \global\SB@needkeyfalse% \ifcase\SB@cnt% \global\SB@prefshrpstrue\or% A \global\SB@prefshrpsfalse\or% Bb \global\SB@prefshrpstrue\or% B \ifx\SB@next m% C \global\SB@prefshrpsfalse% \else% \global\SB@prefshrpstrue% \fi\or% \global\SB@prefshrpstrue\or% C# \ifx\SB@next m% D \global\SB@prefshrpsfalse% \else% \global\SB@prefshrpstrue% \fi\or% \global\SB@prefshrpsfalse\or% Eb \global\SB@prefshrpstrue\or% E \global\SB@prefshrpsfalse\or% F \global\SB@prefshrpstrue\or% F# \ifx\SB@next m% G \global\SB@prefshrpsfalse% \else% \global\SB@prefshrpstrue% \fi\or% \global\SB@prefshrpsfalse\else% Ab \global\SB@needkeytrue% non-chord \fi% } \newcommand\SB@trend{% \SB@Error{Internal Error: Transposition failed}% {This error should not occur.}% } \newcommand\SB@metertop{} \newcommand\SB@meterbot{} \newcommand\meter[2]{\gdef\SB@metertop{#1}\gdef\SB@meterbot{#2}} \newcommand\SB@measuremark{SB@IsMeasure} \newcommand\SB@makembar[2]{% \ifSB@inverse\else% \ifSB@inchorus\else\SB@errmbar\fi% \fi% \ifhmode% \SB@skip\lastskip\unskip% \setbox\SB@box\lastbox% \copy\SB@box% \ifvbox\SB@box% \begingroup% \setbox\SB@boxii\copy\SB@box% \vbadness\@M\vfuzz\maxdimen% \setbox\SB@boxii% \vsplit\SB@boxii to\maxdimen% \endgroup% \long\edef\SB@temp{\splitfirstmark}% \ifx\SB@temp\SB@measuremark% \penalty100\hskip1em% \else% \penalty100\hskip\SB@skip% \fi% \else% \penalty100\hskip\SB@skip% \fi% \fi% \ifvmode\leavevmode\fi% \setbox\SB@box\hbox{{\meterfont\relax#1}}% \setbox\SB@boxii\hbox{{\meterfont\relax#2}}% \SB@dimen\wd\ifdim\wd\SB@box>\wd\SB@boxii\SB@box\else\SB@boxii\fi% \SB@dimenii\baselineskip% \advance\SB@dimenii-2\p@% \advance\SB@dimenii-\ht\SB@box% \advance\SB@dimenii-\dp\SB@box% \advance\SB@dimenii-\ht\SB@boxii% \advance\SB@dimenii-\dp\SB@boxii% \let\SB@temp\relax% \ifdim\SB@dimen>\z@% \advance\SB@dimenii-.75\p@% \def\SB@temp{\kern.75\p@}% \fi% \SB@maxmin\SB@dimen<{.5\p@}% \SB@maxmin\SB@dimenii<\z@% \vbox{% \mark{\SB@measuremark}% \hbox to\SB@dimen{% \hfil% \box\SB@box% \hfil% }% \nointerlineskip% \hbox to\SB@dimen{% \hfil% \box\SB@boxii% \hfil% }% \SB@temp% \nointerlineskip% \hbox to\SB@dimen{% \hfil% \vrule\@width.5\p@\@height\SB@dimenii% \hfil% }% }% \meter{}{}% } \newcommand\mbar{\SB@mbar} \newcommand\measurebar{% \mbar\SB@metertop\SB@meterbot% } \newcommand\SB@repcolon{{% \usefont{OT1}{cmss}{m}{n}\selectfont% \ifchorded% \baselineskip.5\SB@dimen% \vbox{\hbox{:}\hbox{:}\kern.5\p@}% \else% \raise.5\p@\hbox{:}% \fi% }} \newcommand\lrep{% \SB@dimen\baselineskip% \advance\SB@dimen-2\p@% \vrule\@width1.5\p@\@height\SB@dimen\@depth\p@% \kern1.5\p@% \vrule\@width.5\p@\@height\SB@dimen\@depth\p@% \SB@repcolon% } \newcommand\rrep{% \SB@dimen\baselineskip% \advance\SB@dimen-2\p@% \SB@repcolon% \vrule\@width.5\p@\@height\SB@dimen\@depth\p@% \kern1.5\p@% \vrule\@width1.5\p@\@height\SB@dimen\@depth\p@% } \newif\ifSB@wordends \newif\ifSB@brokenword \SB@newtoks\SB@lyric \SB@newcount\SB@numhyps \SB@newtoks\SB@lyricnohyp \SB@newbox\SB@lyricbox \SB@newbox\SB@chordbox \newcommand\SB@chbstok{} \newcommand\SB@setchord{} { \catcode`^\active \gdef\SB@setchord#1{% \SB@gettabindtrue\SB@nohattrue% \setbox\SB@chordbox\hbox{% \unhbox\SB@chordbox% \begingroup% \ifSB@trackch% \let\SB@activehat\SB@hat@tr% \else% \let\SB@activehat\SB@hat@notr% \fi% \let^\SB@activehat% \printchord{% \ifSB@firstchord\else\kern.15em\fi% \vphantom/% \transposehere{#1}% \kern.2em% }% \endgroup% }% \SB@gettabindfalse% \ifSB@trackch\ifSB@nohat% \global\SB@creg\expandafter{\the\SB@creg#1\\}% \fi\fi% \let\SB@noreplay\@firstofone% } } \newcommand\SB@outertest{% \expandafter\SB@otesta\meaning\SB@next:\SB@otesta% } \newcommand\SB@otesta{} \edef\SB@otesta#1:#2\SB@otesta{% \noexpand\SB@otestb% #1\string\outer% \noexpand\SB@otestb% } \newcommand\SB@otestb{} \expandafter\def\expandafter\SB@otestb% \expandafter#\expandafter1\string\outer#2\SB@otestb{% \def\SB@temp{#2}% \ifx\SB@temp\@empty\SB@testfalse\else\SB@testtrue\fi% } \newcommand\SB@UTFtest{} \edef\SB@UTFtest#1{% \noexpand\expandafter% \noexpand\SB@@UTFtest% \noexpand\meaning#1% \string\UTFviii@zero@octets% \noexpand\SB@@UTFtest% } \newcommand\SB@U@two{\global\SB@cnt\tw@} \newcommand\SB@U@three{\global\SB@cnt\thr@@} \newcommand\SB@U@four{\global\SB@cnt4\relax} \newcommand\SB@@UTFtest{} {\escapechar\m@ne \xdef\SB@temp{\string\@octets}} \edef\SB@temp{##1\string\UTFviii@##2\SB@temp} \expandafter\def\expandafter\SB@@UTFtest\SB@temp#3\SB@@UTFtest{% \SB@cnt\z@% {\csname SB@U@#2\endcsname}% } \newcommand\SB@declare[3]{% \afterassignment\iffalse\let\SB@next= #3\relax\fi% \SB@UTFtest\SB@next% \ifcase\SB@cnt% \ifcat\noexpand#3\relax% \SB@addNtest\SB@macrotests#1#2#3% \else\ifcat\noexpand#3.% \SB@addDtest\SB@othertests#1#2% \else\ifcat\noexpand#3A% \SB@addDtest\SB@lettertests#1#2% \else% \SB@addDtest\relax0#2% \fi\fi\fi% \or% \SB@addNtest\SB@macrotests#1#2#3% \else% \SB@addMtest\SB@multitests#1#2#3\relax\relax\relax% \fi% } \newcommand\DeclareLyricChar{\SB@declare\SB@testtrue0} \newcommand\DeclareNonLyric{\SB@declare\SB@testfalse\SB@testfalse} \newcommand\DeclareNoHyphen{\SB@declare\SB@testfalse\SB@testtrue} \newcommand\SB@lettertests{} \newcommand\SB@macrotests{} \newcommand\SB@multitests{} \newcommand\SB@othertests{} \newcommand\SB@addDtest[3]{% \ifx0#2\else% \def#1{{\csname SB@!\meaning\SB@next\endcsname}}% \expandafter\def\csname SB@!\meaning\SB@next\endcsname{\global#2}% \fi% \ifx0#3\else% \expandafter\def\csname SB@HT@\meaning\SB@next\endcsname{\global#3}% \fi% } \newcommand\SB@addNtest[4]{% \ifx0#2\else% \def#1{{\csname SB@!\SB@nextname\endcsname}}% \expandafter\def\csname SB@!\string#4\endcsname{\global#2}% \fi% \ifx0#3\else% \expandafter\def\csname SB@HT@\string#4\endcsname{\global#3}% \fi% } \newcommand\SB@addMtest[7]{% \edef\SB@temp{% \string#4% \ifx\relax#5\else\string#5\fi% \ifx\relax#6\else\string#6\fi% \ifx\relax#7\else\string#7\fi% }% \ifx0#2\else% \def#1{{\csname SB@!\SB@nextname\endcsname}}% \expandafter\def\csname SB@!\SB@temp\endcsname{\global#2}% \fi% \ifx0#3\else% \expandafter\def\csname SB@HT@\SB@temp\endcsname{\global#3}% \fi% } \DeclareLyricChar\` \DeclareLyricChar\' \DeclareLyricChar\^ \DeclareLyricChar\" \DeclareLyricChar\~ \DeclareLyricChar\= \DeclareLyricChar\. \DeclareLyricChar\u \DeclareLyricChar\v \DeclareLyricChar\H \DeclareLyricChar\t \DeclareLyricChar\c \DeclareLyricChar\d \DeclareLyricChar\b \DeclareLyricChar\oe \DeclareLyricChar\OE \DeclareLyricChar\ae \DeclareLyricChar\AE \DeclareLyricChar\aa \DeclareLyricChar\AA \DeclareLyricChar\o \DeclareLyricChar\O \DeclareLyricChar\l \DeclareLyricChar\L \DeclareLyricChar\ss \DeclareLyricChar\i \DeclareLyricChar\j \DeclareLyricChar\/ \DeclareLyricChar\- \DeclareLyricChar\discretionary \DeclareNoHyphen\par \newcommand\SB@bracket{} \newcommand\SB@chord{\SB@begincname\SB@@chord} \newcommand\SB@begincname{} {\catcode`\^^M\active \gdef\SB@begincname{% \begingroup% \catcode`##\active\catcode`&\active% \catcode`:12\relax% \catcode`\^^M\active\SB@outer\def^^M{}% \SB@outer\def\[{}% \chordlocals\relax% } } \newcommand\SB@endcname{} \let\SB@endcname\endgroup \newcommand\SB@nbsp{} \def\SB@nbsp{\nobreakspace{}} \newif\ifSB@firstchord\SB@firstchordtrue \newcommand*\SB@@chord{} \def\SB@@chord#1]{% \SB@endcname% \ifSB@firstchord% \setbox\SB@lyricbox\hbox{\kern\SB@tabindent}% \global\SB@tabindent\z@% \SB@lyric{}% \SB@numhyps\z@% \SB@spcinit% \setbox\SB@chordbox\box\voidb@x% \fi% \SB@setchord{#1}% \SB@firstchordfalse% \let\SB@dothis\SB@chstart% \SB@chscan% } \newcommand\SB@spcinit{} \newcommand\MultiwordChords{% \def\SB@spcinit{% \let\SB@chdone\SB@chlyrdone% \let\SB@chimpspace\SB@chnxtdone% \let\SB@chexpspace\SB@chnxtdone% \let\SB@chespace\SB@chendspace% }% } \newcommand\SB@chscan{% \let\SB@nextname\relax% \futurelet\SB@next\SB@chmain% } \newcommand\SB@chmain{\SB@dothis\SB@donext} \newcommand\SB@chnxtrelax{\let\SB@donext\relax} \newcommand\SB@chnxtstep{\let\SB@donext\SB@chstep} \newcommand\SB@chnxtdone{\let\SB@donext\SB@chdone} \newcommand\SB@chstart{% \ifx\SB@next\[\SB@chnxtrelax% \else\ifx\SB@next\SB@activehat\SB@chnxtrelax% \else\ifx\SB@next\ch\SB@chnxtrelax% \else\ifx\SB@next\mch\SB@chnxtrelax% \else\ifx\SB@next`\SB@chnxtstep% \else\ifx\SB@next'\SB@chnxtstep% \else\ifx\SB@next"\SB@chnxtstep% \else% \the\SB@lyric% \SB@lyric{}% \SB@firstchordtrue% \let\SB@dothis\SB@chnorm% \SB@chnorm% \fi\fi\fi\fi\fi\fi\fi% } \newcommand\SB@chnorm{% \ifcat\noexpand\SB@next A% \SB@testtrue\SB@lettertests% \ifSB@test% \SB@chespace\SB@chnxtstep% \else% \SB@chnxtdone% \fi% \else% \SB@chtrymacro% \fi% } \newcommand\SB@chtrymacro{% \ifcat\noexpand\SB@next\relax% \SB@chmacro% \else% \SB@chother% \fi% } \newcommand\SB@chother{% \ifcat\noexpand\SB@next\@sptoken% \SB@chexpspace% \else\ifcat\noexpand\SB@next\bgroup% \SB@chespace\let\SB@donext\SB@chbgroup% \else\ifcat\noexpand\SB@next\egroup% \SB@chespace\let\SB@donext\SB@chegroup% \else\ifx\SB@next-% \SB@numhyps\@ne\relax% \SB@lyricnohyp\expandafter{\the\SB@lyric}% \let\SB@dothis\SB@chhyph% \SB@chespace\SB@chnxtstep% \else\ifcat\noexpand\SB@next.% \SB@testtrue\SB@othertests% \ifSB@test% \SB@chespace\SB@chnxtstep% \else% \SB@chnxtdone% \fi% \else% \SB@chespace\SB@chnxtstep% \fi\fi\fi\fi\fi% } \newcommand\SB@chmacro{% \SB@outertest% \ifSB@test% \SB@chnxtdone% \else% \let\SB@donext\SB@chgetname% \fi% } \newcommand\SB@chgetname[1]{% \edef\SB@nextname{\string#1}% \SB@@chmacro\SB@donext#1% } \newcommand\SB@@chmacro{% \ifx\SB@next\SB@activehat% \SB@chnxtdone% \else\ifx\SB@next\SB@par% \SB@chnxtdone% \else\ifx\SB@next\measurebar% \SB@chmbar% \else\ifx\SB@next\mbar% \SB@chmbar% \else\ifx\SB@next\ch% \SB@chespace\let\SB@donext\SB@chlig% \else\ifx\SB@next\mch% \SB@chespace\let\SB@donext\SB@mchlig% \else\ifx\SB@next\ % \SB@chimpspace% \else\ifx\SB@next\SB@nbsp% \SB@chimpspace% \else% \SB@UTFtest\SB@next% \ifcase\SB@cnt\SB@chothermac% \or\or\SB@chespace\let\SB@donext\SB@chsteptwo% \or\SB@chespace\let\SB@donext\SB@chstepthree% \or\SB@chespace\let\SB@donext\SB@chstepfour\fi% \fi\fi\fi\fi\fi\fi\fi\fi% } \newcommand\SB@chothermac{% \SB@testfalse% \afterassignment\iffalse% \SB@cnt\expandafter`\SB@nextname x\fi% \ifnum\the\catcode\SB@cnt=\z@\else\SB@testtrue\fi% \SB@macrotests% \ifSB@test% \SB@chespace\SB@chnxtstep% \else% \SB@chnxtdone% \fi% } \newcommand\SB@chstep[1]{% \SB@lyric\expandafter{\the\SB@lyric#1}% \SB@chscan% } \newcommand\SB@chsteptwo[2]{\SB@chmulti{#1#2}{\string#1\string#2}} \newcommand\SB@chstepthree[3]{% \SB@chmulti{#1#2#3}{\string#1\string#2\string#3}% } \newcommand\SB@chstepfour[4]{% \SB@chmulti{#1#2#3#4}{\string#1\string#2\string#3\string#4}% } \newcommand\SB@chmulti[2]{% \def\SB@next{#1}% \edef\SB@nextname{#2}% \SB@testtrue\SB@multitests% \ifSB@test% \SB@lyric\expandafter{\the\SB@lyric#1}% \expandafter\SB@chscan% \else% \expandafter\SB@chmstop% \fi% } \newcommand\SB@chmstop{\expandafter\SB@chdone\SB@next} \newcommand\SB@chhyph{% \ifx\SB@next-% \advance\SB@numhyps\@ne\relax% \SB@chnxtstep% \else% \SB@chnxtdone% \fi% } \newcommand\SB@chimpspace{} \let\SB@chimpspace\SB@chnxtdone \newcommand\SB@chexpspace{} \let\SB@chexpspace\SB@chnxtdone \newcommand\SB@chespace{} \newcommand\SB@chendspace{% \let\SB@chdone\SB@chlyrdone% \def\SB@chexpspace{\SB@chbspace\SB@chexpspace}% \def\SB@chimpspace{\SB@chbspace\SB@chimpspace}% \def\SB@chespace{}% } \newcommand\SB@chbspace{% \setbox\SB@lyricbox\hbox{% \unhbox\SB@lyricbox% \the\SB@lyric% }% \SB@lyric{}% \ifdim\wd\SB@lyricbox<\wd\SB@chordbox% \let\SB@chbstok= \SB@next% \def\SB@chexpspace{\let\SB@donext\SB@chgetspace}% \let\SB@chimpspace\SB@chnxtstep% \let\SB@chespace\SB@chendspace% \let\SB@chdone\SB@chspcdone% \else% \let\SB@chimpspace\SB@chnxtdone% \let\SB@chexpspace\SB@chnxtdone% \fi% } \newcommand\SB@chgetspace{% \SB@appendsp\SB@lyric% \let\SB@nextname\relax% \afterassignment\SB@chscan% \let\SB@next= } \newcommand\SB@chmbar{% \ifmeasures% \SB@chnxtdone% \else% \SB@chespace\SB@chnxtstep% \fi% } \newcommand\SB@chbgroup[1]{% \SB@lyric\expandafter{\the\SB@lyric{#1}}% \SB@chscan% } \newcommand\SB@chegroup{% \let\SB@nextname\relax% \afterassignment\SB@chegrpscan% \let\SB@next= } \newcommand\SB@chegrpscan{% \futurelet\SB@next\SB@chegrpmacro% } \newcommand\SB@chegrpmacro{% \ifcat\noexpand\SB@next\relax% \expandafter\SB@chegrpouter% \else% \expandafter\SB@chegrpdone% \fi% } \newcommand\SB@chegrpouter{% \SB@outertest% \ifSB@test% \expandafter\SB@chegrpdone% \else% \expandafter\SB@chegrpname% \fi% } \newcommand\SB@chegrpname[1]{% \edef\SB@nextname{\string#1}% \SB@chegrpdone#1% } \newcommand\SB@chegrpdone{\SB@chdone\egroup} \newcommand\SB@chlig[5]{% \gdef\SB@ligpre{{#3}}% \gdef\SB@ligpost{\[#2]{#4}}% \gdef\SB@ligfull{% \[\SB@noreplay{\hphantom{{\lyricfont\relax#3}}}#2]{#5}% }% \SB@chdone% } \newcommand\SB@mchlig[5]{% \SB@lyric\expandafter{\the\SB@lyric#3}% \let\SB@next\measurebar% \edef\SB@nextname{\string\measurebar}% \gdef\SB@ligpost{\measurebar\[#2]{#4}}% \gdef\SB@ligfull{\measurebar\[#2]{#4}}% \SB@chdone% } \newcommand\SB@chlyrdone{% \setbox\SB@lyricbox\hbox{% \unhbox\SB@lyricbox% \ifnum\SB@numhyps=\@ne% \the\SB@lyricnohyp% \else% \the\SB@lyric% \fi% }% \SB@emitchord% } \newcommand\SB@chspcdone{% \let\SB@nextname\relax% \let\SB@next= \SB@chbstok% \expandafter\SB@emitchord\the\SB@lyric% } \newcommand\SB@chdone{} \let\SB@chdone\SB@chlyrdone \newcommand\SB@ligpre{} \newcommand\SB@ligpost{} \newcommand\SB@ligfull{} \newcommand\SB@clearlig{% \gdef\SB@ligpre{}% \gdef\SB@ligpost{}% \gdef\SB@ligfull{}% } \newcommand\SB@emitchord{% \ifSB@inverse\else\ifSB@inchorus\else\SB@errchord\fi\fi% \SB@testfalse% \ifcat\noexpand\SB@next\@sptoken\SB@testtrue\fi% \ifcat\noexpand\SB@next.\SB@testtrue\fi% \ifx\SB@next\SB@par\SB@testtrue\fi% \ifx\SB@next\egroup\SB@testtrue\fi% \ifx\SB@next\endgroup\SB@testtrue\fi% {\csname% SB@HT@\ifx\SB@nextname\relax\meaning\SB@next\else\SB@nextname\fi% \endcsname}% \ifSB@test\SB@wordendstrue\else\SB@wordendsfalse\fi% \SB@dimen\wd\SB@chordbox% \ifvmode\leavevmode\fi% \SB@brokenwordfalse% \ifdim\wd\SB@lyricbox>\z@% \ifdim\SB@dimen>\wd\SB@lyricbox% \ifSB@wordends\else\SB@brokenwordtrue\fi% \fi% \else% \SB@skip\lastskip% \unskip\penalty200\hskip\SB@skip% \fi% \ifnum\SB@numhyps>\z@% \ifnum\SB@numhyps>\@ne% \SB@brokenwordfalse% \else% \SB@brokenwordtrue% \fi% \fi% \SB@testfalse% \ifnolyrics\ifdim\wd\SB@lyricbox=\z@\SB@testtrue\fi\fi% \ifSB@test% \unhbox\SB@chordbox% \gdef\SB@temp{\expandafter\SB@clearlig\SB@ligfull}% \else% \vbox{\clineparams\relax% \ifSB@brokenword% \global\setbox\SB@lyricbox\hbox{% \unhbox\SB@lyricbox% \SB@ligpre% }% \SB@maxmin\SB@dimen<{\wd\SB@lyricbox}% \advance\SB@dimen.5em% \hbox to\SB@dimen{\unhbox\SB@chordbox\hfil}% \hbox to\SB@dimen{% \unhcopy\SB@lyricbox\hfil \ifnum\hyphenchar\font>\m@ne\char\hyphenchar\font\hfil\fi% }% \global\SB@cnt\@m% \gdef\SB@temp{\expandafter\SB@clearlig\SB@ligpost}% \else% \box\SB@chordbox% \hbox{% \unhcopy\SB@lyricbox% \global\SB@cnt\spacefactor% \hfil% }% \gdef\SB@temp{\expandafter\SB@clearlig\SB@ligfull}% \fi% }% \ifSB@wordends% \ifdim\wd\SB@lyricbox>\z@\else\nobreak\fi% \else% \penalty% \ifnum\SB@numhyps>\z@\exhyphenpenalty% \else\ifSB@brokenword\hyphenpenalty% \else\@M\fi\fi% \spacefactor\SB@cnt% \fi% \fi% \SB@temp% } \newcommand\SB@accidental[1]{{% \/% \m@th#1% \SB@dimen-\fontdimen\@ne\font% \advance\SB@dimen.088142\p@% \ifdim\SB@dimen<\z@% \kern\f@size\SB@dimen% \fi% }} \newcommand\sharpsymbol{\ensuremath{^\#}} \newcommand\flatsymbol{\raise.5ex\hbox{{\SB@flatsize$\flat$}}} \newcommand\shrp{\SB@accidental\sharpsymbol} \newcommand\flt{\SB@accidental\flatsymbol} \newcommand\DeclareFlatSize[2]{% \expandafter\xdef\csname SB@flatsize@#1\endcsname{#2}% } \DeclareFlatSize\@vpt\@vpt \DeclareFlatSize\@vipt\@vipt \DeclareFlatSize\@viipt\@vipt \DeclareFlatSize\@viiipt\@viipt \DeclareFlatSize\@ixpt\@viiipt \DeclareFlatSize\@xpt\@ixpt \DeclareFlatSize\@xipt\@xpt \DeclareFlatSize\@xiipt\@xipt \DeclareFlatSize\@xivpt\@xiipt \DeclareFlatSize\@xviipt\@xivpt \DeclareFlatSize\@xxpt\@xviipt \DeclareFlatSize\@xxvpt\@xxpt \newcommand\SB@flatsize{% \@ifundefined{SB@flatsize@\f@size}{}{% \expandafter\fontsize% \csname SB@flatsize@\f@size\endcsname\f@baselineskip% \selectfont% }% } \newcommand\ch{\SB@ch} \newcommand\SB@ch{} \newcommand\SB@ch@on{\SB@begincname\SB@@ch} \newcommand*\SB@@ch[1]{\SB@endcname\SB@@@ch{#1}} \newcommand*\SB@@@ch[4]{\[\SB@noreplay{\hphantom{#2}}#1]#4} \newcommand*\SB@ch@off[4]{#4} \newcommand\mch{\SB@mch} \newcommand\SB@mch{} \newcommand*\SB@mch@m[4]{#2\measurebar#3} \newcommand\SB@mch@on{\SB@begincname\SB@@mch} \newcommand*\SB@@mch[1]{\SB@endcname\SB@@@mch{#1}} \newcommand*\SB@@@mch[4]{#2\measurebar\[#1]#3} \newcommand\SB@activehat{% \ifmmode^\else\expandafter\SB@rechord\fi% } \newcommand\SB@hat@tr{% \ifmmode^\else\global\SB@nohatfalse\fi% } \newcommand\SB@hat@notr{% \ifmmode^\else% \SB@lop\SB@ctail\SB@toks% \expandafter\transposehere\expandafter{\the\SB@toks}% \fi% } \newcommand\SB@loadactives{} { \catcode`&\active \catcode`#\active \catcode`|\active \catcode`^\active \global\let&\flt \global\let#\shrp \global\let|\measurebar \global\let^\SB@activehat \gdef\SB@loadactives{% \catcode`^\ifchorded\active\else9 \fi% \catcode`|\ifmeasures\active\else9 \fi% \def\[{\SB@bracket}% } } \newif\ifSB@trackch \SB@newtoks\SB@cr@ \SB@newtoks\SB@ctail \newcommand\SB@creg{} \newcommand\newchords[1]{% \@ifundefined{SB@cr@#1}{% \expandafter\SB@newtoks\csname SB@cr@#1\endcsname% \global\csname SB@cr@#1\endcsname{\\}% }{\SB@errdup{#1}}% } \newcommand\memorize{% \@ifnextchar[\SB@memorize{\SB@memorize[]}% } \newcommand\SB@memorize{} \def\SB@memorize[#1]{% \@ifundefined{SB@cr@#1}{\SB@errreg{#1}}{% \SB@trackchtrue% \global\expandafter\let\expandafter\SB@creg% \csname SB@cr@#1\endcsname% \global\SB@creg{\\}% }% } \newcommand\replay{\@ifnextchar[\SB@replay\SB@@replay} \newcommand\SB@replay{} \def\SB@replay[#1]{% \@ifundefined{SB@cr@#1}{\SB@errreg{#1}}{% \SB@trackchfalse% \global\expandafter\let\expandafter\SB@creg% \csname SB@cr@#1\endcsname% \global\SB@ctail\SB@creg% }% } \newcommand\SB@@replay{% \SB@trackchfalse% \global\SB@ctail\SB@creg% } \newcommand\SB@rechord{} \newcommand\SB@@rechord{% \SB@ifempty\SB@ctail{% \SB@errreplay% \SB@toks{}% \let\SB@donext\@gobble% }{% \SB@lop\SB@ctail\SB@toks% \let\SB@donext\SB@chord% \let\SB@noreplay\@gobble% }% \expandafter\SB@donext\the\SB@toks]% } \newif\ifSB@nohat \newcommand\SB@noreplay{} \let\SB@noreplay\@firstofone \newlength\SB@fretwidth \setlength\SB@fretwidth{6\p@} \newcommand\SB@fretnum[1]{{% \sffamily\fontsize\@xpt\@xpt\selectfont#1% }} \newcommand\SB@onfret[1]{% \rlap{\hbox to\SB@fretwidth{\hfil\vrule\@height6\p@\hfil}}% \hbox to\SB@fretwidth{\hfil#1\hfil}% } \newcommand\SB@atopfret[1]{% \hbox to\SB@fretwidth{\hfil#1\hfil}% } \newcommand\SB@fretbar{% \nointerlineskip% \hbox to\SB@dimen{% \advance\SB@dimen-\SB@fretwidth% \advance\SB@dimen.4\p@% \hfil% \vrule\@width\SB@dimen\@height.4\p@\@depth\z@% \hfil% }% \nointerlineskip% } \newcommand\SB@topempty{\SB@atopfret\relax} \newcommand\SB@topX{\SB@atopfret{% \hbox{% \kern-.2\p@% \fontencoding{OMS}\fontfamily{cmsy}% \fontseries{m}\fontshape{n}% \fontsize\@viipt\@viipt\selectfont\char\tw@% \kern-.2\p@% }% }} \newcommand\SB@topO{\SB@atopfret{% \vrule\@width\z@\@height4.3333\p@\@depth.8333\p@% \lower.74\p@\hbox{% \fontencoding{OMS}\fontfamily{cmsy}% \fontseries{m}\fontshape{n}% \fontsize\@xpt\@xpt\selectfont\char14% }% }} \newcommand\SB@fretempty{\SB@onfret\relax} \newcommand\SB@frethit{\SB@onfret{% \hbox{% \fontencoding{OMS}\fontfamily{cmsy}% \fontseries{m}\fontshape{n}% \fontsize\@xiipt\@xiipt\selectfont\char15% }% }} \newcommand\SB@finger[1]{% \SB@atopfret{\sffamily\fontsize\@vipt\@vipt\selectfont#1}% } \newif\ifSB@gettabind\SB@gettabindfalse \SB@newdimen\SB@tabindent \newcommand\SB@targfret{} \newcommand\SB@targstr{} \newcommand\SB@targfing{} \newcommand\SB@csify[2]{% \SB@toks{}% \SB@cnt\z@% \SB@@csify#2\SB@@csify% \edef#1{\the\SB@toks}% } \newcommand\SB@@csify[1]{% \ifx#1\SB@@csify\else% \advance\SB@cnt\@ne% \SB@toks\expandafter{\the\SB@toks\csname#1\endcsname}% \expandafter\SB@@csify% \fi% } \newcommand\SB@gttop{% \let\X\SB@topX\let\0\SB@topO\let\O\0\let\1\SB@topempty% \let\2\1\let\3\1\let\4\1\let\5\1% \let\6\1\let\7\1\let\8\1\let\9\1% } \newcommand\SB@gtinit{% \let\X\SB@fretempty\let\0\X\let\O\X\let\1\SB@frethit% \let\2\X\let\3\X\let\4\X\let\5\X% \let\6\X\let\7\X\let\8\X\let\9\X% } \newcommand\SB@gtinc{% \let\9\8\let\8\7\let\7\6\let\6\5\let\5\4% \let\4\3\let\3\2\let\2\1\let\1\0% } \newcommand\SB@gtset[2]{% \let\X#1\let\0\X\let\O\X% \def\1{#21}\def\2{#22}\def\3{#23}% \def\4{#24}\def\5{#25}\def\6{#26}% \def\7{#27}\def\8{#28}\def\9{#29}% } \newcommand\SB@gtmax[1]{\ifnum\SB@cnt<#1\SB@cnt#1\fi} \newcommand\gtab{\SB@begincname\SB@gtab} \newcommand*\SB@gtab[1]{% \SB@endcname% \begingroup% \catcode`:12\relax% \SB@@gtab{#1}% } \newcommand*\SB@@gtab[2]{% \endgroup% \ifnum\SB@transposefactor=\z@% \SB@@@gtab{#1}{#2}% \else% \begingroup% \let\gtab\SB@@@gtab% \gtabtrans{#1}{#2}% \endgroup% \fi% } \newcommand\gtabtrans[2]{\transposehere{#1}} \newcommand\SB@@@gtab[2]{% \let\SB@targfret\@empty% \let\SB@targstr\@empty% \let\SB@targfing\@empty% \SB@tabargs#2:::\SB@tabargs% \ifx\SB@targstr\@empty% \def\SB@targstr{\0\0\0\0\0\0}% \fi% \ifvmode\leavevmode\fi% \vbox{% \normalfont\normalsize% \setbox\SB@box\hbox{% \thinspace{\printchord{\transposehere{#1}\strut}}\thinspace% }% \setbox\SB@boxii\hbox{\SB@fretnum{\SB@targfret}}% \setbox\SB@boxiii\hbox{{\SB@gttop\SB@targstr}}% \hsize\wd\SB@box% \ifSB@gettabind% \global\SB@tabindent\wd\SB@boxii% \global\advance\SB@tabindent.5\SB@fretwidth% \global\advance\SB@tabindent-.5\p@% \fi% \SB@dimen\wd\SB@boxii% \advance\SB@dimen\wd\SB@boxiii% \ifdim\hsize<\SB@dimen% \hsize\SB@dimen% \else\ifSB@gettabind% \SB@dimenii\hsize% \advance\SB@dimenii-\SB@dimen% \divide\SB@dimenii\tw@% \global\advance\SB@tabindent\SB@dimenii% \fi\fi% \hbox to\hsize{\hfil\unhbox\SB@box\hfil}% \kern-\p@\nointerlineskip% \hbox to\hsize{% \hfil% \vtop{\kern\p@\kern2\p@\box\SB@boxii}% \vtop{% \SB@dimen\wd\SB@boxiii% \box\SB@boxiii% \SB@cnt\minfrets% \SB@gtset\relax\SB@gtmax\SB@targstr% \SB@gtinit% \loop% \SB@fretbar\hbox{\SB@targstr}% \advance\SB@cnt\m@ne% \ifnum\SB@cnt>\z@\SB@gtinc\repeat% \SB@fretbar% \ifx\SB@targsfing\@empty\else% \kern1.5\p@% \SB@gtset\SB@topempty\SB@finger% \hbox{\SB@targfing}% \fi% }% \hfil% }% \kern3\p@% }% \SB@gettabindfalse% } \newcommand\SB@ctoken{} \def\SB@ctoken{:} \newcommand\SB@tabargs{} \def\SB@tabargs#1:#2:#3:#4\SB@tabargs{% \def\SB@temp{#4}% \ifx\SB@temp\@empty% \SB@csify\SB@targstr{#1}% \else\ifx\SB@temp\SB@ctoken% \SB@csify\SB@targstr{#1}% \ifnum\SB@cnt>\@ne% \SB@cntii\SB@cnt% \SB@csify\SB@targfing{#2}% \SB@cnt\SB@cntii% \else% \def\SB@targfret{#1}% \SB@csify\SB@targstr{#2}% \fi% \else% \def\SB@targfret{#1}% \SB@csify\SB@targfing{#3}% \SB@csify\SB@targstr{#2}% \fi\fi% } \newcommand\songchapter{% \let\SB@temp\@seccntformat% \def\@seccntformat##1{}% \@startsection{chapter}{0}{\z@}% {3.5ex\@plus1ex\@minus.2ex}% {.4ex\let\@seccntformat\SB@temp}% {\sffamily\bfseries\LARGE\centering}% } \newcommand\songsection{% \let\SB@temp\@seccntformat% \def\@seccntformat##1{}% \@startsection{section}{1}{\z@}% {3.5ex\@plus1ex\@minus.2ex}% {.4ex\let\@seccntformat\SB@temp}% {\sffamily\bfseries\LARGE\centering}% } \newenvironment{songs}[1]{% \ifSB@songsenv\SB@errnse\fi% \gdef\SB@indexlist{#1}% \SB@chkidxlst% \stepcounter{SB@songsnum}% \setcounter{songnum}{1}% \let\SB@sgroup\@empty% \ifinner\else\ifdim\pagetotal>\z@% \null\nointerlineskip% \fi\fi% \songcolumns\SB@numcols% \SB@songsenvtrue% }{% \commitsongs% \global\let\SB@indexlist\@empty% \ifinner\else\clearpage\fi% \SB@songsenvfalse% } \newcounter{SB@songsnum} \newcommand\songtarget[2]{% \ifnum\@ne=0\ifSB@pdf\ifx\pdfbookmark\undefined\else% \ifx\pdfbookmark\relax\else1\fi\fi\fi\relax% \pdfbookmark[#1]{\thesongnum. \songtitle}{#2}% \else\ifx\hypertarget\undefined% \else\ifx\hypertarget\relax\else% \hypertarget{#2}{\relax}% \fi\fi\fi% } \newcommand\songlink{% \ifnum\@ne=0\ifx\hyperlink\undefined\else% \ifx\hyperlink\relax\else1\fi\fi\relax% \expandafter\hyperlink% \else% \expandafter\@gobble% \fi% } \newcommand\SB@indexlist{} \newcommand\SB@allindexes{} \let\SB@allindexes\@empty \newcommand\SB@out{} \let\SB@out\relax \newcommand\SB@newindex[4]{% \expandafter\newcommand\csname SB@idxfilename@#3\endcsname{#4}% \expandafter\newcommand\csname SB@idxsel@#3\endcsname[3]{###1}% \expandafter\newcommand\csname SB@idxref@#3\endcsname{\thesongnum}% \xdef\SB@allindexes{% \ifx\SB@allindexes\@empty\else\SB@allindexes,\fi#3% }% \if@filesw% \ifx\SB@out\relax% \SB@newwrite\SB@out% \immediate\openout\SB@out=\jobname.sxc\relax% \fi% \immediate\write\SB@out{\noexpand\SB@iwrite{#3}{#2}}% \fi% } \newcommand\newindex{\SB@newindex1{TITLE INDEX DATA FILE}} \@onlypreamble\newindex \newcommand\newscripindex{\SB@newindex2{SCRIPTURE INDEX DATA FILE}} \@onlypreamble\newscripindex \newcommand\newauthorindex{\SB@newindex3{AUTHOR INDEX DATA FILE}} \@onlypreamble\newauthorindex \newcommand\SB@cwrite[2]{% \ifx\SB@out\relax\else% \protected@write\SB@out\SB@keepactive{\protect\SB@iwrite{#1}{#2}}% \fi% } \newcommand\SB@keepactive{} {\catcode`\~\active \catcode`\.12 \def\\#1#2{% \endgroup \SB@app\gdef\SB@keepactive{\def#1{#2}}% } \def\SB@temp#1#2{% \SB@cnt#1\relax \loop \begingroup \uccode`\~\SB@cnt \uccode`\.\SB@cnt \uppercase{\\~.} \ifnum\SB@cnt<#2\relax \advance\SB@cnt\@ne \repeat } \SB@temp{1}{8} \SB@temp{11}{11} \SB@temp{14}{91} \SB@temp{93}{255} } \newcommand\SB@iwrite[2]{% \def\SB@tempii{#1}% \ifx\SB@temp\SB@tempii% \SB@toks{#2}% \immediate\write\SB@out{\the\SB@toks}% \fi% } \newcommand\SB@uncombine{% \ifx\SB@out\relax\else% \immediate\closeout\SB@out% \ifsongindexes% \@for\SB@temp:=\SB@allindexes\do{% \immediate\openout\SB@out=% \csname SB@idxfilename@\SB@temp\endcsname.sxd\relax% \begingroup\makeatletter\catcode`\%12\relax% \input{\jobname.sxc}\endgroup% \immediate\closeout\SB@out% }% \fi% \fi% } \AtEndDocument{\SB@uncombine} \SB@newbox\SB@songwrites \newcommand\SB@addtoindex[2]{% \protected@edef\SB@tempii{#2}% \ifx\SB@tempii\@empty\else% \global\setbox\SB@songwrites\vbox{% \unvbox\SB@songwrites% \SB@cwrite{#1}{#2}% \SB@cwrite{#1}{\csname SB@idxref@#1\endcsname}% \SB@cwrite{#1}{song\theSB@songsnum-\thesongnum.% \ifnum\c@section=\z@1\else2\fi}% }% \fi% } \newcommand\SB@addtoindexes[3]{% \@for\SB@temp:=\SB@indexlist\do{% \SB@addtoindex\SB@temp% {\csname SB@idxsel@\SB@temp\endcsname{#1}{#2}{#3}}% }% } \newcommand\SB@addtotitles[1]{% \@for\SB@temp:=\SB@indexlist\do{% \csname SB@idxsel@\SB@temp\endcsname% {\SB@addtoindex\SB@temp{#1}}{}{}% }% } \newcommand\SB@chkidxlst{% \let\SB@temp\SB@indexlist% \let\SB@indexlist\@empty% \@for\SB@tempii:=\SB@temp\do{% \@ifundefined{SB@idxsel@\SB@tempii}{\SB@errnoidx\SB@tempii}{% \ifx\SB@indexlist\@empty% \SB@toks\expandafter{\SB@tempii}% \else% \SB@toks\expandafter\expandafter\expandafter{% \expandafter\SB@indexlist\expandafter,\SB@tempii}% \fi% \edef\SB@indexlist{\the\SB@toks}% }% }% } \newcommand\indexentry{\@ifnextchar[{\SB@idxentry*}{\SB@@idxentry*}} \newcommand\SB@idxentry{} \def\SB@idxentry#1[#2]#3{{% \def\SB@indexlist{#2}% \SB@chkidxlst% \SB@addtoindexes{#1#3}{#3}{#3}% }} \newcommand\SB@@idxentry[2]{\SB@addtotitles{#1#2}} \newcommand\indextitleentry{% \@ifnextchar[{\SB@idxentry{}}{\SB@@idxentry{}}% } \newcommand\indexsongsas[1]{% \@ifundefined{SB@idxref@#1}% {\SB@errnoidx{#1}\@gobble}% {\expandafter\renewcommand\csname SB@idxref@#1\endcsname}% } \newcommand\SB@idxcmd[3]{% \ifx\SB@allindexes\@empty% \SB@warnnoidx% \else\ifx\SB@out\relax\else% \@for\SB@temp:=\SB@allindexes\do{% \csname SB@idxsel@\SB@temp\endcsname% {\SB@@idxcmd{#1}}{\SB@@idxcmd{#2}}{\SB@@idxcmd{#3}}% }% \fi\fi% } \newcommand\SB@@idxcmd[1]{% \def\SB@tempii{#1}% \ifx\SB@tempii\@empty\else% \immediate\write\SB@out{% \noexpand\SB@iwrite{\SB@temp}{#1}% }% \fi% } \newcommand\authsepword[1]{} \newcommand\authbyword[1]{} \newcommand\authignoreword[1]{} \newcommand\titleprefixword[1]{} {\catcode`\%=12 \gdef\authsepword#1{\SB@idxcmd{}{}{%sep #1}} \gdef\authbyword#1{\SB@idxcmd{}{}{%after #1}} \gdef\authignoreword#1{\SB@idxcmd{}{}{%ignore #1}} \gdef\titleprefixword#1{\SB@idxcmd{%prefix #1}{}{}}} \@onlypreamble\authsepword \@onlypreamble\authbyword \@onlypreamble\authignoreword \@onlypreamble\titleprefixword \newcommand\SB@idxlineskip[1]{% \vskip#1\p@\@plus#1\p@\@minus#1\p@% } \newcommand\SB@ellipspread[2]{% \begingroup% \SB@dimen\z@% \def\SB@temp{#1}% \SB@toks{#2}% \setbox\SB@box\hbox{{% \SB@temp% \leaders\hbox to.5em{\hss.\hss}\hskip2em\@plus1fil% {\the\SB@toks}% }}% \ifdim\wd\SB@box>\hsize% \SB@balancerows% \else% \hbox to\hsize{\unhbox\SB@box}\par% \fi% \endgroup% } \newcommand\SB@balancerows{% \edef\SB@tempii{\the\SB@toks}% \setbox\SB@box\vbox{% \SB@toks\expandafter{\expandafter\\\the\SB@toks\\}% \SB@lop\SB@toks\SB@toks% \settowidth\SB@dimen{\the\SB@toks}% \advance\SB@dimen-.5em% \leftskip.5cm% {\hbadness\@M\hfuzz\maxdimen% \hskip-.5cm\relax\SB@temp\unskip\nobreak% \hskip\SB@dimen\nobreak% \rightskip2em\@plus1fil\par}% \setbox\SB@box\lastbox% \setbox\SB@box\hbox{% \unhbox\SB@box% \unskip\unskip\unpenalty% \unpenalty\unskip\unpenalty% }% \expandafter% }% \expandafter\SB@dimenii\the\wd\SB@box\relax% \SB@dimen\hsize% \advance\SB@dimen-.5cm% \setbox\SB@box\vbox{% \SB@multiline{\hbadness\@M\hfuzz\maxdimen}% }% \SB@dimeniii.5\SB@dimen% \SB@dimeniv\SB@dimeniii% \loop% \SB@dimeniv.5\SB@dimeniv% \setbox\SB@boxii\vbox{% \SB@dimen\SB@dimeniii% \SB@multiline{\hbadness\@M\hfuzz\maxdimen}% }% \ifnum\SB@cnt<\@M% \ifdim\ht\SB@boxii>\ht\SB@box% \advance\SB@dimeniii\SB@dimeniv% \else% \SB@dimen\SB@dimeniii% \advance\SB@dimeniii-\SB@dimeniv% \fi% \else% \advance\SB@dimeniii\SB@dimeniv% \fi% \ifdim\SB@dimeniv>2\p@\repeat% \setbox\SB@box\box\voidb@x% \setbox\SB@boxii\box\voidb@x% \SB@multiline\relax% } \newcommand\SB@multiline[1]{% \begingroup% \SB@dimen-\SB@dimen% \advance\SB@dimen\hsize% \SB@dimenii-\SB@dimenii% \advance\SB@dimenii\SB@dimen% {#1\hskip-.5cm\relax\SB@temp\unskip\nobreak% \SB@maxmin\SB@dimenii<{1.5em}% \leftskip.5cm\rightskip2em\@plus1fil% \interlinepenalty\@M% \leaders\hbox to.5em{\hss.\hss}\hskip\SB@dimenii\@plus1fill% \nobreak{\SB@tempii\kern-2em}% \par\global\SB@cnt\badness}% \endgroup% }% \newcommand\SB@idxitemsep{% ,\kern-2em\penalty-8\hskip2.33em\@minus.11em% \hskip-\SB@dimen\@plus-1fill% \vadjust{}\nobreak% \hskip\SB@dimen\@plus1fill\relax% } \newenvironment{idxblock}[1]{}{} \newcommand\idxentry[2]{} \newcommand\idxaltentry[2]{} \newenvironment{SB@lgidx}[1]{}{} \newenvironment{SB@smidx}[1]{}{} \newcommand\SB@idxsetup{% \hsize\SB@colwidth% \parskip\z@skip\parfillskip\z@skip\parindent\z@% \baselineskip\f@size\p@\@plus\p@\@minus\p@% \lineskiplimit\z@\lineskip\p@\@plus\p@\@minus\p@% \hyphenpenalty\@M\exhyphenpenalty\@M% } \newcommand\SB@makeidxcolumn{% \ifdim\ht\SB@box=\z@% \hskip\hsize\relax% \else% \splittopskip\z@skip\splitmaxdepth\maxdepth% \vsplit\SB@box to\SB@dimen% \global\setbox\SB@box\vbox{% \SB@idxsetup% \splitbotmark% \unvbox\SB@box% }% \fi% } \newcommand\SB@oneidxpage{} \newcommand\SB@displayindex[3]{% \ifsongindexes\begingroup% \SB@colwidth\hsize% \advance\SB@colwidth-#1\columnsep% \advance\SB@colwidth\columnsep% \divide\SB@colwidth#1% \setbox\SB@envbox\vbox{% \let\SB@temp\songsection% \ifx\chapter\undefined\else% \ifx\chapter\relax\else% \let\SB@temp\songchapter% \fi% \fi% \SB@temp{#2}% }% \IfFileExists{\csname SB@idxfilename@#3\endcsname.sbx}{% \ifsepindexes% \global\setbox\SB@box\vbox{% \null% \vfil% \unvcopy\SB@envbox% \vskip.5in\@minus.3in\relax% \hbox to\hsize{% \hfil% \vbox{% \SB@idxsetup% \renewenvironment{idxblock}[1]% {\begin{SB@smidx}{####1}}{\end{SB@smidx}}% \let\\\SB@idxitemsep% \input{\csname SB@idxfilename@#3\endcsname.sbx}% }% \hfil% }% \vskip\z@\@plus2fil\relax% }% {\vbadness\@M\vfuzz\maxdimen% \splitmaxdepth\maxdepth\splittopskip\z@skip% \global\setbox\SB@boxii\vsplit\SB@box to\textheight}% \ifvoid\SB@box% \box\SB@boxii% \else% \SB@lgindex{#1}{#3}% \fi% \else% \SB@lgindex{#1}{#3}% \fi% }% {% \ifsepindexes% \vbox to\textheight{% \vfil% \unvbox\SB@envbox% \vskip1em\relax% \hbox to\hsize{\hfil[Index not yet generated.]\hfil}% \vskip\z@\@plus2fil\relax% }% \else% \unvbox\SB@envbox% \hbox to\hsize{\hfil[Index not yet generated.]\hfil}% \fi% }% \ifsepindexes\clearpage\fi% \endgroup\fi% } \newcommand\SB@lgindex[2]{% \global\setbox\SB@box\vbox{% \renewenvironment{idxblock}[1]% {\begin{SB@lgidx}{##1}}{\end{SB@lgidx}}% \let\\\SB@idxitemsep% \SB@idxsetup% \input{\csname SB@idxfilename@#2\endcsname.sbx}% \unskip% }% \SB@toks{\SB@makeidxcolumn}% \SB@cnt#1\relax% \loop\ifnum\SB@cnt>\@ne% \SB@toks\expandafter{\the\SB@toks% \kern\columnsep\SB@makeidxcolumn}% \advance\SB@cnt\m@ne% \repeat% \edef\SB@oneidxpage{\the\SB@toks}% \unvbox\SB@envbox% \vskip.2in\relax% \nointerlineskip% \null% \nointerlineskip% \SB@cnt\vbadness\vbadness\@M% \SB@dimenii\vfuzz\vfuzz\maxdimen% \loop% \SB@dimen\textheight% \ifinner\else\kern\z@\advance\SB@dimen-\pagetotal\fi% \global\setbox\SB@boxii\copy\SB@box% \global\setbox\SB@boxiii\hbox{\SB@oneidxpage}% \ifdim\ht\SB@box>\z@% \box\SB@boxiii% \vfil\break% \repeat% \SB@dimenii\ht\SB@boxii% \divide\SB@dimenii#1\relax% \SB@maxmin\SB@dimen>\SB@dimenii% \loop% \global\setbox\SB@box\copy\SB@boxii% \global\setbox\SB@boxiii\hbox{\SB@oneidxpage}% \ifdim\ht\SB@box>\z@% \advance\SB@dimen\p@% \repeat% \box\SB@boxiii% \global\setbox\SB@boxii\box\voidb@x% \vbadness\SB@cnt\vfuzz\SB@dimenii% } \newcommand\showindex[3][0]{% \@ifundefined{SB@idxsel@#3}{\SB@errnoidx{#3}}{% \expandafter\let\expandafter\SB@temp\csname SB@idxsel@#3\endcsname% \SB@cnt#1\relax% \ifnum\SB@cnt<\@ne\SB@cnt\SB@temp232\relax\fi% \expandafter\SB@temp% \expandafter\SB@maketitleindex% \expandafter\SB@makescripindex% \expandafter\SB@makeauthorindex% \expandafter{\the\SB@cnt}% {#2}{#3}% }% } \newcommand\SB@maketitleindex{% \ifnum\idxheadwidth>\z@% \renewenvironment{SB@lgidx}[1]{ \hbox{\SB@colorbox\idxbgcolor{\vbox{% \hbox to\idxheadwidth{{\idxheadfont\relax##1}\hfil}% }}}% \nobreak\vskip3\p@\@plus2\p@\@minus2\p@\nointerlineskip% }{\penalty-50\vskip5\p@\@plus5\p@\@minus4\p@}% \else% \renewenvironment{SB@lgidx}[1]{}{}% \fi% \renewenvironment{SB@smidx}[1]{}{}% \renewcommand\idxentry[2]{% \SB@ellipspread{\idxtitlefont\relax\ignorespaces##1\unskip}% {{\idxrefsfont\relax##2}}% }% \renewcommand\idxaltentry[2]{% \SB@ellipspread{\idxlyricfont\relax\ignorespaces##1\unskip}% {{\idxrefsfont\relax##2}}% }% \SB@displayindex% } \newcommand\SB@idxcolhead{} \newcommand\SB@idxheadsep{{% \SB@dimen4\p@% \advance\SB@dimen-\prevdepth% \SB@maxmin\SB@dimen<\z@% \SB@dimenii\SB@dimen% \SB@maxmin\SB@dimenii>\p@% \vskip\SB@dimen\@plus\p@\@minus\SB@dimenii% }} \newcommand\SB@idxcont[1]{% \hbox to\hsize{{\idxcont{#1}}\hfil}% \nobreak% \SB@idxheadsep\nointerlineskip% } \newcommand\SB@makescripindex{% \renewenvironment{SB@lgidx}[1]{% \gdef\SB@idxcolhead{##1}% \hbox to\hsize{{\idxbook{##1}}\hfil}% \nobreak% \SB@idxheadsep\nointerlineskip% }{% \mark{\noexpand\relax}% \penalty-20\vskip3\p@\@plus3\p@\relax% }% \renewenvironment{SB@smidx}[1] {\begin{SB@lgidx}{##1}}{\end{SB@lgidx}}% \renewcommand\idxentry[2]{% \SB@ellipspread{\hskip.25cm\idxscripfont\relax##1}% {{\idxrefsfont\relax##2}}% \SB@toks\expandafter{\SB@idxcolhead}% \mark{\noexpand\SB@idxcont{\the\SB@toks}}% }% \renewcommand\idxaltentry[2]{\SB@erridx{a scripture}}% \SB@displayindex% } \newcommand\SB@makeauthorindex{% \renewenvironment{SB@lgidx}[1]{}{}% \renewenvironment{SB@smidx}[1]{}{}% \renewcommand\idxentry[2]{% \SB@ellipspread{{\idxauthfont\relax\sfcode`.\@m##1}}% {{\idxrefsfont##2}}% }% \renewcommand\idxaltentry[2]{\SB@erridx{an author}}% \SB@displayindex% } \newcommand\SB@Error{\PackageError{songs}} \newcommand\SB@Warn{\PackageWarning{songs}} \newcommand\SB@errspos{% \SB@Error{Illegal \protect\songpos\space argument}{The argume% nt to \protect\songpos\space must be a number from 0 to 3.}% } \newcommand\SB@errnse{% \SB@Error{Nested songs environments are not supported}{End th% e previous songs environment before beginning the next one.}% } \newcommand\SB@errpl{% \SB@Error{\protect\includeonlysongs\space not permitted with% in a songs environment}{\protect\includeonlysongs\space can o% nly be used in the document preamble or between songs environ% ments in the document body.}% } \newcommand\SB@errrtopt{% \SB@Error{Cannot display chords in a rawtext dump}{You have u% sed the rawtext option in the \protect\usepackage\space lin% e and have either used the chorded option as well or have use% d the \protect\chordson\space macro subsequently.}% } \newcommand\SB@warnrc{% \SB@Warn{The \protect\repchoruses\space feature will not wor% k when the number of columns is set to zero}% } \newcommand\SB@warnnoidx{% \SB@Warn{Index command has no effect since no indexes are ye% t declared}% } \newcommand\SB@errboo{% \SB@Error{Encountered \protect\beginsong\space without seein% g an \protect\endsong\space for the previous song}% {Song \thesongnum\space might be missing a% n \protect\endsong\space line.}% } \newcommand\SB@errbor{% \SB@Error{Encountered \protect\beginsong\space without seein% g an \protect\endscripture\space for the preceding scriptur% e quotation}{A scripture quotation appearing after son% g \thesongnum\space might be missing a% n \protect\endscripture\space line.}% } \newcommand\SB@erreov{% \SB@Error{Encountered \protect\endsong\space without seein% g an \protect\endverse\space for the preceding verse}{Son% g \thesongnum\space has a \protect\beginverse\space% line with no matching \protect\endverse\space line.}% } \newcommand\SB@erreoc{% \SB@Error{Encountered \protect\endsong\space without seein% g an \protect\endchorus\space for the preceding chorus}{Son% g \thesongnum\space has a \protect\beginchorus\space% line with no matching \protect\endchorus\space line.}% } \newcommand\SB@erreor{% \SB@Error{Encountered \protect\endsong\space without seein% g an \protect\endscripture for the preceding scripture quot% e}{A scripture quote appearing before song \thesongnum\space% ended with \protect\endsong\space instead of wit% h \protect\endscripture.}% } \newcommand\SB@erreot{% \SB@Error{Encountered \protect\endsong\space with no matchin% g \protect\beginsong}{Before song \thesongnum\space there wa% s an \protect\endsong\space with no matchin% g \protect\beginsong.}% } \newcommand\SB@errbvv{% \SB@Error{Encountered \protect\beginverse\space without seein% g an \protect\endverse\space for the preceding verse}{Son% g \thesongnum\space might have a verse that has n% o \protect\endendverse\space line.}% } \newcommand\SB@errbvc{% \SB@Error{Encountered \protect\beginverse\space without seein% g an \protect\endchorus\space for the preceding chorus}{Son% g \thesongnum\space might have a chorus that has n% o \protect\endchorus\space line.}% } \newcommand\SB@errbvt{% \SB@Error{Encountered \protect\beginverse\space without firs% t seeing a \protect\beginsong\space line}{Before son% g \thesongnum, there is a \protect\beginverse\space line no% t contained in any song.}% } \newcommand\SB@errevc{% \SB@Error{Encountered \protect\endverse\space while process% ing a chorus}{Song \thesongnum\space might hav% e a \protect\beginchorus\space concluded by a% n \protect\endverse\space instead of an \protect\endchorus.}% } \newcommand\SB@errevo{% \SB@Error{Encountered \protect\endverse\space without firs% t seeing a \protect\beginverse}{Song \thesongnum\space m% ight have an \protect\endverse\space with no matchin% g \protect\beginverse.}% } \newcommand\SB@errevt{% \SB@Error{Encountered an \protect\endverse\space outside o% f any song}{Before song \thesongnum, there is a% n \protect\endverse\space line not preceded b% y a \protect\beginsong\space line.}% } \newcommand\SB@erretex{% \SB@Error{The \protect\repchoruses\space feature requires e-% TeX compatibility}{Your version of LaTeX2e does not appear t% o be e-TeX compatible. Find a distribution that includes e-T% eX support in order to use this feature.}% } \newcommand\SB@errbcv{% \SB@Error{Encountered \protect\beginchorus\space without see% ing an \protect\endverse\space for the preceding verse}{Son% g \thesongnum\space might hav% e a \protect\beginverse\space with no match% ing \protect\endverse.}% } \newcommand\SB@errbcc{% \SB@Error{Encountered \protect\beginchorus\space without see% ing an \protect\endchorus\space for the preceding chorus}% {Song \thesongnum\space might have a \protect\beginchorus% \space with no matching \protect\endchorus.}% } \newcommand\SB@errbct{% \SB@Error{Encountered \protect\beginchorus\space without see% ing a \protect\beginsong\space line first}{After son% g \thesongnum\space there is a \protect\beginchorus\space% line outside of any song.}% } \newcommand\SB@errecv{% \SB@Error{Encountered an \protect\endchorus\space while proc% essing a verse}{Song \thesongnum\space might hav% e a \protect\beginverse\space concluded by \protect\endchorus% \space instead of \protect\endverse.}% } \newcommand\SB@erreco{% \SB@Error{Encountered \protect\endchorus\space without firs% t seeing a \protect\beginchorus}{Song \thesongnum\space m% ight have an \protect\endchorus\space with no match% ing \protect\beginchorus.}% } \newcommand\SB@errect{% \SB@Error{Encountered an \protect\endchorus\space outside o% f any song}{Before song \thesongnum, there is a% n \protect\endchorus\space line not preceded b% y a \protect\beginsong\space line.}% } \newcommand\SB@errbro{% \SB@Error{Missing \protect\endsong}% {Nested song and intersong environments are not supported% . Song \thesongnum\space might be missing a% n \protect\endsong\space line.}% } \newcommand\SB@errbrr{% \SB@Error{Nested intersong environments are not supported}% {A scripture quote or other intersong environment before s% ong \thesongnum\space is missing its ending line.}% } \newcommand\SB@errero{% \SB@Error{Encountered an \protect\endscripture\space whil% e processing a song}{Song \thesongnum\space ends wit% h \protect\endscripture\space when it should end wit% h \protect\endsong.}% } \newcommand\SB@errert{% \SB@Error{Encountered an \protect\endscripture\space with% out first seeing a \protect\beginscripture}{Before son% g \thesongnum, there is an \protect\endscripture\space w% ith no matching \protect\beginscripture.}% } \newcommand\SB@errscrip[1]{% \SB@Error{Encountered a \protect#1\space outside a scriptu% re quote}{\protect#1\space can only appear betwee% n \protect\beginscripture\space an% d \protect\endscripture\space lines.}% } \newcommand\SB@errchord{% \SB@Error{Song \thesongnum\space seems to have chord% s that appear outside of any verse or chorus}{All chords a% nd lyrics should appear between \protect\beginverse\space% and \protect\endverse, or between \protect\beginchorus\space% and \protect\endchorus.}% } \newcommand\SB@errreplay{% \SB@Error{Replayed chord has no matching chord}{Son% g \thesongnum\space uses \protect^ more times than the% re are chords in the previously memorized verse.}% } \newcommand\SB@errreg[1]{% \SB@Error{Unknown chord-replay register name: #1}{Chord-re% play registers must be declared with \protect\newchords.}% } \newcommand\SB@errdup[1]{% \SB@Error{Duplicate definition of chord-replay register% : #1}{\protect\newchords\space was used to declare the sa% me chord-replay register twice.}% } \newcommand\SB@errmbar{% \SB@Error{Song \thesongnum\space seems to have measur% e bars that appear outside of any verse or chorus}{All mea% sure bars (produced with \protect\mbar\space or |) must ap% pear between \protect\beginverse\space an% d \protect\endverse, or between \protect\beginchorus\space% and \protect\endchorus.}% } \newcommand\SB@errtab{% \SB@Error{Invalid argument to \protect\gtab\space macro. R% eplacing it with \protect\0.}{Valid arguments consist onl% y of: X, O, 0, 1, 2, 3, or 4.}% } \newcommand\SB@errnoidx[1]{% \SB@Error{Unknown index identifier: #1}{This index identifie% r was never declared using \protect\newindex.}% } \newcommand\SB@erridx[1]{% \SB@Error{\protect\idxaltentry\space not allowed in #1 index}% {This error should not occur. The index generation routines ha% ve malfunctioned. Try deleting all temporary files and then re% compiling.}% } \newif\ifchorded \newif\iflyric\lyrictrue \newif\ifslides \newif\ifmeasures \newif\ifpartiallist \newif\ifrepchorus \newif\iftranscapos \newif\ifnolyrics \newif\ifrawtext \newif\ifsongindexes\songindexestrue \newif\ifsepindexes\sepindexestrue \newif\ifpagepreludes \newif\ifSB@colorboxes \IfFileExists{color.sty}\SB@colorboxestrue\SB@colorboxesfalse \newif\ifSB@omitscrip \newcommand\nolyrics{} \let\nolyrics\nolyricstrue \newcommand\pagepreludes{\pagepreludestrue\songpos0} \SB@chordson \ProcessOptions\relax \ifSB@colorboxes \RequirePackage{color} \definecolor{SongbookShade}{gray}{.80} \newcommand\SB@colorbox[2]{% \ifx\@empty#1% \vbox{% \kern3\p@% \hbox{\kern3\p@{#2}\kern3\p@}% \kern3\p@% }% \else% \colorbox{#1}{#2}% \fi% } \else \newcommand\SB@colorbox[2]{\vbox{% \kern3\p@% \hbox{\kern3\p@{#2}\kern3\p@}% \kern3\p@% }} \fi \ifrawtext \SB@newwrite\SB@txtout \immediate\openout\SB@txtout=\jobname.txt \newif\ifSB@doEOL {\catcode`\^^M12 % \catcode`\^^J12 % \gdef\SB@printEOL{\ifSB@doEOL^^M^^J\fi}} {\catcode`#12\gdef\SB@hash{#}} {\catcode`&12\gdef\SB@amp{&}} \renewcommand\SB@@@beginsong{% \begingroup% \def\'{}\def\`{}\def\v{}\def\u{}\def\={}\def\^{}% \def\.{}\def\H{}\def\~{}\def\"{}\def\t{}% \def\copyright{(c)}% \let~\space% \let\par\SB@printEOL% \let\#\SB@hash% \let\&\SB@amp% \catcode`|9 % \catcode`*9 % \catcode`^9 % \def\[##1]{}% \resettitles% \immediate\write\SB@txtout{\thesongnum. \songtitle}% \nexttitle% \foreachtitle{\immediate\write\SB@txtout{(\songtitle)}}% \ifx\songauthors\@empty\else% \immediate\write\SB@txtout{\songauthors}% \fi% \ifx\SB@rawrefs\@empty\else% \immediate\write\SB@txtout{\SB@rawrefs}% \fi% \immediate\write\SB@txtout{}% \SB@doEOLfalse% \obeylines% } \renewcommand\SB@endsong{% \SB@doEOLtrue% \immediate\write\SB@txtout{\songcopyright\space% \songlicense\SB@printEOL}% \endgroup% \SB@insongfalse% \stepcounter{songnum}% } \def\SB@parsesrefs#1{\def\songrefs{#1}} \long\def\beginverse#1#2\endverse{% \SB@doEOLtrue\begingroup% \def\textnote##1{##1}% \def\SB@temp{#1}% \def\SB@star{*}% \ifx\SB@temp\SB@star% \immediate\write\SB@txtout{\@gobble#2}% \else% \immediate\write\SB@txtout{#2}% \fi% \endgroup\SB@doEOLfalse} \long\def\beginchorus#1\endchorus{% \SB@doEOLtrue\begingroup% \def\textnote##1{##1}% \immediate\write\SB@txtout{Chorus:#1}% \endgroup\SB@doEOLfalse} \long\def\beginscripture#1\endscripture{} \def\musicnote#1{} \def\textnote#1{% \SB@doEOLtrue% \immediate\write\SB@txtout{#1\SB@printEOL}% \SB@doEOLfalse} \def\brk{} \def\rep#1{(x#1)} \def\echo#1{(#1)} \def\mbar#1#2{} \def\lrep{} \def\rrep{} \def\nolyrics{} \renewcommand\memorize[1][]{} \renewcommand\replay[1][]{} \fi \endinput %% %% End of file `songs.sty'.