diff --git a/unicodedomino.sty b/unicodedomino.sty index fb5cb8d4145ce5a5e28cf08bbf80d229012b93b8..f9937275f60db6f0d6a90ea8010ec317235e56f7 100644 --- a/unicodedomino.sty +++ b/unicodedomino.sty @@ -89,31 +89,6 @@ % end of utf8.def inline update \fi% -% missing in utf8.def 2017/01/28 v1.1t (Debian stretch) -\ifx\UTFviii@checkseq\@undefined% - \PackageWarning{unicodedomino}{Consider updating utf8.def}% - % taken from utf8.def 2018/04/05 v1.2c (Debian sid), no claims on this code - \def\UTFviii@checkseq#1:#2#3{% - \ifnum`#2<"80 % - \ifx\relax#3\else1\fi - \else - \ifnum`#2<"C0 % - 1 % - \else - \expandafter\expandafter\expandafter\UTFviii@check@continue - \expandafter\expandafter\expandafter#3% - \fi - \fi} - \def\UTFviii@check@continue#1{% - \ifx\relax#1% - \else - \ifnum`#1<"80 1\else\ifnum`#1>"BF 1\fi\fi - \expandafter\UTFviii@check@continue - \fi - } - % end of utf8.def inline update -\fi% - % override to beautify the output, not strictly necessary but requested \gdef\UTFviii@splitcsname#1:#2\relax{% #2 (\expandafter\unicodedomino@codepoint\expandafter{% @@ -205,7 +180,7 @@ % main handler \def\UTFviii@defined#1{% \ifx#1\relax% - \if\relax\expandafter\UTFviii@checkseq\string#1\relax\relax% + \if\relax\expandafter\UTFviii@chkseq\string#1\empty\relax% % unknown char \ifx\protect\@typeset@protect% % not protected @@ -234,5 +209,140 @@ \fi% }% +% input validation, better than what’s in utf8.def v1.2c +\def\UTFviii@chkseq#1:#2#3\empty{% + \ifnum`#2<"80 % + \ifx\empty#3\empty% + \else% + 1% + \fi% + \else% + \ifnum`#2<"C2 % + 1% + \else% + \ifnum`#2<"E0 % + % one 80-BF + \UTFviii@chksq@onetrail#3\empty% + \else% + \ifnum`#2<"E1 % + % A0-BF + one 80-BF + \UTFviii@chksq@a@trail#3\empty% + \else% + \ifnum`#2<"F0 % + % two 80-BF + \UTFviii@chksq@twotrail#3\empty% + \else% + \ifnum`#2<"F1 % + % 90-BF + two 80-BF + \UTFviii@chksq@ninetytrails#3\empty% + \else% + \ifnum`#2<"F4 % + % three 80-BF + \UTFviii@chksq@threetrail#3\empty% + \else% + \ifnum`#2<"F5 % + % 80-8F + two 80-BF + \UTFviii@chksq@belowninetytrails#3\empty% + \else% + 1% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% +}% +\def\UTFviii@chksq@onetrail#1#2\empty{% + \ifx\empty#2\empty% + \ifnum`#1<"80 % + 1% + \else% + \ifnum`#1<"C0 % + \else% + 1% + \fi% + \fi% + \else% + 1% + \fi% +}% +\def\UTFviii@chksq@a@trail#1#2\empty{% + \ifx\empty#2\empty% + 1% + \else% + \ifnum`#1<"A0 % + 1% + \else% + \ifnum`#1<"C0 % + \UTFviii@chksq@onetrail#2\empty% + \else% + 1% + \fi% + \fi% + \fi% +}% +\def\UTFviii@chksq@twotrail#1#2\empty{% + \ifx\empty#2\empty% + 1% + \else% + \ifnum`#1<"80 % + 1% + \else% + \ifnum`#1<"C0 % + \UTFviii@chksq@onetrail#2\empty% + \else% + 1% + \fi% + \fi% + \fi% +}% +\def\UTFviii@chksq@ninetytrails#1#2\empty{% + \ifx\empty#2\empty% + 1% + \else% + \ifnum`#1<"90 % + 1% + \else% + \ifnum`#1<"C0 % + \UTFviii@chksq@twotrail#2\empty% + \else% + 1% + \fi% + \fi% + \fi% +}% +\def\UTFviii@chksq@threetrail#1#2\empty{% + \ifx\empty#2\empty% + 1% + \else% + \ifnum`#1<"80 % + 1% + \else% + \ifnum`#1<"C0 % + \UTFviii@chksq@twotrail#2\empty% + \else% + 1% + \fi% + \fi% + \fi% +}% +\def\UTFviii@chksq@belowninetytrails#1#2\empty{% + \ifx\empty#2\empty% + 1% + \else% + \ifnum`#1<"80 % + 1% + \else% + \ifnum`#1<"90 % + \UTFviii@chksq@twotrail#2\empty% + \else% + 1% + \fi% + \fi% + \fi% +}% + \makeatother% \endinput