diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx | 194 |
1 files changed, 98 insertions, 96 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx index 51419bd87eb..0da2e88de8d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-11-09} +% \date{Released 2023-12-08} % % \maketitle % @@ -343,13 +343,13 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{str_byte, str_error} +% \begin{variable}{@@_byte, @@_error} % Conversions from one \meta{encoding}/\meta{escaping} pair to another % are done within \texttt{e}-expanding assignments. Errors are % signalled by raising the relevant flag. % \begin{macrocode} -\flag_new:n { str_byte } -\flag_new:n { str_error } +\flag_new:n { @@_byte } +\flag_new:n { @@_error } % \end{macrocode} % \end{variable} % @@ -714,6 +714,8 @@ { encode } { escape } \use_ii_i:nn \@@_convert_encode_: + \__kernel_tl_gset:Ne \g_@@_result_tl + { \tl_to_str:V \g_@@_result_tl } \group_end: #2 #3 \g_@@_result_tl } @@ -891,7 +893,7 @@ % \begin{macro}[rEXP]{\@@_filter_bytes_aux:N} % In the case of 8-bit engines, every character is a byte. For % Unicode-aware engines, test the character code; non-bytes cause us -% to raise the flag \texttt{str_byte}. Spaces have already been given +% to raise the flag \texttt{@@_byte}. Spaces have already been given % the correct category code when this function is called. % \begin{macrocode} \bool_lazy_any:nTF @@ -912,7 +914,7 @@ \if_int_compare:w `#1 < 256 \exp_stop_f: #1 \else: - \flag_raise:n { str_byte } + \flag_raise:n { @@_byte } \fi: \@@_filter_bytes_aux:N } @@ -935,10 +937,10 @@ { \cs_new_protected:Npn \@@_convert_unescape_: { - \flag_clear:n { str_byte } + \flag_clear:n { @@_byte } \__kernel_tl_gset:Ne \g_@@_result_tl { \exp_args:No \@@_filter_bytes:n \g_@@_result_tl } - \@@_if_flag_error:nne { str_byte } { non-byte } { bytes } + \@@_if_flag_error:nne { @@_byte } { non-byte } { bytes } } } { \cs_new_protected:Npn \@@_convert_unescape_: { } } @@ -995,15 +997,15 @@ { \cs_new_protected:Npn \@@_convert_encode_: { - \flag_clear:n { str_error } + \flag_clear:n { @@_error } \@@_convert_gmap_internal:N \@@_encode_native_char:n - \@@_if_flag_error:nne { str_error } + \@@_if_flag_error:nne { @@_error } { native-overflow } { } } \cs_new:Npn \@@_encode_native_char:n #1 { \if_int_compare:w #1 > \c_@@_max_byte_int - \flag_raise:n { str_error } + \flag_raise:n { @@_error } ? \else: \char_generate:nn {#1} {12} @@ -1184,9 +1186,9 @@ \exp_not:N \@@_decode_eight_bit_aux:Nn \exp_not:c { g_@@_decode_#1_intarray } } - \flag_clear:n { str_error } + \flag_clear:n { @@_error } \@@_convert_gmap:N \@@_tmp:w - \@@_if_flag_error:nne { str_error } { decode-8-bit } {#1} + \@@_if_flag_error:nne { @@_error } { decode-8-bit } {#1} } \cs_new:Npn \@@_decode_eight_bit_aux:Nn #1#2 { @@ -1198,7 +1200,7 @@ \cs_new:Npn \@@_decode_eight_bit_aux:n #1 { \if_int_compare:w #1 < \c_zero_int - \flag_raise:n { str_error } + \flag_raise:n { @@_error } \int_value:w \c_@@_replacement_char_int \else: #1 @@ -1228,9 +1230,9 @@ \exp_not:c { g_@@_encode_#1_intarray } \exp_not:c { g_@@_decode_#1_intarray } } - \flag_clear:n { str_error } + \flag_clear:n { @@_error } \@@_convert_gmap_internal:N \@@_tmp:w - \@@_if_flag_error:nne { str_error } { encode-8-bit } {#1} + \@@_if_flag_error:nne { @@_error } { encode-8-bit } {#1} } \cs_new:Npn \@@_encode_eight_bit_aux:NNn #1#2#3 { @@ -1246,7 +1248,7 @@ { \int_compare:nNnTF { \intarray_item:Nn #3 { 1 + #1 } } = {#2} { \@@_output_byte:n {#1} } - { \flag_raise:n { str_error } } + { \flag_raise:n { @@_error } } } % \end{macrocode} % \end{macro} @@ -1266,7 +1268,7 @@ { Since~native~strings~do~not~consist~in~bytes,~ none~of~the~escaping~methods~make~sense.~ - The~specified~escaping,~'#1',~will be ignored. + The~specified~escaping,~'#1',~will~be~ignored. } \msg_new:nnn { str } { file-not-found } { File~'l3str-#1.def'~not~found. } @@ -1347,7 +1349,7 @@ \cs_new_protected:Npn \@@_convert_unescape_hex: { \group_begin: - \flag_clear:n { str_error } + \flag_clear:n { @@_error } \int_set:Nn \tex_escapechar:D { 92 } \__kernel_tl_gset:Ne \g_@@_result_tl { @@ -1358,7 +1360,7 @@ \prg_break_point: \@@_output_end: } - \@@_if_flag_error:nne { str_error } { unescape-hex } { } + \@@_if_flag_error:nne { @@_error } { unescape-hex } { } \group_end: } \cs_new:Npn \@@_unescape_hex_auxi:N #1 @@ -1367,7 +1369,7 @@ \@@_hexadecimal_use:NTF #1 { \@@_unescape_hex_auxii:N } { - \flag_raise:n { str_error } + \flag_raise:n { @@_error } \@@_unescape_hex_auxi:N } } @@ -1380,7 +1382,7 @@ \@@_output_byte:w " \@@_unescape_hex_auxi:N } { - \flag_raise:n { str_error } + \flag_raise:n { @@_error } \@@_unescape_hex_auxii:N } } @@ -1425,8 +1427,8 @@ \cs_new_protected:cpn { @@_convert_unescape_#2: } { \group_begin: - \flag_clear:n { str_byte } - \flag_clear:n { str_error } + \flag_clear:n { @@_byte } + \flag_clear:n { @@_error } \int_set:Nn \tex_escapechar:D { 92 } \__kernel_tl_gset:Ne \g_@@_result_tl { @@ -1434,8 +1436,8 @@ #1 ? { ? \prg_break: } \prg_break_point: } - \@@_if_flag_error:nne { str_byte } { non-byte } { #2 } - \@@_if_flag_error:nne { str_error } { unescape-#2 } { } + \@@_if_flag_error:nne { @@_byte } { non-byte } { #2 } + \@@_if_flag_error:nne { @@_error } { unescape-#2 } { } \group_end: } \cs_new:Npn #3 ##1#1##2##3 @@ -1448,12 +1450,12 @@ \@@_hexadecimal_use:NTF ##3 { } { - \flag_raise:n { str_error } + \flag_raise:n { @@_error } * 0 + `#1 \use_i:nn } } { - \flag_raise:n { str_error } + \flag_raise:n { @@_error } 0 + `#1 \use_i:nn } \@@_output_end: @@ -1511,8 +1513,8 @@ \cs_new_protected:Npn \@@_convert_unescape_string: { \group_begin: - \flag_clear:n { str_byte } - \flag_clear:n { str_error } + \flag_clear:n { @@_byte } + \flag_clear:n { @@_error } \int_set:Nn \tex_escapechar:D { 92 } \__kernel_tl_gset:Ne \g_@@_result_tl { @@ -1526,8 +1528,8 @@ \g_@@_result_tl #1 ?? { ? \prg_break: } \prg_break_point: } - \@@_if_flag_error:nne { str_byte } { non-byte } { string } - \@@_if_flag_error:nne { str_error } { unescape-string } { } + \@@_if_flag_error:nne { @@_byte } { non-byte } { string } + \@@_if_flag_error:nne { @@_error } { unescape-string } { } \group_end: } } @@ -1567,7 +1569,7 @@ { ^^J } { 0 - 1 } } { - \flag_raise:n { str_error } + \flag_raise:n { @@_error } 0 - 1 \use_i:nn } } @@ -1844,19 +1846,19 @@ % first remind the user what a correct \textsc{utf-8} string should % look like, then add error-specific information. % \begin{macrocode} -\flag_clear_new:n { str_missing } -\flag_clear_new:n { str_extra } -\flag_clear_new:n { str_overlong } -\flag_clear_new:n { str_overflow } +\flag_clear_new:n { @@_missing } +\flag_clear_new:n { @@_extra } +\flag_clear_new:n { @@_overlong } +\flag_clear_new:n { @@_overflow } \msg_new:nnnn { str } { utf8-decode } { Invalid~UTF-8~string: \exp_last_unbraced:Nf \use_none:n { - \@@_if_flag_times:nT { str_missing } { ,~missing~continuation~byte } - \@@_if_flag_times:nT { str_extra } { ,~extra~continuation~byte } - \@@_if_flag_times:nT { str_overlong } { ,~overlong~form } - \@@_if_flag_times:nT { str_overflow } { ,~code~point~too~large } + \@@_if_flag_times:nT { @@_missing } { ,~missing~continuation~byte } + \@@_if_flag_times:nT { @@_extra } { ,~extra~continuation~byte } + \@@_if_flag_times:nT { @@_overlong } { ,~overlong~form } + \@@_if_flag_times:nT { @@_overflow } { ,~code~point~too~large } } . } @@ -1871,25 +1873,25 @@ Code~point~ <~1114112:~11110xxx~10xxxxxx~10xxxxxx~10xxxxxx \\ } Bytes~of~the~form~10xxxxxx~are~called~continuation~bytes. - \flag_if_raised:nT { str_missing } + \flag_if_raised:nT { @@_missing } { \\\\ A~leading~byte~(in~the~range~[192,255])~was~not~followed~by~ the~appropriate~number~of~continuation~bytes. } - \flag_if_raised:nT { str_extra } + \flag_if_raised:nT { @@_extra } { \\\\ LaTeX~came~across~a~continuation~byte~when~it~was~not~expected. } - \flag_if_raised:nT { str_overlong } + \flag_if_raised:nT { @@_overlong } { \\\\ Every~Unicode~code~point~must~be~expressed~in~the~shortest~ possible~form.~For~instance,~'0xC0'~'0x83'~is~not~a~valid~ representation~for~the~code~point~3. } - \flag_if_raised:nT { str_overflow } + \flag_if_raised:nT { @@_overflow } { \\\\ Unicode~limits~code~points~to~the~range~[0,1114111]. @@ -1968,18 +1970,18 @@ % \begin{macrocode} \cs_new_protected:cpn { @@_convert_decode_utf8: } { - \flag_clear:n { str_error } - \flag_clear:n { str_missing } - \flag_clear:n { str_extra } - \flag_clear:n { str_overlong } - \flag_clear:n { str_overflow } + \flag_clear:n { @@_error } + \flag_clear:n { @@_missing } + \flag_clear:n { @@_extra } + \flag_clear:n { @@_overlong } + \flag_clear:n { @@_overflow } \__kernel_tl_gset:Ne \g_@@_result_tl { \exp_after:wN \@@_decode_utf_viii_start:N \g_@@_result_tl { \prg_break: \@@_decode_utf_viii_end: } \prg_break_point: } - \@@_if_flag_error:nne { str_error } { utf8-decode } { } + \@@_if_flag_error:nne { @@_error } { utf8-decode } { } } \cs_new:Npn \@@_decode_utf_viii_start:N #1 { @@ -1989,8 +1991,8 @@ \if_int_compare:w `#1 < "80 \exp_stop_f: \int_value:w `#1 \else: - \flag_raise:n { str_extra } - \flag_raise:n { str_error } + \flag_raise:n { @@_extra } + \flag_raise:n { @@_error } \int_use:N \c_@@_replacement_char_int \fi: \else: @@ -2013,8 +2015,8 @@ \int_value:w \int_eval:n { #1 * "40 + `#3 - "80 } \exp_after:wN \else: \s_@@ - \flag_raise:n { str_missing } - \flag_raise:n { str_error } + \flag_raise:n { @@_missing } + \flag_raise:n { @@_error } \int_use:N \c_@@_replacement_char_int \fi: \s_@@ @@ -2027,8 +2029,8 @@ \if_int_compare:w #1 < #4 \exp_stop_f: \s_@@ \if_int_compare:w #1 < #3 \exp_stop_f: - \flag_raise:n { str_overlong } - \flag_raise:n { str_error } + \flag_raise:n { @@_overlong } + \flag_raise:n { @@_error } \int_use:N \c_@@_replacement_char_int \else: #1 @@ -2047,15 +2049,15 @@ \cs_new:Npn \@@_decode_utf_viii_overflow:w #1 \fi: #2 \fi: { \fi: \fi: - \flag_raise:n { str_overflow } - \flag_raise:n { str_error } + \flag_raise:n { @@_overflow } + \flag_raise:n { @@_error } \int_use:N \c_@@_replacement_char_int } \cs_new:Npn \@@_decode_utf_viii_end: { \s_@@ - \flag_raise:n { str_missing } - \flag_raise:n { str_error } + \flag_raise:n { @@_missing } + \flag_raise:n { @@_error } \int_use:N \c_@@_replacement_char_int \s_@@ \prg_break: } @@ -2117,10 +2119,10 @@ { \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_le:n } \cs_new_protected:Npn \@@_encode_utf_xvi_aux:N #1 { - \flag_clear:n { str_error } + \flag_clear:n { @@_error } \cs_set_eq:NN \@@_tmp:w #1 \@@_convert_gmap_internal:N \@@_encode_utf_xvi_char:n - \@@_if_flag_error:nne { str_error } { utf16-encode } { } + \@@_if_flag_error:nne { @@_error } { utf16-encode } { } } \cs_new:Npn \@@_encode_utf_xvi_char:n #1 { @@ -2129,7 +2131,7 @@ \else: \if_int_compare:w #1 < "10000 \exp_stop_f: \if_int_compare:w #1 < "E000 \exp_stop_f: - \flag_raise:n { str_error } + \flag_raise:n { @@_error } \@@_tmp:w { \c_@@_replacement_char_int } \else: \@@_tmp:w {#1} @@ -2160,9 +2162,9 @@ % an unexpected trail surrogate, and a string containing an odd number % of bytes. % \begin{macrocode} - \flag_clear_new:n { str_missing } - \flag_clear_new:n { str_extra } - \flag_clear_new:n { str_end } + \flag_clear_new:n { @@_missing } + \flag_clear_new:n { @@_extra } + \flag_clear_new:n { @@_end } \msg_new:nnnn { str } { utf16-encode } { Unicode~string~cannot~be~expressed~in~UTF-16:~surrogate. } { @@ -2175,9 +2177,9 @@ Invalid~UTF-16~string: \exp_last_unbraced:Nf \use_none:n { - \@@_if_flag_times:nT { str_missing } { ,~missing~trail~surrogate } - \@@_if_flag_times:nT { str_extra } { ,~extra~trail~surrogate } - \@@_if_flag_times:nT { str_end } { ,~odd~number~of~bytes } + \@@_if_flag_times:nT { @@_missing } { ,~missing~trail~surrogate } + \@@_if_flag_times:nT { @@_extra } { ,~extra~trail~surrogate } + \@@_if_flag_times:nT { @@_end } { ,~odd~number~of~bytes } } . } @@ -2194,17 +2196,17 @@ } Lead~surrogates~are~pairs~of~bytes~in~the~range~[0xD800,~0xDBFF],~ and~trail~surrogates~are~in~the~range~[0xDC00,~0xDFFF]. - \flag_if_raised:nT { str_missing } + \flag_if_raised:nT { @@_missing } { \\\\ A~lead~surrogate~was~not~followed~by~a~trail~surrogate. } - \flag_if_raised:nT { str_extra } + \flag_if_raised:nT { @@_extra } { \\\\ LaTeX~came~across~a~trail~surrogate~when~it~was~not~expected. } - \flag_if_raised:nT { str_end } + \flag_if_raised:nT { @@_end } { \\\\ The~string~contained~an~odd~number~of~bytes.~This~is~invalid:~ @@ -2258,10 +2260,10 @@ } \cs_new_protected:Npn \@@_decode_utf_xvi:Nw #1#2 \s_@@_stop { - \flag_clear:n { str_error } - \flag_clear:n { str_missing } - \flag_clear:n { str_extra } - \flag_clear:n { str_end } + \flag_clear:n { @@_error } + \flag_clear:n { @@_missing } + \flag_clear:n { @@_extra } + \flag_clear:n { @@_end } \cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 } \__kernel_tl_gset:Ne \g_@@_result_tl { @@ -2269,7 +2271,7 @@ #2 \q_@@_nil \q_@@_nil \prg_break_point: } - \@@_if_flag_error:nne { str_error } { utf16-decode } { } + \@@_if_flag_error:nne { @@_error } { utf16-decode } { } } % \end{macrocode} % \end{macro} @@ -2375,7 +2377,7 @@ { \@@_decode_utf_xvi_error:nNN { extra } #1#2 } \cs_new:Npn \@@_decode_utf_xvi_error:nNN #1#2#3 { - \flag_raise:n { str_error } + \flag_raise:n { @@_error } \flag_raise:n { str_#1 } #2 #3 \s_@@ \int_use:N \c_@@_replacement_char_int \s_@@ @@ -2454,36 +2456,36 @@ % \end{macro} % \end{macro} % -% \begin{variable}{str_overflow, str_end} +% \begin{variable}{@@_overflow, @@_end} % There can be no error when encoding in \textsc{utf-32}. When % decoding, the string may not have length $4n$, or it may contain % code points larger than \hexnum{10FFFF}. The latter case often % happens if the encoding was in fact not \textsc{utf-32}, because % most arbitrary strings are not valid in \textsc{utf-32}. % \begin{macrocode} - \flag_clear_new:n { str_overflow } - \flag_clear_new:n { str_end } + \flag_clear_new:n { @@_overflow } + \flag_clear_new:n { @@_end } \msg_new:nnnn { str } { utf32-decode } { Invalid~UTF-32~string: \exp_last_unbraced:Nf \use_none:n { - \@@_if_flag_times:nT { str_overflow } { ,~code~point~too~large } - \@@_if_flag_times:nT { str_end } { ,~truncated~string } + \@@_if_flag_times:nT { @@_overflow } { ,~code~point~too~large } + \@@_if_flag_times:nT { @@_end } { ,~truncated~string } } . } { In~the~UTF-32~encoding,~every~Unicode~character~ (in~the~range~[U+0000,~U+10FFFF])~is~encoded~as~4~bytes. - \flag_if_raised:nT { str_overflow } + \flag_if_raised:nT { @@_overflow } { \\\\ LaTeX~came~across~a~code~point~larger~than~1114111,~ the~maximum~code~point~defined~by~Unicode.~ Perhaps~the~string~was~not~encoded~in~the~UTF-32~encoding? } - \flag_if_raised:nT { str_end } + \flag_if_raised:nT { @@_end } { \\\\ The~length~of~the~string~is~not~a~multiple~of~4.~ @@ -2547,9 +2549,9 @@ } \cs_new_protected:Npn \@@_decode_utf_xxxii:Nw #1#2 \s_@@_stop { - \flag_clear:n { str_overflow } - \flag_clear:n { str_end } - \flag_clear:n { str_error } + \flag_clear:n { @@_overflow } + \flag_clear:n { @@_end } + \flag_clear:n { @@_error } \cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 } \__kernel_tl_gset:Ne \g_@@_result_tl { @@ -2557,7 +2559,7 @@ #2 \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop \prg_break_point: } - \@@_if_flag_error:nne { str_error } { utf32-decode } { } + \@@_if_flag_error:nne { @@_error } { utf32-decode } { } } \cs_new:Npn \@@_decode_utf_xxxii_loop:NNNN #1#2#3#4 { @@ -2566,13 +2568,13 @@ \fi: #1#2#3#4 \s_@@ \if_int_compare:w \@@_tmp:w #1#4 > \c_zero_int - \flag_raise:n { str_overflow } - \flag_raise:n { str_error } + \flag_raise:n { @@_overflow } + \flag_raise:n { @@_error } \int_use:N \c_@@_replacement_char_int \else: \if_int_compare:w \@@_tmp:w #2#3 > 16 \exp_stop_f: - \flag_raise:n { str_overflow } - \flag_raise:n { str_error } + \flag_raise:n { @@_overflow } + \flag_raise:n { @@_error } \int_use:N \c_@@_replacement_char_int \else: \int_eval:n @@ -2586,8 +2588,8 @@ { \tl_if_empty:nF {#1} { - \flag_raise:n { str_end } - \flag_raise:n { str_error } + \flag_raise:n { @@_end } + \flag_raise:n { @@_error } #1 \s_@@ \int_use:N \c_@@_replacement_char_int \s_@@ } |