summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/bibleref-parse/bibleref-parse.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-03-31 00:27:41 +0000
committerKarl Berry <karl@freefriends.org>2011-03-31 00:27:41 +0000
commita93a5e037eee9f7e2e45671fb2be9b825ec7d9f0 (patch)
tree9e86261b377a1fbf1eb726a49be50bb3067f43ff /Master/texmf-dist/tex/latex/bibleref-parse/bibleref-parse.sty
parent7a253d3b053c803ac7ecb4e8dbb7fb264ce0319f (diff)
new latex package bibleref-parse (30mar11)
git-svn-id: svn://tug.org/texlive/trunk@21895 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/bibleref-parse/bibleref-parse.sty')
-rw-r--r--Master/texmf-dist/tex/latex/bibleref-parse/bibleref-parse.sty1358
1 files changed, 1358 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/bibleref-parse/bibleref-parse.sty b/Master/texmf-dist/tex/latex/bibleref-parse/bibleref-parse.sty
new file mode 100644
index 00000000000..ceded4813a5
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bibleref-parse/bibleref-parse.sty
@@ -0,0 +1,1358 @@
+%% bibleref-parse.sty
+%% Copyright (c) 2011 Sebastian Kuhnert
+%
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is at http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008/05/04 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Sebastian Kuhnert.
+%
+% This work consists of the files listed in README
+%
+\ProvidesPackage{bibleref-parse}[2011/03/29 v1.0 Parsing of Bible references]
+
+% command definitions
+\RequirePackage{etoolbox}
+
+% dependency handling
+\RequirePackage{scrlfile}
+
+% Booknames and passage description formatting
+\RequirePackage{bibleref}
+
+% store the option set, provide default
+\def\brp@opt@@comma{preferlikeBR}
+
+% options
+\csdef{brp@opt@comma=list}{% always list
+ \def\brp@opt@@comma{list}}
+\csdef{brp@opt@comma=chvsep}{% always separate chapter and verse
+ \def\brp@opt@@comma{chvsep}}
+\csdef{brp@opt@comma=likeBR}{% select chvsep if \BRchvsep contains a "," and list otherwise
+ \def\brp@opt@@comma{likeBR}}
+%\csdef{brp@opt@comma=preferlist}{% synonym for list
+% \def\brp@opt@@comma{preferlist}}
+\csdef{brp@opt@comma=preferchvsep}{% select chvsep unless the passage has a ":"
+ \def\brp@opt@@comma{preferchvsep}}
+\csdef{brp@opt@comma=preferlikeBR}{% select preferchvsep if \BRchvsep contains a "," and list otherwise
+ \def\brp@opt@@comma{preferlikeBR}}
+
+% process package options package options
+\DeclareOption*{%
+ \ifcsdef{brp@opt@\CurrentOption}{\csuse{brp@opt@\CurrentOption}}{%
+ \PackageError{bibleref-parse}{unknown option '\CurrentOption'}{}%
+ }}%
+\ProcessOptions\relax
+
+% setting of options
+\newcommand*{\biblerefparseset}[1]{%
+ \def\do##1{%
+ \ifcsdef{brp@opt@##1}{\csuse{brp@opt@##1}}{%
+ \PackageError{bibleref-parse}{unknown option '##1'}{}%
+ }}%
+ \docsvlist{#1}%
+}
+
+% is comma used to separate verses from chapters?
+\newtoggle{brp@commaischvsep}
+\newtoggle{brp@commalikeBR}
+\newtoggle{brp@commaauto}
+\newtoggle{brp@commapreferchvsep}
+
+% setting options in effect
+\csdef{brp@optset@comma=list}{% always list
+ \togglefalse{brp@commaauto}%
+ \togglefalse{brp@commalikeBR}%
+ \togglefalse{brp@commaischvsep}}
+\csdef{brp@optset@comma=chvsep}{% always separate chapter and verse
+ \togglefalse{brp@commaauto}%
+ \togglefalse{brp@commalikeBR}%
+ \toggletrue{brp@commaischvsep}}
+\csdef{brp@optset@comma=likeBR}{% select chvsep if \BRchvsep contains a "," and list otherwise
+ \togglefalse{brp@commaauto}%
+ \toggletrue{brp@commalikeBR}}
+%\csdef{brp@optset@comma=preferlist}{% synonym for list
+% \toggletrue{brp@commaauto}%
+% \togglefalse{brp@commalikeBR}%
+% \togglefalse{brp@commapreferchvsep}}
+\csdef{brp@optset@comma=preferchvsep}{% select chvsep unless the passage has a ":"
+ \toggletrue{brp@commaauto}%
+ \togglefalse{brp@commalikeBR}%
+ \toggletrue{brp@commapreferchvsep}}
+\csdef{brp@optset@comma=preferlikeBR}{% select preferchvsep if \BRchvsep contains a "," and list otherwise
+ \toggletrue{brp@commaauto}%
+ \toggletrue{brp@commalikeBR}}
+
+% apply saved options
+\def\brp@applyoptions{%
+ \csuse{brp@optset@comma=\brp@opt@@comma}%
+}
+
+% Provide standard OSIS book names as aliases if they are not predefined by bibleref
+\newcommand*{\brp@providecs}[2]{%
+ \ifcsundef{#1}{%
+ \csdef{#1}{#2}%
+ }{}%
+}
+\brp@providecs{br@1Sam}{\br@ISamuel}
+\brp@providecs{br@2Sam}{\br@IISamuel}
+\brp@providecs{br@1Kgs}{\br@IKings}
+\brp@providecs{br@2Kgs}{\br@IIKings}
+\brp@providecs{br@1Chr}{\br@IChronicles}
+\brp@providecs{br@2Chr}{\br@IIChronicles}
+\brp@providecs{br@Song}{\br@SongofSongs}
+
+\brp@providecs{br@1Cor}{\br@ICorinthians}
+\brp@providecs{br@2Cor}{\br@IICorinthians}
+\brp@providecs{br@1Thess}{\br@IThessalonians}
+\brp@providecs{br@2Thess}{\br@IIThessalonians}
+\brp@providecs{br@1Tim}{\br@ITimothy}
+\brp@providecs{br@2Tim}{\br@IITimothy}
+\brp@providecs{br@Phlm}{\br@Philemon}
+\brp@providecs{br@1Pet}{\br@IPeter}
+\brp@providecs{br@2Pet}{\br@IIPeter}
+\brp@providecs{br@1John}{\br@IJohn}
+\brp@providecs{br@2John}{\br@IIJohn}
+\brp@providecs{br@3John}{\br@IIIJohn}
+
+\brp@providecs{br@Tob}{\br@Tobit}
+\brp@providecs{br@1Macc}{\br@IMaccabees}
+\brp@providecs{br@2Macc}{\br@IIMaccabees}
+\brp@providecs{br@Wis}{\br@Wisdom}
+\brp@providecs{br@Sir}{\br@Ecclesiasticus}%=Sirach
+\brp@providecs{br@Bar}{\br@Baruch}
+
+% bibleref-german uses \newcommand* to provides \br@ aliases
+% To avoid conflicts, undefine this before it is loaded:
+\BeforePackage{bibleref-german}{%
+ \csundef{br@Phlm}%
+ \csundef{br@Tob}%
+ \csundef{br@Sir}%
+ \csundef{br@Bar}%
+}
+
+% these are not in bibleref.sty
+\providecommand{\BRadditionsto}{Additionsto}
+\brp@providecs{br@AddDan}{\BRadditionsto Daniel}
+\brp@providecs{br@AddEsth}{\BRadditionsto Esther}
+\brp@providecs{br@EpJer}{Epistle of Jeremiah}
+\preto\brfullname{%
+ \def\BRadditionsto{Additions to }%
+ \def\br@AddDan{\BRadditionsto Daniel}%
+ \def\br@AddEsth{\BRadditionsto Esther}%
+ \def\br@EpJer{Epistle of Jeremiah}}
+\preto\brabbrvname{%
+ \def\BRadditionsto{Add\BRperiod~}%
+ \def\br@AddDan{\BRadditionsto Dn\BRperiod}%
+ \def\br@AddEsth{\BRadditionsto Est\BRperiod}%
+ \def\br@EpJer{Ep\BRperiod Jer\BRperiod}}
+\preto\brabbrvname{%
+ \def\BRadditionsto{Add\BRperiod~}%
+ \def\br@AddDan{\BRadditionsto Dan\BRperiod}%
+ \def\br@AddEsth{\BRadditionsto Esther\BRperiod}%
+ \def\br@EpJer{Ep\BRperiod Jer\BRperiod}}
+\AfterPackage*{bibleref-german}{%
+ \preto\brg@fullname{%
+ \def\BRadditionsto{St\"ucke zu }%
+ \def\br@AddDan{\BRadditionsto Daniel}%
+ \def\br@AddEsth{\BRadditionsto Esther}%
+ \def\br@EpJer{\BRder Brief des Jeremia}}%
+ \preto\brg@abbrvname{%
+ \def\BRadditionsto{St\BRperiod{} }%
+ \def\br@AddDan{\BRadditionsto Dan\BRperiod}%
+ \def\br@AddEsth{\BRadditionsto Est\BRperiod}%
+ \def\br@EpJer{Br\BRperiod Jer\BRperiod}}%
+}%
+
+% define book names and prefixes
+\newcommand*{\brpDefineBookPrefix}[2]{%
+ \csdef{brp@bkp@\detokenize{#1}}{#2}}
+\newcommand*{\brpUndefBookPrefix}[1]{%
+ \csundef{brp@bkp@\detokenize{#1}}}
+\newcommand*{\brpDefineBook}[2]{%
+ \csdef{brp@bk@\detokenize{#1}}{#2}}
+\newcommand*{\brpUndefBook}[1]{%
+ \csundef{brp@bk@\detokenize{#1}}}
+
+% default book prefixes and names
+\brpDefineBookPrefix{Ge}{Gen}
+\brpDefineBookPrefix{Gn}{Gen}
+\brpDefineBookPrefix{1Mo}{Gen}
+\brpDefineBookPrefix{IMo}{Gen}
+\brpDefineBook{1M}{Gen}
+\brpDefineBook{IM}{Gen}
+\brpDefineBookPrefix{Ex}{Exod}
+\brpDefineBookPrefix{2Mo}{Exod}
+\brpDefineBookPrefix{IIMo}{Exod}
+\brpDefineBook{2M}{Exod}
+\brpDefineBook{IIM}{Exod}
+\brpDefineBookPrefix{Le}{Lev}
+\brpDefineBookPrefix{Lv}{Lev}
+\brpDefineBookPrefix{3M}{Lev}
+\brpDefineBookPrefix{IIIM}{Lev}
+\brpDefineBookPrefix{Nu}{Num}
+\brpDefineBookPrefix{Nb}{Num}
+\brpDefineBookPrefix{4}{Num}
+\brpDefineBookPrefix{IV}{Num}
+\brpDefineBookPrefix{De}{Deut}
+\brpDefineBookPrefix{Dt}{Deut}
+\brpDefineBookPrefix{5}{Deut}
+\brpDefineBookPrefix{V}{Deut}
+\brpDefineBookPrefix{Jos}{Josh}
+\brpDefineBookPrefix{Judg}{Judg}
+\brpDefineBook{Jd}{Judg}
+\brpDefineBookPrefix{Jdg}{Judg}
+\brpDefineBookPrefix{Jg}{Judg}
+\brpDefineBookPrefix{Ri}{Judg}
+\brpDefineBookPrefix{Ru}{Ruth}
+\brpDefineBookPrefix{Rt}{Ruth}
+\brpDefineBookPrefix{1S}{1Sam}
+\brpDefineBookPrefix{IS}{1Sam}
+\brpDefineBookPrefix{2S}{2Sam}
+\brpDefineBookPrefix{IIS}{2Sam}
+\brpDefineBookPrefix{1Ki}{1Kgs}
+\brpDefineBookPrefix{1Kg}{1Kgs}
+\brpDefineBookPrefix{IKi}{1Kgs}
+\brpDefineBookPrefix{IKg}{1Kgs}
+\brpDefineBookPrefix{1K\"o}{1Kgs}
+\brpDefineBookPrefix{1K"o}{1Kgs}
+\brpDefineBookPrefix{1Koe}{1Kgs}
+\brpDefineBookPrefix{1K^^c3^^b6}{1Kgs}% utf8 \"o
+\brpDefineBookPrefix{1K^^f6}{1Kgs}% latin1 \"o
+\brpDefineBookPrefix{IK\"o}{1Kgs}
+\brpDefineBookPrefix{IK"o}{1Kgs}
+\brpDefineBookPrefix{IKoe}{1Kgs}
+\brpDefineBookPrefix{IK^^c3^^b6}{1Kgs}% utf8 \"o
+\brpDefineBookPrefix{IK^^f6}{1Kgs}% latin1 \"o
+\brpDefineBook{1K}{1Kgs}
+\brpDefineBook{IK}{1Kgs}
+\brpDefineBookPrefix{2Ki}{2Kgs}
+\brpDefineBookPrefix{2Kg}{2Kgs}
+\brpDefineBookPrefix{IIKi}{2Kgs}
+\brpDefineBookPrefix{IIKg}{2Kgs}
+\brpDefineBookPrefix{2K\"o}{2Kgs}
+\brpDefineBookPrefix{2K"o}{2Kgs}
+\brpDefineBookPrefix{2Koe}{2Kgs}
+\brpDefineBookPrefix{2K^^c3^^b6}{2Kgs}% utf8 \"o
+\brpDefineBookPrefix{2K^^f6}{2Kgs}% latin1 \"o
+\brpDefineBookPrefix{IIK\"o}{2Kgs}
+\brpDefineBookPrefix{IIK"o}{2Kgs}
+\brpDefineBookPrefix{IIKoe}{2Kgs}
+\brpDefineBookPrefix{IIK^^c3^^b6}{2Kgs}% utf8 \"o
+\brpDefineBookPrefix{IIK^^f6}{2Kgs}% latin1 \"o
+\brpDefineBook{2K}{2Kgs}
+\brpDefineBook{IIK}{2Kgs}
+\brpDefineBookPrefix{1Ch}{1Chr}
+\brpDefineBookPrefix{ICh}{1Chr}
+\brpDefineBookPrefix{2Ch}{2Chr}
+\brpDefineBookPrefix{IICh}{2Chr}
+\brpDefineBookPrefix{Ezr}{Ezra}
+\brpDefineBookPrefix{Esr}{Ezra}
+\brpDefineBookPrefix{Ne}{Neh}
+\brpDefineBookPrefix{Est}{Esth}
+\brpDefineBookPrefix{Job}{Job}
+\brpDefineBook{Jo}{Job}
+\brpDefineBookPrefix{Jb}{Job}
+\brpDefineBookPrefix{Hi}{Job}
+\brpDefineBookPrefix{Ij}{Job}
+\brpDefineBookPrefix{Ps}{Ps}
+\brpDefineBookPrefix{Pro}{Prov}
+\brpDefineBookPrefix{Prv}{Prov}
+\brpDefineBookPrefix{Sp}{Prov}
+\brpDefineBook{Pr}{Prov}
+\AfterPackage*{babel}{
+ \appto\extrasngerman{\brpDefineBook{Pr}{Eccl}}
+ \appto\extrasgerman{\brpDefineBook{Pr}{Eccl}}
+ \appto\extrasnaustrian{\brpDefineBook{Pr}{Eccl}}
+ \appto\extrasaustrian{\brpDefineBook{Pr}{Eccl}}
+ \appto\noextrasngerman{\brpDefineBook{Pr}{Prov}}
+ \appto\noextrasgerman{\brpDefineBook{Pr}{Prov}}
+ \appto\noextrasnaustrian{\brpDefineBook{Pr}{Prov}}
+ \appto\noextrasaustrian{\brpDefineBook{Pr}{Prov}}
+}
+\brpDefineBookPrefix{Ecclesiaste}{Eccl}
+\brpDefineBook{Ec}{Eccl}
+\brpDefineBook{Ecc}{Eccl}
+\brpDefineBook{Ecl}{Eccl}
+\brpDefineBook{Eccl}{Eccl}
+\brpDefineBook{Eccle}{Eccl}
+\brpDefineBook{Eccles}{Eccl}
+\brpDefineBook{Ecclesi}{Eccl}
+\brpDefineBook{Ecclesia}{Eccl}
+\brpDefineBook{Ecclesias}{Eccl}
+\brpDefineBook{Ecclesiast}{Eccl}
+\brpDefineBookPrefix{Q}{Eccl}
+\brpDefineBookPrefix{Pre}{Eccl}
+\brpDefineBookPrefix{Koh}{Eccl}
+\brpDefineBookPrefix{So}{Song}
+\brpDefineBookPrefix{Sg}{Song}
+\brpDefineBookPrefix{Hoh}{Song}
+\brpDefineBookPrefix{Hl}{Song}
+\brpDefineBookPrefix{Hh}{Song}
+\brpDefineBookPrefix{Li}{Song}
+\brpDefineBookPrefix{Is}{Isa}
+\brpDefineBookPrefix{Jesa}{Isa}
+\brpDefineBook{Jes}{Isa}
+\brpDefineBookPrefix{Jer}{Jer}
+\brpDefineBookPrefix{Jr}{Jer}
+\brpDefineBookPrefix{La}{Lam}
+\brpDefineBookPrefix{Lm}{Lam}
+\brpDefineBookPrefix{Kl}{Lam}
+\brpDefineBook{Ez}{Ezek}
+\brpDefineBookPrefix{Eze}{Ezek}
+\brpDefineBookPrefix{Ezk}{Ezek}
+\brpDefineBookPrefix{Hes}{Ezek}
+\brpDefineBookPrefix{Da}{Dan}
+\brpDefineBookPrefix{Dn}{Dan}
+\brpDefineBookPrefix{Hos}{Hos}
+\brpDefineBook{Ho}{Hos}
+\brpDefineBookPrefix{Jl}{Joel}
+\brpDefineBookPrefix{Joe}{Joel}
+\brpDefineBookPrefix{Jo\"e}{Joel}
+\brpDefineBookPrefix{Jo"e}{Joel}
+\brpDefineBookPrefix{Jo^^c3^^ab}{Joel}% utf \"e
+\brpDefineBookPrefix{Jo^^eb}{Joel}% latin1 \"e
+\brpDefineBookPrefix{Am}{Amos}
+\brpDefineBookPrefix{Ob}{Obad}
+\brpDefineBookPrefix{Jon}{Jonah}
+\brpDefineBookPrefix{Mi}{Mic}
+\brpDefineBookPrefix{Na}{Nah}
+\brpDefineBookPrefix{Hab}{Hab}
+\brpDefineBookPrefix{Hak}{Hab}
+\brpDefineBookPrefix{Hb}{Hab}
+\brpDefineBookPrefix{Hk}{Hab}
+\brpDefineBookPrefix{Zep}{Zeph}
+\brpDefineBookPrefix{Zp}{Zeph}
+\brpDefineBookPrefix{Zef}{Zeph}
+\brpDefineBookPrefix{Hag}{Hag}
+\brpDefineBookPrefix{Hg}{Hag}
+\brpDefineBookPrefix{Zec}{Zech}
+\brpDefineBookPrefix{Zc}{Zech}
+\brpDefineBookPrefix{Sa}{Zech}
+\brpDefineBookPrefix{Mal}{Mal}
+\brpDefineBookPrefix{Ml}{Mal}
+
+\brpDefineBookPrefix{Mat}{Matt}
+\brpDefineBookPrefix{Mt}{Matt}
+\brpDefineBookPrefix{Mar}{Mark}
+\brpDefineBookPrefix{Mk}{Mark}
+\brpDefineBookPrefix{Lu}{Luke}
+\brpDefineBookPrefix{Lk}{Luke}
+\brpDefineBookPrefix{Joh}{John}
+\brpDefineBookPrefix{Jn}{John}
+\brpDefineBookPrefix{Jh}{John}
+\brpDefineBookPrefix{Ac}{Acts}
+\brpDefineBookPrefix{Apos}{Acts}
+\brpDefineBookPrefix{Apg}{Acts}
+\brpDefineBook{Apo}{Acts}
+\brpDefineBookPrefix{Ro}{Rom}
+\brpDefineBookPrefix{Rm}{Rom}
+\brpDefineBookPrefix{R\"o}{Rom}
+\brpDefineBookPrefix{R"o}{Rom}
+\brpDefineBookPrefix{Roe}{Rom}
+\brpDefineBookPrefix{R^^c3^^b6}{Rom}% utf8 \"o
+\brpDefineBookPrefix{R^^f6}{Rom}% latin1 \"o
+\brpDefineBookPrefix{1Co}{1Cor}
+\brpDefineBookPrefix{ICo}{1Cor}
+\brpDefineBookPrefix{1Kor}{1Cor}
+\brpDefineBookPrefix{IKor}{1Cor}
+\brpDefineBook{1Ko}{1Cor}
+\brpDefineBook{IKo}{1Cor}
+\brpDefineBookPrefix{2Co}{2Cor}
+\brpDefineBookPrefix{IICo}{2Cor}
+\brpDefineBookPrefix{2Kor}{2Cor}
+\brpDefineBookPrefix{IIKor}{2Cor}
+\brpDefineBook{2Ko}{2Cor}
+\brpDefineBook{IIKo}{2Cor}
+\brpDefineBookPrefix{Ga}{Gal}
+\brpDefineBookPrefix{Eph}{Eph}
+\brpDefineBook{Ep}{Eph}
+\brpDefineBookPrefix{Phili}{Phil}
+\brpDefineBook{Ph}{Phil}
+\brpDefineBook{Phi}{Phil}
+\brpDefineBook{Phil}{Phil}
+\brpDefineBookPrefix{C}{Col}
+\brpDefineBookPrefix{Kol}{Col}
+\brpDefineBookPrefix{1Th}{1Thess}
+\brpDefineBookPrefix{ITh}{1Thess}
+\brpDefineBookPrefix{2Th}{2Thess}
+\brpDefineBookPrefix{IITh}{2Thess}
+\brpDefineBookPrefix{1Ti}{1Tim}
+\brpDefineBookPrefix{1Tm}{1Tim}
+\brpDefineBookPrefix{ITi}{1Tim}
+\brpDefineBookPrefix{ITm}{1Tim}
+\brpDefineBookPrefix{2Ti}{2Tim}
+\brpDefineBookPrefix{2Tm}{2Tim}
+\brpDefineBookPrefix{IITi}{2Tim}
+\brpDefineBookPrefix{IITm}{2Tim}
+\brpDefineBookPrefix{Ti}{Titus}
+\brpDefineBookPrefix{Tt}{Titus}
+\brpDefineBookPrefix{Phile}{Phlm}
+\brpDefineBookPrefix{Phl}{Phlm}
+\brpDefineBookPrefix{Phm}{Phlm}
+\brpDefineBookPrefix{Heb}{Heb}
+\brpDefineBook{He}{Heb}
+\brpDefineBookPrefix{Ja}{Jas}
+\brpDefineBookPrefix{Js}{Jas}
+\brpDefineBookPrefix{Jm}{Jas}
+\brpDefineBookPrefix{Jk}{Jas}
+\brpDefineBookPrefix{1P}{1Pet}
+\brpDefineBookPrefix{IP}{1Pet}
+\brpDefineBookPrefix{2P}{2Pet}
+\brpDefineBookPrefix{IIP}{2Pet}
+\brpDefineBookPrefix{1J}{1John}
+\brpDefineBookPrefix{IJ}{1John}
+\brpDefineBookPrefix{2J}{2John}
+\brpDefineBookPrefix{IIJ}{2John}
+\brpDefineBookPrefix{3J}{3John}
+\brpDefineBookPrefix{IIIJ}{3John}
+\brpDefineBookPrefix{Jude}{Jude}
+\brpDefineBookPrefix{Juda}{Jude}
+\brpDefineBook{Jud}{Jude}
+\brpDefineBookPrefix{Rev}{Rev}
+\brpDefineBookPrefix{Rv}{Rev}
+\brpDefineBookPrefix{Of}{Rev}
+\brpDefineBookPrefix{Apok}{Rev}
+\brpDefineBookPrefix{Apk}{Rev}
+
+\brpDefineBookPrefix{Judi}{Jdt}
+\brpDefineBookPrefix{Jdt}{Jdt}
+\brpDefineBookPrefix{To}{Tob}
+\brpDefineBookPrefix{1Ma}{1Macc}
+\brpDefineBookPrefix{IMa}{1Macc}
+\brpDefineBookPrefix{2Ma}{2Macc}
+\brpDefineBookPrefix{IIMa}{2Macc}
+\brpDefineBookPrefix{W}{Wis}
+\brpDefineBookPrefix{Si}{Sir}
+\brpDefineBookPrefix{Ecclesiasti}{Sir}
+\brpDefineBookPrefix{Ecclu}{Sir}
+\brpDefineBookPrefix{JesusS}{Sir}
+\brpDefineBookPrefix{Ba}{Bar}
+\brpDefineBookPrefix{AddD}{AddDan}
+\brpDefineBookPrefix{AdditionsD}{AddDan}
+\brpDefineBookPrefix{AdditionstoD}{AddDan}
+\brpDefineBookPrefix{GreekD}{AddDan}
+\brpDefineBookPrefix{GrD}{AddDan}
+\brpDefineBookPrefix{St\"uckezuD}{AddDan}
+\brpDefineBookPrefix{St"uckezuD}{AddDan}
+\brpDefineBookPrefix{StueckezuD}{AddDan}
+\brpDefineBookPrefix{St^^c3^^bcckezuD}{AddDan}% utf8 \"u
+\brpDefineBookPrefix{St^^fcckezuD}{AddDan}% latin1 \"u
+\brpDefineBookPrefix{St\"uckeD}{AddDan}
+\brpDefineBookPrefix{St"uckeD}{AddDan}
+\brpDefineBookPrefix{StueckeD}{AddDan}
+\brpDefineBookPrefix{St^^c3^^bcckeD}{AddDan}% utf8 \"u
+\brpDefineBookPrefix{St^^fcckeD}{AddDan}% latin1 \"u
+\brpDefineBookPrefix{StD}{AddDan}
+\brpDefineBookPrefix{AddE}{AddEsth}
+\brpDefineBookPrefix{AdditionsE}{AddEsth}
+\brpDefineBookPrefix{AdditionstoE}{AddEsth}
+\brpDefineBookPrefix{GreekE}{AddEsth}
+\brpDefineBookPrefix{GrE}{AddEsth}
+\brpDefineBookPrefix{St\"uckezuE}{AddEsth}
+\brpDefineBookPrefix{St"uckezuE}{AddEsth}
+\brpDefineBookPrefix{StueckezuE}{AddEsth}
+\brpDefineBookPrefix{St^^c3^^bcckezuE}{AddEsth}% utf8 \"u
+\brpDefineBookPrefix{St^^fcckezuE}{AddEsth}% latin1 \"u
+\brpDefineBookPrefix{St\"uckeE}{AddEsth}
+\brpDefineBookPrefix{St"uckeE}{AddEsth}
+\brpDefineBookPrefix{StueckeE}{AddEsth}
+\brpDefineBookPrefix{St^^c3^^bcckeE}{AddEsth}% utf8 \"u
+\brpDefineBookPrefix{St^^fcckeE}{AddEsth}% latin1 \"u
+\brpDefineBookPrefix{StE}{AddEsth}
+\brpDefineBookPrefix{EpistleofJer}{EpJer}
+\brpDefineBookPrefix{EpistleJer}{EpJer}
+\brpDefineBookPrefix{EpJer}{EpJer}
+\brpDefineBookPrefix{BriefdesJer}{EpJer}
+\brpDefineBookPrefix{BriefJer}{EpJer}
+\brpDefineBookPrefix{BrJer}{EpJer}
+
+% \brp@ifdigit{char}{true}{false}
+\newcommand*{\brp@ifdigit}[1]{%
+ \ifboolexpe{ not ( test{\ifnumcomp{`#1}{<}{`0}} or test{\ifnumcomp{`#1}{>}{`9}} ) }%
+}
+
+% The main macro:
+% \brp@parse{passagedesc}
+% This will set \brp@result to a sequence of
+% \brp@range{bookname}{from-chapter}{from-verse}{to-chapter}{to-verse}
+% If a complete book is specified, the numbers are all empty.
+% If a complete from-/to-chapter is specified, the corresponding verse is empty.
+% For non-ranges, the from- and to- values will be equal.
+% For books consisting of a single chapter, the chapter values will be 0.
+% When expanding \brp@result, set \brp@range to a suitable handler
+\newcommand*{\brp@parse}[2][]{%
+ % load saved options (not in group ...)
+ \brp@applyoptions
+ % process options
+ \def\do##1{%
+ \ifcsdef{brp@optset@##1}{\csuse{brp@optset@##1}}{%
+ \PackageError{bibleref-parse}{unknown option '##1'}{}%
+ }}%
+ \docsvlist{#1}%
+ % determine what to do with a comma
+ \iftoggle{brp@commaauto}{%
+ \iftoggle{brp@commalikeBR}{%
+ \brp@ifsubstring{,}{\BRchvsep}{%
+ \toggletrue{brp@commapreferchvsep}%
+ }{%
+ \togglefalse{brp@commapreferchvsep}%
+ }%
+ }{}%
+ \iftoggle{brp@commapreferchvsep}{%
+ \brp@ifsubstring{:}{#2}{%
+ \togglefalse{brp@commaischvsep}%
+ }{%
+ \toggletrue{brp@commaischvsep}%
+ }%
+ }{%
+ \togglefalse{brp@commaischvsep}%
+ }%
+ }{%
+ \iftoggle{brp@commalikeBR}{%
+ \brp@ifsubstring{,}{\BRchvsep}{%
+ \toggletrue{brp@commaischvsep}%
+ }{%
+ \togglefalse{brp@commaischvsep}%
+ }%
+ }{}%
+ }%
+ % initialisation
+ \let\brp@result\@empty
+ \let\brp@data@book\@empty
+ % the actual parsing
+ \expandafter\brp@parse@book #2\brp@endlist
+}
+
+% helper macro to determine if a string has a substring
+% \brp@ifsubstring{substring}{string}{true}{false}
+\def\brp@ifsubstring#1#2{%
+ \def\brp@@test##1#1##2##3\brp@endlist{%
+ \ifstrequal{##2}{\brp@marker}{\@secondoftwo}{\@firstoftwo}}%
+ \expandafter\brp@@test #2#1\brp@marker\brp@endlist
+}
+% special marker for above detection macro
+\def\brp@marker{\noexpand\brp@marker}
+
+% end-of-passagedesc marker
+\def\brp@endlist{\noexpand\brp@endlist}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The following macros parse a passagedesc step by step
+% and store the resulting ranges in \brp@result
+
+% expect a book name
+\def\brp@parse@book#1{%
+ \ifx#1\brp@endlist
+ % reference to a complete book
+ \brp@bookname{\brp@data@book}%
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}{}{}{}{}}%
+ \let\brp@nextcom=\@empty
+ \else
+ \ifx\brp@data@book\@empty
+ % always take the first char as part of the bookname, even if it is a digit
+ \def\brp@data@book{#1}%
+ \let\brp@nextcom\brp@parse@book%
+ \else%
+ % nonempty: read up to first digit
+ \brp@ifdigit{#1}{%
+ \let\brp@data@chapterstart=\@empty
+ \let\brp@data@versestart=\@empty
+ % skip to verse parsing for one-chapter books
+ \brp@bookname{\brp@data@book}%
+ \def\tempa{Obad}\ifx\tempa\brp@bk
+ \def\brp@data@chapter{0}\def\brp@nextcom{\brp@parse@verse #1}\else
+ \def\tempa{Phlm}\ifx\tempa\brp@bk
+ \def\brp@data@chapter{0}\def\brp@nextcom{\brp@parse@verse #1}\else
+ \def\tempa{2John}\ifx\tempa\brp@bk
+ \def\brp@data@chapter{0}\def\brp@nextcom{\brp@parse@verse #1}\else
+ \def\tempa{3John}\ifx\tempa\brp@bk
+ \def\brp@data@chapter{0}\def\brp@nextcom{\brp@parse@verse #1}\else
+ % else switch to chapter mode
+ \let\brp@data@chapter=\@empty
+ \def\brp@nextcom{\brp@parse@chapter #1}%
+ \fi\fi\fi\fi
+ }{%
+ \if;#1%
+ % reference to a complete book
+ \brp@bookname{\brp@data@book}%
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}{}{}{}{}}%
+ \let\brp@data@book\@empty
+ \let\brp@nextcom\brp@parse@book
+ \else\if+#1%
+ % reference to a complete book
+ \brp@bookname{\brp@data@book}%
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}{}{}{}{}}%
+ \let\brp@data@book\@empty
+ \let\brp@nextcom\brp@parse@book
+ \else
+ % append char to bookname
+ \appto\brp@data@book{#1}%
+ \let\brp@nextcom\brp@parse@book
+ \fi\fi
+ }%
+ \fi
+ \fi
+ \brp@nextcom
+}
+
+% expect a chapter number
+\def\brp@parse@chapter#1{%
+ \ifx#1\brp@endlist
+ \ifx\brp@data@chapterstart\@empty
+ % reference to a single, complete chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{}{\brp@data@chapter}{}}%
+ \else
+ % reference range which ends with a complete chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{}}%
+ \let\brp@data@chapterstart\@empty
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@nextcom=\@empty
+ \else
+ \brp@ifdigit{#1}{%
+ % append char to chapter
+ \appto\brp@data@chapter{#1}%
+ \let\brp@nextcom\brp@parse@chapter
+ }{%
+ \if,#1%
+ \iftoggle{brp@commaischvsep}{%
+ \let\brp@data@verse=\@empty
+ \let\brp@nextcom\brp@parse@verse
+ }{%
+ \ifx\brp@data@chapterstart\@empty
+ % reference to a single, complete chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{}{\brp@data@chapter}{}}%
+ \else
+ % reference range which ends with a complete chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{}}%
+ \let\brp@data@chapterstart\@empty
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapter\@empty
+ \let\brp@nextcom\brp@parse@chapter
+ }%
+ \else\if:#1%
+ \let\brp@data@verse=\@empty
+ \let\brp@nextcom\brp@parse@verse
+ \else\if;#1%
+ \ifx\brp@data@chapterstart\@empty
+ % reference to a single, complete chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{}{\brp@data@chapter}{}}%
+ \else
+ % reference range which ends with a complete chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{}}%
+ \let\brp@data@chapterstart\@empty
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapter\@empty
+ \let\brp@nextcom\brp@parse@bookorchapter
+ \else\if+#1%
+ \ifx\brp@data@chapterstart\@empty
+ % reference to a single, complete chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{}{\brp@data@chapter}{}}%
+ \else
+ % reference range which ends with a complete chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{}}%
+ \let\brp@data@chapterstart\@empty
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapter\@empty
+ \let\brp@nextcom\brp@parse@bookorchapter
+ \else\if-#1%
+ \let\brp@data@versestart\@empty%
+ \let\brp@data@chapterstart\brp@data@chapter
+ \let\brp@data@chapter\@empty
+ \let\brp@nextcom\brp@parse@chapter
+ \else
+ \PackageError{bibleref-parse}%
+ {unsupported syntax: chapter-number followed by #1}%
+ {A chapter-number must be followed by one of ',:;+-' or end-of-string}%
+ \let\brp@nextcom=\@empty
+ \fi\fi\fi\fi\fi
+ }%
+ \fi
+ \brp@nextcom
+}
+
+% expect a verse number
+\def\brp@parse@verse#1{%
+ \ifx#1\brp@endlist
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom=\@empty
+ \else
+ \brp@ifdigit{#1}{%
+ % append char to verse
+ \appto\brp@data@verse{#1}%
+ \let\brp@nextcom\brp@parse@verse
+ }{%
+ \if#1.%
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom\brp@parse@verse
+ \else\if#1+%
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom\brp@parse@bookorchapterorverse
+ \else\if#1-%
+ \let\brp@data@versestart=\brp@data@verse
+ \let\brp@data@verse=\@empty
+ \let\brp@data@chapterstart=\brp@data@chapter
+ \let\brp@nextcom\brp@parse@chapterorverse
+ \else\if#1,%
+ \iftoggle{brp@commaischvsep}{%
+ \PackageError{bibleref-parse}%
+ {unsupported syntax: unexpected use of "," to list verses}%
+ {See the documentation of the 'comma=' options for details.}%
+ }{%
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom\brp@parse@chapterorverse
+ }%
+ \else\if#1;%
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@chapter\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom\brp@parse@bookorchapter
+ \else
+ \PackageError{bibleref-parse}%
+ {unsupported syntax: verse-number followed by '#1'}%
+ {A verse-number must be followed by one of ',.+-;' or end-of-string.}%
+ \fi\fi\fi\fi\fi
+ }%
+ \fi
+ \brp@nextcom
+}
+
+% expect a verse number which might later turn out to be a chapter number
+\def\brp@parse@chapterorverse#1{%
+ \ifx#1\brp@endlist
+ % it was a verse.
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom=\@empty
+ \else
+ \brp@ifdigit{#1}{%
+ % append char to verse
+ \appto\brp@data@verse{#1}%
+ \let\brp@nextcom\brp@parse@chapterorverse
+ }{%
+ \if#1.%
+ % it was a verse.
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom\brp@parse@verse
+ \else\if#1+%
+ % it was a verse.
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom\brp@parse@bookorchapterorverse
+ \else\if#1-%
+ % assume it was a verse.
+ \let\brp@data@versestart=\brp@data@verse
+ \let\brp@data@verse=\@empty
+ \let\brp@data@chapterstart=\brp@data@chapter
+ \let\brp@nextcom\brp@parse@chapterorverse
+ \else\if,#1%
+ \iftoggle{brp@commaischvsep}{%
+ % our hypothesis was wrong - we were actually looking at a chapter
+ \let\brp@data@chapter\brp@data@verse
+ \let\brp@data@verse\@empty
+ \let\brp@nextcom\brp@parse@verse
+ }{%
+ % assume it was a verse.
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom\brp@parse@chapterorverse
+ }%
+ \else\if:#1%
+ % our hypothesis was wrong - we were actually looking at a chapter
+ \let\brp@data@chapter\brp@data@verse
+ \let\brp@data@verse\@empty
+ \let\brp@nextcom\brp@parse@verse
+ \else\if;#1%
+ % assume it was a verse.
+ \ifx\brp@data@versestart\@empty
+ \ifx\brp@data@chapterstart\@empty
+ % reference to single verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{\brp@data@verse}{\brp@data@chapter}{\brp@data@verse}}%
+ \else
+ % reference starting with a complete different chapter
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \else
+ % reference starting with another verse
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapterstart}{\brp@data@versestart}{\brp@data@chapter}{\brp@data@verse}}%
+ \fi
+ \let\brp@data@verse\@empty
+ \let\brp@data@chapter\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom\brp@parse@bookorchapter
+ \else
+ \PackageError{bibleref-parse}%
+ {unsupported syntax: unexpected token '#1'}%
+ {Expected one of ',.+-;:' or end-of-string.}%
+ \fi\fi\fi\fi\fi\fi
+ }%
+ \fi
+ \brp@nextcom
+}
+% expect a verse number which might later turn out to be a chapter number or book name
+\def\brp@parse@bookorchapterorverse#1{%
+ \ifx#1\brp@endlist
+ % it was a verse.
+ \def\brp@nextcom{\brp@parse@verse\brp@endlist}%
+ \else
+ \brp@ifdigit{#1}{%
+ \ifx\brp@data@verse\@empty
+ % this might still be the digit at the start of a bookname.
+ \def\brp@data@verse{#1}%
+ \let\brp@nextcom\brp@parse@bookorchapterorverse
+ \else
+ % it was a chapter or a verse.
+ \appto\brp@data@verse{#1}%
+ \let\brp@nextcom\brp@parse@chapterorverse
+ \fi
+ }{%
+ \if#1.%
+ % it is a verse or a book - find out with the next char
+ \let\brp@nextcom\brp@parse@bookorverse
+ \else\if#1+%
+ % it was a verse.
+ \def\brp@nextcom{\brp@parse@verse +}%
+ \else\if#1-%
+ % assume it was a verse.
+ \let\brp@data@versestart=\brp@data@verse
+ \let\brp@data@verse=\@empty
+ \let\brp@data@chapterstart=\brp@data@chapter
+ \let\brp@nextcom\brp@parse@chapterorverse
+ \else\if,#1%
+ \iftoggle{brp@commaischvsep}{%
+ % our hypothesis was wrong - we were actually looking at a chapter
+ \let\brp@data@chapter\brp@data@verse
+ \let\brp@data@verse\@empty
+ \let\brp@nextcom\brp@parse@verse
+ }{%
+ % assume it was a verse.
+ \def\brp@nextcom{\brp@parse@verse ,}%
+ }%
+ \else\if:#1%
+ % our hypothesis was wrong - we were actually looking at a chapter
+ \let\brp@data@chapter\brp@data@verse
+ \let\brp@data@verse\@empty
+ \let\brp@nextcom\brp@parse@verse
+ \else\if;#1%
+ % assume it was a verse.
+ \def\brp@nextcom{\brp@parse@verse ,}%
+ \else
+ % our hypothesis was wrong - we are looking at a book name
+ \edef\brp@data@book{\brp@data@verse #1}%
+ \let\brp@data@verse\@empty
+ \let\brp@nextcom\brp@parse@book
+ \fi\fi\fi\fi\fi\fi
+ }%
+ \fi
+ \brp@nextcom
+}
+% decide if the current contents of \brp@data@verse is a verse or the start of a
+% book name
+\def\brp@parse@bookorverse#1{%
+ \ifx#1\brp@endlist
+ \PackageError{bibleref-parse}%
+ {unsupported syntax: unexpected end-of-string.}%
+ {After a '.' a verse number or the continuation of a bookname is expected.}%
+ \else
+ \brp@ifdigit{#1}{%
+ % it was a verse.
+ \edef\brp@data@book{\brp@data@verse #1}%
+ \let\brp@data@verse\@empty
+ \def\brp@nextcom{\brp@parse@verse .#1}%
+ }{%
+ % it was a book.
+ \edef\brp@data@book{\brp@data@verse #1}%
+ \let\brp@data@verse\@empty
+ \let\brp@nextcom\brp@parse@book
+ }%
+ \fi
+ \brp@nextcom
+}
+
+% expect a chapter number which might turn out to be a book name
+\def\brp@parse@bookorchapter#1{%
+ \ifx#1\brp@endlist
+ \ifx\brp@data@chapter\@empty
+ \PackageError{bibleref-parse}%
+ {unsupported syntax: unexpected end-of-string.}%
+ {After a ';' a chapter-number or bookname is expected.}%
+ \else
+ % it was a chapter. reference it completely.
+ \eappto\brp@result{\noexpand\brp@range{\brp@bk}%
+ {\brp@data@chapter}{}{\brp@data@chapter}{}}%
+ \let\brp@data@verse\@empty
+ \let\brp@data@versestart\@empty
+ \let\brp@data@chapterstart\@empty
+ \let\brp@nextcom=\@empty
+ \fi
+ \else
+ \brp@ifdigit{#1}{%
+ \ifx\brp@data@chapter\@empty
+ % this might still be the digit at the start of a bookname.
+ \def\brp@data@chapter{#1}%
+ \let\brp@nextcom\brp@parse@bookorchapter
+ \else
+ % it was a chapter.
+ \appto\brp@data@chapter{#1}%
+ \let\brp@nextcom\brp@parse@chapter
+ \fi
+ }{%
+ % catch the remaining cases where we were looking at a chapter
+ \if#1,%
+ \def\brp@nextcom{\brp@parse@chapter ,}%
+ \else\if#1:%
+ \def\brp@nextcom{\brp@parse@chapter :}%
+ \else\if#1-%
+ \def\brp@nextcom{\brp@parse@chapter -}%
+ \else\if#1;%
+ \def\brp@nextcom{\brp@parse@chapter ;}%
+ \else\if#1+%
+ \def\brp@nextcom{\brp@parse@chapter +}%
+ \else
+ % our hypothesis was wrong - we were actually looking at a book
+ \edef\brp@data@book{\brp@data@chapter #1}%
+ \let\brp@data@chapter\@empty
+ \let\brp@nextcom\brp@parse@book
+ \fi\fi\fi\fi\fi
+ }%
+ \fi
+ \brp@nextcom
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% \brp@bookname{book}
+% This sets \brp@bk to the canonical OSIS name of the given book.
+% It should work for all English and German naming variants and their abbreviations.
+\def\brp@bookname#1{%
+ \let\brp@book=\@empty
+ \edef\brp@temp{#1}%
+ \expandafter\brp@parsebook\brp@temp\brp@endlist
+}
+
+\def\brp@parsebook#1{%
+ \ifx#1\brp@endlist
+ \ifcsdef{brp@bk@\expandafter\detokenize\expandafter{\brp@book}}{%
+ \letcs\brp@bk{brp@bk@\expandafter\detokenize\expandafter{\brp@book}}%
+ }{%
+ \PackageError{bibleref-parse}{unknown bookname '\brp@book'}{}%
+ % leave it non-canonical and hope for the best ...
+ \let\brp@bk\brp@book%
+ }%
+ \let\brp@next\relax
+ \else
+ \if.#1\else
+ \appto\brp@book{#1}%
+ \ifcsdef{brp@bkp@\expandafter\detokenize\expandafter{\brp@book}}{%
+ \edef\brp@bk{\csuse{brp@bkp@\expandafter\detokenize\expandafter{\brp@book}}}%
+ \let\brp@next\brp@gobblelist
+ }{%
+ \let\brp@next\brp@parsebook
+ }%
+ \fi
+ \fi
+ \brp@next
+}
+
+% helper macro to skip the rest of the bookname once we have identified it
+\def\brp@gobblelist#1{%
+ \ifx#1\brp@endlist
+ \let\brp@next=\@empty
+ \else
+ \let\brp@next=\brp@gobblelist
+ \fi
+ \brp@next
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Convert \brp@result to a list of bibleref calls with compact arguments.
+% The result is stored in \brp@brlist. \brp@do is used as command and should be
+% \let to \bibleref or the like before evaluating \brp@brlist.
+\def\brp@convert{%
+ \def\brp@brlist{}%
+ \let\brp@lastbook\@empty
+ \let\brp@lastchap\@empty
+ \def\brp@chaplist{}%
+ \def\brp@verselist{}%
+ \let\brp@range\brp@convert@range
+ \brp@result
+ \brp@convert@clearcache
+ \appto\brp@brlist{\relax}%
+ \undef\brp@lastbook
+ \undef\brp@lastchap
+ \undef\brp@chaplist
+ \undef\brp@verselist
+ \undef\brp@range
+ \undef\brp@startchap
+ \undef\brp@startverse
+ \undef\brp@endchap
+ \undef\brp@endverse
+}
+\def\brp@convert@clearcache{%
+ \ifdefempty{\brp@chaplist}{%
+ \ifdefempty{\brp@verselist}{}{%
+ \eappto\brp@brlist{(\brp@chaplist:\brp@verselist)}}%
+ }{%
+ \eappto\brp@brlist{(\brp@chaplist:\brp@verselist)}}%
+}
+% helper macro for \brp@convert that does the real work
+\def\brp@convert@range#1#2#3#4#5{%
+ \ifdefstring{\brp@lastbook}{#1}{}{%
+ % different books: start a new command
+ \ifdefempty{\brp@lastbook}{}{%
+ \brp@convert@clearcache
+ \appto\brp@brlist{\BRbksep}%
+ }%
+ \appto\brp@brlist{\brp@do{#1}}%
+ \def\brp@chaplist{}%
+ \def\brp@verselist{}%
+ \def\brp@lastbook{#1}%
+ \def\brp@lastchap{}%
+ }%
+ \ifstrequal{#2}{0}{%
+ % special handling for single-chapter books
+ \def\brp@startchap{#3}%
+ \def\brp@startverse{}%
+ \def\brp@endchap{#5}%
+ \def\brp@endverse{}%
+ }{%
+ \def\brp@startchap{#2}%
+ \def\brp@startverse{#3}%
+ \def\brp@endchap{#4}%
+ \def\brp@endverse{#5}%
+ }%
+ \ifdefequal{\brp@lastchap}{\brp@startchap}{%
+ % we start in the same chapter where we left before
+ \ifdefequal{\brp@startchap}{\brp@endchap}{%
+ % ... and we remain there
+ \ifdefequal{\brp@startverse}{\brp@endverse}{%
+ % add just one verse
+ \ifdefempty{\brp@verselist}{%
+ % strange. better start a new paren ...
+ \brp@convert@clearcache
+ \let\brp@chaplist\brp@startchap%
+ \let\brp@verselist\brp@startverse%
+ }{%
+ % add to already begun list
+ \eappto\brp@verselist{,\brp@startverse}%
+ }%
+ }{%
+ % add a verse range
+ \ifdefempty{\brp@verselist}{%
+ % strange. better start a new paren ...
+ \brp@convert@clearcache
+ \let\brp@chaplist\brp@startchap%
+ \edef\brp@verselist{\brp@startverse-\brp@endverse}%
+ }{%
+ \eappto\brp@verselist{,\brp@startverse-\brp@endverse}%
+ }%
+ }%
+ }{%
+ % we have a range over multiple chapters, starting in the current one
+ \ifdefempty{\brp@verselist}{%
+ % strange. better start a new paren ...
+ \brp@convert@clearcache
+ \let\brp@chaplist\brp@startchap%
+ \let\brp@verselist\brp@startverse%
+ }{%
+ \eappto\brp@verselist{,\brp@startverse}%
+ }%
+ % now to our target
+ \eappto\brp@brlist{(\brp@chaplist:\brp@verselist)-(\brp@endchap:\brp@endverse)}%
+ \def\brp@chaplist{}%
+ \def\brp@verselist{}%
+ \def\brp@lastchap{}%
+ }%
+ }{%
+ % we start in a different chapter
+ \ifdefempty{\brp@verselist}{%
+ \ifdefempty{\brp@startverse}{%
+ \ifdefempty{\brp@chaplist}{}{%
+ % \appto\brp@chaplist{,}
+ % due to a bug in bibleref, we need to start a new paren
+ \brp@convert@clearcache
+ \let\brp@verselist\@empty
+ \let\brp@chaplist\@empty
+ }%
+ \ifdefempty{\brp@endverse}{%
+ % no verses known, just append the chapters.
+ \ifdefequal{\brp@startchap}{\brp@endchap}{%
+ % single chapter
+ \eappto\brp@chaplist{\brp@startchap}%
+ }{%
+ % chapter range
+ \eappto\brp@chaplist{\brp@startchap-\brp@endchap}%
+ }%
+ \let\brp@lastchap\brp@endchap%
+ }{%
+ \eappto\brp@brlist{(\brp@chaplist\brp@startchap:)-(\brp@endchap:\brp@endverse)}%
+ \def\brp@chaplist{}%
+ \def\brp@verselist{}%
+ \def\brp@lastchap{}%
+ }%
+ }{%
+ \ifdefequal{\brp@startchap}{\brp@endchap}{%
+ \brp@convert@clearcache
+ \let\brp@chaplist\brp@startchap%
+ \ifdefequal{\brp@startverse}{\brp@endverse}{%
+ \let\brp@verselist\brp@startverse%
+ }{%
+ \edef\brp@verselist{\brp@startverse-\brp@endverse}%
+ }%
+ \let\brp@lastchap\brp@endchap%
+ }{%
+ \brp@convert@clearcache
+ \eappto\brp@brlist{(\brp@startchap:\brp@startverse)-(\brp@endchap:\brp@endverse)}%
+ \def\brp@chaplist{}%
+ \def\brp@verselist{}%
+ \def\brp@lastchap{}%
+ }%
+ }%
+ }{%
+ \brp@convert@clearcache
+ \ifdefequal{\brp@startchap}{\brp@endchap}{%
+ % we stay in one chapter
+ \let\brp@chaplist\brp@startchap%
+ \ifdefequal{\brp@startverse}{\brp@endverse}{%
+ % single verse
+ \let\brp@verselist\brp@startverse%
+ }{%
+ % verse range
+ \edef\brp@verselist{\brp@startverse-\brp@endverse}%
+ }%
+ \let\brp@lastchap\brp@endchap%
+ }{%
+ % we span several chapters
+ \ifdefempty{\brp@startverse}{%
+ \ifdefempty{\brp@endverse}{%
+ % no verses given: compact chapter range
+ \edef\brp@chaplist{\brp@startchap-\brp@endchap}%
+ \def\brp@verselist{}%
+ \let\brp@lastchap\brp@endchap%
+ }{%
+ % only to-verse given
+ \eappto\brp@brlist{(\brp@startchap:)-(\brp@endchap:\brp@endverse)}%
+ \def\brp@chaplist{}%
+ \def\brp@verselist{}%
+ \def\brp@lastchap{}%
+ }%
+ }{%
+ \eappto\brp@brlist{(\brp@startchap:\brp@startverse)-(\brp@endchap:\brp@endverse)}%
+ \def\brp@chaplist{}%
+ \def\brp@verselist{}%
+ \def\brp@lastchap{}%
+ }%
+ }%
+ }%
+ }%
+}
+
+\newcommand{\pbibleverse}[2][]{%
+ \brp@parse[#1]{#2}%
+ \brp@convert%
+ \let\brp@do\bibleverse%
+ \brp@brlist
+}
+
+\newcommand{\pibibleverse}[2][]{%
+ \brp@parse[#1]{#2}%
+ \brp@convert%
+ \let\brp@do\ibibleverse%
+ \brp@brlist
+}
+
+\newcommand{\pibiblechvs}[2][]{%
+ \brp@parse[#1]{#2}%
+ \brp@convert%
+ \let\brp@do\ibiblechvs%
+ \brp@brlist
+}
+
+\newcommand{\pibiblevs}[2][]{%
+ \brp@parse[#1]{#2}%
+ \brp@convert%
+ \let\brp@do\ibiblevs%
+ \brp@brlist
+}
+
+\providecommand{\BRbksep}{;\space}
+
+\endinput
+