diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx | 122 |
1 files changed, 118 insertions, 4 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx index b93243040da..a71bbc38f4f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-03-30} +% \date{Released 2023-04-19} % % \maketitle % @@ -153,7 +153,7 @@ % \begin{macro}[EXP]{\@@_change_case_exclude:nnNw} % \begin{macro}[EXP]{\@@_change_case_exclude:nnNnn} % \begin{macro}[EXP]{\@@_change_case_replace:nnN} -% \begin{macro}[EXP]{\@@_change_case_replace:nnn} +% \begin{macro}[EXP]{\@@_change_case_replace:nnn, \@@_change_case_replace:vnn} % \begin{macro}[EXP]{\@@_change_case_switch:nnN} % \begin{macro}[EXP] % { @@ -172,6 +172,14 @@ % \begin{macro}[EXP]{\@@_change_case_letterlike:nnnnN} % \begin{macro}[EXP] % { +% \@@_change_case_custom_lower:nnn , +% \@@_change_case_custom_title:nnn , +% \@@_change_case_custom_upper:nnn , +% \@@_change_case_custom_titleonly:nnn +% } +% \begin{macro}[EXP]{\@@_change_case_custom:nnn} +% \begin{macro}[EXP] +% { % \@@_change_case_codepoint_lower:nnn , % \@@_change_case_codepoint_upper:nnn , % \@@_change_case_codepoint_title:nnn , @@ -439,7 +447,7 @@ { \@@_change_case_exclude:nnN {#1} {#2} } { \@@_codepoint_process:nN - { \use:c { @@_change_case_codepoint_ #1 :nnn } {#1} {#2} } + { \use:c { @@_change_case_custom_ #1 :nnn } {#1} {#2} } } #3 } @@ -497,13 +505,14 @@ { \cs_if_exist:cTF { l_@@_case_ \token_to_str:N #3 _tl } { - \exp_args:Nv \@@_change_case_replace:nnn + \@@_change_case_replace:vnn { l_@@_case_ \token_to_str:N #3 _tl } {#1} {#2} } { \@@_change_case_switch:nnN {#1} {#2} #3 } } \cs_new:Npn \@@_change_case_replace:nnn #1#2#3 { \@@_change_case_loop:nnw {#2} {#3} #1 } +\cs_generate_variant:Nn \@@_change_case_replace:nnn { v } % \end{macrocode} % Allow for manually-controlled case switching. % \begin{macrocode} @@ -570,6 +579,42 @@ } } % \end{macrocode} +% Check for a customised codepoint result. +% \begin{macrocode} +\cs_new:Npn \@@_change_case_custom_lower:nnn #1#2#3 + { + \@@_change_case_custom:nnnnn {#1} {#2} {#3} {#1} + { \use:c { @@_change_case_codepoint_ #1 :nnn } {#1} {#2} {#3} } + } +\cs_new_eq:NN \@@_change_case_custom_upper:nnn + \@@_change_case_custom_lower:nnn +\cs_new:Npn \@@_change_case_custom_title:nnn #1#2#3 + { + \@@_change_case_custom:nnnnn { title } {#2} {#3} {#1} + { + \@@_change_case_custom:nnnnn { upper } {#2} {#3} {#1} + { \use:c { @@_change_case_codepoint_ #1 :nnn } {#1} {#2} {#3} } + } + } +\cs_new_eq:NN \@@_change_case_custom_titleonly:nnn + \@@_change_case_custom_title:nnn +\cs_new:Npn \@@_change_case_custom:nnnnn #1#2#3#4#5 + { + \tl_if_exist:cTF { l_@@_ #1 case _ \tl_to_str:n {#3} _ #2 _tl } + { + \@@_change_case_replace:vnn + { l_@@_ #1 case _ \tl_to_str:n {#3} _ #2 _tl } {#4} {#2} + } + { + \tl_if_exist:cTF { l_@@_ #1 case _ \tl_to_str:n {#3} _tl } + { + \@@_change_case_replace:vnn + { l_@@_ #1 case _ \tl_to_str:n {#3} _tl } {#4} {#2} + } + {#5} + } + } +% \end{macrocode} % For upper- and lowercase changes, once we get to this stage there are only % a couple of questions remaining: is there a language-specific mapping and % is there the special case of a terminal sigma. If not, then we pass to @@ -806,6 +851,8 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} % % \begin{macro}{\text_declare_case_equivalent:Nn} % Create equivalents to allow replacement. @@ -818,6 +865,62 @@ % \end{macrocode} % \end{macro} % +% \begin{macro} +% { +% \text_declare_lowercase_mapping:nn , +% \text_declare_titlecase_mapping:nn , +% \text_declare_uppercase_mapping:nn +% } +% \begin{macro} +% {\@@_declare_case_mapping:nnn, \@@_declare_case_mapping_aux:nnn} +% \begin{macro} +% { +% \text_declare_lowercase_mapping:nnn , +% \text_declare_titlecase_mapping:nnn , +% \text_declare_uppercase_mapping:nnn +% } +% \begin{macro} +% {\@@_declare_case_mapping:nnnn, \@@_declare_case_mapping_aux:nnnn} +% Codepoint customisation. +% \begin{macrocode} +\cs_new_protected:Npn \text_declare_lowercase_mapping:nn #1#2 + { \@@_declare_case_mapping:nnn { lower } {#1} {#2} } +\cs_new_protected:Npn \text_declare_titlecase_mapping:nn #1#2 + { \@@_declare_case_mapping:nnn { title } {#1} {#2} } +\cs_new_protected:Npn \text_declare_uppercase_mapping:nn #1#2 + { \@@_declare_case_mapping:nnn { upper } {#1} {#2} } +\cs_new_protected:Npn \@@_declare_case_mapping:nnn #1#2#3 + { + \exp_args:Ne \@@_declare_case_mapping_aux:nnn + { \codepoint_str_generate:n {#2} } {#1} {#3} + } +\cs_new_protected:Npn \@@_declare_case_mapping_aux:nnn #1#2#3 + { + \tl_clear_new:c { l_@@_ #2 case _ #1 _tl } + \tl_set:cn { l_@@_ #2 case _ #1 _ tl } {#3} + } +\cs_new_protected:Npn \text_declare_lowercase_mapping:nnn #1#2#3 + { \@@_declare_case_mapping:nnnn { lower } {#1} {#2} {#3} } +\cs_new_protected:Npn \text_declare_titlecase_mapping:nnn #1#2#3 + { \@@_declare_case_mapping:nnnn { title } {#1} {#2} {#3} } +\cs_new_protected:Npn \text_declare_uppercase_mapping:nnn #1#2#3 + { \@@_declare_case_mapping:nnnn { upper } {#1} {#2} {#3} } +\cs_new_protected:Npn \@@_declare_case_mapping:nnnn #1#2#3#4 + { + \exp_args:Ne \@@_declare_case_mapping_aux:nnnn + { \codepoint_str_generate:n {#2} } {#1} {#3} {#4} + } +\cs_new_protected:Npn \@@_declare_case_mapping_aux:nnnn #1#2#3#4 + { + \tl_clear_new:c { l_@@_ #2 case _ #1 _ #3 _tl } + \tl_set:cn { l_@@_ #2 case _ #1 _ #3 _ tl } {#4} + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \begin{macro}{\text_case_switch:nnnn} % \begin{macro}{\@@_case_switch_marker:} % Set up the mechanism for manual case switching. @@ -2038,6 +2141,17 @@ } % \end{macrocode} % +% A few adjustments to case mapping for combining chars: these are not needed +% for the Unicode engines +% \begin{macrocode} +\bool_lazy_or:nnF + { \sys_if_engine_luatex_p: } + { \sys_if_engine_xetex_p: } + { + \text_declare_uppercase_mapping:nn { "01F0 } { \v { J } } + } +% \end{macrocode} +% % \begin{macrocode} %</package> % \end{macrocode} |