\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