From 76e8411b59e57c8401ec73fa9660ba4d9a90ca4b Mon Sep 17 00:00:00 2001 From: Joseph Wright Date: Tue, 3 Dec 2019 08:45:49 +0000 Subject: [PATCH] Preserve catcode in case changing As far as possible: most accent marks are catcode-11 anyway as-standard. --- l3kernel/l3text.dtx | 32 ++++++++++++++++---------------- l3kernel/l3token.dtx | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/l3kernel/l3text.dtx b/l3kernel/l3text.dtx index 94a2360b70..31e2fbd0d5 100644 --- a/l3kernel/l3text.dtx +++ b/l3kernel/l3text.dtx @@ -1523,8 +1523,8 @@ } { \char_generate:nn { "0069 } { \@@_char_catcode:N #4 } - \char_generate:nn { "0307 } { \char_value_catcode:n { "0307 } } - \char_generate:nn {#1} { \char_value_catcode:n {#1} } + \char_generate:nn { "0307 } { \@@_char_catcode:N #4 } + \char_generate:nn {#1} { \@@_char_catcode:N #4 } \@@_change_case_loop:nnw {#2} {#3} } } @@ -1561,7 +1561,7 @@ { \int_compare_p:nNn { `#3 } = { "0303 } } } } - { \char_generate:nn { "0307 } { \char_value_catcode:n { "0307 } } } + { \char_generate:nn { "0307 } { \@@_char_catcode:N #3 } } \@@_change_case_loop:nnw {#1} {#2} #3 } } @@ -1672,9 +1672,9 @@ % \end{macro} % % \begin{macro}[rEXP]{\@@_change_case_lower_tr:nnnN} -% \begin{macro}[rEXP]{\@@_change_case_lower_tr:nnw} -% \begin{macro}[rEXP]{\@@_change_case_lower_tr_aux:nnN} -% \begin{macro}[rEXP]{\@@_change_case_lower_tr_aux:nnnNN} +% \begin{macro}[rEXP]{\@@_change_case_lower_tr:nnNw} +% \begin{macro}[rEXP]{\@@_change_case_lower_tr:nnN} +% \begin{macro}[rEXP]{\@@_change_case_lower_tr:nnnNN} % The Turkic languages need special treatment for dotted-i and dotless-i. % The lower casing rule can be expressed in terms of searching first for % either a dotless-I or a dotted-I. In the latter case the mapping is @@ -1687,7 +1687,7 @@ \cs_new:Npn \@@_change_case_lower_tr:nnnN #1#2#3#4 { \int_compare:nNnTF { `#4 } = { "0049 } - { \@@_change_case_lower_tr:nnw {#1} {#3} } + { \@@_change_case_lower_tr:nnNw {#1} {#3} #4 } { \int_compare:nNnTF { `#4 } = { "0130 } { @@ -1703,27 +1703,27 @@ % combination is found both the dotless-I and the dot-above char have to % be removed from the input. % \begin{macrocode} - \cs_new:Npn \@@_change_case_lower_tr:nnw #1#2#3 \q_recursion_stop + \cs_new:Npn \@@_change_case_lower_tr:nnNw #1#2#3#4 \q_recursion_stop { - \tl_if_head_is_N_type:nTF {#3} - { \@@_change_case_lower_tr_aux:nnN } + \tl_if_head_is_N_type:nTF {#4} + { \@@_change_case_lower_tr:nnN } { - \char_generate:nn { "0131 } { \char_value_catcode:n { "0049 } } + \char_generate:nn { "0131 } { \@@_char_catcode:N #3 } \@@_change_case_loop:nnw } - {#1} {#2} #3 \q_recursion_stop + {#1} {#2} #4 \q_recursion_stop } - \cs_new:Npn \@@_change_case_lower_tr_aux:nnN #1#2#3 + \cs_new:Npn \@@_change_case_lower_tr:nnN #1#2#3 { \bool_lazy_or:nnTF { \token_if_cs_p:N #3 } { ! \int_compare_p:nNn { `#3 } = { "0307 } } { - \char_generate:nn { "0131 } { \char_value_catcode:n { "0130 } } + \char_generate:nn { "0131 } { \@@_char_catcode:N #3 } \@@_change_case_loop:nnw {#1} {#2} #3 } { - \char_generate:nn { "0069 } { \char_value_catcode:n { "0130 } } + \char_generate:nn { "0069 } { \@@_char_catcode:N #3 } \@@_change_case_loop:nnw {#1} {#2} } } @@ -1779,7 +1779,7 @@ { \sys_if_engine_xetex_p: } { \exp_not:N \char_generate:nn { "0130 } - { \exp_not:N \char_value_catcode:n { "0069 } } + { \exp_not:N \@@_char_catcode:N #4 } } { \exp_not:N \exp_not:V diff --git a/l3kernel/l3token.dtx b/l3kernel/l3token.dtx index 05e239c2da..d2f491b011 100644 --- a/l3kernel/l3token.dtx +++ b/l3kernel/l3token.dtx @@ -1877,7 +1877,7 @@ \tl_if_blank:nF {#3} { \exp_args:Ne \@@_to_nfd:n - { \char_generate:nn { `#3 } { \char_value_catcode:n { `#3 } } } + { \char_generate:nn { `#3 } { \@@_change_case_catcode:N #1 } } } } % \end{macrocode}