%% %% 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) 2008 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} [2008/03/27 v2.6 Songs package] \newif\ifSB@etex \ifx\eTeXversion\undefined\else \ifx\eTeXversion\relax\else \SB@etextrue \IfFileExists{etex.sty}{\RequirePackage{etex}}{} \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 \newcommand\SB@temp{} \newcommand\SB@tempii{} \newcommand\SB@tempiii{} \newcommand\SB@tempiv{} \newcommand\SB@tempv{} \newdimen\SB@dimen \newdimen\SB@dimenii \newdimen\SB@dimeniii \newdimen\SB@dimeniv \newdimen\SB@dimenv \newbox\SB@box \newbox\SB@boxii \newbox\SB@boxiii \newtoks\SB@toks \newcount\SB@cnt \newcount\SB@cntii \newskip\SB@skip \RequirePackage{keyval} \newcommand\lyricfont{\normalfont\normalsize} \newcommand\stitlefont{% \ifslides\sffamily\Huge\else\sffamily\slshape\Large\fi% } \newcommand\versefont{} \newcommand\chorusfont{} \newcommand\notefont{} \newcommand\scripturefont{% \usefont{OT1}{pzc}{mb}{it}% \shiftdblquotes{-1.1\p@}\z@{-2\p@}\z@% } \newcommand\printscrcite[1]{{\sffamily\small#1}} \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% } \newcommand\songnumstyle[1]{\arabic{#1}} \newcommand\versenumstyle[1]{\arabic{#1}} \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{} \newskip\versesep \versesep123456789sp\relax \newskip\baselineadj \baselineadj\z@skip \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@ \newcount\vvpenalty\vvpenalty-100 \newcount\ccpenalty\ccpenalty-100 \newcount\vcpenalty\vcpenalty-100 \newcount\cvpenalty\cvpenalty-100 \newcount\spenalty\spenalty0 \newcommand\songmark{} \newcommand\versemark{} \newcommand\chorusmark{} \newcommand\extendprelude{\showrefs\showauthors} \newcommand\extendpostlude{\songcopyright\ \songlicense\unskip} \newlength\colminheight \setlength\colminheight{123456789sp} \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% \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{nopdfindex}{\pdfindexfalse} \DeclareOption{noshading}{\SB@colorboxesfalse} \DeclareOption{noindexes}{\indexesoff} \newcommand\indexeson{% \ifSB@preamble% \SB@genindexestrue% \else% \ifSB@genindexes\else\SB@warnigen\fi% \fi% \songindexestrue% } \newcommand\indexesoff{% \ifSB@preamble\SB@genindexesfalse\fi% \songindexesfalse% } \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% \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% \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<\@ne\SB@errcol\else% \ifnum\SB@cnt=\SB@numcols\else% \ifSB@preamble\else\SB@clearpage\fi% \fi% \SB@toks{}% \SB@cntii0 % \loop% \expandafter\SB@alloccol\csname SB@cbox\the\SB@cntii\endcsname% \advance\SB@cntii\@ne% \ifnum\SB@cntii<\SB@cnt\repeat% \expandafter\def\expandafter\SB@forallcols% \expandafter##\expandafter1\expandafter{\the\SB@toks}% \SB@setcbox% \SB@numcols\SB@cnt% \SB@colwidth-\columnsep% \multiply\SB@colwidth\SB@numcols% \advance\SB@colwidth\columnsep% \advance\SB@colwidth\textwidth% \divide\SB@colwidth\SB@numcols% \fi% } \newcommand\SB@alloccol[1]{% \ifx#1\undefined\newbox#1\else\ifx#1\relax\newbox#1\fi\fi% \SB@toks\expandafter{\the\SB@toks##1#1}% } \newcommand\onesongcolumn{\songcolumns\@ne} \newcommand\twosongcolumns{\songcolumns\tw@} \newcommand\songlist{} \newcommand\includeonlysongs[1]{% \ifSB@songsenv\SB@errpl\else% \partiallisttrue% \renewcommand\songlist{#1}% \fi% } \newcommand\noversenumbers{% \renewcommand\printversenum[1]{}% \setlength\versenumwidth\z@% } \ifSB@etex \newcommand\repchoruses{\repchorustrue} \else \newcommand\repchoruses{\SB@erretex} \fi \newcommand\norepchoruses{\repchorusfalse} \newcommand\sepverses{% \vvpenalty-\@M% \ccpenalty-100 % \vcpenalty\vvpenalty% \cvpenalty\vvpenalty% } \AtBeginDocument{ \ifchorded \SB@maxcoldiff.8in \else \SB@maxcoldiff2in \fi \ifdim\colminheight=123456789sp \ifchorded \setlength\colminheight\z@ \else\ifslides \setlength\colminheight\z@ \else \setlength\colminheight\textheight \fi\fi \fi \SB@setversesep \songcolumns\SB@numcols \SB@preamblefalse } \newbox\SB@songbox \newcount\SB@numcols\SB@numcols\tw@ \newcount\SB@colnum \newcommand\SB@colbox{} \newcommand\SB@forallcols[1]{} \newdimen\SB@maxcoldiff \newcommand\SB@maxmin[3]{\ifdim#1#2#3#1#3\fi} \newcommand\SB@emitpage{% \unvbox\voidb@x% \SB@dimenii\textheight% \SB@dimeniii\colminheight% \ifinner\else% \kern\z@% \advance\SB@dimenii-\pagetotal% \advance\SB@dimeniii-\pagetotal% \fi% \SB@maxmin\SB@dimeniii<\z@% \SB@forallcols\SB@epfindmax% \SB@maxmin\SB@dimeniii>\SB@dimenii% \let\SB@temp\@gobble% \hbox{\SB@forallcols\SB@epmakecol}% \vfil\break% \ifinner\else\vskip\vsize\relax\fi% } \newcommand\SB@epfindmax[1]{% \ifvoid#1\else% \global\setbox#1\vbox{\unvbox#1}% \fi% \SB@dimen\ht#1% \ifdim\dp#1>\maxdepth% \advance\SB@dimen\dp#1% \advance\SB@dimen-\maxdepth% \fi% \SB@maxmin\SB@dimeniii<\SB@dimen% } \newcommand\SB@epmakecol[1]{% \SB@dimen\SB@dimeniii% \advance\SB@dimeniii-\SB@maxcoldiff% \ifdim\ht#1<\SB@dimeniii\SB@dimen\ht#1\fi% \advance\SB@dimeniii2\SB@maxcoldiff% \ifdim\ht#1>\SB@dimeniii\SB@dimen\ht#1\fi% \advance\SB@dimeniii-\SB@maxcoldiff% \SB@maxmin\SB@dimen>\SB@dimenii% \ifdim\dp#1>\maxdepth% \advance\SB@dimen-\dp#1% \advance\SB@dimen\maxdepth% \fi% \SB@dimeniv\SB@dimenii% \advance\SB@dimeniv-\SB@dimen% \SB@temp\columnsep\let\SB@temp\hskip% \ifvoid#1\hskip\SB@colwidth\else% \raise\SB@dimeniv\vbox to\SB@dimen{\unvbox#1}% \fi% } \newcommand\SB@setcbox{% \global\expandafter\let\expandafter\SB@colbox% \csname SB@cbox\the\SB@colnum\endcsname% } \newcommand\SB@clearpage{% \SB@testfalse% \SB@forallcols\SB@cpnonvoid% \ifSB@test\SB@emitpage\fi% \ifinner\else\ifdim\pagetotal>\z@% \vskip\z@skip% \nointerlineskip% \null% \nointerlineskip% \fi\fi% \global\SB@colnum0 % \SB@setcbox% } \newcommand\SB@cpnonvoid[1]{\ifvoid#1\else\SB@testtrue\fi} \newcommand\SB@nextcol{% \ifnum\SB@numcols=\@ne% \SB@clearpage% \else% \global\advance\SB@colnum\@ne% \ifnum\SB@colnum=\SB@numcols% \SB@emitpage% \global\SB@colnum0 % \fi% \SB@setcbox% \fi% } \newcommand\SB@selectcol{% \begingroup% \SB@cnt\vbadness% \vbadness\@M\vfuzz\maxdimen% \splitmaxdepth\maxdepth\splittopskip\topskip% \SB@dimen\textheight% \ifinner\else\advance\SB@dimen-\pagetotal\fi% \setbox\SB@box\vbox{\unvcopy\SB@colbox\unvcopy\SB@songbox\vfil}% \setbox\SB@boxii\vsplit\SB@box to\SB@dimen% \ifvoid\SB@box% \ifnum\badness>\SB@cnt\SB@trynxtcol\fi% \else% \SB@trynxtcol% \fi% \endgroup% } \newcommand\SB@trynxtcol{% \SB@cntii\SB@colnum% \advance\SB@cntii\@ne% \SB@dimenii\ifnum\SB@cntii=\SB@numcols% \textheight\else\SB@dimen% \fi% \setbox\SB@box\vbox{\unvcopy\SB@songbox\vfil}% \setbox\SB@boxii\vsplit\SB@box to\SB@dimenii% \ifvoid\SB@box% \ifnum\badness>\SB@cnt\SB@tryspan\else\SB@nextcol\fi% \else% \SB@tryspan% \fi% } \newcommand\SB@tryspan{% \setbox\SB@box\vbox{\unvcopy\SB@colbox\unvcopy\SB@songbox\vfil}% \setbox\SB@boxii\vsplit\SB@box to\SB@dimen% \ifnum\badness>\SB@cnt\SB@trynxtpg\else% \SB@testfalse% \SB@cntii\SB@colnum% \loop% \advance\SB@cntii\@ne% \ifnum\SB@cntii<\SB@numcols% \setbox\SB@boxii\vsplit\SB@box to\SB@dimenii% \ifnum\badness>\SB@cnt\SB@testtrue\fi% \repeat% \ifvoid\SB@box% \ifSB@test\SB@trynxtpg\fi% \else% \SB@trynxtpg% \fi% \fi% } \newcommand\SB@trynxtpg{% \setbox\SB@box\vbox{\unvcopy\SB@songbox\vfil}% \SB@forallcols\SB@tnpsplit% \ifvoid\SB@box% \loop\SB@nextcol\ifnum\SB@colnum>0 \repeat% \else% \SB@trydblpg% \fi% } \newcommand\SB@tnpsplit[1]{% \setbox\SB@boxii\vsplit\SB@box to\textheight% } \newcommand\SB@trydblpg{% \if@twoside% \SB@forallcols\SB@tnpsplit% \ifvoid\SB@box% \loop\SB@nextcol\ifnum\SB@colnum>0 \repeat% \ifodd\count0 % \loop\SB@nextcol\ifnum\SB@colnum>0 \repeat% \fi% \fi% \fi% } \newcommand\SB@dosubmitsong{% \SB@selectcol% \begingroup% \splitmaxdepth\maxdepth\splittopskip\topskip% \setbox\SB@box\vbox{% \unvbox\SB@colbox% \unvbox\SB@songbox% \vfil% }% \loop% \SB@dimen\textheight% \ifinner\else\advance\SB@dimen-\pagetotal\fi% \setbox\SB@boxii\copy\SB@box% \global\setbox\SB@colbox\vsplit\SB@box to\SB@dimen% \edef\SB@temp{\splitfirstmark}% \ifx\SB@temp\@empty\else\mark{\splitfirstmark}\fi% \edef\SB@temp{\splitbotmark}% \ifx\SB@temp\@empty\else\mark{\splitbotmark}\fi% \ifvoid\SB@box\else% \SB@nextcol% \ifrepchorus\ifvoid\SB@chorusbox\else\SB@insertchorus\fi\fi% \repeat% \global\setbox\SB@colbox\vbox{\unvbox\SB@boxii\unskip}% \endgroup% } \newcommand\SB@submitsong{% \ifSB@songsenv% \ifpartiallist% \edef\SB@tempii{\songnumstyle{songnum}}% \@for\SB@temp:=\songlist\do{% \ifx\SB@temp\SB@tempii% \expandafter\newbox\csname songbox@\SB@temp\endcsname% \global\expandafter\setbox\csname songbox@\SB@temp\endcsname% \box\SB@songbox% \ifrepchorus\ifvoid\SB@chorusbox\else% \expandafter\newbox\csname chbox@\SB@temp\endcsname% \global\expandafter\setbox\csname chbox@\SB@temp\endcsname% \box\SB@chorusbox% \fi\fi% \fi% }% \setbox\SB@songbox\box\voidb@x% \setbox\SB@chorusbox\box\voidb@x% \else% \SB@dosubmitsong% \fi% \else% \unvbox\SB@songbox% \fi% } \newcommand\SB@finalizesonglist{% \ifpartiallist% \@for\SB@temp:=\songlist\do{% \expandafter\ifx\csname songbox@\SB@temp\endcsname\relax\else% \setbox\SB@songbox% \expandafter\box\csname songbox@\SB@temp\endcsname% \expandafter\ifx\csname chbox@\SB@temp\endcsname\relax% \repchorusfalse% \else% \repchorustrue% \setbox\SB@chorusbox% \expandafter\box\csname chbox@\SB@temp\endcsname% \fi% \SB@dosubmitsong% \fi% }% \fi% } \newcommand\SB@insertchorus{{% \vbadness\@M\vfuzz\maxdimen% \setbox\SB@boxii\copy\SB@box% \setbox\SB@boxii\vsplit\SB@boxii 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@boxii\copy\SB@box% \setbox\SB@boxii\vsplit\SB@boxii 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@boxii\vsplit\SB@box to\SB@dimenii% \global\setbox\SB@box\vbox{% \unvbox\SB@boxii\unskip% \SB@inversefalse\SB@prevversetrue\SB@stanzabreak% \SB@putbox\unvcopy\SB@chorusbox% \SB@inversetrue\SB@prevversefalse\SB@stanzabreak% \unvbox\SB@box% }% \else\ifx\SB@temp\SB@lastcmark% \global\setbox\SB@box\vbox{% \unvbox\SB@box% \unskip% \ifnum\spenalty<-9999\unpenalty\unskip\fi% \ifdim\sbarheight>\z@% \unskip\unpenalty% \setbox\SB@boxii\lastbox% \unskip\unpenalty% \fi% \setbox\SB@boxii\lastbox% \unskip\unskip% \SB@inversefalse\SB@prevversetrue\SB@stanzabreak% \marks\SB@nocmarkclass{\SB@nocmark}% \unvcopy\SB@chorusbox% \vskip\versesep\vskip2\p@\@plus4\p@% \nointerlineskip\box\SB@boxii% \ifdim\sbarheight>\z@% \nobreak\vskip2\p@\@plus\p@% \hrule\@height\sbarheight\@width\SB@colwidth% \vskip-\p@% \fi% \ifnum\spenalty<-9999\vfil\break\fi% \vfil% }% \fi\fi% \fi% }} \newcommand\nextcol{\ifpartiallist\else\SB@nextcol\fi} \newcounter{songnum} \newcounter{versenum} \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#4{#1}\global#3{\\#2}} \newcommand\SB@emptylist{} \def\SB@emptylist{\\} \newcommand\SB@ifempty[3]{% \edef\SB@temp{\the#1}% \ifx\SB@temp\SB@emptylist#2\else#3\fi% } \newtoks\SB@titlelist \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@inscripture\SB@inscripturefalse \newif\ifSB@inverse\SB@inversefalse \newif\ifSB@inchorus\SB@inchorusfalse \newcommand\SB@rawrefs{} \newcommand\songauthors{} \newcommand\songcopyright{} \newcommand\songlicense{} \newcommand\songrefs{% \expandafter\SB@parsesrefs\expandafter{\SB@rawrefs}% } \newcommand\SB@prevsong{0} \newcommand\setlicense{\gdef\songlicense} \newcommand\SB@clearbskeys{} \newcommand\newsongkey[2]{% \expandafter\gdef\expandafter\SB@clearbskeys\expandafter% {\SB@clearbskeys#2}% \define@key{beginsong}{#1}% } \newsongkey{sr}{\def\SB@rawrefs{}}{\def\SB@rawrefs{#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}} \newcommand\beginsong[1]{% \ifSB@insong% \SB@errboo% \ifSB@inverse\endverse\fi% \ifSB@inchorus\endchorus\fi% \endsong% \fi% \ifSB@inscripture% \SB@errbor\endscripture% \fi% \SB@insongtrue% \SB@parsetitles{#1}% \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% \resettitles% \SB@addtoindexes\songtitle\SB@rawrefs\songauthors% \nexttitle% \foreachtitle{\expandafter\SB@addtotitles\expandafter{\songtitle}}% \resettitles% \setbox\SB@songbox\vbox\bgroup% \hsize\SB@colwidth% \leftskip\z@skip\rightskip\z@skip% \parfillskip\@flushglue\parskip\z@skip% \SB@raggedright% \global\SB@transposefactor0 % \global\SB@cr@{\\}% \setcounter{versenum}{1}% \SB@prevversetrue% \meter44% \lyricfont% \SB@setbaselineskip% } \def\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% \egroup% \setbox\SB@songbox\vbox{% \songmark% \hsize\SB@colwidth% \leftskip\z@skip\rightskip\z@skip% \parfillskip\@flushglue\parskip\z@skip\parindent\z@% \ifdim\sbarheight>\z@% \hrule\@height\sbarheight\@width\SB@colwidth% \nobreak\vskip5\p@% \fi% \ifpdfindex\begingroup% \ifx\pdfbookmark\undefined\else% \ifx\pdfbookmark\relax\else% \resettitles% \pdfbookmark[\ifnum\arabic{section}=0 1\else2\fi]% {\songnumstyle{songnum}. \songtitle}% {song\arabic{SB@songsnum}-\songnumstyle{songnum}}% \fi\fi% \endgroup\fi% \vbox{\makeprelude}% \nobreak\vskip\SB@skip% \vskip2\p@\@plus4\p@% \unvbox\SB@songbox% \nobreak\vskip\SB@skip% \vskip2\p@\@plus4\p@% \nointerlineskip% \vbox{\makepostlude}% \ifdim\sbarheight>\z@% \nobreak\vskip2\p@\@plus\p@% \nointerlineskip% \hbox{\vrule\@height\sbarheight\@width\SB@colwidth}% \nobreak% \vskip-\p@\relax% \fi% \ifnum\spenalty<-9999\vfil\break\fi% }% \SB@insongfalse% \SB@submitsong% \edef\SB@prevsong{\songnumstyle{songnum}}% \stepcounter{songnum}% \else% \ifSB@inscripture% \SB@erreor\endscripture% \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% \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% \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\songtitle\hfil% }% \vskip5\p@% \hbox to\hsize{% \hfil% \vbox{% \divide\hsize\tw@\parskip\p@\relax% \centering\small\extendprelude% }% \hfil% }% \else% \setbox\SB@boxii\hbox{\SB@colorbox{% \hbox to\songnumwidth{% \printsongnum{\songnumstyle{songnum}}\hfil% }% }}% \setbox\SB@box\vbox{% \hsize\SB@colwidth% \advance\hsize-\wd\SB@boxii% \advance\hsize-3\p@% \SB@raggedright\offinterlineskip\lineskip\p@% {\stitlefont% \songtitle\par% \nexttitle% \foreachtitle{(\songtitle)\par}}% \ifdim\prevdepth=\z@\kern\p@\fi% \parskip\p@\relax\tiny% \extendprelude% \kern\z@% }% \hbox{% \ifdim\ht\SB@boxii>\ht\SB@box% \box\SB@boxii% \kern3\p@% \vtop{\box\SB@box}% \else% \SB@colorbox{\vbox to\ht\SB@box{% \hbox to\songnumwidth{% \printsongnum{\songnumstyle{songnum}}\hfil% }\vfil% }}% \kern3\p@% \box\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\normalsize\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% \let\SB@dothis\SB@pthead% \SB@ptstart#1\SB@endparse% \endgroup% } \newcommand\SB@ptstart{\futurelet\SB@next\SB@dothis} \newcommand\SB@pthead{% \ifcat\noexpand\SB@next\noexpand\@sptoken% \expandafter\SB@ptsp% \else% \SB@toks{}% \let\SB@dothis\SB@ptmain% \expandafter\SB@ptmain% \fi% } \newcommand\SB@ptmain{% \ifcat\noexpand\SB@next\noexpand\@sptoken% \let\SB@donext\SB@ptsp% \else\ifcat\noexpand\SB@next\noexpand\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{}% \let\SB@dothis\SB@pthead% \fi% \let\SB@donext\SB@ptstep% \fi\fi\fi% \SB@donext% } \newcommand\SB@ptstep[1]{% \global\SB@titlelist\expandafter\expandafter\expandafter{% \expandafter\the\expandafter\SB@titlelist\the\SB@toks#1}% \SB@toks{}% \SB@ptstart% } \newcommand\SB@ptbg[1]{\SB@ptstep{{#1}}} \newcommand\SB@ptsp{ \SB@appendsp\SB@toks% \afterassignment\SB@ptstart% \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% \let\SB@temp\relax% \let\SB@tempii\relax% \afterassignment\SB@prloop% \let\SB@tempiii= #1\SB@endparse\relax\relax% \endgroup% } \newcommand\SB@prloop{\futurelet\SB@next\SB@prstep} \newcommand\SB@testdigit[1]{% \SB@testfalse% \ifx0#1\SB@testtrue\fi% \ifx1#1\SB@testtrue\fi% \ifx2#1\SB@testtrue\fi% \ifx3#1\SB@testtrue\fi% \ifx4#1\SB@testtrue\fi% \ifx5#1\SB@testtrue\fi% \ifx6#1\SB@testtrue\fi% \ifx7#1\SB@testtrue\fi% \ifx8#1\SB@testtrue\fi% \ifx9#1\SB@testtrue\fi% } \newcommand\SB@prstep{% \ifcat\noexpand\SB@tempii\noexpand\@sptoken% \ifcat\noexpand\SB@tempiii A% \ifcat\noexpand\SB@temp A~% \else\ifx\SB@temp;% \penalty-5\hskip.5em\relax% \else% \SB@testdigit\SB@temp% \ifSB@test\nobreak\ \else\SB@tempii\fi% \fi\fi% \else\ifcat\noexpand\SB@temp A% \SB@testdigit\SB@tempiii% \ifSB@test\nobreak\ \else\SB@tempii\fi% \else\ifx\SB@temp;% \ifcat\noexpand\SB@next\noexpand\@sptoken% \SB@testdigit\SB@tempiii% \ifSB@test\penalty-5\hskip.5em\relax\else\SB@tempii\fi% \else% \SB@tempii% \fi% \else% \SB@tempii% \fi\fi\fi% \else\ifx\SB@tempii-% \ifx\SB@temp-\SB@tempii\else% \ifx\SB@tempiii-\SB@tempii\else--\fi% \fi% \else\ifx\SB@temp,% \SB@testdigit\SB@tempii% \ifSB@test\nobreak\thinspace\fi% \SB@tempii% \else% \SB@tempii% \fi\fi\fi% \let\SB@temp= \SB@tempii% \let\SB@tempii= \SB@tempiii% \ifx\SB@tempiii\SB@endparse\else% \afterassignment\SB@prloop% \fi% \let\SB@tempiii= % } \newcommand\brk{% \ifhmode\penalty-5 % \else\ifSB@inchorus% \ifdim\cbarwidth=\z@% \ifrepchorus\marks\SB@cmarkclass{}\fi% \SB@breakpoint{-50}% \else% \egroup% \ifrepchorus\ifSB@gotchorus\else% \global\setbox\SB@chorusbox\vbox{% \unvbox\SB@chorusbox% \SB@chorusbar\SB@box% \unvcopy\SB@box% \SB@breakpoint{-50}% }% \fi\fi% \SB@chorusbar\SB@box% \unvbox\SB@box% \SB@breakpoint{-50}% \SB@chorustopfalse% \SB@@beginchorus% \fi% \else% \SB@breakpoint{-50}% \fi\fi% } \newcommand\rep[1]{% (\raise.25ex\hbox{% \fontencoding{OMS}\fontfamily{cmsy}\selectfont\char\tw@% }#1)% } \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]{% \nobreak% \ifdim\colminheight=\z@\vfil\else% \SB@dimen\textheight% \advance\SB@dimen-\colminheight% \vskip\z@\@plus\SB@dimen% \fi% \penalty#1% \ifdim\colminheight=\z@\vfilneg\else% \vskip\z@\@plus-\SB@dimen% \fi% } \newcommand\SB@putbox[2]{% \begingroup% \SB@dimen\dp#2% #1#2% \setbox\SB@box\hbox{\lyricfont 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@outerpar% \obeylines% \let\par\SB@par% \let\@par\SB@@par% } \newcommand\SB@par{% \endgraf% \ifSB@inchorus\ifdim\cbarwidth>\z@\nobreak\fi\fi% } \newcommand\SB@@par{\let\par\SB@par\par} \newcommand\SB@outerpar{} \AtEndOfPackage{% \SB@outer\expandafter\def\expandafter\SB@outerpar% \expandafter{\SB@par}% } \newcommand\SB@makecond[1]{% \SB@@makecond\SB@condyes{#1}{only}% \SB@@makecond\SB@condno{#1}{never}% } \newcommand\SB@@makecond[3]{% \@ifundefined{begin#2#3}{% \expandafter\edef\csname begin#2#3\endcsname{% \noexpand#1% \expandafter\noexpand\csname if#2\endcsname% \expandafter\noexpand\csname begin#2#3\endcsname% \expandafter\noexpand\csname end#2#3\endcsname% }% }{}% \@ifundefined{end#2#3}{% \expandafter\let\csname end#2#3\endcsname\@empty% }{}% } \SB@makecond{chorded} \SB@makecond{lyric} \SB@makecond{slides} \SB@makecond{partiallist} \SB@makecond{songindexes} \SB@makecond{measures} \SB@makecond{pdfindex} \SB@makecond{rawtext} \SB@makecond{transcapos} \SB@makecond{vnumbered} \newcommand\SB@condyes[1]{% #1\expandafter\@gobbletwo\else\expandafter\SB@iffalse\fi% } \newcommand\SB@condno[1]{% #1\expandafter\SB@iffalse\else\expandafter\@gobbletwo\fi% } \newcommand\SB@iffalse[2]{% \begingroup% \let#1\iffalse% \let#2\fi% \catcode`\^^M9 % \expandafter\endgroup\iffalse% } \newdimen\SB@parindent \newcommand\SB@everypar{} \newcommand\SB@raggedright{% \SB@parindent\parindent% \raggedright% \parindent\SB@parindent% } \newif\ifvnumbered \newif\ifSB@prevverse \newcommand\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% \begingroup% \SB@loadactives% \@ifstar{\global\vnumberedfalse\SB@@beginverse}% {\global\vnumberedtrue\SB@@beginverse}% } \newcommand\SB@@beginverse{% \endgroup% \SB@inversetrue% \SB@stanzabreak% \versemark\nobreak% \global\SB@stanzatrue% \SB@ifempty\SB@cr@\memorize{\replay[]}% \setbox\SB@box\vbox\bgroup% \ifvnumbered% \def\SB@everypar{% \setbox\SB@box\hbox{% \printversenum{\versenumstyle{versenum}}% }% \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{}}% \interlinepenalty\@M% \versefont\versejustify% \SB@loadactives% \SB@obeylines% \penalty12345 % \everyverse\relax% } \def\endverse{% \ifSB@insong% \ifSB@inverse% \egroup% \SB@putbox\unvbox\SB@box% \SB@inversefalse% \ifvnumbered\stepcounter{versenum}\fi% \SB@prevversetrue% \else\ifSB@inchorus% \SB@errevc\endchorus% \else% \SB@errevo% \fi\fi% \else% \SB@errevt% \fi% } \newif\ifSB@chorustop \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} \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% \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% \interlinepenalty\@M% \ifchorded% \def\SB@everypar{% \vrule\@height\baselineskip\@width\z@\@depth\z@% \gdef\SB@everypar{}% }% \everypar{\SB@everypar\everypar{}}% \fi% \chorusfont\chorusjustify% \SB@loadactives% \SB@obeylines% \penalty12345 % } \def\endchorus{% \ifSB@insong% \ifSB@inchorus% \egroup% \SB@inchorusfalse% \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% \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=0 % \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% } \newbox\SB@srbox \newcommand\beginscripture[1]{% \ifSB@insong% \SB@errbro% \ifSB@inverse\endverse\fi% \ifSB@inchorus\endchorus\fi% \endsong% \fi% \ifSB@inscripture% \SB@errbrr\endscripture% \fi% \SB@inscripturetrue% \ifSB@omitscrip% \setbox\SB@box\vbox\bgroup% \else% \setbox\SB@srbox\hbox{\printscrcite{\SB@parsesrefs{#1}}}% \setbox\SB@songbox\vbox\bgroup% \hsize\SB@colwidth% \hrule\@height\p@\@width\SB@colwidth% \nobreak\vskip5\p@% \SB@parindent\parindent\parindent\z@% \parskip\z@skip\parfillskip\@flushglue% \leftskip\SB@parindent\rightskip\SB@parindent\relax% \scripturefont% \baselineskip\f@size\p@\@plus\p@\relax% \advance\baselineskip\p@\relax% \emergencystretch.3em% \fi% } \newcommand\scitehere{% \ifSB@inscripture% \ifvoid\SB@srbox\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@srbox\kern-\SB@parindent% {\parfillskip\z@\finalhyphendemerits2000\par}% \fi% \else% \SB@errscrip\scitehere% \fi% } \def\endscripture{% \ifSB@inscripture \ifSB@omitscrip% \egroup% \setbox\SB@box\box\voidb@x% \else% \scitehere% \ifhmode\par\fi% \nobreak\kern-4.5\p@% \hbox{\vrule\@height\p@\@width\SB@colwidth}% \kern-\p@% \egroup% \ifpartiallist\else% \SB@submitsong% \fi% \fi% \SB@inscripturefalse% \else% \ifSB@insong% \SB@errero% \ifSB@inverse\endverse\fi% \ifSB@inchorus\endchorus\fi% \endsong% \else% \SB@errert% \fi% \fi% } \newcommand\Acolon{\SB@colon2\Acolon} \newcommand\Bcolon{\SB@colon1\Bcolon} \newcommand\SB@colon[2]{% \ifSB@inscripture\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@inscripture\else% \SB@errscrip\strophe\beginscripture{Unknown}% \fi% \vskip.9ex\@plus.45ex\@minus.68ex\relax% } \newcommand\SB@scripdent[2]{% \ifSB@inscripture\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{}% } } \newcommand\SB@boxup[1]{% \setbox\SB@box\hbox{\notefont#1}% \SB@dimen\wd\SB@box% \advance\SB@dimen6\p@% \advance\SB@dimen\leftskip% \advance\SB@dimen\rightskip% \ifdim\SB@dimen>\SB@colwidth% \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{\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[1]{% \begingroup% \ifdim\fontdimen\@ne\font>\z@\upshape\else\slshape\fi% \endlinechar-1 % \scantokens{(#1)}% \endgroup% } \else \newcommand\echo{% \begingroup% \ifdim\fontdimen\@ne\font>\z@\upshape\else\slshape\fi% \afterassignment\SB@echo% \setbox\SB@box\hbox% } \newcommand\SB@echo{\aftergroup\SB@@echo(} \newcommand\SB@@echo{\unhbox\SB@box)\endgroup} \fi \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=0 % \ifSB@convertnotes% \SB@dotranspose{#1}% \the\SB@toks% \else% #1% \fi% \else% \ifSB@convertnotes% {\SB@transposefactor0 % \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\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\noexpand\@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\gtab% \let\SB@donext\SB@trtab% \else\ifx\SB@next\SB@trend \let\SB@donext\relax% \else% \SB@toks\expandafter{\the\SB@toks#1}% \fi\fi\fi% \SB@donext% } \newcommand\SB@trnote{% \ifcat\noexpand\SB@next A% \let\SB@donext\SB@trnotestep% \else\ifnum\SB@transposefactor=0 % \SB@cnt0 % \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@cnt0 % \let\SB@donext\SB@trtrans% \fi\fi\fi\fi% \SB@donext% } \newcommand\SB@trnotestep[1]{% \ifnum\uccode`#1=`#1% \expandafter\def\expandafter\SB@temp\expandafter{\SB@temp#1}% \expandafter\SB@trscan% \else% \SB@cnt0 % \expandafter\SB@trtrans\expandafter#1% \fi% } \newcommand\SB@tracc[1]{\futurelet\SB@next\SB@trtrans} \newcommand\SB@trtrans{% \advance\SB@cnt% \ifx\SB@temp\notenameA0 % \else\ifx\SB@temp\notenameB2 % \else\ifx\SB@temp\notenameC3 % \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<0 \advance\SB@cnt12 \fi% \ifnum\SB@cnt>11 \advance\SB@cnt-12 \fi% \ifSB@needkey\ifnum\SB@transposefactor=0 \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@trtab{\expandafter\SB@trscan\@firstoftwo} \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% \setbox\SB@box\hbox{\tiny\sffamily{#1}}% \setbox\SB@boxii\hbox{\tiny\sffamily{#2}}% \ifdim\wd\SB@box>\wd\SB@boxii% \SB@dimen\wd\SB@box\relax% \else% \SB@dimen\wd\SB@boxii\relax% \fi% \ifdim\SB@dimen<.5\p@% \SB@dimen.5\p@% \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% \ifvmode\leavevmode\fi% \vbox{% \mark{\SB@measuremark}% \hbox to\SB@dimen{% \hfil% \box\SB@box% \hfil% }% \nointerlineskip% \hbox to\SB@dimen{% \hfil% \box\SB@boxii% \hfil% }% \nointerlineskip% \hbox to\SB@dimen{% \hfil% \vrule\@width.5\p@\@height\SB@dimenii% \hfil% }% }% } \newcommand\mbar{\SB@mbar} \newcommand\measurebar{% \mbar\SB@metertop\SB@meterbot% \meter{}{}% } \newif\ifSB@wordends \newif\ifSB@brokenword \newtoks\SB@lyric \newcount\SB@numhyps \newtoks\SB@lyricnohyp \newbox\SB@lyricbox \newbox\SB@chordbox \newcommand\SB@chbstok{} \newcommand\SB@setchord{} { \catcode`^\active \catcode`!7 \gdef\SB@setchord#1{% \SB@gettabindtrue\SB@nohattrue% \setbox\SB@chordbox\hbox{\begingroup% \ifSB@trackch% \def\SB@activehat{\ifmmode!\else\global\SB@nohatfalse\fi}% \else% \def\SB@activehat{% \ifmmode!\else\SB@lop\SB@ctail\SB@toks\the\SB@toks\fi% }% \fi% \let^\SB@activehat% \printchord{\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{} \edef\SB@outertest#1{% \noexpand\SB@@outertest#1% \string\outer% \noexpand\SB@@outertest% } \newcommand\SB@@outertest{} \expandafter\def\expandafter\SB@@outertest% \expandafter#\expandafter1\string\outer#2\SB@@outertest{% \def\SB@temp{#2}% \ifx\SB@temp\@empty\else\SB@testtrue\fi% } \newcommand\SB@UTFtest{} \edef\SB@UTFtest#1{% \noexpand\SB@UTFtester#1% \string\UTFviii@zero@octets% \noexpand\SB@UTFtester% } \begingroup \escapechar\m@ne \xdef\SB@two{\string\two} \xdef\SB@three{\string\three} \xdef\SB@four{\string\four} \xdef\SB@temp{\string\@octets} \endgroup \edef\SB@temp{##1\string\UTFviii@##2\SB@temp##3} \expandafter\def\expandafter\SB@UTFtester\SB@temp\SB@UTFtester{% \def\SB@temp{#2}% \ifx\SB@temp\SB@two% \SB@cnt\tw@% \else\ifx\SB@temp\SB@three% \SB@cnt\thr@@% \else\ifx\SB@temp\SB@four% \SB@cnt4 % \else% \SB@cnt0 % \fi\fi\fi% } \newcommand\SB@declare[3]{% \afterassignment\iffalse\let\SB@next= #3\relax\fi% \expandafter\SB@UTFtest\expandafter{\meaning\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#3% \else\ifcat\noexpand#3A% \SB@addDtest\SB@lettertests#1#2#3% \else% \SB@addDtest\relax0#2#3% \fi\fi\fi% \or% \SB@addNtest\SB@macrotests#1#2#3% \else% \SB@addMtest\SB@multitests#1#2{#3}% \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@hyphtests{} \newcommand\SB@addtest[2]{% \expandafter\gdef\expandafter#1\expandafter{#1#2}% } \newcommand\SB@addDtest[4]{% \ifx0#2\else\SB@addtest#1{\ifx\SB@next#4#2\fi}\fi% \ifx0#3\else\SB@addtest\SB@hyphtests{\ifx\SB@next#4#3\fi}\fi% } \newcommand\SB@addNtest[4]{% \ifx0#2\else% \SB@addtest#1{% \edef\SB@temp{\string#4}\ifx\SB@temp\SB@nextname#2\fi% }% \fi% \ifx0#3\else% \SB@addtest\SB@hyphtests{% \edef\SB@temp{\string#4}\ifx\SB@temp\SB@nextname#3\fi% }% \fi% } \newcommand\SB@addMtest[4]{% \ifx0#2\else% \SB@addtest#1{\def\SB@temp{#4}\ifx\SB@next\SB@temp#2\fi}% \fi% \ifx0#3\else\SB@addtest\SB@hyphtests{% \def\SB@temp{#4}\ifx\SB@next\SB@temp#3\fi}% \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{% \begingroup% \catcode`##\active\catcode`&\active% \chordlocals% } \newcommand\SB@endcname{} \let\SB@endcname\endgroup \newcommand\SB@nbsp{} \def\SB@nbsp{\nobreakspace{}} \newcommand\SB@@chord{} \def\SB@@chord#1]{% \endgroup% \SB@setchord{#1}% \setbox\SB@lyricbox\hbox{\kern\SB@tabindent}% \global\SB@tabindent\z@% \SB@lyric{}% \SB@numhyps0 % \SB@spcinit% \let\SB@dothis\SB@chstart% \SB@chscan% } \newcommand\SB@spcinit{} \newcommand\MultiwordChords{% \def\SB@spcinit{% \let\SB@chdone\SB@chlyrdone% \def\SB@chimpspace{\let\SB@donext\SB@chdone}% \def\SB@chexpspace{\let\SB@donext\SB@chdone}% \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@chstart{% \ifx\SB@next`% \let\SB@donext\SB@chstep% \else\ifx\SB@next'% \let\SB@donext\SB@chstep% \else\ifx\SB@next"% \let\SB@donext\SB@chstep% \else% \the\SB@lyric% \SB@lyric{}% \let\SB@dothis\SB@chnorm% \SB@chnorm% \fi\fi\fi% } \newcommand\SB@chnorm{% \ifcat\noexpand\SB@next A% \SB@testtrue\SB@lettertests% \ifSB@test% \SB@chespace\let\SB@donext\SB@chstep% \else% \let\SB@donext\SB@chdone% \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\noexpand\@sptoken% \SB@chexpspace% \else\ifcat\noexpand\SB@next\noexpand\bgroup% \SB@chespace\let\SB@donext\SB@chbgroup% \else\ifcat\noexpand\SB@next\noexpand\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\let\SB@donext\SB@chstep% \else\ifcat\noexpand\SB@next.% \SB@testtrue\SB@othertests% \ifSB@test% \SB@chespace\let\SB@donext\SB@chstep% \else% \let\SB@donext\SB@chdone% \fi% \else% \SB@chespace\let\SB@donext\SB@chstep% \fi\fi\fi\fi\fi% } \newcommand\SB@chmacro{% \SB@testfalse% \expandafter\SB@outertest\expandafter{\meaning\SB@next}% \ifSB@test% \let\SB@donext\SB@chdone% \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% \let\SB@donext\SB@chdone% \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% \expandafter\SB@UTFtest\expandafter{\meaning\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% } \newcommand\SB@chothermac{% \SB@testfalse% \afterassignment\iffalse% \SB@cnt\expandafter`\SB@nextname x\fi% \ifnum\the\catcode\SB@cnt=0\else\SB@testtrue\fi% \SB@macrotests% \ifSB@test% \SB@chespace\let\SB@donext\SB@chstep% \else% \let\SB@donext\SB@chdone% \fi% } \newcommand\SB@chstep[1]{% \SB@lyric\expandafter{\the\SB@lyric#1}% \SB@chscan% } \newcommand\SB@chsteptwo[2]{\SB@chmulti{#1#2}} \newcommand\SB@chstepthree[3]{\SB@chmulti{#1#2#3}} \newcommand\SB@chstepfour[4]{\SB@chmulti{#1#2#3#4}} \newcommand\SB@chmulti[1]{% \def\SB@next{#1}% \let\SB@nextname\relax% \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% \let\SB@donext\SB@chstep% \else% \let\SB@donext\SB@chdone% \fi% } \newcommand\SB@chimpspace{\let\SB@donext\SB@chdone} \newcommand\SB@chexpspace{\let\SB@donext\SB@chdone} \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}% \def\SB@chimpspace{\let\SB@donext\SB@chstep}% \let\SB@chespace\SB@chendspace% \let\SB@chdone\SB@chspcdone% \else% \def\SB@chimpspace{\let\SB@donext\SB@chdone}% \def\SB@chexpspace{\let\SB@donext\SB@chdone}% \fi% } \newcommand\SB@chgetspace{% \SB@appendsp\SB@lyric% \let\SB@nextname\relax% \afterassignment\SB@chscan% \let\SB@next= } \newcommand\SB@chmbar{% \ifmeasures% \let\SB@donext\SB@chdone% \else% \SB@chespace\let\SB@donext\SB@chstep% \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@testfalse% \expandafter\SB@outertest\expandafter{\meaning\SB@next}% \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{#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\noexpand\@sptoken\SB@testtrue\fi% \ifcat\noexpand\SB@next.\SB@testtrue\fi% \ifx\SB@next\SB@outerpar\SB@testtrue\fi% \ifx\SB@next\egroup\SB@testtrue\fi% \SB@hyphtests% \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>0 % \ifnum\SB@numhyps>\@ne\relax% \SB@brokenwordfalse% \else% \SB@brokenwordtrue% \fi% \fi% \vbox{\baselineskip\f@size\p@\kern2\p@% \ifSB@brokenword% \global\setbox\SB@lyricbox\hbox{% \unhbox\SB@lyricbox% \SB@ligpre% }% \ifdim\wd\SB@lyricbox>\SB@dimen% \SB@dimen\wd\SB@lyricbox% \fi% \advance\SB@dimen.5em% \hbox to\SB@dimen{\unhbox\SB@chordbox\hfil}% \kern-2\p@% \hbox to\SB@dimen{% \unhcopy\SB@lyricbox\hfil\char\hyphenchar\font\hfil% }% \global\SB@cnt\@m% \gdef\SB@temp{\expandafter\SB@clearlig\SB@ligpost}% \else% \hbox{\unhbox\SB@chordbox\hfil}% \kern-2\p@% \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% \nobreak\spacefactor\SB@cnt% \fi% \SB@temp% } \newcommand\shrp{\raise3\p@\hbox{\small\#}\kern-\p@} \newcommand\flt{\thinspace\raise3\p@\hbox{\normalsize$\flat$}} \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@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 \newtoks\SB@cr@ \newtoks\SB@ctail \newcommand\SB@creg{} \newcommand\newchords[1]{% \@ifundefined{SB@cr@#1}{% \expandafter\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{10}{10}\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% \SB@dimen5\SB@fretwidth% \advance\SB@dimen.4\p@% \hbox to6\SB@fretwidth{% \hfil% \vrule\@width\SB@dimen\@height.4\p@\@depth\z@% \hfil% }% \nointerlineskip% } \newcommand\SB@topempty{\SB@atopfret{}} \newcommand\SB@topX{\SB@atopfret{% \hbox{% \kern-.2\p@% \fontencoding{OMS}\fontfamily{cmsy}% \fontseries{m}\fontshape{n}% \fontsize{7}{7}\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{10}{10}\selectfont\char14% }% }} \newcommand\SB@fretempty{\SB@onfret{}} \newcommand\SB@frethit{\SB@onfret{% \hbox{% \fontencoding{OMS}\fontfamily{cmsy}% \fontseries{m}\fontshape{n}% \fontsize{12}{12}\selectfont\char15% }% }} \newcommand\SB@finger[1]{% \SB@atopfret{\sffamily\fontsize{6}{6}\selectfont#1}% } \newif\ifSB@gettabind\SB@gettabindfalse \newdimen\SB@tabindent \newcommand\SB@targfret{} \newcommand\SB@targstr{} \newcommand\SB@targfing{} \newcommand\gtab{\SB@begincname\SB@gtab} \newcommand\SB@gtab[1]{\SB@endcname\SB@@gtab{#1}} \newcommand\SB@@gtab[2]{% \SB@tabargs#2\relax\relax\relax\relax\relax\relax\relax\fi% \ifvmode\leavevmode\fi% \vbox{% \normalfont\normalsize% \setbox\SB@box\hbox{% \thinspace{\printchord{#1\strut}}\thinspace% }% \setbox\SB@boxii\hbox{\SB@fretnum{\SB@targfret}}% \hsize\wd\SB@box% \SB@dimen\wd\SB@boxii% \ifSB@gettabind% \global\SB@tabindent\SB@dimen% \global\advance\SB@tabindent.5\SB@fretwidth% \global\advance\SB@tabindent-.5\p@% \fi% \advance\SB@dimen6\SB@fretwidth% \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-2\p@% \hbox to\hsize{% \hfil% \vbox{\box\SB@boxii\kern18\p@}% \vbox{% \let\X\SB@topX\let\0\SB@topO% \let\1\SB@topempty\let\2\SB@topempty% \let\3\SB@topempty\let\4\SB@topempty% \hbox to6\SB@fretwidth{\SB@targstr}% \nointerlineskip% \let\X\SB@fretempty\let\0\SB@fretempty% \let\1\SB@frethit\let\2\SB@fretempty% \let\3\SB@fretempty\let\4\SB@fretempty% \SB@fretbar\hbox{\SB@targstr}% \let\1\SB@fretempty\let\2\SB@frethit% \SB@fretbar\hbox{\SB@targstr}% \let\2\SB@fretempty\let\3\SB@frethit% \SB@fretbar\hbox{\SB@targstr}% \let\3\SB@fretempty\let\4\SB@frethit% \SB@fretbar\hbox{\SB@targstr}% \SB@fretbar% \ifx\SB@targsfing\@empty\else% \let\X\SB@topempty\let\0\SB@topempty% \def\1{\SB@finger1}\def\2{\SB@finger2}% \def\3{\SB@finger3}\def\4{\SB@finger4}% \kern1.5\p@% \hbox to6\SB@fretwidth{\SB@targfing}% \fi% }% \hfil% }% \kern3\p@% }% \SB@gettabindfalse% } \newcommand\SB@ctoken{} \def\SB@ctoken{,} \newcommand\SB@xtoken{} \def\SB@xtoken{X} \newcommand\SB@otoken{} \def\SB@otoken{O} \newcommand\SB@tokenz{} \def\SB@tokenz{0} \newcommand\SB@tokeni{} \def\SB@tokeni{1} \newcommand\SB@tokenii{} \def\SB@tokenii{2} \newcommand\SB@tokeniii{} \def\SB@tokeniii{3} \newcommand\SB@tokeniv{} \def\SB@tokeniv{4} \newcommand\SB@tdone{} \def\SB@tdone{\relax} \newcommand\SB@tabargs[2]{% \def\SB@targfret{#1}% \ifx\SB@targfret\SB@ctoken% \let\SB@targfret\@empty% \def\SB@donext{\SB@@tabargs{#2}}% \else% \def\SB@temp{#2}% \ifx\SB@temp\SB@ctoken% \let\SB@donext\SB@@tabargs% \else% \let\SB@targfret\@empty% \def\SB@donext{\SB@@tabargs{#1}{#2}}% \fi% \fi% \SB@donext% } \newcommand\SB@@tabargs[7]{% \let\SB@targstr\@empty% \let\SB@targfing\@empty% \SB@tabarg\SB@targstr{#1}% \SB@tabarg\SB@targstr{#2}% \SB@tabarg\SB@targstr{#3}% \SB@tabarg\SB@targstr{#4}% \SB@tabarg\SB@targstr{#5}% \SB@tabarg\SB@targstr{#6}% \def\SB@temp{#7}% \ifx\SB@temp\SB@ctoken% \let\SB@donext\SB@@@tabargs% \else% \ifx\SB@temp\SB@tdone\else\SB@errtabx\fi% \def\SB@donext{\iffalse}% \@gobble\fi% \fi% \SB@donext% } \newcommand\SB@@@tabargs[7]{% \def\SB@temp{#1}% \ifx\SB@temp\SB@tdone\else% \SB@tabarg\SB@targfing{#1}% \SB@tabarg\SB@targfing{#2}% \SB@tabarg\SB@targfing{#3}% \SB@tabarg\SB@targfing{#4}% \SB@tabarg\SB@targfing{#5}% \SB@tabarg\SB@targfing{#6}% \def\SB@temp{#7}% \ifx\SB@temp\SB@tdone\else\SB@errtabx\fi% \fi% \iffalse% } \newcommand\SB@tabarg[2]{% \def\SB@temp{#2}% \ifx\SB@temp\SB@xtoken\SB@@tabarg#1\X\else% \ifx\SB@temp\SB@ytoken\SB@@tabarg#1\0\else% \ifx\SB@temp\SB@tokenz\SB@@tabarg#1\0\else% \ifx\SB@temp\SB@tokeni\SB@@tabarg#1\1\else% \ifx\SB@temp\SB@tokenii\SB@@tabarg#1\2\else% \ifx\SB@temp\SB@tokeniii\SB@@tabarg#1\3\else% \ifx\SB@temp\SB@tokeniv\SB@@tabarg#1\4\else% \SB@errtab\SB@@tabarg#1\0% \fi\fi\fi\fi\fi\fi\fi% } \newcommand\SB@@tabarg[2]{% \expandafter\def\expandafter#1\expandafter{#1#2}% } \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]{% \SB@clearpage% \gdef\SB@indexlist{#1}% \SB@chkidxlst% \stepcounter{SB@songsnum}% \setcounter{songnum}{1}% \SB@songsenvtrue% }{% \SB@finalizesonglist% \SB@clearpage% \clearpage% \thispagestyle{empty}% \cleardoublepage% \SB@songsenvfalse% } \newcounter{SB@songsnum} \newcommand\SB@indexlist{} \newcommand\SB@newindex[4]{% \expandafter\newcommand\csname SB@idxfilename@#3\endcsname{#4}% \ifSB@genindexes\begingroup% \newwrite\SB@theindex% \immediate\openout\SB@theindex=#4.sxd% #2% \global\expandafter\let\csname SB@index@#3\endcsname\SB@theindex% \endgroup\fi% \expandafter\newcommand\csname SB@idxsel@#3\endcsname[3]{###1}% } \newcommand\newindex[2]{% \AtBeginDocument{\SB@newindex1\SB@titleinit{#1}{#2}}% } \@onlypreamble\newindex \newcommand\SB@titleinit{% \immediate\write\SB@theindex{TITLE INDEX DATA FILE}% } \newcommand\newscripindex[2]{% \AtBeginDocument{\SB@newindex2\SB@scripinit{#1}{#2}}% } \@onlypreamble\newscripindex \newcommand\SB@scripinit{% \immediate\write\SB@theindex{SCRIPTURE INDEX DATA FILE}% } \newcommand\newauthorindex[2]{% \AtBeginDocument{\SB@newindex3\SB@authinit{#1}{#2}}% } \@onlypreamble\newauthorindex \newcommand\SB@authinit{% \immediate\write\SB@theindex{AUTHOR INDEX DATA FILE}% } \newcommand\SB@percent{} {\catcode`\%=12\gdef\SB@percent{%}} \newcommand\SB@idxcmd[2]{% \expandafter\gdef\expandafter#1\expandafter{% #1\immediate\write\SB@theindex{\SB@percent#2}% }% } \newcommand\authsepword[1]{\SB@idxcmd\SB@authinit{sep #1}} \@onlypreamble\authsepword \newcommand\authbyword[1]{\SB@idxcmd\SB@authinit{after #1}} \@onlypreamble\authbyword \newcommand\authignoreword[1]{\SB@idxcmd\SB@authinit{ignore #1}} \@onlypreamble\authignoreword \newcommand\titleprefixword[1]{\SB@idxcmd\SB@titleinit{prefix #1}} \@onlypreamble\titleprefixword \newcommand\SB@addtoindex[2]{% \ifSB@genindexes% \immediate\write#1{#2}% \immediate\write#1{\songnumstyle{songnum}}% \immediate\write#1{% song\arabic{SB@songsnum}-\songnumstyle{songnum}.% \ifnum\arabic{section}=0 1\else2\fi}% \fi% } \newcommand\SB@addtoindexes[3]{% \@for\SB@temp:=\SB@indexlist\do{% \csname SB@idxsel@\SB@temp\endcsname{\SB@toks\expandafter{#1}}% {\SB@toks\expandafter{#2}}{\SB@toks\expandafter{#3}}% \SB@addtoindex{\csname SB@index@\SB@temp\endcsname}{\the\SB@toks}% }% } \newcommand\SB@addtotitles[1]{% \SB@toks{#1}% \@for\SB@temp:=\SB@indexlist\do{% \csname SB@idxsel@\SB@temp\endcsname{% \SB@addtoindex{\csname SB@index@\SB@temp\endcsname}{\the\SB@toks}% }{}{}% }% } \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{}}% } \newbox\SB@idxtitlebox \newcommand\SB@idxlineskip[1]{% \vskip#1\p@\@plus#1\p@\@minus#1\p@% } \newcommand\SB@multiline{% \begingroup% \hbadness\@M\hfuzz\maxdimen% \SB@dimenii\hsize% \advance\SB@dimenii-\SB@dimen% \SB@dimeniii\SB@dimenii% \advance\SB@dimeniii-\wd\SB@box% \interlinepenalty\@M% \parshape\tw@\z@\hsize\SB@dimenii\SB@dimen\relax% \noindent\unhcopy\SB@box% \leaders\hbox to.5em{\hss.\hss}\hskip\SB@dimeniii\@plus1fil% \unhcopy\SB@boxii% \par% \endgroup% }% \newcommand\SB@balancerows{% \SB@dimen\hsize% \advance\SB@dimen-\wd\SB@box% \advance\SB@dimen-2em% \settoheight\SB@dimenii{\vbox{\SB@multiline}}% \SB@dimeniii.5\SB@dimen% \SB@dimeniv\SB@dimeniii% \loop% \SB@dimeniv.5\SB@dimeniv% \settoheight\SB@dimenv{\vbox{% \SB@dimen\SB@dimeniii% \SB@multiline% }}% \ifdim\SB@dimenv>\SB@dimenii% \advance\SB@dimeniii\SB@dimeniv% \else% \SB@dimen\SB@dimeniii% \advance\SB@dimeniii-\SB@dimeniv% \fi% \ifdim\SB@dimeniv>2\p@\repeat% \SB@multiline% } \newcommand\SB@ellipspread[2]{% \begingroup% \setbox\SB@box\hbox{#1}% \setbox\SB@boxii\hbox{#2}% \SB@dimen\wd\SB@box% \advance\SB@dimen2em% \advance\SB@dimen\wd\SB@boxii% \ifdim\SB@dimen>\hsize% \SB@balancerows% \else% \hbox to\hsize{% \unhbox\SB@box% \leaders\hbox to.5em{\hss.\hss}\hfil% \unhbox\SB@boxii% }\par% \fi% \endgroup% } \newcommand\SB@idxitemsep{% ,\penalty0\hskip.33em\@minus.11em\hfilneg\vadjust{}\hfil% } \newenvironment{idxblock}[1]{}{} \newcommand\idxentry[2]{} \newcommand\idxaltentry[2]{} \newenvironment{SB@lgidx}[1]{}{} \newenvironment{SB@smidx}[1]{}{} \newcommand\SB@idxsetup[1]{% \hsize\textwidth% \parskip\z@skip\parfillskip\z@skip% \baselineskip\f@size\p@\@plus\p@\@minus\p@% \lineskiplimit\z@\lineskip\p@\@plus\p@\@minus\p@% \ifnum\SB@numcols>\@ne% \advance\hsize\columnsep% \advance\hsize-#1\columnsep% \divide\hsize#1\relax% \fi% } \newcommand\SB@makeidxcolumn[1]{% \ifdim\ht\SB@box=\z@% \hskip\hsize\relax% \else% \splittopskip\topskip\splitmaxdepth\maxdepth% \vsplit\SB@box to\SB@dimen% \global\setbox\SB@box\vbox{% \SB@idxsetup{#1}% \splitbotmark% \unvbox\SB@box% }% \fi% } \newcommand\SB@oneidxpage{} \newcommand\SB@displayindex[3]{% \ifsongindexes\begingroup% \setbox\SB@idxtitlebox\vbox{% \let\SB@temp\songsection% \ifx\chapter\undefined\else% \ifx\chapter\relax\else% \let\SB@temp\songchapter% \fi% \fi% \SB@temp{#1}% }% \IfFileExists{\csname SB@idxfilename@#2\endcsname.sbx}{% \ifx\hyperlink\undefined\let\hyperlink\@secondoftwo\fi% \ifx\hyperlink\relax\let\hyperlink\@secondoftwo\fi% \global\setbox\SB@box\vbox{% \null% \vfil% \unvcopy\SB@idxtitlebox% \vskip.5in\@minus.3in\relax% \hbox to\hsize{% \hfil% \vbox{% \hsize\SB@colwidth% \renewenvironment{idxblock}[1]% {\begin{SB@smidx}{####1}}{\end{SB@smidx}}% \let\\\SB@idxitemsep% \input{\csname SB@idxfilename@#2\endcsname.sbx}% }% \hfil% }% \vskip\z@\@plus2fil\relax% }% {\vbadness\@M\vfuzz\maxdimen% \splitmaxdepth\maxdepth\splittopskip\topskip% \global\setbox\SB@boxii\vsplit\SB@box to\textheight}% \ifvoid\SB@box% \box\SB@boxii% \else% \global\setbox\SB@box\vbox{% \renewenvironment{idxblock}[1]% {\begin{SB@lgidx}{####1}}{\end{SB@lgidx}}% \let\\\SB@idxitemsep% \SB@idxsetup{#3}% \input{\csname SB@idxfilename@#2\endcsname.sbx}% \unskip% }% \SB@toks{\SB@makeidxcolumn{#3}}% \ifnum\SB@numcols>\@ne% \SB@cnt#3\relax% \loop\ifnum\SB@cnt>\@ne% \SB@toks\expandafter{\the\SB@toks% \kern\columnsep\SB@makeidxcolumn{#3}}% \advance\SB@cnt\m@ne% \repeat% \fi% \edef\SB@oneidxpage{\the\SB@toks}% \unvbox\SB@idxtitlebox% \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#3\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% \fi% }{% \vbox to\textheight{% \vfil% \unvbox\SB@idxtitlebox% \vskip1em\relax% \hbox to\textwidth{\hfil[Index not yet generated.]\hfil}% \vskip\z@\@plus2fil\relax% }% }% \cleardoublepage% \endgroup\fi% } \newcommand\showindex[2]{% \@ifundefined{SB@idxsel@#2}{\SB@errnoidx{#2}}{% \csname SB@idxsel@#2\endcsname% \SB@makesongindex\SB@makescripindex\SB@makeauthorindex% {#1}{#2}% }% } \newcommand\SB@makesongindex[2]{% \renewenvironment{SB@lgidx}[1]{ \parindent\z@% \hbox{\SB@colorbox{\vbox{% \hbox to\idxheadwidth{\sffamily\bfseries\LARGE##1\hfil}% }}}% \nobreak\vskip3\p@\@plus2\p@\@minus2\p@\nointerlineskip% }{\penalty-50\vskip5\p@\@plus5\p@\@minus4\p@}% \renewenvironment{SB@smidx}[1]{}{}% \renewcommand\idxentry[2]{% \SB@ellipspread{\sffamily\slshape\ignorespaces##1\unskip}{##2}% }% \renewcommand\idxaltentry[2]{% \SB@ellipspread{\rmfamily\ignorespaces##1\unskip}{##2}% }% \SB@displayindex{#1}{#2}{2}% } \newcommand\SB@idxcolhead{} \newcommand\idxcont[1]{#1 {\mdseries(continued)}} \newcommand\SB@idxcont[1]{% \hbox to\hsize{\small\bfseries\idxcont{#1}\hfil}% \nobreak% \ifdim\prevdepth>4\p@\prevdepth4\p@\fi% \vskip-\prevdepth% \vskip4\p@\@plus\p@\@minus\p@\nointerlineskip% } \newcommand\SB@makescripindex[2]{% \renewenvironment{SB@lgidx}[1]{% \gdef\SB@idxcolhead{##1}% \hbox to\hsize{\small\bfseries##1\hfil}% \nobreak% \ifdim\prevdepth>4\p@\prevdepth4\p@\fi% \vskip-\prevdepth% \vskip4\p@\@plus\p@\@minus\p@\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]{% \parindent.25cm% \SB@ellipspread{\sffamily\small\slshape\indent##1}{##2}% \SB@toks\expandafter{\SB@idxcolhead}% \mark{\noexpand\SB@idxcont{\the\SB@toks}}% }% \renewcommand\idxaltentry[2]{\SB@erridx{a scripture}}% \SB@displayindex{#1}{#2}{3}% } \newcommand\SB@makeauthorindex[2]{% \renewenvironment{SB@lgidx}[1]{\parindent\z@}{}% \renewenvironment{SB@smidx}[1]{\parindent\z@}{}% \renewcommand\idxentry[2]{% \SB@ellipspread{\small\bfseries\sfcode`.\@m##1}{##2}% }% \renewcommand\idxaltentry[2]{\SB@erridx{an author}}% \SB@displayindex{#1}{#2}{2}% } \newcommand\SB@Error{\PackageError{songs}} \newcommand\SB@Warn{\PackageWarning{songs}} \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@warnigen{% \PackageWarning{songs}{Indexes shown but index-generation inh% ibited. Index files may be out of date.}{Indexes were initial% ly turned off by the end of the document preamble, which mean% s that the auxilliary files used to keep the indexes up-to-da% te were not generated. However, indexes were turned on withi% n the document body using \protect\indexeson, which means th% e indexes shown in the resulting document are being created f% rom outdated files. To correct the problem, be sure that inde% xes are turned on by the end of the preamble so that the auxi% lliary files will be updated.}% } \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@errcol{% \SB@Error{Illegal number of columns}{The number of columns mu% st be at least 1.}% } \newcommand\SB@errboo{% \SB@Error{Encountered \protect\beginsong\space without seein% g an \protect\endsong\space for the previous song}% {Song \songnumstyle{songnum} 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 preceeding scriptur% e quotation}{A scripture quotation appearing after son% g \songnumstyle{songnum} 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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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 after song \SB@prevsong\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}{After song \SB@prevsong\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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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}{After son% g \SB@prevsong, 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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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}{After song \SB@prevsong, 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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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}{After song \SB@prevsong, there is a% n \protect\endchorus\space line not preceded b% y a \protect\beginsong\space line.}% } \newcommand\SB@errbro{% \SB@Error{Encountered a \protect\beginscripture\space insid% e a song}{Song \songnumstyle{songnum} might be missing a% n \protect\endsong\space line.}% } \newcommand\SB@errbrr{% \SB@Error{Encountered a \protect\beginscripture\space with% out seeing an \protect\endscripture\space for the precedin% g scripture quote}{A scripture quote after song \SB@prevsong% \space is missing an \protect\endscripture\space line.}% } \newcommand\SB@errero{% \SB@Error{Encountered an \protect\endscripture\space whil% e processing a song}{Song \songnumstyle{songnum} 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}{After son% g \SB@prevsong, 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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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 \songnumstyle{songnum} 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@errtabx{% \SB@Error{Argument to \protect\gtab\space has extra tokens% . Ignoring them.}{The strings and fingering portions of t% he second argument should consist of exactly six symbols e% ach.}% } \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\ifrawtext \newif\ifpdfindex\pdfindextrue \newif\ifsongindexes\songindexestrue \newif\ifSB@colorboxes\SB@colorboxestrue \newif\ifSB@genindexes\SB@genindexestrue \newif\ifSB@omitscrip \SB@chordson \ProcessOptions\relax \ifSB@pdf\else\pdfindexfalse\fi \ifSB@colorboxes \RequirePackage{color} \definecolor{SongbookShade}{gray}{.80} \newcommand\SB@colorbox[1]{\colorbox{SongbookShade}{#1}} \else \newcommand\SB@colorbox[1]{\vbox{% \kern3\p@% \hbox{\kern3\p@{#1}\kern3\p@}% \kern3\p@% }} \fi \ifrawtext \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{&}} \def\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{\songnumstyle{songnum}. \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% } \def\endsong{% \SB@doEOLtrue% \immediate\write\SB@txtout{\songcopyright\space% \songlicense\SB@printEOL}% \endgroup% \SB@insongfalse% \stepcounter{songnum}% } \def\SB@parsesrefs#1{#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} \renewcommand\brk{} \def\rep#1{(x#1)} \def\echo#1{(#1)} \def\mbar#1#2{} \fi \endinput %% %% End of file `songs.sty'.