\ProvidesPackage{blx-case-latex2e} [\abx@cptid] % auxiliary macros % babel's \languagename has weird catcodes, % so we \detokenize our language names \def\blx@listgadd@switched#1#2{\listgadd{#2}{#1}} \ifundef\expanded {\protected\def\blx@deifinlist#1{% \begingroup \edef\blx@tempa{\endgroup \blx@deifinlist@i{#1}}% \blx@tempa}% \protected\def\blx@deifinlist@i#1{% \expandafter\ifinlist\expandafter{\detokenize{#1}}}% % \protected\def\blx@listdxadd@switched#1{% \begingroup \edef\blx@tempa{\endgroup \blx@listdxadd@switched@i{#1}}% \blx@tempa}% \protected\def\blx@listdxadd@switched@i#1{% \expandafter\blx@listgadd@switched\expandafter{\detokenize{#1}}}} {\def\blx@deifinlist#1{% \expandafter\expandafter\expandafter\ifinlist \expandafter\expandafter\expandafter{% \expandafter\detokenize\expandafter{\expanded{#1}}}}% % \def\blx@listdxadd@switched#1{% \expandafter\expandafter\expandafter\blx@listgadd@switched \expandafter\expandafter\expandafter{% \expandafter\detokenize\expandafter{\expanded{#1}}}}} \def\blx@listdxadd#1#2{\blx@listdxadd@switched{#2}{#1}} % we don't have l3text's (pseudo)BCP47 language codes here \newrobustcmd*{\DeclareBabelToExplLanguageMapping}[2]{% \blx@warning{The command '\string\DeclareBabelToExplLanguageMapping'% \MessageBreak is only available with the expl3 case changing\MessageBreak implementation ('casechanger=expl3').\MessageBreak Ignoring}} \newrobustcmd*{\UndeclareBabelToExplLanguageMapping}[1]{% \blx@warning{The command '\string\UndeclareBabelToExplLanguageMapping'% \MessageBreak is only available with the expl3 case changing\MessageBreak implementation ('casechanger=expl3').\MessageBreak Ignoring}} \def\blx@maketext@lowercase{\MakeLowercase} \def\blx@maketext@uppercase{\MakeUppercase} \def\blx@maketext@makecapital{\MakeCapital} % {} \newrobustcmd{\MakeCapital}[1]{% \begingroup \blx@mkcp@init \protected@edef\blx@tempa{#1}% \expandafter\blx@mkcp@parse\blx@tempa\@empty\blx@mkcp@end} \def\blx@mkcp@init{% \def\blx@mkcp@iec{\noexpand\blx@mkcp@iec\noexpand}% \def\blx@mkcp@bbl{\noexpand\blx@mkcp@bbl\noexpand}% \def\blx@mkcp@sgl{\noexpand\blx@mkcp@sgl\noexpand}% \def\blx@mkcp@dbl{\noexpand\blx@mkcp@dbl\noexpand}% \def\do##1{\def##1{\blx@mkcp@sgl##1}}\abx@dosingleaccents \def\do##1{\def##1{\blx@mkcp@dbl##1}}\abx@dodoubleaccents \def\IeC##1{\blx@mkcp@iec\IeC{##1}}% \def\@tabacckludge##1{% \expandafter\blx@mkcp@sgl\csname\string##1\endcsname}} \begingroup \catcode`\"=\active \gappto\blx@mkcp@init{% \ifnum\catcode`\"=\active \def"#1{\blx@mkcp@bbl"\noexpand#1}% \fi} \endgroup \def\blx@mkcp@parse{% \futurelet\@let@token\blx@mkcp@eval} \long\def\blx@mkcp@eval{% \ifx\@let@token\blx@mkcp@iec \expandafter\blx@mkcp@getiec \fi \ifx\@let@token\blx@mkcp@bbl \expandafter\blx@mkcp@gettwo \fi \ifx\@let@token\blx@mkcp@sgl \expandafter\blx@mkcp@gettwo \fi \ifx\@let@token\blx@mkcp@dbl \expandafter\blx@mkcp@getthree \fi \blx@mkcp@case} \def\blx@mkcp@getiec#1\blx@mkcp@case#2#3#4{% \blx@mkcp@case{#2#3{#4}}} \def\blx@mkcp@gettwo#1\blx@mkcp@case#2#3#4{% \blx@mkcp@case{#2#3#4}} \def\blx@mkcp@getthree#1\blx@mkcp@case#2#3#4#5{% \blx@mkcp@case{#2#3#4#5}} \long\def\blx@mkcp@case#1{% \begingroup \def\i{I}\def\j{J}% \def\do##1##2{\let##1##2\do}% \expandafter\do\@uclclist\relax{\relax\@gobble}% \uppercase{\protected@edef\blx@tempa{\endgroup\blx@mkcp@end#1}}% \blx@tempa} \protected\long\def\blx@mkcp@end#1\blx@mkcp@end{% \let\blx@mkcp@iec\noexpand \let\blx@mkcp@bbl\noexpand \let\blx@mkcp@sgl\noexpand \let\blx@mkcp@dbl\noexpand \protected@edef\blx@tempa{\endgroup#1}% \blx@tempa} \DeclareBiblatexOption{global,type,entry}[boolean]{bibtexcaseprotection}[true]{% \ifstrequal{#1}{true} {} {\ifstrequal{#1}{false} {\blx@warning {The option 'bibtexcaseprotection=false' is only\MessageBreak available with expl3}} {\blx@err@invopt{bibtexcaseprotection=#1} {Valid values for 'bibtexcaseprotection' are 'true' and 'false'\MessageBreak (but 'false' only works with expl3 code)}}}} % {} \newrobustcmd*{\MakeSentenceCase}{% \@ifstar\blx@mksc@i\blx@mksc@ii} % \blx@cmksc@lang is defined in biblatex.sty % it expands to the applicable language for the title field \def\blx@mksc@i{% \blx@deifinlist\blx@mksc@lang\blx@cmksc@lang {\blx@mksc@ii} {\@firstofone}} \long\def\blx@mksc@ii#1{% \begingroup \let\blx@tempa\@empty \let\blx@tempb\@empty \blx@mksc@init \protected@edef\@tempa{#1}% \expandafter\blx@mksc@parse\@tempa\blx@mksc@end} \def\blx@mksc@init{% \blx@mkcp@init \def\blx@mkcp@nil{\noexpand\blx@mkcp@nil\noexpand}% \def\i{\blx@mkcp@nil\i}\def\j{\blx@mkcp@nil\j}% \def\do##1{% \ifx##1\relax \else \def##1{\blx@mkcp@nil##1}% \expandafter\do \fi}% \expandafter\do\@uclclist\relax} \def\blx@mksc@parse{% \futurelet\@let@token\blx@mksc@eval} \let\blx@asttoken=* \def\blx@mksc@eval{% \ifx\@let@token\blx@mksc@end \expandafter\blx@mksc@end \fi \ifx\@let@token\bgroup \expandafter\blx@mksc@group \fi \ifx\@let@token\@sptoken \expandafter\blx@mksc@space \fi \ifx\@let@token\blx@mkcp@nil \expandafter\blx@mksc@getone \fi \ifx\@let@token\blx@mkcp@iec \expandafter\blx@mksc@getiec \fi \ifx\@let@token\blx@mkcp@bbl \expandafter\blx@mksc@gettwo \fi \ifx\@let@token\blx@mkcp@sgl \expandafter\blx@mksc@gettwo \fi \ifx\@let@token\blx@mkcp@dbl \expandafter\blx@mksc@getthree \fi \ifx\@let@token\blx@asttoken \expandafter\blx@mksc@cs \fi \if\noexpand\@let@token\relax \expandafter\blx@mksc@cs \fi \blx@mksc@other} \def\blx@mksc@end#1\blx@mksc@end{% \blx@mksc@eject \let\blx@mkcp@nil\noexpand \let\blx@mkcp@iec\noexpand \let\blx@mkcp@bbl\noexpand \let\blx@mkcp@sgl\noexpand \let\blx@mkcp@dbl\noexpand \let\MakeUppercase\relax \let\MakeLowercase\relax \protected@edef\blx@tempa{\endgroup\blx@tempa}% \blx@tempa} \long\def\blx@mksc@group#1\blx@mksc@other#2{% \futurelet\@let@token\blx@mksc@ingroup#2&{#2}% \blx@mksc@endhead \blx@mksc@parse} \long\def\blx@mksc@ingroup#1{% \if\noexpand\@let@token\relax \ifx\@let@token\blx@mkcp@sgl \blx@mksc@nocase{{#2}}% \else \ifx\@let@token\blx@mkcp@dbl \blx@mksc@nocase{{#2}}% \else \blx@mksc@locase{{#2}}% \fi \fi \else \blx@mksc@nocase{{#2}}% \fi} \def\blx@mksc@space{\def\blx@mksc@space##1\blx@mksc@other} \csuse{blx@mksc@space} {% \blx@mksc@anycase{ }% \blx@mksc@endhead \blx@mksc@parse} \long\def\blx@mksc@cs#1\blx@mksc@other#2{% \ifcat\noexpand~\noexpand#2% \blx@mksc@locase{#2}% \else \blx@mksc@nocase{#2}% \fi \blx@mksc@endhead \blx@mksc@parse} \def\blx@mksc@getiec#1\blx@mksc@other#2#3#4{% \blx@mksc@other{#2#3{#4}}} \def\blx@mksc@getone#1\blx@mksc@other#2#3{% \blx@mksc@other{#2#3}} \def\blx@mksc@gettwo#1\blx@mksc@other#2#3#4{% \blx@mksc@other{#2#3#4}} \def\blx@mksc@getthree#1\blx@mksc@other#2#3#4#5{% \blx@mksc@other{#2#3#4#5}} \long\def\blx@mksc@other#1{% \blx@mksc@locase{#1}% \blx@mksc@endhead \blx@mksc@parse} \def\blx@mksc@locase{% \appto\blx@tempb} \def\blx@mksc@nocase{% \blx@mksc@eject \appto\blx@tempa} \def\blx@mksc@anycase{% \ifx\blx@tempb\@empty \expandafter\appto \expandafter\blx@tempa \else \expandafter\appto \expandafter\blx@tempb \fi} \def\blx@mksc@eject{% \ifx\blx@tempb\@empty \else \eappto\blx@tempa{\noexpand\MakeLowercase{\expandonce\blx@tempb}}% \let\blx@tempb\@empty \fi} \def\blx@mksc@endhead{% \ifx\blx@tempb\@empty \else \eappto\blx@tempa{\noexpand\MakeCapital{\expandonce\blx@tempb}}% \let\blx@tempb\@empty \fi \let\blx@mksc@endhead\relax} % {} \newrobustcmd*{\DeclareCaseLangs}{% \@ifstar {\blx@defcaselangs} {\global\let\blx@cmksc@lang\@empty \blx@defcaselangs}} \def\blx@defcaselangs#1{% \ifblank{#1} {} {\forcsvlist{\blx@listdxadd\blx@cmksc@lang}{#1}}} % \DeclareCaseLangs invocation is in biblatex.sty \newrobustcmd*{\ifcaselang}[1][\blx@languagename]{% \blx@deifinlist{#1}\blx@cmksc@lang} \endinput