\ProvidesPackage{cu-util}[2016/03/31 v1.0 CU Util] \RequirePackage{etoolbox} % % Some ideas taken from: % http://tex.stackexchange.com/questions/33197/parsing-a-macro-argument-character-by-character-for-conditional-execution % \def\cu@declare@accent#1{% \def\cu@@declare@accent##1##2\relax{% \@namedef{cu@accent@\detokenize{##2}}{\relax}% }% \cu@@declare@accent#1\relax }% % \newcommand\cu@tokenizeletter[1]{% \bgroup \def\@accum{}% \def\cu@collectworker{% \cu@ifnextaccent{% \cu@collectworker@one }{% \expandafter \egroup \expandafter #1\expandafter {\@accum}% }% }% \def\cu@collectworker@one##1{% \edef\@accum{\@accum ##1}% \cu@collectworker }% \def\cu@collectworker@two##1##2{% \edef\@accum{\@accum ##1##2}% \cu@collectworker }% \cu@ifnextbgroup{\egroup #1}{% \cu@ifnextdigraph{\cu@collectworker@two}{\cu@collectworker@one}% }% }% % \newrobustcmd\cu@ifnextletter[2]{% \bgroup \def\cu@worker{% \ifcat\noexpand\@let@token a% \expandafter\egroup\expandafter\@firstoftwo \else \expandafter\egroup\expandafter\@secondoftwo \fi {#1}{#2}% }% \futurelet\@let@token\cu@worker } % \newrobustcmd\cu@ifnextaccent[2]{% \bgroup \def\cu@letter@i{% \ifdefequal{\@let@token}{ }{% \egroup #2% false }{% \cu@letter@ii }% }% \def\cu@letter@ii##1{% \ifcsdef{cu@accent@\detokenize{##1}}{% \egroup #1##1% true }{% \egroup #2##1% false }% }% \futurelet\@let@token\cu@letter@i }% % % Detect Oy and oy digraphs % kv command colors just one letter with all accents if any \def\cu@declare@digraph#1#2\relax{% \@namedef{cu@digraph@start@\detokenize{#1}}{\relax}% \@namedef{cu@digraph@end@\detokenize{#2}}{\relax}% }% % \cu@declare@digraph оу\relax \cu@declare@digraph Оу\relax \cu@declare@digraph ᲂу\relax % \newrobustcmd{\cu@ifnextdigraph}[2]{% \bgroup \def\cu@digraph@i{% \ifdefequal{\@let@token}{ }{% \egroup #2% false! }{% \cu@digraph@ii }% }% \def\cu@digraph@ii##1{% \ifcsdef{cu@digraph@start@\detokenize{##1}}{% \edef\@accum{\@accum##1}% \futurelet\@let@token\cu@digraph@iii }{% \egroup #2##1% false! }% }% \def\cu@digraph@iii##1{% \ifcsdef{cu@digraph@end@\detokenize{##1}}{% \expandafter \egroup \expandafter #1\@accum ##1% true! }{% \expandafter \egroup \expandafter #2\@accum ##1% false! }% }% \def\@accum{}% \futurelet\@let@token\cu@digraph@i }% % \newrobustcmd{\cu@ifnextbgroup}[2]{% \bgroup \def\cu@bgroup{% \ifdefequal{\@let@token}{ }{% \egroup #2% false! }{% \egroup\@ifnextchar\bgroup{#1}{#2}% }% }% \futurelet\@let@token\cu@bgroup }% % \def\cu@test@tokenizeletter#1#2{% \bgroup \def\cu@testframe##1##2\@nnil{% \edef\@aa{##1-##2}% }% \cu@tokenizeletter\cu@testframe #1\@nnil \def\@bb{#2}% \ifx\@aa\@bb\else \errmessage{TEST FAILED: #1: "\@aa" expected "\@bb"}% \fi \egroup }% % % List all accents % %% declare all possible combineres (generated by make_declare_accents) \cu@declare@accent{◌̀} \cu@declare@accent{◌́} \cu@declare@accent{◌̑} \cu@declare@accent{◌̈} \cu@declare@accent{◌҆} \cu@declare@accent{◌̆} \cu@declare@accent{◌̾} \cu@declare@accent{◌꙽} \cu@declare@accent{◌꙼} \cu@declare@accent{◌̇} \cu@declare@accent{◌̏} \cu@declare@accent{◌҃} \cu@declare@accent{◌҇} \cu@declare@accent{◌ⷠ} \cu@declare@accent{◌ⷡ} \cu@declare@accent{◌ⷢ} \cu@declare@accent{◌ⷣ} \cu@declare@accent{◌ⷤ} \cu@declare@accent{◌ⷥ} \cu@declare@accent{◌ⷦ} \cu@declare@accent{◌ⷧ} \cu@declare@accent{◌ⷨ} \cu@declare@accent{◌ⷩ} \cu@declare@accent{◌ⷪ} \cu@declare@accent{◌ⷫ} \cu@declare@accent{◌ⷬ} \cu@declare@accent{◌ⷭ} \cu@declare@accent{◌ⷮ} \cu@declare@accent{◌ⷯ} \cu@declare@accent{◌ⷰ} \cu@declare@accent{◌ⷱ} \cu@declare@accent{◌ⷲ} \cu@declare@accent{◌ⷳ} \cu@declare@accent{◌ⷴ} \cu@declare@accent{◌ⷵ} \cu@declare@accent{◌ⷶ} \cu@declare@accent{◌ⷷ} \cu@declare@accent{◌ⷸ} \cu@declare@accent{◌ⷹ} \cu@declare@accent{◌ⷺ} \cu@declare@accent{◌ⷻ} \cu@declare@accent{◌ⷼ} \cu@declare@accent{◌ⷽ} \cu@declare@accent{◌ⷾ} \cu@declare@accent{◌ⷿ} \cu@declare@accent{◌ꙴ} \cu@declare@accent{◌ꙵ} \cu@declare@accent{◌ꙶ} \cu@declare@accent{◌ꙷ} \cu@declare@accent{◌ꙸ} \cu@declare@accent{◌ꙹ} \cu@declare@accent{◌ꙺ} \cu@declare@accent{◌ꙻ} \cu@declare@accent{◌꙼} \cu@declare@accent{◌꙽} \cu@declare@accent{◌҆} \cu@declare@accent{◌҅} %% end of generated block \endinput