diff options
Diffstat (limited to 'Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx b/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx index a0c96357a03..8789dd35efd 100644 --- a/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx +++ b/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx @@ -216,7 +216,7 @@ %<+ts1> \ProvidesFile{ts1enc.dfu} %<+x2> \ProvidesFile{x2enc.dfu} %<+all> \ProvidesFile{utf8enc.dfu} -%<-utf8-2018> [2021/12/13 v1.2o UTF-8 support] +%<-utf8-2018> [2022/02/13 v1.3a UTF-8 support] % \end{macrocode} % % \begin{macrocode} @@ -363,11 +363,12 @@ % \begin{macro}{\UTFviii@two@octets@noexpand} % \begin{macro}{\UTFviii@three@octets@noexpand} % \begin{macro}{\UTFviii@four@octets@noexpand} +% \changes{v1.3a}{2022/02/19}{Use \cs{unexpanded} rather than \cs{noexpand} so only takes one expansion step}% % These temporarily prevent the active chars from expanding. % \begin{macrocode} -\long\def\UTF@two@octets@noexpand#1#2{\noexpand#2\noexpand} -\long\def\UTF@three@octets@noexpand#1#2#3{\noexpand#2\noexpand#3\noexpand} -\long\def\UTF@four@octets@noexpand#1#2#3#4{\noexpand#2\noexpand#3\noexpand#4\noexpand} +\long\def\UTF@two@octets@noexpand#1#2#3{\unexpanded{#2#3}} +\long\def\UTF@three@octets@noexpand#1#2#3#4{\unexpanded{#2#3#4}} +\long\def\UTF@four@octets@noexpand#1#2#3#4#5{\unexpanded{#2#3#4#5}} % \end{macrocode} % \end{macro} % \end{macro} @@ -376,11 +377,12 @@ % \begin{macro}{\UTFviii@two@octets@string} % \begin{macro}{\UTFviii@three@octets@string} % \begin{macro}{\UTFviii@four@octets@string} +% \changes{v1.3a}{2022/02/19}{Use \cs{detokenize} rather than \cs{string} so only takes one expansion step}% % And the same with \cs{string} for use in \cs{csname} constructions. % \begin{macrocode} -\long\def\UTF@two@octets@string#1#2{\string#2\string} -\long\def\UTF@three@octets@string#1#2#3{\string#2\string#3\string} -\long\def\UTF@four@octets@string#1#2#3#4{\string#2\string#3\string#4\string} +\long\def\UTF@two@octets@string#1#2#3{\detokenize{#2#3}} +\long\def\UTF@three@octets@string#1#2#3#4{\detokenize{#2#3#4}} +\long\def\UTF@four@octets@string#1#2#3#4#5{\detokenize{#2#3#4#5}} % \end{macrocode} % \end{macro} % \end{macro} @@ -542,15 +544,24 @@ % |\count@| and ending at |\@tempcnta|${} - 1$, each time executing % the code in |\UTFviii@tmp|. % -% All this is done in a group so that temporary catcode changes -% etc.~vanish after everything is set up. +% Store current settings so can restore after the loops without using a group (gh/762). +% +% \begin{macrocode} +\edef\reserved@a{% +\catcode`\noexpand\~=\the\catcode`\~\relax +\catcode`\noexpand\"=\the\catcode`\"\relax +\uccode`\noexpand\~=\the\uccode`\~\relax +\count@=\the\count@\relax +\@tempcnta=\the\@tempcnta\relax +\let\noexpand\reserved@a\relax} +% \end{macrocode} % % \begin{macrocode} -\begingroup \catcode`\~13 \catcode`\"12 % \end{macrocode} % +% \changes{v1.3a}{2022/02/19}{Use local protected definitions in the character definitions}% % \begin{macrocode} \def\UTFviii@loop{% \uccode`\~\count@ @@ -566,7 +577,7 @@ % C0 controls are valid UTF-8 but defined to give the ``Character not defined error'' % They may be defined with |\DeclareUnicodeCharacter|. % \begin{macrocode} - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@undefined@err{:\string~}}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@undefined@err{:\string~}}} % 0 ^^@ null \count@"1 \@tempcnta9 @@ -588,7 +599,7 @@ % \begin{macrocode} \count@"80 \@tempcnta"C2 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@invalid@err\string~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@invalid@err\string~}} \UTFviii@loop % \end{macrocode} % @@ -597,7 +608,7 @@ % \begin{macrocode} \count@"C2 \@tempcnta"E0 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@two@octets\noexpand~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@two@octets\noexpand~}} \UTFviii@loop % \end{macrocode} % @@ -605,7 +616,7 @@ % \begin{macrocode} \count@"E0 \@tempcnta"F0 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@three@octets\noexpand~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@three@octets\noexpand~}} \UTFviii@loop % \end{macrocode} % @@ -614,7 +625,7 @@ % \begin{macrocode} \count@"F0 \@tempcnta"F5 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@four@octets\noexpand~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@four@octets\noexpand~}} \UTFviii@loop % \end{macrocode} % @@ -623,12 +634,13 @@ % \begin{macrocode} \count@"F5 \@tempcnta"100 - \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@invalid@err\string~}} + \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@invalid@err\string~}} \UTFviii@loop % \end{macrocode} % +% Restore values after the loops. % \begin{macrocode} -\endgroup +\reserved@a % \end{macrocode} % % \end{macro} |