diff options
author | Karl Berry <karl@freefriends.org> | 2015-03-02 22:00:39 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2015-03-02 22:00:39 +0000 |
commit | 31370a61758b71ae992cb45a6e475e5d0c4d921f (patch) | |
tree | bf7f3c65116794b8a57092935cbe1960e0b1cdb5 | |
parent | d085026f8b51358f65d4f81412f6af6a5094e14a (diff) |
l3kernel (2mar15)
git-svn-id: svn://tug.org/texlive/trunk@36423 c570f23f-e606-0410-a88d-b1316a301751
18 files changed, 2784 insertions, 2439 deletions
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf Binary files differindex ca63d71e84d..d30a7c36dd6 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf Binary files differindex 893e1bc352e..807cce8a3ac 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf Binary files differindex f72192c5866..a463c33dbd2 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf Binary files differindex 6126d306656..b2d4e58ded8 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf Binary files differindex 5b530941082..4b02ec0e6c8 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf Binary files differindex 20f845e710d..f4d15ad01ad 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 985350cee69..85507e91d25 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -36,8 +36,8 @@ %<*driver|generic|package> \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2015/02/13} -\def\ExplFileVersion{5524} +\def\ExplFileDate{2015/03/01} +\def\ExplFileVersion{5547} %</driver|generic|package> %<*driver> \documentclass[full]{l3doc} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index e5e003f45c7..b5fc71e1438 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -145,7 +145,7 @@ % \end{macro} % \end{macro} % \end{macro} -\GetIdInfo$Id: l3bootstrap.dtx 5500 2015-01-27 14:37:04Z joseph $ +\GetIdInfo$Id: l3bootstrap.dtx 5542 2015-02-28 22:47:53Z joseph $ {L3 Bootstrap code} %</driver|package> %<*driver> @@ -444,27 +444,31 @@ % there is no danger of an \enquote{uncontrolled} error if the engine % requirements are not met. % -% For \LaTeX{} only, load \pkg{etex} as otherwise we are likely to get into -% trouble with registers. Some inserts are reserved also as these have to -% be from the standard pool. Note that \tn{reserveinserts} is \tn{outer} -% and so is accessed here by csname. In earlier versions, loading \pkg{etex} -% was done directly and so \tn{reserveinserts} appeared in the code: this -% then required a \tn{relax} after \tn{RequirePackage} to prevent an error -% with \enquote{unsafe} definitions as seen for example with \pkg{capoptions}. -% The optional loading here is done using a group and \tn{ifx} test as we -% are not quite in the position to have a single name for \tn{pdfstrcmp} just -% yet. +% For \LaTeXe{} we need to make sure that the extended pool is being used: +% \pkg{expl3} uses a lot of registers. For formats from 2015 onward there is +% nothing to do as this is automatic. For older formats, the \pkg{etex} +% package needs to be loaded to do the job. In that case, some inserts are +% reserved also as these have to be from the standard pool. Note that +% \tn{reserveinserts} is \tn{outer} and so is accessed here by csname. In +% earlier versions, loading \pkg{etex} was done directly and so +% \tn{reserveinserts} appeared in the code: this then required a \tn{relax} +% after \tn{RequirePackage} to prevent an error with \enquote{unsafe} +% definitions as seen for example with \pkg{capoptions}. The optional loading +% here is done using a group and \tn{ifx} test as we are not quite in the +% position to have a single name for \tn{pdfstrcmp} just yet. % \begin{macrocode} %<*package> \begingroup \def\@tempa{LaTeX2e} \def\next{} \ifx\fmtname\@tempa - \def\next - {% - \RequirePackage{etex}% - \csname reserveinserts\endcsname{32}% - } + \unless\ifdefined\extrafloats + \def\next + {% + \RequirePackage{etex}% + \csname reserveinserts\endcsname{32}% + } + \fi \fi \expandafter\endgroup \next diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index 5e6956729dc..41e883c9397 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx @@ -38,7 +38,7 @@ \documentclass[full]{l3doc} %</driver> %<*driver|package> -\GetIdInfo$Id: l3candidates.dtx 5523 2015-02-12 22:10:34Z joseph $ +\GetIdInfo$Id: l3candidates.dtx 5544 2015-03-01 18:30:00Z joseph $ {L3 Experimental additions to l3kernel} %</driver|package> %<*driver> @@ -806,7 +806,7 @@ % \end{texnote} % \end{function} % -% \begin{function}[rEXP, added = 2014-06-30, updated = 2015-02-12]^^A +% \begin{function}[EXP, added = 2014-06-30, updated = 2015-02-18]^^A % { % \tl_lower_case:n, \tl_upper_case:n, \tl_mixed_case:n, % \tl_lower_case:nn, \tl_upper_case:nn, \tl_mixed_case:nn @@ -820,32 +820,60 @@ % change the case of characters as discussed below. The character code of % the characters replaced may be arbitrary: the replacement characters will % have standard document-level category codes ($11$ for letters, $12$ for -% letter-like characters which can also be case-changed). +% letter-like characters which can also be case-changed). Begin-group and +% end-group characters in the \meta{tokens} are normalized and become |{| +% and |}|, respectively. +% +% Importantly, notice that these functions are intended for working with +% user text for typesetting. For case changing programmatic data see the +% \pkg{l3str} module and discussion there of \cs{str_lower_case:n}, +% \cs{str_upper_case:n} and \cs{str_fold_case:n}. % \end{function} % -% The functions are \texttt{x}-type expandable and will expand input in an -% analogous way (though they are themselves expandable). In particular, input -% in the form of token lists or expandable functions will be expanded +% The functions perform expansion on the input in most cases. In particular, +% input in the form of token lists or expandable functions will be expanded % \emph{unless} it falls within one of the special handling classes described -% below. As such, in package mode \LaTeXe{} \enquote{robust} commands should -% be converted to engine-protected versions using for example the -% \tn{robustify} command from the \pkg{etoolbox} package. Begin-group and -% end-group characters in the \meta{tokens} are normalized and become |{| and -% |}|, respectively. Case changing will take place inside groups but not in -% math mode material so for example +% below. This expansion approach means that in general the result of case +% changing will match the \enquote{natural} outcome expected from a +% \enquote{functional} approach to case modification. For example % \begin{verbatim} -% \tl_upper_case:n { Some~text~$y = mx + c$~with~{Braces} } +% \tl_set:Nn \l_tmpa_tl { hello } +% \tl_upper_case:n { \l_tmpa_tl \c_space_tl world } % \end{verbatim} -% will become +% will produce % \begin{verbatim} -% SOME~TEXT~$y = mx + c$~WITH~{BRACES} +% HELLO WORLD % \end{verbatim} +% The expansion approach taken means that in package mode any \LaTeXe{} +% \enquote{robust} commands which may appear in the input should be converted +% to engine-protected versions using for example the \tn{robustify} command +% from the \pkg{etoolbox} package. +% +% \begin{variable}{\l_tl_case_change_math_tl} +% Case changing will not take place within math mode material so for example +% \begin{verbatim} +% \tl_upper_case:n { Some~text~$y = mx + c$~with~{Braces} } +% \end{verbatim} +% will become +% \begin{verbatim} +% SOME TEXT $y = mx + c$ WITH {BRACES} +% \end{verbatim} +% Material inside math mode is left entirely unchanged: in particular, no +% expansion is undertaken. +% +% Detection of math mode is controlled by the list of tokens in +% \cs{l_tl_case_change_math_tl}, which should be in open--close pairs. In +% package mode the standard settings is +% \begin{verbatim} +% $ $ \( \) +% \end{verbatim} +% \end{variable} % % \begin{variable}{\l_tl_case_change_exclude_tl} % Case changing can be prevented by using any command on the list % \cs{l_tl_case_change_exclude_tl}. Each entry should be a function -% to be followed by one argument: the latter will be preserved as-is. -% Thus for example following +% to be followed by one argument: the latter will be preserved as-is +% with no expansion. Thus for example following % \begin{verbatim} % \tl_put_right:Nn \l_tl_case_change_exclude_tl { \NoChangeCase } % \end{verbatim} @@ -856,34 +884,24 @@ % \end{verbatim} % will result in % \begin{verbatim} -% SOME~TEXT~$y = mx + c$~WITH~\NoChangeCase {Protection} +% SOME TEXT $y = mx + c$ WITH \NoChangeCase {Protection} % \end{verbatim} % Notice that the case changing mapping preserves the inclusion of % the escape functions: it is left to other code to provide suitable -% definitions (typically equivalent to \cs{use:n}). In particular, these -% functions are protected from further expansion (returned using -% \cs{exp_not:n}) as so will not be lost inside an \texttt{x}-type expansion. +% definitions (typically equivalent to \cs{use:n}). In particular, the +% result of case changing is returned protected by \cs{exp_not:n}. % % When used with \LaTeXe{} the commands |\cite|, |\ensuremath|, |\label| % and |\ref| are automatically included in the list for exclusion from % case changing. % \end{variable} % -% \begin{variable}{\l_tl_case_change_math_tl} -% Case changing is automatically skipped in math mode, as shown in the -% demonstrations above. This is controlled by the list of tokens in -% \cs{l_tl_case_change_math_tl}, which should be in open--close pairs. In -% package mode the standard settings is -% \begin{verbatim} -% $ $ \( \) -% \end{verbatim} -% \end{variable} -% -% In addition to this functionality, the case change system will also +% In package mode, the case change system will also % convert text stored using the \LaTeXe{} \enquote{LICR} approach. This % will upper/lower case tokens as implemented for the font encodings % \texttt{T1}, \texttt{T2}, \texttt{T5} and \texttt{LGR} (see the behaviour of -% the \LaTeXe{} command \tn{MakeUppercase}). +% the \LaTeXe{} command \tn{MakeUppercase}). Note that these commands will +% automatically be protected from expansion. % % \enquote{Mixed} case conversion may be regarded informally as converting the % first character of the \meta{tokens} to upper case and the rest to lower @@ -929,8 +947,10 @@ % (for example in the mapping i to I-dot in Turkish): in these cases the % input is left unchanged. % -% Context-sensitive mappings are enabled: language-dependent cases are -% discussed below. +% Context-sensitive mappings are enabled: language-dependent cases are +% discussed below. All context detection works before any expansion of +% following tokens and thus any control sequences are taken as the end of +% the current \enquote{word}/character context. % % \begin{variable}{\l_tl_change_case_after_final_sigma_tl} % The \enquote{final sigma} rule for Greek letters is enabled and active for @@ -3059,23 +3079,16 @@ % to allow for all of the special cases. These functions also require the % appropriate data extracted from the Unicode documentation (either manually % or automatically), which is covered by \pkg{l3unicode-data}. -% -% \begin{macro}[EXP]{\str_case:nVF, \str_case:nvF, \str_case:nvTF} -% \begin{macro}[EXP]{\tl_if_blank:fTF} +% % \begin{macro}[EXP]{\tl_if_head_eq_catcode:oNTF} -% Required variants. +% Extra variants. % \begin{macrocode} -\cs_generate_variant:Nn \str_case:nnF { nV , nv } -\cs_generate_variant:Nn \str_case:nnTF { nv } -\cs_generate_variant:Nn \tl_if_blank:nTF { f } \cs_generate_variant:Nn \tl_if_head_eq_catcode:nNTF { o } % \end{macrocode} % \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}[rEXP]{\tl_lower_case:n, \tl_upper_case:n, \tl_mixed_case:n} -% \begin{macro}[rEXP]{\tl_lower_case:nn, \tl_upper_case:nn, \tl_mixed_case:nn} +% +% \begin{macro}[EXP]{\tl_lower_case:n, \tl_upper_case:n, \tl_mixed_case:n} +% \begin{macro}[EXP]{\tl_lower_case:nn, \tl_upper_case:nn, \tl_mixed_case:nn} % The user level functions here are all wrappers around the internal % functions for case changing. Note that \cs{tl_mixed_case:nn} could be % done without an internal, but this way the logic is slightly clearer as @@ -3092,56 +3105,64 @@ % \end{macro} % % \begin{macro}[aux, EXP]{\@@_change_case:nnn} +% \begin{macro}[aux, EXP]{\@@_change_case_aux:nnn} % \begin{macro}[aux, EXP]{\@@_change_case_loop:wnn} -% \begin{macro}[aux, EXP]{\@@_change_case_N_type:Nwnn} -% \begin{macro}[aux, EXP]{\@@_change_case_N_type:NNN} -% \begin{macro}[aux, EXP]{\@@_change_case_N_type:Nnnn} +% \begin{macro}[aux, EXP] +% { +% \@@_change_case_output:nwn , +% \@@_change_case_output:Vwn , +% \@@_change_case_output:own , +% \@@_change_case_output:fwn , +% } +% \begin{macro}[aux, EXP]{\@@_change_case_end:wn} % \begin{macro}[aux, EXP]{\@@_change_case_group:nwnn} % \begin{macro}[aux, EXP]{\@@_change_case_space:wnn} +% \begin{macro}[aux, EXP]{\@@_change_case_N_type:Nwnn} +% \begin{macro}[aux, EXP]{\@@_change_case_N_type:NNNnnn} +% \begin{macro}[aux, EXP]{\@@_change_case_math:NNNnnn} +% \begin{macro}[aux, EXP]{\@@_change_case_math_loop:wNNnn} +% \begin{macro}[aux, EXP]{\@@_change_case_math:NwNNnn} +% \begin{macro}[aux, EXP]{\@@_change_case_math_group:nwNNnn} +% \begin{macro}[aux, EXP]{\@@_change_case_math_space:wNNnn} +% \begin{macro}[aux, EXP]{\@@_change_case_N_type:Nnnn} +% \begin{macro}[aux, EXP]{\@@_change_case_char:Nnn} +% \begin{macro}[aux, EXP]{\@@_change_case_char:Nn} % \begin{macro}[aux, EXP]{\@@_change_case_char:NNNNNNNNn} -% \begin{macro}[aux, EXP]{\@@_change_case_math:NNNn} -% \begin{macro}[aux, EXP]{\@@_change_case_math_loop:wNN} -% \begin{macro}[aux, EXP]{\@@_change_case_math:NwNN} -% \begin{macro}[aux, EXP]{\@@_change_case_math_group:nwNN} -% \begin{macro}[aux, EXP]{\@@_change_case_math_space:wNN} % \begin{macro}[aux, EXP]{\@@_change_case_cs:Nnnn} % \begin{macro}[aux, EXP]{\@@_change_case_cs:nNnnn} -% \begin{macro}[aux, EXP]{\@@_change_case_cs_three:w} -% \begin{macro}[aux, EXP]{\@@_change_case_cs_four:w} -% \begin{macro}[aux, EXP]{\@@_change_case_cs:Nnnnn} +% \begin{macro}[aux, EXP]{\@@_change_case_cs_three:NNNw} +% \begin{macro}[aux, EXP]{\@@_change_case_cs_four:NNNNw} % \begin{macro}[aux, EXP]{\@@_change_case_cs_cyr:NnNNNNw} +% \begin{macro}[aux, EXP]{\@@_change_case_cs_type:Nnnnn} +% \begin{macro}[aux, EXP]{\@@_change_case_cs_type:nnn} % \begin{macro}[aux, EXP]{\@@_change_case_cs:N} % \begin{macro}[aux, EXP]{\@@_change_case_cs:NN} % \begin{macro}[aux, EXP]{\@@_change_case_cs:NNn} -% \begin{macro}[aux, EXP]{\@@_change_case_cs_expand:N} +% \begin{macro}[aux, EXP]{\@@_change_case_cs_expand:Nnw} % \begin{macro}[aux, EXP]{\@@_change_case_cs_expand:NN} -% \begin{macro}[aux, EXP]^^A -% { -% \@@_change_case_lower_sigma:Nnn , -% \@@_change_case_upper_sigma:Nnn , -% \@@_change_case_mixed_sigma:Nnn -% } -% \begin{macro}[aux]{\@@_change_case_lower_sigma:Nw} -% \begin{macro}[aux]{\@@_change_case_lower_sigma_loop:NN} -% The mechanism for the core conversion of case is based on the approach used -% in \cs{@@_act:NNNnn}. Thus the idea is to use a loop which is will grab -% the entire token list plus a quark: the latter is used as an end marker and -% to avoid any brace stripping. Depending on the nature of the first item -% in the grabbed argument, it can either processed as a single token, -% treated as a group or treated as a space (the latter requires special -% treatment). In contrast to \cs{@@_act:NNNnn}, there is no need for this -% process to be \texttt{f}-type expandable: things are done using only -% \texttt{x}-type requirements. Also, for \enquote{normal} tokens there is -% a bit more work to do here. To allow math mode escape for paired tokens, -% there is first a search to see if we've picked up on of the possible -% openers. If we have, there is a separate route to follow. Otherwise -% we need to choose between control sequences and characters: only the -% latter allow character code to be used for the conversion lookup. +% \begin{macro}[aux, EXP]{\@@_change_case_cs_expand:NNnw} +% The mechanism for the core conversion of case is based on the idea that +% we can use a loop to grab the entire token list plus a quark: the latter is +% used as an end marker and to avoid any brace stripping. Depending on the +% nature of the first item in the grabbed argument, it can either processed +% as a single token, treated as a group or treated as a space. These +% different cases all work by re-reading |#1| in the appropriate way, hence +% the repetition of |#1 \q_recursion_stop|. % \begin{macrocode} \cs_new:Npn \@@_change_case:nnn #1#2#3 { - \@@_change_case_loop:wnn #3 - \q_recursion_tail \q_recursion_stop {#1} {#2} + \etex_unexpanded:D \exp_after:wN + { + \tex_romannumeral:D + \@@_change_case_aux:nnn {#1} {#2} {#3} + } + } +\cs_new:Npn \@@_change_case_aux:nnn #1#2#3 + { + \group_align_safe_begin: + \@@_change_case_loop:wnn + #3 \q_recursion_tail \q_recursion_stop {#1} {#2} + \@@_change_case_result:n { } } \cs_new:Npn \@@_change_case_loop:wnn #1 \q_recursion_stop { @@ -3154,27 +3175,140 @@ } #1 \q_recursion_stop } +% \end{macrocode} +% Earlier versions of the code where only \texttt{x}-type expandable rather +% than \texttt{f}-type: this causes issues with nesting and so the slight +% performance hit is taken for a better outcome in usability terms. Setting +% up for \texttt{f}-type expandability has two requirements: a marker +% token after the main loop (see above) and a mechanism to \enquote{load} +% and finalise the result. That is handled in the code below, which includes +% the necessary material to end the \tn{romannumeral} expansion. +% \begin{macrocode} +\cs_new:Npn \@@_change_case_output:nwn #1#2 \@@_change_case_result:n #3 + { #2 \@@_change_case_result:n { #3 #1 } } +\cs_generate_variant:Nn \@@_change_case_output:nwn { V , o , f } +\cs_new:Npn \@@_change_case_end:wn #1 \@@_change_case_result:n #2 + { + \group_align_safe_end: + \c_zero + #2 + } +% \end{macrocode} +% Handling for the cases where the current argument is a brace group or +% a space is relatively easy. For the brace case, the routine works +% recursively, using the expandability of the mechanism to ensure that the +% result is finalised before storage. For the space case it is simply a +% question of removing the space in the input and storing it in the output. +% In both cases, and indeed for the \texttt{N}-type grabber, after removing +% the current item from the input \cs{@@_change_case_loop:wnn} is inserted +% in front of the remaining tokens. +% \begin{macrocode} +\cs_new:Npn \@@_change_case_group:nwnn #1#2 \q_recursion_stop #3#4 + { + \@@_change_case_output:own + { + \exp_after:wN + { + \tex_romannumeral:D + \@@_change_case_aux:nnn {#3} {#4} {#1} + } + } + \@@_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} + } +\exp_last_unbraced:NNo \cs_new:Npn \@@_change_case_space:wnn \c_space_tl + { + \@@_change_case_output:nwn { ~ } + \@@_change_case_loop:wnn + } +% \end{macrocode} +% For \texttt{N}-type arguments there are several stages to the approach. +% First, a simply check for the end-of-input marker, which if found triggers +% the final clean up and output step. Assuming that is not the case, the +% first check is for math-mode escaping: this test can encompass control +% sequences or other \texttt{N}-type tokens so is handled up front. +% \begin{macrocode} \cs_new:Npn \@@_change_case_N_type:Nwnn #1#2 \q_recursion_stop { - \quark_if_recursion_tail_stop_do:Nn #1 { \use_none:nnn } - \exp_after:wN \@@_change_case_N_type:NNN + \quark_if_recursion_tail_stop_do:Nn #1 + { \@@_change_case_end:wn } + \exp_after:wN \@@_change_case_N_type:NNNnnn \exp_after:wN #1 \l_tl_case_change_math_tl \q_recursion_tail ? \q_recursion_stop {#2} } -\cs_new:Npn \@@_change_case_N_type:NNN #1#2#3 +% \end{macrocode} +% Looking for math mode escape first requires a loop over the possible +% token pairs to see if the current input (|#1|) matches an open-math case +% (|#2|). If if does then this test loop is ended and a new input-gathering +% one is begun. The latter simply transfers material from the input to the +% output without any expansion, testing each \texttt{N}-type token to see +% if it matches the close-math case required. If that is the situation then +% the \enquote{math loop} stops and resumes the main loop: as that might +% be either the standard case-changing one or the mixed-case alternative, +% it is not hard-coded into the math loop but is rather passed as argument +% |#3| to \cs{@@_change_case_math:NNNnnn}. If no close-math token is found +% then the final clean-up will be forced (\emph{i.e.}~there is no assumption +% of \enquote{well-behaved} code in terms of math mode). +% \begin{macrocode} +\cs_new:Npn \@@_change_case_N_type:NNNnnn #1#2#3 { \quark_if_recursion_tail_stop_do:Nn #2 - { \@@_change_case_N_type:Nnnn #1 } + { \@@_change_case_N_type:Nnnn #1 } \token_if_eq_meaning:NNTF #1 #2 { \use_i_delimit_by_q_recursion_stop:nw { - \@@_change_case_math:NNNn #1 #3 - \@@_change_case_loop:wnn + \@@_change_case_math:NNNnnn + #1 #3 \@@_change_case_loop:wnn } } - { \@@_change_case_N_type:NNN #1 } + { \@@_change_case_N_type:NNNnnn #1 } } +\cs_new:Npn \@@_change_case_math:NNNnnn #1#2#3#4 + { + \@@_change_case_output:nwn {#1} + \@@_change_case_math_loop:wNNnn #4 \q_recursion_stop #2 #3 + } +\cs_new:Npn \@@_change_case_math_loop:wNNnn #1 \q_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_change_case_math:NwNNnn } + { + \tl_if_head_is_group:nTF {#1} + { \@@_change_case_math_group:nwNNnn } + { \@@_change_case_math_space:wNNnn } + } + #1 \q_recursion_stop + } +\cs_new:Npn \@@_change_case_math:NwNNnn #1#2 \q_recursion_stop #3#4 + { + \token_if_eq_meaning:NNTF \q_recursion_tail #1 + { \@@_change_case_end:wn } + { + \@@_change_case_output:nwn {#1} + \token_if_eq_meaning:NNTF #1 #3 + { #4 #2 \q_recursion_stop } + { \@@_change_case_math_loop:wNNnn #2 \q_recursion_stop #3#4 } + } + } +\cs_new:Npn \@@_change_case_math_group:nwNNnn #1#2 \q_recursion_stop + { + \@@_change_case_output:nwn { {#1} } + \@@_change_case_math_loop:wNNnn #2 \q_recursion_stop + } +\exp_last_unbraced:NNo + \cs_new:Npn \@@_change_case_math_space:wNNnn \c_space_tl + { + \@@_change_case_output:nwn { ~ } + \@@_change_case_math_loop:wNNnn + } +% \end{macrocode} +% Once potential math-mode cases are filtered out the next stage is to +% test if the token grabbed is a control sequence: they cannot be used in +% the lookup table and also may require expansion. At this stage the loop +% code starting \cs{@@_change_case_loop:wnn} is inserted: all subsequent +% steps in the code which need a look-ahead are coded to rely on this and +% thus have \texttt{w}-type arguments if they may do a look-ahead. +% \begin{macrocode} \cs_new:Npn \@@_change_case_N_type:Nnnn #1#2#3#4 { \token_if_cs:NTF #1 @@ -3188,97 +3322,46 @@ { \@@_change_case_cs:N #1 } } %</package> - { - \cs_if_exist_use:cF { @@_change_case_ #3 _ #4 :Nnn } - { \use_iii:nnn } - #1 {#2} - { - \use:c { @@_change_case_ #3 _ sigma:Nnn } #1 {#2} - { - \exp_after:wN \@@_change_case_char:NNNNNNNNn - \int_use:N \__int_eval:w 1000000 + `#1 \__int_eval_end: - #1 {#3} - } - } - } + { \@@_change_case_char:Nnn #1 {#3} {#4} } \@@_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} } -\cs_new:Npn \@@_change_case_group:nwnn #1#2 \q_recursion_stop #3#4 - { - { - \@@_change_case_loop:wnn #1 - \q_recursion_tail \q_recursion_stop {#3} {#4} - } - \@@_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} - } -\exp_last_unbraced:NNo \cs_new:Npn \@@_change_case_space:wnn \c_space_tl - { - \c_space_tl - \@@_change_case_loop:wnn - } % \end{macrocode} -% Actually look for the char in the appropriate table. This code is a -% compromise between performance and hash name use. The fastest approach -% would be to create one token list for each char (and could cover special -% case control sequences too) and use a hash table lookup. That is -% quite \enquote{expensive}, so instead a \cs{str_case:nvF} -% approach is used. One big list would be most efficient in name usage -% but then gets slow for entries later in the list. Doing a split into -% $100$ bins falls somewhere between the two extremes. +% For character tokens there are a couple of potential special cases to +% handle then the core idea of the loop: a lookup table. The latter uses +% the character code to spilt what would otherwise be a very long list into +% $100$ manageable blocks (this is a balance between hash table usage and +% performance). Notice that the special case code may do a look-ahead so +% requires a final \texttt{w}-type argument whereas the core lookup table +% does not and also guarantees an output so \texttt{f}-type expansion may +% be used to obtain the case-changed result. % \begin{macrocode} -\cs_new:Npn \@@_change_case_char:NNNNNNNNn #1#2#3#4#5#6#7#8#9 +\cs_new:Npn \@@_change_case_char:Nnn #1#2#3 { - \str_case:nvF #8 - { c_@@_ #9 _ #6 _X_ #7 _tl } - { \exp_not:n {#8} } - } -% \end{macrocode} -% When dealing with a token that can open math mode, the idea is to -% loop to find the closing token and to preserve everything as-is. -% The loop therefore looks much the same as the normal one, but with -% a check to look for end-of-math mode. Once that is found or once we -% hit the end of the input, the \enquote{normal} loop is restarted. That -% is done so that the code here works for both standard case changing and -% for the mixed case version: the clean up needed is different but the -% loop functions passes (as |#4| to \cs{@@_change_case_math:NNNn}) deal -% with that. -% \begin{macrocode} -\cs_new:Npn \@@_change_case_math:NNNn #1#2#3#4 - { - \exp_not:n {#1} - \@@_change_case_math_loop:wNN #4 \q_recursion_stop #2 #3 + \cs_if_exist_use:cF { @@_change_case_ #2 _ #3 :Nnw } + { \use_ii:nn } + #1 + { + \use:c { @@_change_case_ #2 _ sigma:Nnw } #1 + { \@@_change_case_char:Nn #1 {#2} } + } } -\cs_new:Npn \@@_change_case_math_loop:wNN #1 \q_recursion_stop +\cs_new:Npn \@@_change_case_char:Nn #1#2 { - \tl_if_head_is_N_type:nTF {#1} - { \@@_change_case_math:NwNN } + \@@_change_case_output:fwn { - \tl_if_head_is_group:nTF {#1} - { \@@_change_case_math_group:nwNN } - { \@@_change_case_math_space:wNN } - } - #1 \q_recursion_stop - } -\cs_new:Npn \@@_change_case_math:NwNN #1#2 \q_recursion_stop #3#4 - { - \token_if_eq_meaning:NNTF \q_recursion_tail #1 - { #4 \q_recursion_tail \q_recursion_stop } - { - \exp_not:n {#1} - \token_if_eq_meaning:NNTF #1 #3 - { #4 #2 \q_recursion_stop } - { \@@_change_case_math_loop:wNN #2 \q_recursion_stop #3#4 } + \str_case:nvF #1 { c__unicode_ #2 _exceptions_tl } + { + \exp_after:wN \@@_change_case_char:NNNNNNNNn + \int_use:N \__int_eval:w 1000000 + `#1 \__int_eval_end: + #1 {#2} + } } } -\cs_new:Npn \@@_change_case_math_group:nwNN #1#2 \q_recursion_stop - { - { \exp_not:n {#1} } - \@@_change_case_math_loop:wNN #2 \q_recursion_stop - } -\exp_last_unbraced:NNo \cs_new:Npn \@@_change_case_math_space:wNN \c_space_tl +\cs_new:Npn \@@_change_case_char:NNNNNNNNn #1#2#3#4#5#6#7#8#9 { - \c_space_tl - \@@_change_case_math_loop:wNN + \str_case:nvF #8 + { c__unicode_ #9 _ #6 _X_ #7 _tl } + { \exp_stop_f: #8 } } % \end{macrocode} % If a control sequence has been given as the argument and it is not on @@ -3319,17 +3402,17 @@ { \@@_change_case_cs_type:Nnnnn #2 { latin } {#3} } { \str_if_eq_x:nnTF - { \@@_change_case_cs_three:w #1 \q_nil } + { \@@_change_case_cs_three:NNNw #1 \q_nil } { \str_if_eq:nnTF {#3} { lower } { CYR } { cyr } } { \@@_change_case_cs_cyr:NnNNNNw #2 {#3} #1 \q_stop } { \str_if_eq_x:nnTF - { \@@_change_case_cs_three:w #1 \q_nil } + { \@@_change_case_cs_three:NNNw #1 \q_nil } { acc } { \@@_change_case_cs_type:Nnnnn #2 { acc } {#3} } { \str_if_eq_x:nnTF - { \@@_change_case_cs_four:w #1 \q_nil } + { \@@_change_case_cs_four:NNNNw #1 \q_nil } { text } { \@@_change_case_cs_type:Nnnnn #2 { greek } {#3} } { \@@_change_case_cs_type:Nnnnn #2 { misc } {#3} } @@ -3337,13 +3420,8 @@ } } } -\cs_new:Npn \@@_change_case_cs_three:w #1#2#3#4 \q_nil { #1#2#3 } -\cs_new:Npn \@@_change_case_cs_four:w #1#2#3#4#5 \q_nil { #1#2#3#4 } -\cs_new:Npn \@@_change_case_cs_type:Nnnnn #1#2#3 - { - \str_case:nvTF #1 - { c_@@_change_case_ #2 _ #3 _ tl } - } +\cs_new:Npn \@@_change_case_cs_three:NNNw #1#2#3#4 \q_nil { #1#2#3 } +\cs_new:Npn \@@_change_case_cs_four:NNNNw #1#2#3#4#5 \q_nil { #1#2#3#4 } \cs_new:Npn \@@_change_case_cs_cyr:NnNNNNw #1#2#3#4#5#6#7 \q_stop { \@@_change_case_cs_type:Nnnnn #1 @@ -3361,15 +3439,31 @@ } } } +\cs_new:Npn \@@_change_case_cs_type:Nnnnn #1#2#3 + { + \exp_args:Nf \@@_change_case_cs_type:nnn + { + \str_case:nvF #1 + { c_@@_change_case_ #2 _ #3 _ tl } + { \exp_stop_f: } + } + } +\cs_new:Npn \@@_change_case_cs_type:nnn #1#2#3 + { + \tl_if_blank:nTF {#1} + {#3} + { + \@@_change_case_output:nwn {#1} + #2 + } + } %</package> % \end{macrocode} % To deal with a control sequence there is first a need to test if it is % on the list which indicate that case changing should be skipped. That's -% done using a loop as we do \cs{tl_if_in:N(TF)} expandably. If a hit is -% found then the argument is grabbed: that comes \emph{after} the loop -% function which is therefore also picked up and rearranged. This means -% that the same code can be used for mixed case, where an escaped part -% is ignored for the purposes of identifying a leading letter. +% done using a loop as for the other special cases. If a hit is found then +% the argument is grabbed: that comes \emph{after} the loop function which +% is therefore rearranged. % \begin{macrocode} \cs_new:Npn \@@_change_case_cs:N #1 { @@ -3380,7 +3474,10 @@ \cs_new:Npn \@@_change_case_cs:NN #1#2 { \quark_if_recursion_tail_stop_do:Nn #2 - { \@@_change_case_cs_expand:N #1 } + { + \@@_change_case_cs_expand:Nnw #1 + { \@@_change_case_output:nwn {#1} } + } \str_if_eq:nnTF {#1} {#2} { \use_i_delimit_by_q_recursion_stop:nw @@ -3390,7 +3487,7 @@ } \cs_new:Npn \@@_change_case_cs:NNn #1#2#3 { - \exp_not:n { #1 {#3} } + \@@_change_case_output:nwn { #1 {#3} } #2 } % \end{macrocode} @@ -3399,7 +3496,7 @@ % function is grabbed as part of the clean-up and reinserted before the % now expanded material. % \begin{macrocode} -\cs_new:Npn \@@_change_case_cs_expand:N #1 +\cs_new:Npn \@@_change_case_cs_expand:Nnw #1#2 { \bool_if:nTF { @@ -3408,82 +3505,301 @@ && ! \token_if_protected_long_macro_p:N #1 } { \@@_change_case_cs_expand:NN #1 } - { \exp_not:n {#1} } + { #2 } } \cs_new:Npn \@@_change_case_cs_expand:NN #1#2 { \exp_after:wN #2 #1 } +\cs_new:Npn \@@_change_case_cs_expand:NNnw #1#2#3 + { \@@_change_case_cs_expand:Nnw #2 {#3} #1 } % \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma:Nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma:w} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma:Nw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma_loop:NN} +% \begin{macro}[aux, EXP]{\@@_change_case_upper_sigma:Nnw} % If the current char is an upper case sigma, the a check is made on the next -% item in the input. If it is another \texttt{N}-type token then further tests -% are needed to decide what to do. +% item in the input. If it is \texttt{N}-type and not a control sequence +% then there is a look-ahead phase. % \begin{macrocode} -\cs_new:Npn \@@_change_case_lower_sigma:Nnn #1#2 +\cs_new:Npn \@@_change_case_lower_sigma:Nnw #1#2#3#4 \q_recursion_stop { \int_compare:nNnTF { `#1 } = { "03A3 } { - \tl_if_head_is_N_type:nTF {#2} - { \@@_change_case_lower_sigma:Nw #2 \q_recursion_stop } - { - \tl_if_head_is_group:nTF {#2} - { \c_@@_std_sigma_tl } - { \c_@@_final_sigma_tl } - } + \@@_change_case_output:fwn + { \@@_change_case_lower_sigma:w #4 \q_recursion_stop } } + {#2} + #3 #4 \q_recursion_stop + } +\cs_new:Npn \@@_change_case_lower_sigma:w #1 \q_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_change_case_lower_sigma:Nw #1 \q_recursion_stop } + { \c__unicode_final_sigma_tl } } -% \end{macrocode} -% Assuming the next token is not a control sequence, a loop is used to test -% if the next char is something that can be interpreted as the end of a word. -% Rather than use all of the Unicode data for this, the simplifying -% assumption is made that in real text the end of a word will be indicated by -% a small number of chars. As this may have to be extended over time to other -% cases, the easiest handling is offered by using the numerical values for -% these chars. Notice that if the next token is a control sequence there is -% a need to make sure it's not the end-of-loop, as that will happen if -% the word in question is at the end of the current list. -% \begin{macrocode} \cs_new:Npn \@@_change_case_lower_sigma:Nw #1#2 \q_recursion_stop { \token_if_cs:NTF #1 - { - \token_if_eq_meaning:NNTF #1 \q_recursion_tail - { \c_@@_final_sigma_tl } - { \c_@@_std_sigma_tl } - } + { \c__unicode_final_sigma_tl } { \exp_after:wN \@@_change_case_lower_sigma_loop:NN \exp_after:wN #1 \l_tl_case_change_after_final_sigma_tl \q_recursion_tail \q_recursion_stop } } +% \end{macrocode} +% Assuming the next token is not a control sequence, a loop is used to test +% if the next char is something that can be interpreted as the end of a word. +% Rather than use all of the Unicode data for this, the simplifying +% assumption is made that in real text the end of a word will be indicated by +% a small number of chars. +% \begin{macrocode} \cs_new:Npn \@@_change_case_lower_sigma_loop:NN #1#2 { - \quark_if_recursion_tail_stop_do:nn {#2} - { \c_@@_std_sigma_tl } + \quark_if_recursion_tail_stop_do:Nn #2 + { \c__unicode_std_sigma_tl } \int_compare:nNnT { `#1 } = { `#2 } - { \use_i_delimit_by_q_recursion_stop:nw { \c_@@_final_sigma_tl } } + { \use_i_delimit_by_q_recursion_stop:nw { \c__unicode_final_sigma_tl } } \@@_change_case_lower_sigma_loop:NN #1 } -\cs_new_eq:NN \@@_change_case_upper_sigma:Nnn \use_iii:nnn -\cs_new_eq:NN \@@_change_case_mixed_sigma:Nnn \use_iii:nnn +% \end{macrocode} +% Simply skip to the final step for upper casing. +% \begin{macrocode} +\cs_new_eq:NN \@@_change_case_upper_sigma:Nnw \use_ii:nn % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} +% +% \begin{macro}[aux, EXP]{\@@_change_case_lower_tr:Nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_tr_auxi:Nw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_tr_auxii:Nw} +% \begin{macro}[aux, EXP]{\@@_change_case_upper_tr:Nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_az:Nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_upper_az:Nnw} +% 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 +% easy, but in the former there is a second stage search. +% \begin{macrocode} +\cs_new:Npn \@@_change_case_lower_tr:Nnw #1#2 + { + \int_compare:nNnTF { `#1 } = { "0049 } + { \@@_change_case_lower_tr_auxi:Nw } + { + \int_compare:nNnTF { `#1 } = { "0130 } + { \@@_change_case_output:nwn { i } } + {#2} + } + } +% \end{macrocode} +% After a dotless-I there may be a dot-above character. If there is then +% a dotted-i should be produced, otherwise output a dotless-i. When the +% combination is found both the dotless-I and the dot-above char have to +% be removed from the input, which is done by the \cs{use_i:nn} +% (it grabs \cs{@@_change_case_loop:wn} and the dot-above char and +% discards the latter). +% \begin{macrocode} +\cs_new:Npn \@@_change_case_lower_tr_auxi:Nw #1#2 \q_recursion_stop + { + \tl_if_head_is_N_type:nTF {#2} + { \@@_change_case_lower_tr_auxii:Nw #2 \q_recursion_stop } + { \@@_change_case_output:Vwn \c__unicode_dotless_i_tl } + #1 #2 \q_recursion_stop + } +\cs_new:Npn \@@_change_case_lower_tr_auxii:Nw #1#2 \q_recursion_stop + { + \bool_if:nTF + { + \token_if_cs_p:N #1 + || ! ( \int_compare_p:nNn { `#1 } = { "0307 } ) + } + { \@@_change_case_output:Vwn \c__unicode_dotless_i_tl } + { + \@@_change_case_output:nwn { i } + \use_i:nn + } + } +% \end{macrocode} +% Upper casing is easier: just one exception with no context. +% \begin{macrocode} +\cs_new:Npn \@@_change_case_upper_tr:Nnw #1#2 + { + \int_compare:nNnTF { `#1 } = { "0069 } + { \@@_change_case_output:Vwn \c__unicode_dotted_I_tl } + {#2} + } +% \end{macrocode} +% Straight copies. +% \begin{macrocode} +\cs_new_eq:NN \@@_change_case_lower_az:Nnw \@@_change_case_lower_tr:Nnw +\cs_new_eq:NN \@@_change_case_upper_az:Nnw \@@_change_case_upper_tr:Nnw +% \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} +% +% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:Nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:nNnw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:Nw} +% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:NNw} +% \begin{macro}[aux, EXP]{\@@_change_case_upper_lt:Nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_upper_lt:nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_upper_lt:Nw} +% \begin{macro}[aux, EXP]{\@@_change_case_upper_lt:NNw} +% For Lithuanian, the issue to be dealt with is dots over lower case +% letters: these should be present if there is another accent. That means +% that there is some work to do when lower casing I and J. The first step +% is a simple match attempt: \cs{c_@@_accents_lt_tl} contains +% accented upper case letters which should gain a dot-above char in their +% lower case form. This is done using \texttt{f}-type expansion so only one +% pass is needed to find if it works or not. If there was no hit, the second +% stage is to check for I, J and I-ogonek, and if the current char is a +% match to look for a following accent. +% \begin{macrocode} +\cs_new:Npn \@@_change_case_lower_lt:Nnw #1 + { + \exp_args:Nf \@@_change_case_lower_lt:nNnw + { \str_case:nVF #1 \c__unicode_accents_lt_tl \exp_stop_f: } + #1 + } +\cs_new:Npn \@@_change_case_lower_lt:nNnw #1#2 + { + \tl_if_blank:nTF {#1} + { + \exp_args:Nf \@@_change_case_lower_lt:nnw + { + \int_case:nnF {`#2} + { + { "0049 } i + { "004A } j + { "012E } \c__unicode_i_ogonek_tl + } + \exp_stop_f: + } + } + { + \@@_change_case_output:nwn {#1} + \use_none:n + } + } +\cs_new:Npn \@@_change_case_lower_lt:nnw #1#2 + { + \tl_if_blank:nTF {#1} + {#2} + { + \@@_change_case_output:nwn {#1} + \@@_change_case_lower_lt:Nw + } + } +% \end{macrocode} +% Grab the next char and see if it is one of the accents used in Lithuanian: +% if it is, add the dot-above char into the output. +% \begin{macrocode} +\cs_new:Npn \@@_change_case_lower_lt:Nw #1#2 \q_recursion_stop + { + \tl_if_head_is_N_type:nT {#2} + { \@@_change_case_lower_lt:NNw } + #1 #2 \q_recursion_stop + } +\cs_new:Npn \@@_change_case_lower_lt:NNw #1#2#3 \q_recursion_stop + { + \bool_if:nT + { + ! \token_if_cs_p:N #2 + && + ( + \int_compare_p:nNn { `#2 } = { "0300 } + || \int_compare_p:nNn { `#2 } = { "0301 } + || \int_compare_p:nNn { `#2 } = { "0303 } + ) + } + { \@@_change_case_output:Vwn \c__unicode_dot_above_tl } + #1 #2#3 \q_recursion_stop + } +% \end{macrocode} +% For upper casing, the test required is for a dot-above char after an I, +% J or I-ogonek. First a test for the appropriate letter, and if found a +% look-ahead and potentially one token dropped. +% \begin{macrocode} +\cs_new:Npn \@@_change_case_upper_lt:Nnw #1 + { + \exp_args:Nf \@@_change_case_upper_lt:nnw + { + \int_case:nnF {`#1} + { + { "0069 } I + { "006A } J + { "012F } \c__unicode_I_ogonek_tl + } + \exp_stop_f: + } + } +\cs_new:Npn \@@_change_case_upper_lt:nnw #1#2 + { + \tl_if_blank:nTF {#1} + {#2} + { + \@@_change_case_output:nwn {#1} + \@@_change_case_upper_lt:Nw + } + } +\cs_new:Npn \@@_change_case_upper_lt:Nw #1#2 \q_recursion_stop + { + \tl_if_head_is_N_type:nT {#2} + { \@@_change_case_upper_lt:NNw } + #1 #2 \q_recursion_stop + } +\cs_new:Npn \@@_change_case_upper_lt:NNw #1#2#3 \q_recursion_stop + { + \bool_if:nTF + { + ! \token_if_cs_p:N #2 + && \int_compare_p:nNn { `#2 } = { "0307 } + } + { #1 } + { #1 #2 } + #3 \q_recursion_stop + } +% \end{macrocode} % \end{macro} % \end{macro} % \end{macro} @@ -3495,32 +3811,50 @@ % \end{macro} % % \begin{macro}[aux, EXP]{\@@_mixed_case:nn} +% \begin{macro}[aux, EXP]{\@@_mixed_case_aux:nn} % \begin{macro}[aux, EXP]{\@@_mixed_case_loop:wn} -% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:Nwn} -% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:NNN} -% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:Nnn} -% \begin{macro}[aux, EXP]{\@@_mixed_case_skip:Nwn} -% \begin{macro}[aux, EXP]{\@@_mixed_case_skip_tidy:nNwn} % \begin{macro}[aux, EXP]{\@@_mixed_case_group:nwn} % \begin{macro}[aux, EXP]{\@@_mixed_case_space:wn} -% Mixed (title) casing needs an entire set of functions to itself. These are -% more or less the same as those for general case changes but the -% requirements here are subtly different. What is needed is a loop which -% looks for the first \enquote{real} char in the input (skipping any -% pre-letter chars). Once one is found, it is case changed to upper case but -% first checking that there is not an entry in the exceptions list. Once that -% process is done, all remaining chars are lower cased so there is a switch -% to the normal system. Note that simply grabbing the first token in the -% input is no good here: it can't handle pre-letter tokens or any special -% treatment of the first letter found (\emph{e.g.}~words starting with -% \texttt{i} in Turkish). Spaces at the start of the input are passed -% through without counting as being the \enquote{start} of the first word, -% while a brace group forces a switch to the standard lower casing routine. +% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:Nwn} +% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:NNNnn} +% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:Nnn} +% \begin{macro}[aux, EXP]{\@@_mixed_case_char:Nn} +% \begin{macro}[aux, EXP]{\@@_mixed_case_skip:N} +% \begin{macro}[aux, EXP]{\@@_mixed_case_skip:NN} +% \begin{macro}[aux, EXP]{\@@_mixed_case_skip_tidy:Nwn} +% \begin{macro}[aux, EXP]{\@@_mixed_case_char:nN} +% Mixed (title) casing requires some custom handling of the case changing +% of the first letter in the input followed by a switch to the normal +% lower casing routine. That could be covered by passing a set of functions +% to generic routines, but at the cost of making the process rather opaque. +% Instead, the approach taken here is to use a dedicated set of functions +% which keep the different loop requirements clearly separate. +% +% The main loop looks for the first \enquote{real} char in the input +% (skipping any pre-letter chars). Once one is found, it is case changed to +% upper case but first checking that there is not an entry in the exceptions +% list. Note that simply grabbing the first token in the input is no good +% here: it can't handle pre-letter tokens or any special treatment of the +% first letter found (\emph{e.g.}~words starting with \texttt{i} in +% Turkish). Spaces at the start of the input are passed through without +% counting as being the \enquote{start} of the first word, while a brace +% group is assumed to be contain the first char with everything after the +% brace therefore lower cased. % \begin{macrocode} \cs_new:Npn \@@_mixed_case:nn #1#2 { - \@@_mixed_case_loop:wn #2 - \q_recursion_tail \q_recursion_stop {#1} + \etex_unexpanded:D \exp_after:wN + { + \tex_romannumeral:D + \@@_mixed_case_aux:nn {#1} {#2} + } + } +\cs_new:Npn \@@_mixed_case_aux:nn #1#2 + { + \group_align_safe_begin: + \@@_mixed_case_loop:wn + #2 \q_recursion_tail \q_recursion_stop {#1} + \@@_change_case_result:n { } } \cs_new:Npn \@@_mixed_case_loop:wn #1 \q_recursion_stop { @@ -3533,14 +3867,32 @@ } #1 \q_recursion_stop } +\cs_new:Npn \@@_mixed_case_group:nwn #1#2 \q_recursion_stop #3 + { + \@@_change_case_output:own + { + \exp_after:wN + { + \tex_romannumeral:D + \@@_mixed_case_aux:nn {#3} {#1} + } + } + \@@_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} + } +\exp_last_unbraced:NNo \cs_new:Npn \@@_mixed_case_space:wn \c_space_tl + { + \@@_change_case_output:nwn { ~ } + \@@_mixed_case_loop:wn + } \cs_new:Npn \@@_mixed_case_N_type:Nwn #1#2 \q_recursion_stop { - \quark_if_recursion_tail_stop_do:Nn #1 { \use_none:nn } - \exp_after:wN \@@_mixed_case_N_type:NNN + \quark_if_recursion_tail_stop_do:Nn #1 + { \@@_change_case_end:wn } + \exp_after:wN \@@_mixed_case_N_type:NNNnn \exp_after:wN #1 \l_tl_case_change_math_tl \q_recursion_tail ? \q_recursion_stop {#2} } -\cs_new:Npn \@@_mixed_case_N_type:NNN #1#2#3 +\cs_new:Npn \@@_mixed_case_N_type:NNNnn #1#2#3 { \quark_if_recursion_tail_stop_do:Nn #2 { \@@_mixed_case_N_type:Nnn #1 } @@ -3548,18 +3900,22 @@ { \use_i_delimit_by_q_recursion_stop:nw { - \@@_change_case_math:NNNn #1 #3 - \@@_mixed_case_loop:wn + \@@_change_case_math:NNNnnn + #1 #3 \@@_mixed_case_loop:wn } } - { \@@_mixed_case_N_type:NNN #1 } + { \@@_mixed_case_N_type:NNNnn #1 } } +% \end{macrocode} +% The business end of the loop is here: there is first a need to deal +% with any control sequence cases before looking for characters to skip. +% \begin{macrocode} \cs_new:Npn \@@_mixed_case_N_type:Nnn #1#2#3 { \token_if_cs:NTF #1 %<*initex> { - \@@_change_case_cs:N #1 + \@@_change_case_cs:N #1 \@@_mixed_case_loop:wn #2 \q_recursion_stop {#3} } %</initex> @@ -3577,74 +3933,58 @@ } %</package> { - \cs_if_exist_use:cF { @@_change_case_mixed_ #3 :Nnn } - { - \cs_if_exist_use:cF { @@_change_case_upper_ #3 :Nnn } - { \use_iii:nnn } - } - #1 {#2} - { - \exp_after:wN \@@_mixed_case_skip:NNn - \exp_after:wN #1 \l_tl_mixed_case_ignore_tl - \q_recursion_tail \q_recursion_stop - { - \str_case:nVF #1 \c_@@_mixed_exceptions_tl - { - \exp_after:wN \@@_change_case_char:NNNNNNNNn - \int_use:N - \__int_eval:w 1000000 + `#1 \__int_eval_end: - #1 { upper } - } - } - } + \@@_mixed_case_char:Nn #1 {#3} \@@_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} } } % \end{macrocode} -% Looking for chars to skip when title casing uses the standard \enquote{loop -% around a list} approach. If there is a hit, there is a bit of tidying up -% to do: retain the char and switch the looping system to stick with the -% title loop rather than the lower case one. That means swapping an -% auxiliary and removing a trailing |{ lower }|, which is easiest to do -% with a dedicated function. When dealing with a brace group there is a -% need to test if there is any content in it: that affects whether to keep -% looking for the first character or not after the group. If there is -% anything non-expandable at all in it then that will be treated as the -% first \enquote{character}. +% As detailed above, handling a mixed case char means first looking for +% exceptions then treating as an upper cased letter, but with a list of +% tokens to skip over too. % \begin{macrocode} -\cs_new:Npn \@@_mixed_case_skip:NNn #1#2 +\cs_new:Npn \@@_mixed_case_char:Nn #1#2 { - \quark_if_recursion_tail_stop_do:nn {#2} { \use:n } - \int_compare:nNnT { `#1 } = { `#2 } + \cs_if_exist_use:cF { @@_change_case_mixed_ #2 :Nnw } { - \use_i_delimit_by_q_recursion_stop:nw - { - #1 - \@@_mixed_case_skip_tidy:nNwn - } + \cs_if_exist_use:cF { @@_change_case_upper_ #2 :Nnw } + { \use_ii:nn } } - \@@_mixed_case_skip:NNn #1 + #1 + { \@@_mixed_case_skip:N #1 } } -\cs_new:Npn \@@_mixed_case_skip_tidy:nNwn #1#2#3 \q_recursion_stop #4 +\cs_new:Npn \@@_mixed_case_skip:N #1 { - \@@_mixed_case_loop:wn #3 \q_recursion_stop + \exp_after:wN \@@_mixed_case_skip:NN + \exp_after:wN #1 \l_tl_mixed_case_ignore_tl + \q_recursion_tail \q_recursion_stop } -\cs_new:Npn \@@_mixed_case_group:nwn #1#2 \q_recursion_stop #3 +\cs_new:Npn \@@_mixed_case_skip:NN #1#2 { - \tl_if_blank:fTF {#1} - { { } \@@_mixed_case_loop:wn #2 \q_recursion_stop {#3} } + \quark_if_recursion_tail_stop_do:nn {#2} { - { - \@@_mixed_case_loop:wn #1 - \q_recursion_tail \q_recursion_stop {#3} - } - \@@_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} + \exp_args:Nf \@@_mixed_case_char:nN + { \str_case:nVF #1 \c__unicode_mixed_exceptions_tl \exp_stop_f: } + #1 + } + \int_compare:nNnT { `#1 } = { `#2 } + { + \use_i_delimit_by_q_recursion_stop:nw + { + \@@_change_case_output:nwn {#1} + \@@_mixed_case_skip_tidy:Nwn + } } + \@@_mixed_case_skip:NN #1 } -\exp_last_unbraced:NNo \cs_new:Npn \@@_mixed_case_space:wn \c_space_tl +\cs_new:Npn \@@_mixed_case_skip_tidy:Nwn #1#2 \q_recursion_stop #3 { - \c_space_tl - \@@_mixed_case_loop:wn + \@@_mixed_case_loop:wn #2 \q_recursion_stop + } +\cs_new:Npn \@@_mixed_case_char:nN #1#2 + { + \tl_if_blank:nTF {#1} + { \@@_change_case_char:Nn #2 { upper } } + { \@@_change_case_output:nwn {#1} } } % \end{macrocode} % \end{macro} @@ -3656,191 +3996,58 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}[aux]^^A -% { -% \@@_change_case_lower_tr:Nnn , -% \@@_change_case_lower_az:Nnn -% } -% \begin{macro}[aux]{\@@_change_case_lower_tr:Nw} -% \begin{macro}[aux]^^A -% { -% \@@_change_case_upper_tr:Nnn , -% \@@_change_case_upper_az:Nnn -% } -% 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 -% easy, but in the former there is a second stage search. -% \begin{macrocode} -\cs_new:Npn \@@_change_case_lower_tr:Nnn #1#2#3 - { - \int_compare:nNnTF { `#1 } = { "0049 } - { - \tl_if_head_is_N_type:nTF {#2} - { \@@_change_case_lower_tr:Nw #2 \q_recursion_stop } - { \c_@@_dotless_i_tl } - } - { - \int_compare:nNnTF { `#1 } = { "0130 } - { i } - {#3} - } - } -\cs_new_nopar:Npn \@@_change_case_lower_az:Nnn - { \@@_change_case_lower_tr:Nnn } -% \end{macrocode} -% After a dotless-I there may be a dot-above character. If there is then -% a dotted-i should be produced, otherwise output a dotless-i. When the -% combination is found both the dotless-I and the dot-above char have to -% be removed from the input, which is done by the \cs{use_i:nn} -% (it grabs \cs{@@_change_case_loop:wn} and the dot-above char and -% discards the latter). +% \begin{macro}[aux, EXP]{\@@_change_case_mixed_nl:Nnw} +% \begin{macro}[aux, EXP]{\@@_change_case_mixed_nl:Nw} +% \begin{macro}[aux, EXP]{\@@_change_case_mixed_nl:NNw} +% For Dutch, there is a single look-ahead test for \texttt{ij} when +% title casing. If the appropriate letters are found, produce \texttt{IJ} +% and gobble the \texttt{j}/\texttt{J}. % \begin{macrocode} -\cs_new:Npn \@@_change_case_lower_tr:Nw #1#2 \q_recursion_stop +\cs_new:Npn \@@_change_case_mixed_nl:Nnw #1 { \bool_if:nTF { - \token_if_cs_p:N #1 - || ! ( \int_compare_p:nNn { `#1 } = { "0307 } ) + \int_compare_p:nNn { `#1 } = { `i } + || \int_compare_p:nNn { `#1 } = { `I } } - { \c_@@_dotless_i_tl } { - i - \use_i:nn + \@@_change_case_output:nwn { I } + \@@_change_case_mixed_nl:Nw } } -% \end{macrocode} -% Upper casing is easier: just one exception with no context. -% \begin{macrocode} -\cs_new:Npn \@@_change_case_upper_tr:Nnn #1#2#3 - { - \int_compare:nNnTF { `#1 } = { "0069 } - { \c_@@_dotted_I_tl } - {#3} - } -\cs_new_nopar:Npn \@@_change_case_upper_az:Nnn - { \@@_change_case_upper_tr:Nnn } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}[aux]{\@@_change_case_lower_lt:Nnn} -% \begin{macro}[aux]{\@@_change_case_lower_lt:Nw} -% \begin{macro}[aux]{\@@_change_case_upper_lt:Nnn} -% \begin{macro}[aux]{\@@_change_case_upper_lt:Nw} -% For Lithuanian, the issue to be dealt with is dots over lower case -% letters: these should be present if there is another accent. That means -% that there is some work to do when lower casing I and J. The first step -% is a simple match attempt: \cs{c_@@_accents_lt_tl} contains -% accented upper case letters which should gain a dot-above char in their -% lower case form. The second stage is to check for I, J and I-ogonek, and -% if the current char is a match to look for a following accent. As the -% current char is still needed in case-changed form, the standard code is -% inserted before hunting for an accent. -% \begin{macrocode} -\cs_new:Npn \@@_change_case_lower_lt:Nnn #1#2#3 +\cs_new:Npn \@@_change_case_mixed_nl:Nw #1#2 \q_recursion_stop { - \str_case:nVF #1 \c_@@_accents_lt_tl - { - #3 - \bool_if:nT - { - \int_compare_p:nNn { `#1 } = { "0049 } - || \int_compare_p:nNn { `#1 } = { "004A } - || \int_compare_p:nNn { `#1 } = { "012E } - } - { - \tl_if_head_is_N_type:nT {#2} - { \@@_change_case_lower_lt:Nw #2 \q_recursion_stop } - } - } + \tl_if_head_is_N_type:nT {#2} + { \@@_change_case_mixed_nl:NNw } + #1 #2 \q_recursion_stop } -% \end{macrocode} -% Grab the next char and see if it is one of the accents used in Lithuanian: -% if it is, add the dot-above char into the output. -% \begin{macrocode} -\cs_new:Npn \@@_change_case_lower_lt:Nw #1#2 \q_recursion_stop +\cs_new:Npn \@@_change_case_mixed_nl:NNw #1#2#3 \q_recursion_stop { - \bool_if:nT + \bool_if:nTF { - ! ( \token_if_cs_p:N #1 ) + ! ( \token_if_cs_p:N #2 ) && ( - \int_compare_p:nNn { `#1 } = { "0300 } - || \int_compare_p:nNn { `#1 } = { "0301 } - || \int_compare_p:nNn { `#1 } = { "0303 } + \int_compare_p:nNn { `#2 } = { `j } + || \int_compare_p:nNn { `#2 } = { `J } ) } - { \c_@@_dot_above_tl } - } -% \end{macrocode} -% For upper casing, the chars themselves are always converted as normal. -% The test required here is for a dot-above char after an I, J or I-ogonek. -% If there is one, it's removed using \cs{use_i:nn} (which preserves the -% loop and discards the char). -% \begin{macrocode} -\cs_new:Npn \@@_change_case_upper_lt:Nnn #1#2#3 - { - #3 - \bool_if:nT - { - \tl_if_head_is_N_type_p:n {#2} - && - ( - \int_compare_p:nNn { `#1 } = { "0069 } - || \int_compare_p:nNn { `#1 } = { "006A } - || \int_compare_p:nNn { `#1 } = { "012F } - ) - } - { \@@_change_case_upper_lt:Nw #2 \q_recursion_stop } - } -\cs_new:Npn \@@_change_case_upper_lt:Nw #1#2 \q_recursion_stop - { - \bool_if:nT { - ! ( \token_if_cs_p:N #1 ) - && - \int_compare_p:nNn { `#1 } = { "0307 } + \@@_change_case_output:nwn { J } + #1 } - { \use_i:nn } + { #1 #2 } + #3 \q_recursion_stop } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} -% \end{macro} -% \begin{macro}[aux]{\@@_change_case_mixed_nl:Nnn} -% \begin{macro}[aux]{\@@_change_case_mixed_nl:Nw} -% For Dutch, there is a single look-ahead test for \texttt{ij} when -% title casing. If the appropriate letters are found, produce \texttt{IJ} -% and gobble the \texttt{j}. -% \begin{macrocode} -\cs_new:Npn \@@_change_case_mixed_nl:Nnn #1#2 - { - \int_compare:nNnTF { `#1 } = { `i } - { - I - \tl_if_head_is_N_type:nT {#2} - { \@@_change_case_mixed_nl:Nw #2 \q_recursion_stop } - } - } -\cs_new:Npn \@@_change_case_mixed_nl:Nw #1#2 \q_recursion_stop - { - \bool_if:nT - { - ! ( \token_if_cs_p:N #1 ) - && - \int_compare_p:nNn { `#1 } = { `j } - } - { - J - \use_i:nn - } - } -% \end{macrocode} -% \end{macro} -% \end{macro} % % \begin{variable}{\l_tl_case_change_math_tl} % The list of token pairs which are treated as math mode and so @@ -3923,6 +4130,7 @@ % lower case mappings are not identical so special end cases are needed % to get everything set up correctly with minimal repetition. % \begin{macrocode} +%<*package> \group_begin: \cs_set_protected:Npn \@@_change_case_setup:nnnn #1#2#3#4 { @@ -3940,24 +4148,14 @@ \cs_set:Npn \@@_change_case_map:NN #1#2 { \quark_if_recursion_tail_stop:N #1 -%<*initex> - \exp_not:N #1 \exp_not:N #2 -%</initex> -%<*package> - \exp_not:N #1 \exp_not:n { { \exp_not:n {#2} } } -%</package> + \exp_not:N #1 \exp_not:n { { \exp_stop_f: #2 } } \@@_change_case_map:NN } \cs_set:Npn \@@_change_case_map:NNN #1#2#3 { \str_if_eq:nnT {#1} {#2} { \use_none_delimit_by_q_recursion_stop:w } -%<*initex> - \exp_not:N #3 \exp_not:N #2 -%</initex> -%<*package> - \exp_not:N #3 \exp_not:n { { \exp_not:n {#2} } } -%</package> + \exp_not:N #3 \exp_not:n { { \exp_stop_f: #2 } } \@@_change_case_map:NNN #1 } \@@_change_case_setup:nnnn @@ -3978,7 +4176,6 @@ \j J } { \i } -%<*package> \@@_change_case_setup:nnnn { cyrillic } { _i } @@ -4140,50 +4337,50 @@ { \textsigma } \tl_const:Nn \c_@@_change_case_acc_upper_tl { - \accdasia { \exp_not:n { \LGR@accdropped } } - \accdasiaoxia { \exp_not:n { \LGR@hiatus } } - \accdasiavaria { \exp_not:n { \LGR@accdropped } } - \accdasiaperispomeni { \exp_not:n { \LGR@accdropped } } - \accpsili { \exp_not:n { \LGR@hiatus } } - \accpsilioxia { \exp_not:n { \LGR@hiatus } } - \accpsilivaria { \exp_not:n { \LGR@hiatus } } - \accpsiliperispomeni { \exp_not:n { \LGR@accdropped } } - \acctonos { \exp_not:n { \LGR@hiatus } } - \accvaria { \exp_not:n { \LGR@accdropped } } - \accdialytikatonos { \exp_not:n { \LGR@accDialytika } } - \accdialytikavaria { \exp_not:n { \LGR@accDialytika } } - \accdialytikaperispomeni { \exp_not:n { \LGR@accDialytika } } - \accperispomeni { \exp_not:n { \LGR@accdropped } } + \accdasia { \exp_stop_f: \LGR@accdropped } + \accdasiaoxia { \exp_stop_f: \LGR@hiatus } + \accdasiavaria { \exp_stop_f: \LGR@accdropped } + \accdasiaperispomeni { \exp_stop_f: \LGR@accdropped } + \accpsili { \exp_stop_f: \LGR@hiatus } + \accpsilioxia { \exp_stop_f: \LGR@hiatus } + \accpsilivaria { \exp_stop_f: \LGR@hiatus } + \accpsiliperispomeni { \exp_stop_f: \LGR@accdropped } + \acctonos { \exp_stop_f: \LGR@hiatus } + \accvaria { \exp_stop_f: \LGR@accdropped } + \accdialytikatonos { \exp_stop_f: \LGR@accDialytika } + \accdialytikavaria { \exp_stop_f: \LGR@accDialytika } + \accdialytikaperispomeni { \exp_stop_f: \LGR@accDialytika } + \accperispomeni { \exp_stop_f: \LGR@accdropped } } \tl_const:Nn \c_@@_change_case_acc_lower_tl { } \tl_const:Nn \c_@@_change_case_misc_upper_tl { - \ypogegrammeni { \exp_not:n { \prosgegrammeni } } - \abreve { \exp_not:n { \Abreve } } - \acircumflex { \exp_not:n { \Acircumflex } } - \ecircumflex { \exp_not:n { \Ecircumflex } } - \ocircumflex { \exp_not:n { \Ocircumflex } } - \ohorn { \exp_not:n { \Ohorn } } - \uhorn { \exp_not:n { \Uhorn } } + \ypogegrammeni { \exp_stop_f: \prosgegrammeni } + \abreve { \exp_stop_f: \Abreve } + \acircumflex { \exp_stop_f: \Acircumflex } + \ecircumflex { \exp_stop_f: \Ecircumflex } + \ocircumflex { \exp_stop_f: \Ocircumflex } + \ohorn { \exp_stop_f: \Ohorn } + \uhorn { \exp_stop_f: \Uhorn } } \tl_const:Nn \c_@@_change_case_misc_lower_tl { - \prosgegrammeni { \exp_not:n { \ypogegrammeni } } - \Abreve { \exp_not:n { \abreve } } - \Acircumflex { \exp_not:n { \acircumflex } } - \Ecircumflex { \exp_not:n { \ecircumflex } } - \Ocircumflex { \exp_not:n { \ocircumflex } } - \Ohorn { \exp_not:n { \ohorn } } - \Uhorn { \exp_not:n { \uhorn } } - \ABREVE { \exp_not:n { \abreve } } - \ACIRCUMFLEX { \exp_not:n { \acircumflex } } - \ECIRCUMFLEX { \exp_not:n { \ecircumflex } } - \OCIRCUMFLEX { \exp_not:n { \ocircumflex } } - \OHORN { \exp_not:n { \ohorn } } - \UHORN { \exp_not:n { \uhorn } } + \prosgegrammeni { \exp_stop_f: \ypogegrammeni } + \Abreve { \exp_stop_f: \abreve } + \Acircumflex { \exp_stop_f: \acircumflex } + \Ecircumflex { \exp_stop_f: \ecircumflex } + \Ocircumflex { \exp_stop_f: \ocircumflex } + \Ohorn { \exp_stop_f: \ohorn } + \Uhorn { \exp_stop_f: \uhorn } + \ABREVE { \exp_stop_f: \abreve } + \ACIRCUMFLEX { \exp_stop_f: \acircumflex } + \ECIRCUMFLEX { \exp_stop_f: \ecircumflex } + \OCIRCUMFLEX { \exp_stop_f: \ocircumflex } + \OHORN { \exp_stop_f: \ohorn } + \UHORN { \exp_stop_f: \uhorn } } -%</package> \group_end: +%</package> % \end{macrocode} % \end{variable} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index 42036030d8d..9acee10a2da 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%% File: l3int.dtx Copyright (C) 1990-2014 The LaTeX3 Project +%% File: l3int.dtx Copyright (C) 1990-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} %</driver> %<*driver|package> -\GetIdInfo$Id: l3int.dtx 5421 2014-09-14 07:52:58Z joseph $ +\GetIdInfo$Id: l3int.dtx 5529 2015-02-21 16:17:50Z joseph $ {L3 Integers} %</driver|package> %<*driver> @@ -475,7 +475,7 @@ % % \begin{function}[updated = 2013-01-13, rEXP]{\int_until_do:nn} % \begin{syntax} -% \cs{int_until_do:nn} \Arg{integer_relation} \Arg{code} +% \cs{int_until_do:nn} \Arg{integer relation} \Arg{code} % \end{syntax} % Evaluates the \meta{integer relation} % as described for \cs{int_compare:nTF}, and then places the diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 0e48e2abac8..c644a10cec6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%% File: l3msg.dtx Copyright (C) 2009-2014 The LaTeX3 Project +%% File: l3msg.dtx Copyright (C) 2009-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} %</driver> %<*driver|package> -\GetIdInfo$Id: l3msg.dtx 5358 2014-08-24 09:19:52Z bruno $ +\GetIdInfo$Id: l3msg.dtx 5537 2015-02-26 21:25:23Z joseph $ {L3 Messages} %</driver|package> %<*driver> @@ -1816,8 +1816,8 @@ { Control~sequence~#1~undefined. } { \c_@@_coding_error_text_tl - LaTeX~has~been~asked~to~use~a~command~#1,~but~this~has~not~ - been~defined~yet. + LaTeX~has~been~asked~to~use~a~control~sequence~'#1':\\ + this~has~not~been~defined~yet. } \@@_kernel_new:nnnn { kernel } { empty-search-pattern } { Empty~search~pattern. } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index a3440696f39..0be609173a3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%% File: l3names.dtx Copyright (C) 1990-2014 The LaTeX3 project +%% File: l3names.dtx Copyright (C) 1990-2015 The LaTeX3 project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} %</driver> %<*driver|package> -\GetIdInfo$Id: l3names.dtx 5343 2014-08-22 19:32:35Z bruno $ +\GetIdInfo$Id: l3names.dtx 5535 2015-02-24 09:11:19Z joseph $ {L3 Namespace for primitives} %</driver|package> %<*driver> @@ -158,406 +158,406 @@ % These are given modified new names, so that they may be entered % without catcode tricks. % \begin{macrocode} - \__kernel_primitive:NN \ \tex_space:D - \__kernel_primitive:NN \/ \tex_italiccorrection:D - \__kernel_primitive:NN \- \tex_hyphen:D + \__kernel_primitive:NN \ \tex_space:D + \__kernel_primitive:NN \/ \tex_italiccorrection:D + \__kernel_primitive:NN \- \tex_hyphen:D % \end{macrocode} % % Now all the other primitives. % \begin{macrocode} - \__kernel_primitive:NN \let \tex_let:D - \__kernel_primitive:NN \def \tex_def:D - \__kernel_primitive:NN \edef \tex_edef:D - \__kernel_primitive:NN \gdef \tex_gdef:D - \__kernel_primitive:NN \xdef \tex_xdef:D - \__kernel_primitive:NN \chardef \tex_chardef:D - \__kernel_primitive:NN \countdef \tex_countdef:D - \__kernel_primitive:NN \dimendef \tex_dimendef:D - \__kernel_primitive:NN \skipdef \tex_skipdef:D - \__kernel_primitive:NN \muskipdef \tex_muskipdef:D - \__kernel_primitive:NN \mathchardef \tex_mathchardef:D - \__kernel_primitive:NN \toksdef \tex_toksdef:D - \__kernel_primitive:NN \futurelet \tex_futurelet:D - \__kernel_primitive:NN \advance \tex_advance:D - \__kernel_primitive:NN \divide \tex_divide:D - \__kernel_primitive:NN \multiply \tex_multiply:D - \__kernel_primitive:NN \font \tex_font:D - \__kernel_primitive:NN \fam \tex_fam:D - \__kernel_primitive:NN \global \tex_global:D - \__kernel_primitive:NN \long \tex_long:D - \__kernel_primitive:NN \outer \tex_outer:D - \__kernel_primitive:NN \setlanguage \tex_setlanguage:D - \__kernel_primitive:NN \globaldefs \tex_globaldefs:D - \__kernel_primitive:NN \afterassignment \tex_afterassignment:D - \__kernel_primitive:NN \aftergroup \tex_aftergroup:D - \__kernel_primitive:NN \expandafter \tex_expandafter:D - \__kernel_primitive:NN \noexpand \tex_noexpand:D - \__kernel_primitive:NN \begingroup \tex_begingroup:D - \__kernel_primitive:NN \endgroup \tex_endgroup:D - \__kernel_primitive:NN \halign \tex_halign:D - \__kernel_primitive:NN \valign \tex_valign:D - \__kernel_primitive:NN \cr \tex_cr:D - \__kernel_primitive:NN \crcr \tex_crcr:D - \__kernel_primitive:NN \noalign \tex_noalign:D - \__kernel_primitive:NN \omit \tex_omit:D - \__kernel_primitive:NN \span \tex_span:D - \__kernel_primitive:NN \tabskip \tex_tabskip:D - \__kernel_primitive:NN \everycr \tex_everycr:D - \__kernel_primitive:NN \if \tex_if:D - \__kernel_primitive:NN \ifcase \tex_ifcase:D - \__kernel_primitive:NN \ifcat \tex_ifcat:D - \__kernel_primitive:NN \ifnum \tex_ifnum:D - \__kernel_primitive:NN \ifodd \tex_ifodd:D - \__kernel_primitive:NN \ifdim \tex_ifdim:D - \__kernel_primitive:NN \ifeof \tex_ifeof:D - \__kernel_primitive:NN \ifhbox \tex_ifhbox:D - \__kernel_primitive:NN \ifvbox \tex_ifvbox:D - \__kernel_primitive:NN \ifvoid \tex_ifvoid:D - \__kernel_primitive:NN \ifx \tex_ifx:D - \__kernel_primitive:NN \iffalse \tex_iffalse:D - \__kernel_primitive:NN \iftrue \tex_iftrue:D - \__kernel_primitive:NN \ifhmode \tex_ifhmode:D - \__kernel_primitive:NN \ifmmode \tex_ifmmode:D - \__kernel_primitive:NN \ifvmode \tex_ifvmode:D - \__kernel_primitive:NN \ifinner \tex_ifinner:D - \__kernel_primitive:NN \else \tex_else:D - \__kernel_primitive:NN \fi \tex_fi:D - \__kernel_primitive:NN \or \tex_or:D - \__kernel_primitive:NN \immediate \tex_immediate:D - \__kernel_primitive:NN \closeout \tex_closeout:D - \__kernel_primitive:NN \openin \tex_openin:D - \__kernel_primitive:NN \openout \tex_openout:D - \__kernel_primitive:NN \read \tex_read:D - \__kernel_primitive:NN \write \tex_write:D - \__kernel_primitive:NN \closein \tex_closein:D - \__kernel_primitive:NN \newlinechar \tex_newlinechar:D - \__kernel_primitive:NN \input \tex_input:D - \__kernel_primitive:NN \endinput \tex_endinput:D - \__kernel_primitive:NN \inputlineno \tex_inputlineno:D - \__kernel_primitive:NN \errmessage \tex_errmessage:D - \__kernel_primitive:NN \message \tex_message:D - \__kernel_primitive:NN \show \tex_show:D - \__kernel_primitive:NN \showthe \tex_showthe:D - \__kernel_primitive:NN \showbox \tex_showbox:D - \__kernel_primitive:NN \showlists \tex_showlists:D - \__kernel_primitive:NN \errhelp \tex_errhelp:D - \__kernel_primitive:NN \errorcontextlines \tex_errorcontextlines:D - \__kernel_primitive:NN \tracingcommands \tex_tracingcommands:D - \__kernel_primitive:NN \tracinglostchars \tex_tracinglostchars:D - \__kernel_primitive:NN \tracingmacros \tex_tracingmacros:D - \__kernel_primitive:NN \tracingonline \tex_tracingonline:D - \__kernel_primitive:NN \tracingoutput \tex_tracingoutput:D - \__kernel_primitive:NN \tracingpages \tex_tracingpages:D - \__kernel_primitive:NN \tracingparagraphs \tex_tracingparagraphs:D - \__kernel_primitive:NN \tracingrestores \tex_tracingrestores:D - \__kernel_primitive:NN \tracingstats \tex_tracingstats:D - \__kernel_primitive:NN \pausing \tex_pausing:D - \__kernel_primitive:NN \showboxbreadth \tex_showboxbreadth:D - \__kernel_primitive:NN \showboxdepth \tex_showboxdepth:D - \__kernel_primitive:NN \batchmode \tex_batchmode:D - \__kernel_primitive:NN \errorstopmode \tex_errorstopmode:D - \__kernel_primitive:NN \nonstopmode \tex_nonstopmode:D - \__kernel_primitive:NN \scrollmode \tex_scrollmode:D - \__kernel_primitive:NN \end \tex_end:D - \__kernel_primitive:NN \csname \tex_csname:D - \__kernel_primitive:NN \endcsname \tex_endcsname:D - \__kernel_primitive:NN \ignorespaces \tex_ignorespaces:D - \__kernel_primitive:NN \relax \tex_relax:D - \__kernel_primitive:NN \the \tex_the:D - \__kernel_primitive:NN \mag \tex_mag:D - \__kernel_primitive:NN \language \tex_language:D - \__kernel_primitive:NN \mark \tex_mark:D - \__kernel_primitive:NN \topmark \tex_topmark:D - \__kernel_primitive:NN \firstmark \tex_firstmark:D - \__kernel_primitive:NN \botmark \tex_botmark:D - \__kernel_primitive:NN \splitfirstmark \tex_splitfirstmark:D - \__kernel_primitive:NN \splitbotmark \tex_splitbotmark:D - \__kernel_primitive:NN \fontname \tex_fontname:D - \__kernel_primitive:NN \escapechar \tex_escapechar:D - \__kernel_primitive:NN \endlinechar \tex_endlinechar:D - \__kernel_primitive:NN \mathchoice \tex_mathchoice:D - \__kernel_primitive:NN \delimiter \tex_delimiter:D - \__kernel_primitive:NN \mathaccent \tex_mathaccent:D - \__kernel_primitive:NN \mathchar \tex_mathchar:D - \__kernel_primitive:NN \mskip \tex_mskip:D - \__kernel_primitive:NN \radical \tex_radical:D - \__kernel_primitive:NN \vcenter \tex_vcenter:D - \__kernel_primitive:NN \mkern \tex_mkern:D - \__kernel_primitive:NN \above \tex_above:D - \__kernel_primitive:NN \abovewithdelims \tex_abovewithdelims:D - \__kernel_primitive:NN \atop \tex_atop:D - \__kernel_primitive:NN \atopwithdelims \tex_atopwithdelims:D - \__kernel_primitive:NN \over \tex_over:D - \__kernel_primitive:NN \overwithdelims \tex_overwithdelims:D - \__kernel_primitive:NN \displaystyle \tex_displaystyle:D - \__kernel_primitive:NN \textstyle \tex_textstyle:D - \__kernel_primitive:NN \scriptstyle \tex_scriptstyle:D - \__kernel_primitive:NN \scriptscriptstyle \tex_scriptscriptstyle:D - \__kernel_primitive:NN \nonscript \tex_nonscript:D - \__kernel_primitive:NN \eqno \tex_eqno:D - \__kernel_primitive:NN \leqno \tex_leqno:D - \__kernel_primitive:NN \abovedisplayshortskip \tex_abovedisplayshortskip:D - \__kernel_primitive:NN \abovedisplayskip \tex_abovedisplayskip:D - \__kernel_primitive:NN \belowdisplayshortskip \tex_belowdisplayshortskip:D - \__kernel_primitive:NN \belowdisplayskip \tex_belowdisplayskip:D - \__kernel_primitive:NN \displaywidowpenalty \tex_displaywidowpenalty:D - \__kernel_primitive:NN \displayindent \tex_displayindent:D - \__kernel_primitive:NN \displaywidth \tex_displaywidth:D - \__kernel_primitive:NN \everydisplay \tex_everydisplay:D - \__kernel_primitive:NN \predisplaysize \tex_predisplaysize:D - \__kernel_primitive:NN \predisplaypenalty \tex_predisplaypenalty:D - \__kernel_primitive:NN \postdisplaypenalty \tex_postdisplaypenalty:D - \__kernel_primitive:NN \mathbin \tex_mathbin:D - \__kernel_primitive:NN \mathclose \tex_mathclose:D - \__kernel_primitive:NN \mathinner \tex_mathinner:D - \__kernel_primitive:NN \mathop \tex_mathop:D - \__kernel_primitive:NN \displaylimits \tex_displaylimits:D - \__kernel_primitive:NN \limits \tex_limits:D - \__kernel_primitive:NN \nolimits \tex_nolimits:D - \__kernel_primitive:NN \mathopen \tex_mathopen:D - \__kernel_primitive:NN \mathord \tex_mathord:D - \__kernel_primitive:NN \mathpunct \tex_mathpunct:D - \__kernel_primitive:NN \mathrel \tex_mathrel:D - \__kernel_primitive:NN \overline \tex_overline:D - \__kernel_primitive:NN \underline \tex_underline:D - \__kernel_primitive:NN \left \tex_left:D - \__kernel_primitive:NN \right \tex_right:D - \__kernel_primitive:NN \binoppenalty \tex_binoppenalty:D - \__kernel_primitive:NN \relpenalty \tex_relpenalty:D - \__kernel_primitive:NN \delimitershortfall \tex_delimitershortfall:D - \__kernel_primitive:NN \delimiterfactor \tex_delimiterfactor:D - \__kernel_primitive:NN \nulldelimiterspace \tex_nulldelimiterspace:D - \__kernel_primitive:NN \everymath \tex_everymath:D - \__kernel_primitive:NN \mathsurround \tex_mathsurround:D - \__kernel_primitive:NN \medmuskip \tex_medmuskip:D - \__kernel_primitive:NN \thinmuskip \tex_thinmuskip:D - \__kernel_primitive:NN \thickmuskip \tex_thickmuskip:D - \__kernel_primitive:NN \scriptspace \tex_scriptspace:D - \__kernel_primitive:NN \noboundary \tex_noboundary:D - \__kernel_primitive:NN \accent \tex_accent:D - \__kernel_primitive:NN \char \tex_char:D - \__kernel_primitive:NN \discretionary \tex_discretionary:D - \__kernel_primitive:NN \hfil \tex_hfil:D - \__kernel_primitive:NN \hfilneg \tex_hfilneg:D - \__kernel_primitive:NN \hfill \tex_hfill:D - \__kernel_primitive:NN \hskip \tex_hskip:D - \__kernel_primitive:NN \hss \tex_hss:D - \__kernel_primitive:NN \vfil \tex_vfil:D - \__kernel_primitive:NN \vfilneg \tex_vfilneg:D - \__kernel_primitive:NN \vfill \tex_vfill:D - \__kernel_primitive:NN \vskip \tex_vskip:D - \__kernel_primitive:NN \vss \tex_vss:D - \__kernel_primitive:NN \unskip \tex_unskip:D - \__kernel_primitive:NN \kern \tex_kern:D - \__kernel_primitive:NN \unkern \tex_unkern:D - \__kernel_primitive:NN \hrule \tex_hrule:D - \__kernel_primitive:NN \vrule \tex_vrule:D - \__kernel_primitive:NN \leaders \tex_leaders:D - \__kernel_primitive:NN \cleaders \tex_cleaders:D - \__kernel_primitive:NN \xleaders \tex_xleaders:D - \__kernel_primitive:NN \lastkern \tex_lastkern:D - \__kernel_primitive:NN \lastskip \tex_lastskip:D - \__kernel_primitive:NN \indent \tex_indent:D - \__kernel_primitive:NN \par \tex_par:D - \__kernel_primitive:NN \noindent \tex_noindent:D - \__kernel_primitive:NN \vadjust \tex_vadjust:D - \__kernel_primitive:NN \baselineskip \tex_baselineskip:D - \__kernel_primitive:NN \lineskip \tex_lineskip:D - \__kernel_primitive:NN \lineskiplimit \tex_lineskiplimit:D - \__kernel_primitive:NN \clubpenalty \tex_clubpenalty:D - \__kernel_primitive:NN \widowpenalty \tex_widowpenalty:D - \__kernel_primitive:NN \exhyphenpenalty \tex_exhyphenpenalty:D - \__kernel_primitive:NN \hyphenpenalty \tex_hyphenpenalty:D - \__kernel_primitive:NN \linepenalty \tex_linepenalty:D - \__kernel_primitive:NN \doublehyphendemerits \tex_doublehyphendemerits:D - \__kernel_primitive:NN \finalhyphendemerits \tex_finalhyphendemerits:D - \__kernel_primitive:NN \adjdemerits \tex_adjdemerits:D - \__kernel_primitive:NN \hangafter \tex_hangafter:D - \__kernel_primitive:NN \hangindent \tex_hangindent:D - \__kernel_primitive:NN \parshape \tex_parshape:D - \__kernel_primitive:NN \hsize \tex_hsize:D - \__kernel_primitive:NN \lefthyphenmin \tex_lefthyphenmin:D - \__kernel_primitive:NN \righthyphenmin \tex_righthyphenmin:D - \__kernel_primitive:NN \leftskip \tex_leftskip:D - \__kernel_primitive:NN \rightskip \tex_rightskip:D - \__kernel_primitive:NN \looseness \tex_looseness:D - \__kernel_primitive:NN \parskip \tex_parskip:D - \__kernel_primitive:NN \parindent \tex_parindent:D - \__kernel_primitive:NN \uchyph \tex_uchyph:D - \__kernel_primitive:NN \emergencystretch \tex_emergencystretch:D - \__kernel_primitive:NN \pretolerance \tex_pretolerance:D - \__kernel_primitive:NN \tolerance \tex_tolerance:D - \__kernel_primitive:NN \spaceskip \tex_spaceskip:D - \__kernel_primitive:NN \xspaceskip \tex_xspaceskip:D - \__kernel_primitive:NN \parfillskip \tex_parfillskip:D - \__kernel_primitive:NN \everypar \tex_everypar:D - \__kernel_primitive:NN \prevgraf \tex_prevgraf:D - \__kernel_primitive:NN \spacefactor \tex_spacefactor:D - \__kernel_primitive:NN \shipout \tex_shipout:D - \__kernel_primitive:NN \vsize \tex_vsize:D - \__kernel_primitive:NN \interlinepenalty \tex_interlinepenalty:D - \__kernel_primitive:NN \brokenpenalty \tex_brokenpenalty:D - \__kernel_primitive:NN \topskip \tex_topskip:D - \__kernel_primitive:NN \maxdeadcycles \tex_maxdeadcycles:D - \__kernel_primitive:NN \maxdepth \tex_maxdepth:D - \__kernel_primitive:NN \output \tex_output:D - \__kernel_primitive:NN \deadcycles \tex_deadcycles:D - \__kernel_primitive:NN \pagedepth \tex_pagedepth:D - \__kernel_primitive:NN \pagestretch \tex_pagestretch:D - \__kernel_primitive:NN \pagefilstretch \tex_pagefilstretch:D - \__kernel_primitive:NN \pagefillstretch \tex_pagefillstretch:D - \__kernel_primitive:NN \pagefilllstretch \tex_pagefilllstretch:D - \__kernel_primitive:NN \pageshrink \tex_pageshrink:D - \__kernel_primitive:NN \pagegoal \tex_pagegoal:D - \__kernel_primitive:NN \pagetotal \tex_pagetotal:D - \__kernel_primitive:NN \outputpenalty \tex_outputpenalty:D - \__kernel_primitive:NN \hoffset \tex_hoffset:D - \__kernel_primitive:NN \voffset \tex_voffset:D - \__kernel_primitive:NN \insert \tex_insert:D - \__kernel_primitive:NN \holdinginserts \tex_holdinginserts:D - \__kernel_primitive:NN \floatingpenalty \tex_floatingpenalty:D - \__kernel_primitive:NN \insertpenalties \tex_insertpenalties:D - \__kernel_primitive:NN \lower \tex_lower:D - \__kernel_primitive:NN \moveleft \tex_moveleft:D - \__kernel_primitive:NN \moveright \tex_moveright:D - \__kernel_primitive:NN \raise \tex_raise:D - \__kernel_primitive:NN \copy \tex_copy:D - \__kernel_primitive:NN \lastbox \tex_lastbox:D - \__kernel_primitive:NN \vsplit \tex_vsplit:D - \__kernel_primitive:NN \unhbox \tex_unhbox:D - \__kernel_primitive:NN \unhcopy \tex_unhcopy:D - \__kernel_primitive:NN \unvbox \tex_unvbox:D - \__kernel_primitive:NN \unvcopy \tex_unvcopy:D - \__kernel_primitive:NN \setbox \tex_setbox:D - \__kernel_primitive:NN \hbox \tex_hbox:D - \__kernel_primitive:NN \vbox \tex_vbox:D - \__kernel_primitive:NN \vtop \tex_vtop:D - \__kernel_primitive:NN \prevdepth \tex_prevdepth:D - \__kernel_primitive:NN \badness \tex_badness:D - \__kernel_primitive:NN \hbadness \tex_hbadness:D - \__kernel_primitive:NN \vbadness \tex_vbadness:D - \__kernel_primitive:NN \hfuzz \tex_hfuzz:D - \__kernel_primitive:NN \vfuzz \tex_vfuzz:D - \__kernel_primitive:NN \overfullrule \tex_overfullrule:D - \__kernel_primitive:NN \boxmaxdepth \tex_boxmaxdepth:D - \__kernel_primitive:NN \splitmaxdepth \tex_splitmaxdepth:D - \__kernel_primitive:NN \splittopskip \tex_splittopskip:D - \__kernel_primitive:NN \everyhbox \tex_everyhbox:D - \__kernel_primitive:NN \everyvbox \tex_everyvbox:D - \__kernel_primitive:NN \nullfont \tex_nullfont:D - \__kernel_primitive:NN \textfont \tex_textfont:D - \__kernel_primitive:NN \scriptfont \tex_scriptfont:D - \__kernel_primitive:NN \scriptscriptfont \tex_scriptscriptfont:D - \__kernel_primitive:NN \fontdimen \tex_fontdimen:D - \__kernel_primitive:NN \hyphenchar \tex_hyphenchar:D - \__kernel_primitive:NN \skewchar \tex_skewchar:D - \__kernel_primitive:NN \defaulthyphenchar \tex_defaulthyphenchar:D - \__kernel_primitive:NN \defaultskewchar \tex_defaultskewchar:D - \__kernel_primitive:NN \number \tex_number:D - \__kernel_primitive:NN \romannumeral \tex_romannumeral:D - \__kernel_primitive:NN \string \tex_string:D - \__kernel_primitive:NN \lowercase \tex_lowercase:D - \__kernel_primitive:NN \uppercase \tex_uppercase:D - \__kernel_primitive:NN \meaning \tex_meaning:D - \__kernel_primitive:NN \penalty \tex_penalty:D - \__kernel_primitive:NN \unpenalty \tex_unpenalty:D - \__kernel_primitive:NN \lastpenalty \tex_lastpenalty:D - \__kernel_primitive:NN \special \tex_special:D - \__kernel_primitive:NN \dump \tex_dump:D - \__kernel_primitive:NN \patterns \tex_patterns:D - \__kernel_primitive:NN \hyphenation \tex_hyphenation:D - \__kernel_primitive:NN \time \tex_time:D - \__kernel_primitive:NN \day \tex_day:D - \__kernel_primitive:NN \month \tex_month:D - \__kernel_primitive:NN \year \tex_year:D - \__kernel_primitive:NN \jobname \tex_jobname:D - \__kernel_primitive:NN \everyjob \tex_everyjob:D - \__kernel_primitive:NN \count \tex_count:D - \__kernel_primitive:NN \dimen \tex_dimen:D - \__kernel_primitive:NN \skip \tex_skip:D - \__kernel_primitive:NN \toks \tex_toks:D - \__kernel_primitive:NN \muskip \tex_muskip:D - \__kernel_primitive:NN \box \tex_box:D - \__kernel_primitive:NN \wd \tex_wd:D - \__kernel_primitive:NN \ht \tex_ht:D - \__kernel_primitive:NN \dp \tex_dp:D - \__kernel_primitive:NN \catcode \tex_catcode:D - \__kernel_primitive:NN \delcode \tex_delcode:D - \__kernel_primitive:NN \sfcode \tex_sfcode:D - \__kernel_primitive:NN \lccode \tex_lccode:D - \__kernel_primitive:NN \uccode \tex_uccode:D - \__kernel_primitive:NN \mathcode \tex_mathcode:D + \__kernel_primitive:NN \above \tex_above:D + \__kernel_primitive:NN \abovedisplayshortskip \tex_abovedisplayshortskip:D + \__kernel_primitive:NN \abovedisplayskip \tex_abovedisplayskip:D + \__kernel_primitive:NN \abovewithdelims \tex_abovewithdelims:D + \__kernel_primitive:NN \accent \tex_accent:D + \__kernel_primitive:NN \adjdemerits \tex_adjdemerits:D + \__kernel_primitive:NN \advance \tex_advance:D + \__kernel_primitive:NN \afterassignment \tex_afterassignment:D + \__kernel_primitive:NN \aftergroup \tex_aftergroup:D + \__kernel_primitive:NN \atop \tex_atop:D + \__kernel_primitive:NN \atopwithdelims \tex_atopwithdelims:D + \__kernel_primitive:NN \badness \tex_badness:D + \__kernel_primitive:NN \baselineskip \tex_baselineskip:D + \__kernel_primitive:NN \batchmode \tex_batchmode:D + \__kernel_primitive:NN \begingroup \tex_begingroup:D + \__kernel_primitive:NN \belowdisplayshortskip \tex_belowdisplayshortskip:D + \__kernel_primitive:NN \belowdisplayskip \tex_belowdisplayskip:D + \__kernel_primitive:NN \binoppenalty \tex_binoppenalty:D + \__kernel_primitive:NN \botmark \tex_botmark:D + \__kernel_primitive:NN \box \tex_box:D + \__kernel_primitive:NN \boxmaxdepth \tex_boxmaxdepth:D + \__kernel_primitive:NN \brokenpenalty \tex_brokenpenalty:D + \__kernel_primitive:NN \catcode \tex_catcode:D + \__kernel_primitive:NN \char \tex_char:D + \__kernel_primitive:NN \chardef \tex_chardef:D + \__kernel_primitive:NN \cleaders \tex_cleaders:D + \__kernel_primitive:NN \closein \tex_closein:D + \__kernel_primitive:NN \closeout \tex_closeout:D + \__kernel_primitive:NN \clubpenalty \tex_clubpenalty:D + \__kernel_primitive:NN \copy \tex_copy:D + \__kernel_primitive:NN \count \tex_count:D + \__kernel_primitive:NN \countdef \tex_countdef:D + \__kernel_primitive:NN \cr \tex_cr:D + \__kernel_primitive:NN \crcr \tex_crcr:D + \__kernel_primitive:NN \csname \tex_csname:D + \__kernel_primitive:NN \day \tex_day:D + \__kernel_primitive:NN \deadcycles \tex_deadcycles:D + \__kernel_primitive:NN \def \tex_def:D + \__kernel_primitive:NN \defaulthyphenchar \tex_defaulthyphenchar:D + \__kernel_primitive:NN \defaultskewchar \tex_defaultskewchar:D + \__kernel_primitive:NN \delcode \tex_delcode:D + \__kernel_primitive:NN \delimiter \tex_delimiter:D + \__kernel_primitive:NN \delimiterfactor \tex_delimiterfactor:D + \__kernel_primitive:NN \delimitershortfall \tex_delimitershortfall:D + \__kernel_primitive:NN \dimen \tex_dimen:D + \__kernel_primitive:NN \dimendef \tex_dimendef:D + \__kernel_primitive:NN \discretionary \tex_discretionary:D + \__kernel_primitive:NN \displayindent \tex_displayindent:D + \__kernel_primitive:NN \displaylimits \tex_displaylimits:D + \__kernel_primitive:NN \displaystyle \tex_displaystyle:D + \__kernel_primitive:NN \displaywidowpenalty \tex_displaywidowpenalty:D + \__kernel_primitive:NN \displaywidth \tex_displaywidth:D + \__kernel_primitive:NN \divide \tex_divide:D + \__kernel_primitive:NN \doublehyphendemerits \tex_doublehyphendemerits:D + \__kernel_primitive:NN \dp \tex_dp:D + \__kernel_primitive:NN \dump \tex_dump:D + \__kernel_primitive:NN \edef \tex_edef:D + \__kernel_primitive:NN \else \tex_else:D + \__kernel_primitive:NN \emergencystretch \tex_emergencystretch:D + \__kernel_primitive:NN \end \tex_end:D + \__kernel_primitive:NN \endcsname \tex_endcsname:D + \__kernel_primitive:NN \endgroup \tex_endgroup:D + \__kernel_primitive:NN \endinput \tex_endinput:D + \__kernel_primitive:NN \endlinechar \tex_endlinechar:D + \__kernel_primitive:NN \eqno \tex_eqno:D + \__kernel_primitive:NN \errhelp \tex_errhelp:D + \__kernel_primitive:NN \errmessage \tex_errmessage:D + \__kernel_primitive:NN \errorcontextlines \tex_errorcontextlines:D + \__kernel_primitive:NN \errorstopmode \tex_errorstopmode:D + \__kernel_primitive:NN \escapechar \tex_escapechar:D + \__kernel_primitive:NN \everycr \tex_everycr:D + \__kernel_primitive:NN \everydisplay \tex_everydisplay:D + \__kernel_primitive:NN \everyhbox \tex_everyhbox:D + \__kernel_primitive:NN \everyjob \tex_everyjob:D + \__kernel_primitive:NN \everymath \tex_everymath:D + \__kernel_primitive:NN \everypar \tex_everypar:D + \__kernel_primitive:NN \everyvbox \tex_everyvbox:D + \__kernel_primitive:NN \exhyphenpenalty \tex_exhyphenpenalty:D + \__kernel_primitive:NN \expandafter \tex_expandafter:D + \__kernel_primitive:NN \fam \tex_fam:D + \__kernel_primitive:NN \fi \tex_fi:D + \__kernel_primitive:NN \finalhyphendemerits \tex_finalhyphendemerits:D + \__kernel_primitive:NN \firstmark \tex_firstmark:D + \__kernel_primitive:NN \floatingpenalty \tex_floatingpenalty:D + \__kernel_primitive:NN \font \tex_font:D + \__kernel_primitive:NN \fontdimen \tex_fontdimen:D + \__kernel_primitive:NN \fontname \tex_fontname:D + \__kernel_primitive:NN \futurelet \tex_futurelet:D + \__kernel_primitive:NN \gdef \tex_gdef:D + \__kernel_primitive:NN \global \tex_global:D + \__kernel_primitive:NN \globaldefs \tex_globaldefs:D + \__kernel_primitive:NN \halign \tex_halign:D + \__kernel_primitive:NN \hangafter \tex_hangafter:D + \__kernel_primitive:NN \hangindent \tex_hangindent:D + \__kernel_primitive:NN \hbadness \tex_hbadness:D + \__kernel_primitive:NN \hbox \tex_hbox:D + \__kernel_primitive:NN \hfil \tex_hfil:D + \__kernel_primitive:NN \hfill \tex_hfill:D + \__kernel_primitive:NN \hfilneg \tex_hfilneg:D + \__kernel_primitive:NN \hfuzz \tex_hfuzz:D + \__kernel_primitive:NN \hoffset \tex_hoffset:D + \__kernel_primitive:NN \holdinginserts \tex_holdinginserts:D + \__kernel_primitive:NN \hrule \tex_hrule:D + \__kernel_primitive:NN \hsize \tex_hsize:D + \__kernel_primitive:NN \hskip \tex_hskip:D + \__kernel_primitive:NN \hss \tex_hss:D + \__kernel_primitive:NN \ht \tex_ht:D + \__kernel_primitive:NN \hyphenation \tex_hyphenation:D + \__kernel_primitive:NN \hyphenchar \tex_hyphenchar:D + \__kernel_primitive:NN \hyphenpenalty \tex_hyphenpenalty:D + \__kernel_primitive:NN \if \tex_if:D + \__kernel_primitive:NN \ifcase \tex_ifcase:D + \__kernel_primitive:NN \ifcat \tex_ifcat:D + \__kernel_primitive:NN \ifdim \tex_ifdim:D + \__kernel_primitive:NN \ifeof \tex_ifeof:D + \__kernel_primitive:NN \iffalse \tex_iffalse:D + \__kernel_primitive:NN \ifhbox \tex_ifhbox:D + \__kernel_primitive:NN \ifhmode \tex_ifhmode:D + \__kernel_primitive:NN \ifinner \tex_ifinner:D + \__kernel_primitive:NN \ifmmode \tex_ifmmode:D + \__kernel_primitive:NN \ifnum \tex_ifnum:D + \__kernel_primitive:NN \ifodd \tex_ifodd:D + \__kernel_primitive:NN \iftrue \tex_iftrue:D + \__kernel_primitive:NN \ifvbox \tex_ifvbox:D + \__kernel_primitive:NN \ifvmode \tex_ifvmode:D + \__kernel_primitive:NN \ifvoid \tex_ifvoid:D + \__kernel_primitive:NN \ifx \tex_ifx:D + \__kernel_primitive:NN \ignorespaces \tex_ignorespaces:D + \__kernel_primitive:NN \immediate \tex_immediate:D + \__kernel_primitive:NN \indent \tex_indent:D + \__kernel_primitive:NN \input \tex_input:D + \__kernel_primitive:NN \inputlineno \tex_inputlineno:D + \__kernel_primitive:NN \insert \tex_insert:D + \__kernel_primitive:NN \insertpenalties \tex_insertpenalties:D + \__kernel_primitive:NN \interlinepenalty \tex_interlinepenalty:D + \__kernel_primitive:NN \jobname \tex_jobname:D + \__kernel_primitive:NN \kern \tex_kern:D + \__kernel_primitive:NN \language \tex_language:D + \__kernel_primitive:NN \lastbox \tex_lastbox:D + \__kernel_primitive:NN \lastkern \tex_lastkern:D + \__kernel_primitive:NN \lastpenalty \tex_lastpenalty:D + \__kernel_primitive:NN \lastskip \tex_lastskip:D + \__kernel_primitive:NN \lccode \tex_lccode:D + \__kernel_primitive:NN \leaders \tex_leaders:D + \__kernel_primitive:NN \left \tex_left:D + \__kernel_primitive:NN \lefthyphenmin \tex_lefthyphenmin:D + \__kernel_primitive:NN \leftskip \tex_leftskip:D + \__kernel_primitive:NN \leqno \tex_leqno:D + \__kernel_primitive:NN \let \tex_let:D + \__kernel_primitive:NN \limits \tex_limits:D + \__kernel_primitive:NN \linepenalty \tex_linepenalty:D + \__kernel_primitive:NN \lineskip \tex_lineskip:D + \__kernel_primitive:NN \lineskiplimit \tex_lineskiplimit:D + \__kernel_primitive:NN \long \tex_long:D + \__kernel_primitive:NN \looseness \tex_looseness:D + \__kernel_primitive:NN \lower \tex_lower:D + \__kernel_primitive:NN \lowercase \tex_lowercase:D + \__kernel_primitive:NN \mag \tex_mag:D + \__kernel_primitive:NN \mark \tex_mark:D + \__kernel_primitive:NN \mathaccent \tex_mathaccent:D + \__kernel_primitive:NN \mathbin \tex_mathbin:D + \__kernel_primitive:NN \mathchar \tex_mathchar:D + \__kernel_primitive:NN \mathchardef \tex_mathchardef:D + \__kernel_primitive:NN \mathchoice \tex_mathchoice:D + \__kernel_primitive:NN \mathclose \tex_mathclose:D + \__kernel_primitive:NN \mathcode \tex_mathcode:D + \__kernel_primitive:NN \mathinner \tex_mathinner:D + \__kernel_primitive:NN \mathop \tex_mathop:D + \__kernel_primitive:NN \mathopen \tex_mathopen:D + \__kernel_primitive:NN \mathord \tex_mathord:D + \__kernel_primitive:NN \mathpunct \tex_mathpunct:D + \__kernel_primitive:NN \mathrel \tex_mathrel:D + \__kernel_primitive:NN \mathsurround \tex_mathsurround:D + \__kernel_primitive:NN \maxdeadcycles \tex_maxdeadcycles:D + \__kernel_primitive:NN \maxdepth \tex_maxdepth:D + \__kernel_primitive:NN \meaning \tex_meaning:D + \__kernel_primitive:NN \medmuskip \tex_medmuskip:D + \__kernel_primitive:NN \message \tex_message:D + \__kernel_primitive:NN \mkern \tex_mkern:D + \__kernel_primitive:NN \month \tex_month:D + \__kernel_primitive:NN \moveleft \tex_moveleft:D + \__kernel_primitive:NN \moveright \tex_moveright:D + \__kernel_primitive:NN \mskip \tex_mskip:D + \__kernel_primitive:NN \multiply \tex_multiply:D + \__kernel_primitive:NN \muskip \tex_muskip:D + \__kernel_primitive:NN \muskipdef \tex_muskipdef:D + \__kernel_primitive:NN \newlinechar \tex_newlinechar:D + \__kernel_primitive:NN \noalign \tex_noalign:D + \__kernel_primitive:NN \noboundary \tex_noboundary:D + \__kernel_primitive:NN \noexpand \tex_noexpand:D + \__kernel_primitive:NN \noindent \tex_noindent:D + \__kernel_primitive:NN \nolimits \tex_nolimits:D + \__kernel_primitive:NN \nonscript \tex_nonscript:D + \__kernel_primitive:NN \nonstopmode \tex_nonstopmode:D + \__kernel_primitive:NN \nulldelimiterspace \tex_nulldelimiterspace:D + \__kernel_primitive:NN \nullfont \tex_nullfont:D + \__kernel_primitive:NN \number \tex_number:D + \__kernel_primitive:NN \omit \tex_omit:D + \__kernel_primitive:NN \openin \tex_openin:D + \__kernel_primitive:NN \openout \tex_openout:D + \__kernel_primitive:NN \or \tex_or:D + \__kernel_primitive:NN \outer \tex_outer:D + \__kernel_primitive:NN \output \tex_output:D + \__kernel_primitive:NN \outputpenalty \tex_outputpenalty:D + \__kernel_primitive:NN \over \tex_over:D + \__kernel_primitive:NN \overfullrule \tex_overfullrule:D + \__kernel_primitive:NN \overline \tex_overline:D + \__kernel_primitive:NN \overwithdelims \tex_overwithdelims:D + \__kernel_primitive:NN \pagedepth \tex_pagedepth:D + \__kernel_primitive:NN \pagefilllstretch \tex_pagefilllstretch:D + \__kernel_primitive:NN \pagefillstretch \tex_pagefillstretch:D + \__kernel_primitive:NN \pagefilstretch \tex_pagefilstretch:D + \__kernel_primitive:NN \pagegoal \tex_pagegoal:D + \__kernel_primitive:NN \pageshrink \tex_pageshrink:D + \__kernel_primitive:NN \pagestretch \tex_pagestretch:D + \__kernel_primitive:NN \pagetotal \tex_pagetotal:D + \__kernel_primitive:NN \par \tex_par:D + \__kernel_primitive:NN \parfillskip \tex_parfillskip:D + \__kernel_primitive:NN \parindent \tex_parindent:D + \__kernel_primitive:NN \parshape \tex_parshape:D + \__kernel_primitive:NN \parskip \tex_parskip:D + \__kernel_primitive:NN \patterns \tex_patterns:D + \__kernel_primitive:NN \pausing \tex_pausing:D + \__kernel_primitive:NN \penalty \tex_penalty:D + \__kernel_primitive:NN \postdisplaypenalty \tex_postdisplaypenalty:D + \__kernel_primitive:NN \predisplaypenalty \tex_predisplaypenalty:D + \__kernel_primitive:NN \predisplaysize \tex_predisplaysize:D + \__kernel_primitive:NN \pretolerance \tex_pretolerance:D + \__kernel_primitive:NN \prevdepth \tex_prevdepth:D + \__kernel_primitive:NN \prevgraf \tex_prevgraf:D + \__kernel_primitive:NN \radical \tex_radical:D + \__kernel_primitive:NN \raise \tex_raise:D + \__kernel_primitive:NN \read \tex_read:D + \__kernel_primitive:NN \relax \tex_relax:D + \__kernel_primitive:NN \relpenalty \tex_relpenalty:D + \__kernel_primitive:NN \right \tex_right:D + \__kernel_primitive:NN \righthyphenmin \tex_righthyphenmin:D + \__kernel_primitive:NN \rightskip \tex_rightskip:D + \__kernel_primitive:NN \romannumeral \tex_romannumeral:D + \__kernel_primitive:NN \scriptfont \tex_scriptfont:D + \__kernel_primitive:NN \scriptscriptfont \tex_scriptscriptfont:D + \__kernel_primitive:NN \scriptscriptstyle \tex_scriptscriptstyle:D + \__kernel_primitive:NN \scriptspace \tex_scriptspace:D + \__kernel_primitive:NN \scriptstyle \tex_scriptstyle:D + \__kernel_primitive:NN \scrollmode \tex_scrollmode:D + \__kernel_primitive:NN \setbox \tex_setbox:D + \__kernel_primitive:NN \setlanguage \tex_setlanguage:D + \__kernel_primitive:NN \sfcode \tex_sfcode:D + \__kernel_primitive:NN \shipout \tex_shipout:D + \__kernel_primitive:NN \show \tex_show:D + \__kernel_primitive:NN \showbox \tex_showbox:D + \__kernel_primitive:NN \showboxbreadth \tex_showboxbreadth:D + \__kernel_primitive:NN \showboxdepth \tex_showboxdepth:D + \__kernel_primitive:NN \showlists \tex_showlists:D + \__kernel_primitive:NN \showthe \tex_showthe:D + \__kernel_primitive:NN \skewchar \tex_skewchar:D + \__kernel_primitive:NN \skip \tex_skip:D + \__kernel_primitive:NN \skipdef \tex_skipdef:D + \__kernel_primitive:NN \spacefactor \tex_spacefactor:D + \__kernel_primitive:NN \spaceskip \tex_spaceskip:D + \__kernel_primitive:NN \span \tex_span:D + \__kernel_primitive:NN \special \tex_special:D + \__kernel_primitive:NN \splitbotmark \tex_splitbotmark:D + \__kernel_primitive:NN \splitfirstmark \tex_splitfirstmark:D + \__kernel_primitive:NN \splitmaxdepth \tex_splitmaxdepth:D + \__kernel_primitive:NN \splittopskip \tex_splittopskip:D + \__kernel_primitive:NN \string \tex_string:D + \__kernel_primitive:NN \tabskip \tex_tabskip:D + \__kernel_primitive:NN \textfont \tex_textfont:D + \__kernel_primitive:NN \textstyle \tex_textstyle:D + \__kernel_primitive:NN \the \tex_the:D + \__kernel_primitive:NN \thickmuskip \tex_thickmuskip:D + \__kernel_primitive:NN \thinmuskip \tex_thinmuskip:D + \__kernel_primitive:NN \time \tex_time:D + \__kernel_primitive:NN \toks \tex_toks:D + \__kernel_primitive:NN \toksdef \tex_toksdef:D + \__kernel_primitive:NN \tolerance \tex_tolerance:D + \__kernel_primitive:NN \topmark \tex_topmark:D + \__kernel_primitive:NN \topskip \tex_topskip:D + \__kernel_primitive:NN \tracingcommands \tex_tracingcommands:D + \__kernel_primitive:NN \tracinglostchars \tex_tracinglostchars:D + \__kernel_primitive:NN \tracingmacros \tex_tracingmacros:D + \__kernel_primitive:NN \tracingonline \tex_tracingonline:D + \__kernel_primitive:NN \tracingoutput \tex_tracingoutput:D + \__kernel_primitive:NN \tracingpages \tex_tracingpages:D + \__kernel_primitive:NN \tracingparagraphs \tex_tracingparagraphs:D + \__kernel_primitive:NN \tracingrestores \tex_tracingrestores:D + \__kernel_primitive:NN \tracingstats \tex_tracingstats:D + \__kernel_primitive:NN \uccode \tex_uccode:D + \__kernel_primitive:NN \uchyph \tex_uchyph:D + \__kernel_primitive:NN \underline \tex_underline:D + \__kernel_primitive:NN \unhbox \tex_unhbox:D + \__kernel_primitive:NN \unhcopy \tex_unhcopy:D + \__kernel_primitive:NN \unkern \tex_unkern:D + \__kernel_primitive:NN \unpenalty \tex_unpenalty:D + \__kernel_primitive:NN \unskip \tex_unskip:D + \__kernel_primitive:NN \unvbox \tex_unvbox:D + \__kernel_primitive:NN \unvcopy \tex_unvcopy:D + \__kernel_primitive:NN \uppercase \tex_uppercase:D + \__kernel_primitive:NN \vadjust \tex_vadjust:D + \__kernel_primitive:NN \valign \tex_valign:D + \__kernel_primitive:NN \vbadness \tex_vbadness:D + \__kernel_primitive:NN \vbox \tex_vbox:D + \__kernel_primitive:NN \vcenter \tex_vcenter:D + \__kernel_primitive:NN \vfil \tex_vfil:D + \__kernel_primitive:NN \vfill \tex_vfill:D + \__kernel_primitive:NN \vfilneg \tex_vfilneg:D + \__kernel_primitive:NN \vfuzz \tex_vfuzz:D + \__kernel_primitive:NN \voffset \tex_voffset:D + \__kernel_primitive:NN \vrule \tex_vrule:D + \__kernel_primitive:NN \vsize \tex_vsize:D + \__kernel_primitive:NN \vskip \tex_vskip:D + \__kernel_primitive:NN \vsplit \tex_vsplit:D + \__kernel_primitive:NN \vss \tex_vss:D + \__kernel_primitive:NN \vtop \tex_vtop:D + \__kernel_primitive:NN \wd \tex_wd:D + \__kernel_primitive:NN \widowpenalty \tex_widowpenalty:D + \__kernel_primitive:NN \write \tex_write:D + \__kernel_primitive:NN \xdef \tex_xdef:D + \__kernel_primitive:NN \xleaders \tex_xleaders:D + \__kernel_primitive:NN \xspaceskip \tex_xspaceskip:D + \__kernel_primitive:NN \year \tex_year:D % \end{macrocode} % Since \LaTeX3 requires at least the \eTeX{} extensions, % we also rename the additional primitives. These are all % given the prefix |\etex_|. % \begin{macrocode} - \__kernel_primitive:NN \ifdefined \etex_ifdefined:D - \__kernel_primitive:NN \ifcsname \etex_ifcsname:D - \__kernel_primitive:NN \unless \etex_unless:D - \__kernel_primitive:NN \eTeXversion \etex_eTeXversion:D - \__kernel_primitive:NN \eTeXrevision \etex_eTeXrevision:D - \__kernel_primitive:NN \marks \etex_marks:D - \__kernel_primitive:NN \topmarks \etex_topmarks:D - \__kernel_primitive:NN \firstmarks \etex_firstmarks:D - \__kernel_primitive:NN \botmarks \etex_botmarks:D - \__kernel_primitive:NN \splitfirstmarks \etex_splitfirstmarks:D - \__kernel_primitive:NN \splitbotmarks \etex_splitbotmarks:D - \__kernel_primitive:NN \unexpanded \etex_unexpanded:D - \__kernel_primitive:NN \detokenize \etex_detokenize:D - \__kernel_primitive:NN \scantokens \etex_scantokens:D - \__kernel_primitive:NN \showtokens \etex_showtokens:D - \__kernel_primitive:NN \readline \etex_readline:D - \__kernel_primitive:NN \tracingassigns \etex_tracingassigns:D - \__kernel_primitive:NN \tracingscantokens \etex_tracingscantokens:D - \__kernel_primitive:NN \tracingnesting \etex_tracingnesting:D - \__kernel_primitive:NN \tracingifs \etex_tracingifs:D - \__kernel_primitive:NN \currentiflevel \etex_currentiflevel:D - \__kernel_primitive:NN \currentifbranch \etex_currentifbranch:D - \__kernel_primitive:NN \currentiftype \etex_currentiftype:D - \__kernel_primitive:NN \tracinggroups \etex_tracinggroups:D - \__kernel_primitive:NN \currentgrouplevel \etex_currentgrouplevel:D - \__kernel_primitive:NN \currentgrouptype \etex_currentgrouptype:D - \__kernel_primitive:NN \showgroups \etex_showgroups:D - \__kernel_primitive:NN \showifs \etex_showifs:D - \__kernel_primitive:NN \interactionmode \etex_interactionmode:D - \__kernel_primitive:NN \lastnodetype \etex_lastnodetype:D - \__kernel_primitive:NN \iffontchar \etex_iffontchar:D - \__kernel_primitive:NN \fontcharht \etex_fontcharht:D - \__kernel_primitive:NN \fontchardp \etex_fontchardp:D - \__kernel_primitive:NN \fontcharwd \etex_fontcharwd:D - \__kernel_primitive:NN \fontcharic \etex_fontcharic:D - \__kernel_primitive:NN \parshapeindent \etex_parshapeindent:D - \__kernel_primitive:NN \parshapelength \etex_parshapelength:D - \__kernel_primitive:NN \parshapedimen \etex_parshapedimen:D - \__kernel_primitive:NN \numexpr \etex_numexpr:D - \__kernel_primitive:NN \dimexpr \etex_dimexpr:D - \__kernel_primitive:NN \glueexpr \etex_glueexpr:D - \__kernel_primitive:NN \muexpr \etex_muexpr:D - \__kernel_primitive:NN \gluestretch \etex_gluestretch:D - \__kernel_primitive:NN \glueshrink \etex_glueshrink:D - \__kernel_primitive:NN \gluestretchorder \etex_gluestretchorder:D - \__kernel_primitive:NN \glueshrinkorder \etex_glueshrinkorder:D - \__kernel_primitive:NN \gluetomu \etex_gluetomu:D - \__kernel_primitive:NN \mutoglue \etex_mutoglue:D - \__kernel_primitive:NN \lastlinefit \etex_lastlinefit:D - \__kernel_primitive:NN \interlinepenalties \etex_interlinepenalties:D - \__kernel_primitive:NN \clubpenalties \etex_clubpenalties:D - \__kernel_primitive:NN \widowpenalties \etex_widowpenalties:D - \__kernel_primitive:NN \displaywidowpenalties \etex_displaywidowpenalties:D - \__kernel_primitive:NN \middle \etex_middle:D - \__kernel_primitive:NN \savinghyphcodes \etex_savinghyphcodes:D - \__kernel_primitive:NN \savingvdiscards \etex_savingvdiscards:D - \__kernel_primitive:NN \pagediscards \etex_pagediscards:D - \__kernel_primitive:NN \splitdiscards \etex_splitdiscards:D - \__kernel_primitive:NN \TeXXeTstate \etex_TeXXeTstate:D - \__kernel_primitive:NN \beginL \etex_beginL:D - \__kernel_primitive:NN \endL \etex_endL:D - \__kernel_primitive:NN \beginR \etex_beginR:D - \__kernel_primitive:NN \endR \etex_endR:D - \__kernel_primitive:NN \predisplaydirection \etex_predisplaydirection:D - \__kernel_primitive:NN \everyeof \etex_everyeof:D - \__kernel_primitive:NN \protected \etex_protected:D + \__kernel_primitive:NN \beginL \etex_beginL:D + \__kernel_primitive:NN \beginR \etex_beginR:D + \__kernel_primitive:NN \botmarks \etex_botmarks:D + \__kernel_primitive:NN \clubpenalties \etex_clubpenalties:D + \__kernel_primitive:NN \currentgrouplevel \etex_currentgrouplevel:D + \__kernel_primitive:NN \currentgrouptype \etex_currentgrouptype:D + \__kernel_primitive:NN \currentifbranch \etex_currentifbranch:D + \__kernel_primitive:NN \currentiflevel \etex_currentiflevel:D + \__kernel_primitive:NN \currentiftype \etex_currentiftype:D + \__kernel_primitive:NN \detokenize \etex_detokenize:D + \__kernel_primitive:NN \dimexpr \etex_dimexpr:D + \__kernel_primitive:NN \displaywidowpenalties \etex_displaywidowpenalties:D + \__kernel_primitive:NN \endL \etex_endL:D + \__kernel_primitive:NN \endR \etex_endR:D + \__kernel_primitive:NN \eTeXrevision \etex_eTeXrevision:D + \__kernel_primitive:NN \eTeXversion \etex_eTeXversion:D + \__kernel_primitive:NN \everyeof \etex_everyeof:D + \__kernel_primitive:NN \firstmarks \etex_firstmarks:D + \__kernel_primitive:NN \fontchardp \etex_fontchardp:D + \__kernel_primitive:NN \fontcharht \etex_fontcharht:D + \__kernel_primitive:NN \fontcharic \etex_fontcharic:D + \__kernel_primitive:NN \fontcharwd \etex_fontcharwd:D + \__kernel_primitive:NN \glueexpr \etex_glueexpr:D + \__kernel_primitive:NN \glueshrink \etex_glueshrink:D + \__kernel_primitive:NN \glueshrinkorder \etex_glueshrinkorder:D + \__kernel_primitive:NN \gluestretch \etex_gluestretch:D + \__kernel_primitive:NN \gluestretchorder \etex_gluestretchorder:D + \__kernel_primitive:NN \gluetomu \etex_gluetomu:D + \__kernel_primitive:NN \ifcsname \etex_ifcsname:D + \__kernel_primitive:NN \ifdefined \etex_ifdefined:D + \__kernel_primitive:NN \iffontchar \etex_iffontchar:D + \__kernel_primitive:NN \interactionmode \etex_interactionmode:D + \__kernel_primitive:NN \interlinepenalties \etex_interlinepenalties:D + \__kernel_primitive:NN \lastlinefit \etex_lastlinefit:D + \__kernel_primitive:NN \lastnodetype \etex_lastnodetype:D + \__kernel_primitive:NN \marks \etex_marks:D + \__kernel_primitive:NN \middle \etex_middle:D + \__kernel_primitive:NN \muexpr \etex_muexpr:D + \__kernel_primitive:NN \mutoglue \etex_mutoglue:D + \__kernel_primitive:NN \numexpr \etex_numexpr:D + \__kernel_primitive:NN \pagediscards \etex_pagediscards:D + \__kernel_primitive:NN \parshapedimen \etex_parshapedimen:D + \__kernel_primitive:NN \parshapeindent \etex_parshapeindent:D + \__kernel_primitive:NN \parshapelength \etex_parshapelength:D + \__kernel_primitive:NN \predisplaydirection \etex_predisplaydirection:D + \__kernel_primitive:NN \protected \etex_protected:D + \__kernel_primitive:NN \readline \etex_readline:D + \__kernel_primitive:NN \savinghyphcodes \etex_savinghyphcodes:D + \__kernel_primitive:NN \savingvdiscards \etex_savingvdiscards:D + \__kernel_primitive:NN \scantokens \etex_scantokens:D + \__kernel_primitive:NN \showgroups \etex_showgroups:D + \__kernel_primitive:NN \showifs \etex_showifs:D + \__kernel_primitive:NN \showtokens \etex_showtokens:D + \__kernel_primitive:NN \splitbotmarks \etex_splitbotmarks:D + \__kernel_primitive:NN \splitdiscards \etex_splitdiscards:D + \__kernel_primitive:NN \splitfirstmarks \etex_splitfirstmarks:D + \__kernel_primitive:NN \TeXXeTstate \etex_TeXXeTstate:D + \__kernel_primitive:NN \topmarks \etex_topmarks:D + \__kernel_primitive:NN \tracingassigns \etex_tracingassigns:D + \__kernel_primitive:NN \tracinggroups \etex_tracinggroups:D + \__kernel_primitive:NN \tracingifs \etex_tracingifs:D + \__kernel_primitive:NN \tracingnesting \etex_tracingnesting:D + \__kernel_primitive:NN \tracingscantokens \etex_tracingscantokens:D + \__kernel_primitive:NN \unexpanded \etex_unexpanded:D + \__kernel_primitive:NN \unless \etex_unless:D + \__kernel_primitive:NN \widowpenalties \etex_widowpenalties:D % \end{macrocode} % The newer primitives are more complex: there are an awful lot of them, % and we don't use them all at the moment. So the following is selective. @@ -566,57 +566,69 @@ % there are a lot of \pdfTeX{} primitives that start \cs{pdf\ldots} but % are not related to PDF output. These ones related to PDF output. % \begin{macrocode} - \__kernel_primitive:NN \pdfcreationdate \pdftex_pdfcreationdate:D - \__kernel_primitive:NN \pdfcolorstack \pdftex_pdfcolorstack:D - \__kernel_primitive:NN \pdfcompresslevel \pdftex_pdfcompresslevel:D - \__kernel_primitive:NN \pdfdecimaldigits \pdftex_pdfdecimaldigits:D - \__kernel_primitive:NN \pdfhorigin \pdftex_pdfhorigin:D - \__kernel_primitive:NN \pdfinfo \pdftex_pdfinfo:D - \__kernel_primitive:NN \pdflastxform \pdftex_pdflastxform:D - \__kernel_primitive:NN \pdfliteral \pdftex_pdfliteral:D - \__kernel_primitive:NN \pdfminorversion \pdftex_pdfminorversion:D - \__kernel_primitive:NN \pdfobjcompresslevel \pdftex_pdfobjcompresslevel:D - \__kernel_primitive:NN \pdfoutput \pdftex_pdfoutput:D - \__kernel_primitive:NN \pdfrefxform \pdftex_pdfrefxform:D - \__kernel_primitive:NN \pdfrestore \pdftex_pdfrestore:D - \__kernel_primitive:NN \pdfsave \pdftex_pdfsave:D - \__kernel_primitive:NN \pdfsetmatrix \pdftex_pdfsetmatrix:D - \__kernel_primitive:NN \pdfpkresolution \pdftex_pdfpkresolution:D - \__kernel_primitive:NN \pdftexrevision \pdftex_pdftextrevision:D - \__kernel_primitive:NN \pdfvorigin \pdftex_pdfvorigin:D - \__kernel_primitive:NN \pdfxform \pdftex_pdfxform:D + \__kernel_primitive:NN \pdfcreationdate \pdftex_pdfcreationdate:D + \__kernel_primitive:NN \pdfcolorstack \pdftex_pdfcolorstack:D + \__kernel_primitive:NN \pdfcompresslevel \pdftex_pdfcompresslevel:D + \__kernel_primitive:NN \pdfdecimaldigits \pdftex_pdfdecimaldigits:D + \__kernel_primitive:NN \pdfhorigin \pdftex_pdfhorigin:D + \__kernel_primitive:NN \pdfinfo \pdftex_pdfinfo:D + \__kernel_primitive:NN \pdflastxform \pdftex_pdflastxform:D + \__kernel_primitive:NN \pdfliteral \pdftex_pdfliteral:D + \__kernel_primitive:NN \pdfminorversion \pdftex_pdfminorversion:D + \__kernel_primitive:NN \pdfobjcompresslevel \pdftex_pdfobjcompresslevel:D + \__kernel_primitive:NN \pdfoutput \pdftex_pdfoutput:D + \__kernel_primitive:NN \pdfrefxform \pdftex_pdfrefxform:D + \__kernel_primitive:NN \pdfrestore \pdftex_pdfrestore:D + \__kernel_primitive:NN \pdfsave \pdftex_pdfsave:D + \__kernel_primitive:NN \pdfsetmatrix \pdftex_pdfsetmatrix:D + \__kernel_primitive:NN \pdfpkresolution \pdftex_pdfpkresolution:D + \__kernel_primitive:NN \pdfvorigin \pdftex_pdfvorigin:D + \__kernel_primitive:NN \pdfxform \pdftex_pdfxform:D % \end{macrocode} % While these are not. % \begin{macrocode} - \__kernel_primitive:NN \pdfstrcmp \pdftex_strcmp:D + \__kernel_primitive:NN \pdfstrcmp \pdftex_strcmp:D +% \end{macrocode} +% The version primitives are not related to PDF mode but are related to +% \pdfTeX{} so retain the full prefix. +% \begin{macrocode} + \__kernel_primitive:NN \pdftexrevision \pdftex_pdftexrevision:D + \__kernel_primitive:NN \pdftexversion \pdftex_pdftexversion:D % \end{macrocode} % \XeTeX{}-specific primitives. Note that \XeTeX{}'s \tn{strcmp} is -% handled earlier and is \enquote{rolled up} into \tn{pdfstrcmp}. +% handled earlier and is \enquote{rolled up} into \tn{pdfstrcmp}. With +% the exception of the version primitives these don't carry |XeTeX| through +% into the \enquote{base} name. % \begin{macrocode} - \__kernel_primitive:NN \XeTeXversion \xetex_XeTeXversion:D + \__kernel_primitive:NN \XeTeXcharclass \xetex_charclass:D + \__kernel_primitive:NN \XeTeXinterchartokenstate \xetex_interchartokenstate:D + \__kernel_primitive:NN \XeTeXinterchartoks \xetex_interchartoks:D + \__kernel_primitive:NN \XeTeXrevision \xetex_XeTeXrevision:D + \__kernel_primitive:NN \XeTeXversion \xetex_XeTeXversion:D % \end{macrocode} % Primitives from \LuaTeX{}. % \begin{macrocode} - \__kernel_primitive:NN \catcodetable \luatex_catcodetable:D - \__kernel_primitive:NN \directlua \luatex_directlua:D - \__kernel_primitive:NN \expanded \luatex_expanded:D - \__kernel_primitive:NN \initcatcodetable \luatex_initcatcodetable:D - \__kernel_primitive:NN \latelua \luatex_latelua:D - \__kernel_primitive:NN \luaescapestring \luatex_luaescapestring:D - \__kernel_primitive:NN \luatexversion \luatex_luatexversion:D - \__kernel_primitive:NN \savecatcodetable \luatex_savecatcodetable:D - \__kernel_primitive:NN \Uchar \luatex_Uchar:D + \__kernel_primitive:NN \catcodetable \luatex_catcodetable:D + \__kernel_primitive:NN \directlua \luatex_directlua:D + \__kernel_primitive:NN \expanded \luatex_expanded:D + \__kernel_primitive:NN \initcatcodetable \luatex_initcatcodetable:D + \__kernel_primitive:NN \latelua \luatex_latelua:D + \__kernel_primitive:NN \luaescapestring \luatex_luaescapestring:D + \__kernel_primitive:NN \luatexrevision \luatex_luatexrevision:D + \__kernel_primitive:NN \luatexversion \luatex_luatexversion:D + \__kernel_primitive:NN \savecatcodetable \luatex_savecatcodetable:D + \__kernel_primitive:NN \Uchar \luatex_Uchar:D % \end{macrocode} % Slightly more awkward are the directional primitives in \LuaTeX{}. These % come from Omega \emph{via} Aleph, but we do not support those engines and % so it seems most sensible to treat them as \LuaTeX{} primitives for prefix % purposes. % \begin{macrocode} - \__kernel_primitive:NN \bodydir \luatex_bodydir:D - \__kernel_primitive:NN \mathdir \luatex_mathdir:D - \__kernel_primitive:NN \pagedir \luatex_pagedir:D - \__kernel_primitive:NN \pardir \luatex_pardir:D - \__kernel_primitive:NN \textdir \luatex_textdir:D + \__kernel_primitive:NN \bodydir \luatex_bodydir:D + \__kernel_primitive:NN \mathdir \luatex_mathdir:D + \__kernel_primitive:NN \pagedir \luatex_pagedir:D + \__kernel_primitive:NN \pardir \luatex_pardir:D + \__kernel_primitive:NN \textdir \luatex_textdir:D % \end{macrocode} % % End of the \enquote{just the names} part of the source. @@ -635,13 +647,13 @@ % \begin{macrocode} %<*package> \etex_ifdefined:D \@@end - \tex_let:D \tex_end:D \@@end - \tex_let:D \tex_everydisplay:D \frozen@everydisplay - \tex_let:D \tex_everymath:D \frozen@everymath - \tex_let:D \tex_hyphen:D \@@hyph - \tex_let:D \tex_input:D \@@input - \tex_let:D \tex_italiccorrection:D \@@italiccorr - \tex_let:D \tex_underline:D \@@underline + \tex_let:D \tex_end:D \@@end + \tex_let:D \tex_everydisplay:D \frozen@everydisplay + \tex_let:D \tex_everymath:D \frozen@everymath + \tex_let:D \tex_hyphen:D \@@hyph + \tex_let:D \tex_input:D \@@input + \tex_let:D \tex_italiccorrection:D \@@italiccorr + \tex_let:D \tex_underline:D \@@underline % \end{macrocode} % That is also true for the \LuaTeX{} primitives under \LaTeXe{}. % \begin{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index c73c8ed9f35..2a5b4d952db 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} %</driver> %<*driver|package> -\GetIdInfo$Id: l3str.dtx 5368 2014-08-24 22:32:57Z bruno $ +\GetIdInfo$Id: l3str.dtx 5545 2015-03-01 21:24:44Z joseph $ {L3 Strings} %</driver|package> %<*driver> @@ -139,7 +139,8 @@ % is logically \texttt{true}. % \end{function} % -% \begin{function}[added = 2013-07-24, EXP, TF]{\str_case:nn, \str_case:on} +% \begin{function}[added = 2013-07-24, updated = 2015-02-28, EXP, TF] +% {\str_case:nn, \str_case:on, \str_case:nV, \str_case:nv} % \begin{syntax} % \cs{str_case:nnTF} \Arg{test string} \\ % ~~|{| \\ @@ -190,7 +191,67 @@ % % \section{String manipulation} % -% \begin{function}[rEXP, added = 2014-06-19]{\str_fold_case:n} +% \begin{function}[rEXP, added = 2015-03-01] +% { +% \str_lower_case:n, \str_lower_case:f, +% \str_upper_case:n, \str_upper_case:f +% } +% \begin{syntax} +% \cs{str_lower_case:n} \Arg{tokens} +% \cs{str_upper_case:n} \Arg{tokens} +% \end{syntax} +% Converts the input \meta{tokens} to their string representation, as +% described for \cs{tl_to_str:n}, and then to the lower or upper +% case representation using a one-to-one mapping as described by the +% Unicode Consortium file |UnicodeData.txt|. +% +% These functions are intended for case changing programmatic data in +% places where upper/lower case distinctions are meaningful. One example +% would be automatically generating a function name from user input where +% some case changing is needed. In this situation the input is programmatic, +% not textual, case does have meaning and a language-independent one-to-one +% mapping is appropriate. For example +% \begin{verbatim} +% \cs_new_protected:Npn \myfunc:nn #1#2 +% { +% \cs_set_protected:cpn +% { +% user +% \str_upper_case:f { \tl_head:n {#1} } +% \str_lower_case:f { \tl_tail:n {#1} } +% } +% { #2 } +% } +% \end{verbatim} +% would be used to generate a function with an auto-generated name consisting +% of the upper case equivalent of the supplied name followed by the lower +% case equivalent of the rest of the input. +% +% These functions should \emph{not} be used for +% \begin{itemize} +% \item Caseless comparisons: use \cs{str_fold_case:n} for this +% situation (case folding is district from lower casing). +% \item Case changing text for typesetting: see the \cs{tl_lower_case:n(n)}, +% \cs{tl_upper_case:n(n)} and \cs{tl_mixed_case:n(n)} functions which +% correctly deal with context-dependence and other factors appropriate +% to text case changing. +% \end{itemize} +% +% \begin{texnote} +% As with all \pkg{expl3} functions, the input supported by +% \cs{str_fold_case:n} is \emph{engine-native} characters which are or +% interoperate with \textsc{utf-8}. As such, when used with \pdfTeX{} +% \emph{only} the Latin alphabet characters A--Z will be case-folded +% (\emph{i.e.}~the \textsc{ascii} range which coincides with +% \textsc{utf-8}). Full \textsc{utf-8} support is available with both +% \XeTeX{} and \LuaTeX{}, subject only to the fact that \XeTeX{} in +% particular has issues with characters of code above hexadecimal +% $0\mathrm{xFFF}$ when interacting with \cs{tl_to_str:n}. +% \end{texnote} +% \end{function} +% +% \begin{function}[rEXP, added = 2014-06-19, updated = 2015-03-01] +% {\str_fold_case:n} % \begin{syntax} % \cs{str_fold_case:n} \Arg{tokens} % \end{syntax} @@ -412,8 +473,10 @@ % \begin{macro}[int, EXP]{\@@_if_eq_x_return:nn} % \end{macro} % -% \begin{macro}[EXP]{\str_case:nn, \str_case:on, \str_case_x:nn} -% \begin{macro}[EXP, TF]{\str_case:nn, \str_case:on, \str_case_x:nn} +% \begin{macro}[EXP] +% {\str_case:nn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_x:nn} +% \begin{macro}[EXP, TF] +% {\str_case:nn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_x:nn} % \begin{macro}[EXP, aux]{\@@_case:nnTF, \@@_case_x:nnTF} % \begin{macro}[aux, EXP] % {\@@_case:nw, \@@_case_x:nw, \@@_case_end:nw} @@ -442,10 +505,10 @@ } \cs_new:Npn \@@_case:nnTF #1#2#3#4 { \@@_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop } -\cs_generate_variant:Nn \str_case:nn { o } -\cs_generate_variant:Nn \str_case:nnT { o } -\cs_generate_variant:Nn \str_case:nnF { o } -\cs_generate_variant:Nn \str_case:nnTF { o } +\cs_generate_variant:Nn \str_case:nn { o , nV , nv } +\cs_generate_variant:Nn \str_case:nnT { o , nV , nv } +\cs_generate_variant:Nn \str_case:nnF { o , nV , nv } +\cs_generate_variant:Nn \str_case:nnTF { o , nV , nv } \cs_new:Npn \@@_case:nw #1#2#3 { \str_if_eq:nnTF {#1} {#2} @@ -489,65 +552,71 @@ % % \subsection{String manipulation} % -% \begin{macro}[EXP]{\str_fold_case:n} -% \begin{macro}[aux, EXP]{\@@_fold_auxi:w} -% \begin{macro}[aux, EXP]{\@@_fold_auxii:N} -% \begin{macro}[aux, EXP]{\@@_fold_auxiii:NNNNNNNN} -% \begin{macro}[aux, EXP]{\@@_fold_end:w} -% To convert a string to the \enquote{caseless} form, the first stage is to -% remove tokenization. Once that is done, provided the transformed chars are -% also detokenized then there is no need to worry about category codes. -% Spaces need to be retained as part of the mapping, so there is a little -% work to do in the set up. Data to support this process is loaded later in -% the \pkg{expl3} bundle. +% \begin{macro}[EXP] +% { +% \str_fold_case:n, +% \str_lower_case:n, \str_lower_case:f, +% \str_upper_case:n, \str_upper_case:f +% } +% \begin{macro}[aux, EXP]{\__str_change_case:nn} +% \begin{macro}[aux, EXP]{\__str_change_case_aux:nn} +% \begin{macro}[aux, EXP]{\__str_change_case_loop:nw} +% \begin{macro}[aux, EXP]{\__str_change_case_space:n} +% \begin{macro}[aux, EXP]{\__str_change_case_char:nN} +% \begin{macro}[aux, EXP]{\__str_change_case_char:NNNNNNNNn} +% Case changing for programmatic reasons is done by first detokenizing +% input then doing a simple loop that only has to worry about spaces +% and everything else. The output is detokenized to allow data sharing +% with text-based case changing. The key idea here of splitting up the +% data files based on the character code of the current character is +% shared with the text case changer too. % \begin{macrocode} -\cs_new:Npn \str_fold_case:n #1 +\cs_new:Npn \str_fold_case:n #1 { \__str_change_case:nn {#1} { fold } } +\cs_new:Npn \str_lower_case:n #1 { \__str_change_case:nn {#1} { lower } } +\cs_new:Npn \str_upper_case:n #1 { \__str_change_case:nn {#1} { upper } } +\cs_generate_variant:Nn \str_lower_case:n { f } +\cs_generate_variant:Nn \str_upper_case:n { f } +\cs_new:Npn \__str_change_case:nn #1 { - \exp_after:wN \@@_fold_auxi:w \tl_to_str:n {#1} - { ~ \c_empty_tl } \@@_fold_end:w ? ~ + \exp_after:wN \__str_change_case_aux:nn \exp_after:wN + { \tl_to_str:n {#1} } } -% \end{macrocode} -% A loop using spaces as delimiters: done in this way there is no issue with -% spaces in the input. Notice that there is a second inner loop with -% \cs{@@_fold_auxii:N} for each \enquote{word}. -% \begin{macrocode} -\cs_new:Npn \@@_fold_auxi:w #1 ~ +\cs_new:Npn \__str_change_case_aux:nn #1#2 { - \@@_fold_auxii:N #1 { ~ \c_space_tl } - \@@_fold_auxi:w + \__str_change_case_loop:nw {#2} #1 \q_recursion_tail \q_recursion_stop } -% \end{macrocode} -% The idea here is to take a single token and convert it to its decimal -% character code. This can then be used to split up the input into $100$ -% separate manageable lists for comparison on a case-by-case basis. -% \begin{macrocode} -\cs_new:Npn \@@_fold_auxii:N #1 +\cs_new:Npn \__str_change_case_loop:nw #1#2 \q_recursion_stop { - \exp_after:wN \@@_fold_auxiii:NNNNNNNN - \int_use:N \__int_eval:w 1000000 + `#1 \__int_eval_end: #1 + \tl_if_head_is_space:nTF {#2} + { \__str_change_case_space:n } + { \__str_change_case_char:nN } + {#1} #2 \q_recursion_stop } -% \end{macrocode} -% At this stage, use a slow-but-expandable string case selection to look -% for a matching char. If one is not found then retain the input as-is. -% This also does some cleanup to allow a simple termination of the two -% loops. -% \begin{macrocode} -\cs_new:Npn \@@_fold_auxiii:NNNNNNNN #1#2#3#4#5#6#7#8 +\use:x + { \cs_new:Npn \exp_not:N \__str_change_case_space:n ##1 \c_space_tl } + { + \c_space_tl + \__str_change_case_loop:nw {#1} + } +\cs_new:Npn \__str_change_case_char:nN #1#2 { - \exp_args:NNv \str_case_x:nnF #8 - { c_@@_fold_ #6 _X_ #7 _tl } + \quark_if_recursion_tail_stop:N #2 + \exp_args:Nf \tl_to_str:n { - #8 - \exp_after:wN \use_none:n #8 + \exp_after:wN \__str_change_case_char:NNNNNNNNn + \int_use:N \__int_eval:w 1000000 + `#2 \__int_eval_end: #2 {#1} } - \@@_fold_auxii:N + \__str_change_case_loop:nw {#1} + } +\cs_new:Npn \__str_change_case_char:NNNNNNNNn #1#2#3#4#5#6#7#8#9 + { + \str_case:nvF #8 + { c__unicode_ #9 _ #6 _X_ #7 _tl } + { #8 } } % \end{macrocode} -% When the end is reached, clean everything up leaving the converted -% string in the input stream. -% \begin{macrocode} -\cs_new:Npn \@@_fold_end:w ? #1 \@@_fold_auxi:w { } -% \end{macrocode} +% \end{macro} +% \end{macro} % \end{macro} % \end{macro} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx index b50904b7ee6..72eb1029080 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx @@ -38,7 +38,7 @@ % plain \TeX{}, set up in generic mode. %<*driver|script> \input expl3-generic\relax -\GetIdInfo$Id: l3unicode-data.dtx 5523 2015-02-12 22:10:34Z joseph $ +\GetIdInfo$Id: l3unicode-data.dtx 5544 2015-03-01 18:30:00Z joseph $ {L3 Case data script} %</driver|script> % @@ -137,16 +137,6 @@ % \end{macrocode} % % \subsection{Setup} -% -% \begin{macro}{\str_case:nv} -% \begin{macro}{\str_case:nvF} -% One handy variant. -% \begin{macrocode} -\cs_generate_variant:Nn \str_case:nn { nv } -\cs_generate_variant:Nn \str_case:nnF { nv } -% \end{macrocode} -% \end{macro} -% \end{macro} % % \begin{variable}{\l__unicode_tmp_tl} % Scratch space. @@ -157,15 +147,14 @@ % % The first step is to generate a series of temporary variables to % contain the data as it's extracted. This requires a nested loop -% to give a total of $100$ token lists. Two sets are generated for -% use in the upper/lower case part of the script. +% to give a total of $100$ token lists. % \begin{macrocode} \tl_map_inline:nn { 0123456789 } { \tl_map_inline:nn { 0123456789 } { - \tl_new:c { l__unicode_a_ #1 _ ##1 _tl } - \tl_new:c { l__unicode_b_ #1 _ ##1 _tl } + \tl_new:c { l__unicode_lower_ #1 _X_ ##1 _tl } + \tl_new:c { l__unicode_upper_ #1 _X_ ##1 _tl } } } % \end{macrocode} @@ -179,6 +168,38 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}^^A +% { +% \l__unicode_lower_exceptions_tl , +% \l__unicode_title_exceptions_tl , +% \l__unicode_upper_exceptions_tl +% } +% Exceptions to the usual mappings. +% \begin{macrocode} +\tl_new:N \l__unicode_lower_exceptions_tl +\tl_new:N \l__unicode_title_exceptions_tl +\tl_new:N \l__unicode_upper_exceptions_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\__unicode_file_map:nn} +% A utility function for handling file reading. +% \begin{macrocode} +\cs_new_protected:Npn \__unicode_file_map:nn #1#2 + { + \ior_open:Nn \g__unicode_data_ior {#1} + \ior_if_eof:NTF \g__unicode_data_ior + { \__msg_kernel_error:nnn { unicode } { file-not-found } {#1} } + { + \ior_str_map_inline:Nn \g__unicode_data_ior {#2} + \ior_close:N \g__unicode_data_ior + } + } +\__msg_kernel_new:nnn { unicode } { file-not-found } + { Could~not~find~data~file~'#1'. } +% \end{macrocode} +% \end{macro} +% % \begin{variable}{\g__unicode_data_ior} % \begin{variable}{\g__unicode_result_iow} % Streams for reading and writing the data. @@ -256,6 +277,18 @@ %% \__unicode_verb_end: % \end{macrocode} +% +% \begin{macro}[EXP]{\__unicode_zero_fill:N} +% A short piece of reusable code for the header. +% \begin{macrocode} +\cs_new:Npn \__unicode_zero_fill:N #1 + { + \int_compare:nNnT #1 < \c_ten { 0 } + \int_use:N #1 + } +% \end{macrocode} +% \end{macro} +% % Automatically include the current date. % \begin{macrocode} \iow_now:Nx \g__unicode_result_iow @@ -265,8 +298,8 @@ \c_space_tl Generated~on~ \int_use:N \tex_year:D - - \int_use:N \tex_month:D - - \int_use:N \tex_day:D . + \__unicode_zero_fill:N \tex_month:D - + \__unicode_zero_fill:N \tex_day:D . } \iow_now:Nx \g__unicode_result_iow { @@ -284,8 +317,8 @@ { l3unicode-data.def } ~ { \int_use:N \tex_year:D / - \int_use:N \tex_month:D / - \int_use:N \tex_day:D + \__unicode_zero_fill:N \tex_month:D / + \__unicode_zero_fill:N \tex_day:D } ~ { -1 } ~ { L3~Unicode~data } @@ -303,9 +336,7 @@ % % The idea here is simple: map over all of the letters of the Latin % alphabet and create appropriate token lists, then add all of the rest -% of the data structures. For case folding, the tokens are all stored as -% strings. For the lower case letters, to ensure there are always three -% digits a bit of maths is used. +% of the data structures. % % After the mapping, the small number of fixed data structures that are % used for the special case conversions are created. These are mainly empty, @@ -327,10 +358,9 @@ } \cs_set_protected:Npn \__unicode_tmp:NNNNNNN #1#2#3#4#5#6#7 { - \tl_const:cx { c__str_fold_ #1 _X_ #2 _ tl } - { \tl_to_str:n { #6#7 } } - \tl_const:cn { c__tl_lower_ #1 _X_ #2 _ tl } { #6#7 } - \tl_const:cn { c__tl_upper_ #4 _X_ #5 _ tl } { #7#6 } + \tl_const:cx { c__unicode_fold_ #1 _X_ #2 _ tl } { #6#7 } + \tl_const:cn { c__unicode_lower_ #1 _X_ #2 _ tl } { #6#7 } + \tl_const:cn { c__unicode_upper_ #4 _X_ #5 _ tl } { #7#6 } } \__unicode_tmp:NN AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz @@ -340,27 +370,24 @@ { \int_step_inline:nnnn { 0 } { 1 } { 9 } { - \tl_if_exist:cF { c__str_fold_ #1 _X_ ##1 _ tl } + \clist_map_inline:nn { fold , lower , upper } { - \tl_const:cn { c__str_fold_ #1 _X_ ##1 _ tl } { } - } - \tl_if_exist:cF { c__tl_lower_ #1 _X_ ##1 _ tl } - { - \tl_const:cn { c__tl_lower_ #1 _X_ ##1 _ tl } { } - } - \tl_if_exist:cF { c__tl_upper_ #1 _X_ ##1 _ tl } - { - \tl_const:cn { c__tl_upper_ #1 _X_ ##1 _ tl } { } + \tl_if_exist:cF { c__unicode_ ####1 _ #1 _X_ ##1 _ tl } + { \tl_const:cn { c__unicode_ ####1 _ #1 _X_ ##1 _ tl } { } } } } } - \tl_const:Nn \c__tl_mixed_exceptions_tl { } - \tl_const:Nn \c__tl_std_sigma_tl { } - \tl_const:Nn \c__tl_final_sigma_tl { } - \tl_const:Nn \c__tl_accents_lt_tl { } - \tl_const:Nn \c__tl_dot_above_tl { } - \tl_const:Nn \c__tl_dotless_i_tl { I } - \tl_const:Nn \c__tl_dotted_I_tl { i } + \tl_const:Nn \c__unicode_lower_exceptions_tl { } + \tl_const:Nn \c__unicode_mixed_exceptions_tl { } + \tl_const:Nn \c__unicode_upper_exceptions_tl { } + \tl_const:Nn \c__unicode_std_sigma_tl { } + \tl_const:Nn \c__unicode_final_sigma_tl { } + \tl_const:Nn \c__unicode_accents_lt_tl { } + \tl_const:Nn \c__unicode_dot_above_tl { } + \tl_const:Nn \c__unicode_dotless_i_tl { I } + \tl_const:Nn \c__unicode_dotted_I_tl { i } + \tl_const:Nn \c__unicode_i_ogonek_tl { } + \tl_const:Nn \c__unicode_I_ogonek_tl { } \tex_endinput:D } \__unicode_verb_end: @@ -368,138 +395,23 @@ % % \subsection{Upper/lower/title casing} % -% Case changing data is split into two parts which we need to combine into a -% single data structure. There are therefore two parts to this process: first -% to read the exceptions, then to read the main data and combine it. -% -% \begin{variable}^^A -% { -% \l__unicode_lower_exceptions_tl, -% \l__unicode_title_exceptions_tl, -% \l__unicode_upper_exceptions_tl -% } -% There are special cases for lower, title and upper case changes: these -% all get read in to appropriate lists. Exceptions could be saved as -% property lists but that would make life a bit more complex with the -% title case exceptions and wouldn't really gain much (this is after all -% \enquote{disposable} data). Note that for our purposes, what Unicode call -% title case is stored in the output as `mixed' case. -% \begin{macrocode} -\tl_new:N \l__unicode_lower_exceptions_tl -\tl_new:N \l__unicode_title_exceptions_tl -\tl_new:N \l__unicode_upper_exceptions_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{\__unicode_parse_line:w} -% \begin{macro}[aux]{\__unicode_parse_line_auxii:w} -% \begin{macro}[aux]{\__unicode_parse_line_auxiii:nnn} -% \begin{macro}[aux]{\__unicode_parse_line_auxiv:nwn} -% \begin{macro}[aux]{\__unicode_brace:n} -% The file |SpecialCasing.txt| uses C-style comments and may contain -% blank lines: those two awkward situations need to be filtered out before -% parsing the real data in the line. -% \begin{macrocode} -\cs_new_protected:Npn \__unicode_parse_line:w #1 \q_stop - { - \tl_if_blank:nF {#1} - { - \str_if_eq_x:nnF { \tl_head:n {#1} } { \cs_to_str:N \# } - { \__unicode_parse_line_auxii:w #1 \q_stop } - } - } -% \end{macrocode} -% Here, |#1| is the code point for the input, |#2| is the lower case mapping, -% |#3| the title case mapping and |#4| the upper case mapping: all three -% mappings are always given even if they are also in |UnicodeData.txt|. As -% most of the title case exceptions are also upper case exceptions, a test is -% made so that we are only storing truly useful exceptions for title case. -% \begin{macrocode} -\cs_new_protected:Npn \__unicode_parse_line_auxii:w - #1 ;~ #2 ;~ #3 ;~ #4 ; #5 \q_stop - { - \__unicode_parse_line_auxiii:nnn {#1} {#2} { lower } - \str_if_eq:nnF {#3} {#4} - { \__unicode_parse_line_auxiii:nnn {#1} {#3} { title } } - \__unicode_parse_line_auxiii:nnn {#1} {#4} { upper } - } -% \end{macrocode} -% For each mapping there may be one, two or three code points in the -% output. After a bit of a trick to allow for ease of parsing, we check if -% there are at least two numbers for the case-changed char. If there are, -% then save the exception. If not, then the value will also be in the main -% table and we can ignore it here. There is also a test to see if the -% current value is a title case exception: they don't need extra braces -% for those. -% \begin{macrocode} -\cs_new_protected:Npn \__unicode_parse_line_auxiii:nnn #1#2#3 - { \use:n { \__unicode_parse_line_auxiv:nwn {#1} #2 ~ } ~ \q_stop {#3} } -\cs_new_protected:Npn \__unicode_parse_line_auxiv:nwn #1#2 ~ #3 ~ #4 \q_stop #5 - { - \tl_if_empty:nF {#3} - { - \str_if_eq:nnTF {#5} { title } - { \cs_set_eq:NN \__unicode_brace:n \use:n } - { \cs_set:Npn \__unicode_brace:n ##1 { { ##1 } } } - \tl_rescan:nn - { } - { - \tl_put_right:cx { l__unicode_ #5 _exceptions_tl } - { - { #1 } - { - \__unicode_brace:n - { - \luatex_Uchar:D "#2 \c_space_tl - \luatex_Uchar:D "#3 \c_space_tl - \tl_if_empty:nF {#4} - { \luatex_Uchar:D "#4 \c_space_tl } - } - } - } - } - } - } -\cs_new_eq:NN \__unicode_brace:n \use:n -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% Parsing set up, read the special cases file. The input contains both -% general special cases and ones dependent on context. We only want to read -% the former, so there is a check for the line that splits the two: -% at that point, simply stop parsing. -% \begin{macrocode} -\ior_open:Nn \g__unicode_data_ior { SpecialCasing.txt } -\ior_str_map_inline:Nn \g__unicode_data_ior - { - \str_if_eq_x:nnTF {#1} { \cs_to_str:N \# \c_space_tl Conditional~Mappings } - { \ior_map_break: } - { \__unicode_parse_line:w #1 \q_stop } - } -\ior_close:N \g__unicode_data_ior -% \end{macrocode} -% % \begin{macro}{\__unicode_parse_line:w} % \begin{macro}[aux]{\__unicode_parse_line_auxi:w} % \begin{macro}[aux]{\__unicode_parse_line_auxii:nw} % \begin{macro}[aux]{\__unicode_parse_line_auxiii:nw} -% \begin{macro}[aux]{\__unicode_parse_line_auxiv:nnNn} -% \begin{macro}[aux]{\__unicode_parse_line_auxv:wnnNn} -% \begin{macro}[aux]{\__unicode_parse_line_auxvi:nnNNNn} -% For parsing |UnicodeData.txt| there is no need to worry about funny lines: -% the file has no comments or blank lines. Each line also contains a -% one-to-one mapping for the case mappings, so they are easy to deal with. -% The slight complication here is that the lines are rather long, so a -% multi-part approach is needed to grab the correct parts of the line as -% arguments. Of the first set of arguments, the two that needed are |#1| -% (the code point) and |#6| (details about the code point which may include -% the fact it's a compatibility char). -% \begin{macrocode} -\cs_set_protected:Npn \__unicode_parse_line:w +% \begin{macro}[aux]{\__unicode_parse_line_auxiv:nnn} +% \begin{macro}[aux]{\__unicode_parse_line_auxv:wnnn} +% \begin{macro}[aux]{\__unicode_parse_line_auxvi:nnNNn} +% \begin{macro}[aux]{\__unicode_brace:n} +% When parsing |UnicodeData.txt| there are no comments or blank lines. Case +% mappings when present here are one-to-one and so are easy to deal with. The +% slight complication here is that the lines are rather long, so a multi-part +% approach is needed to grab the correct parts of the line as arguments. Of +% the first set of arguments, the two that needed are |#1| (the code point) +% and |#6| (details about the code point which may include the fact it's a +% compatibility char). +% \begin{macrocode} +\cs_new_protected:Npn \__unicode_parse_line:w #1 ; #2 ; #3 ; #4 ; #5 ; #6 ; #7 ; #8 ; #9 ; { \__unicode_parse_line_auxi:w #1 ; #6 ; @@ -507,17 +419,17 @@ % \end{macrocode} % With some data items removed, at this stage the hexadecimal % representation of the char is |#1|, any compatibility char information is -% in |#2|, the upper case char is |#6|, the lower case one |#7| and the -% title case one |#8|. These may or may not be present and the upper and +% in |#2|, the upper case code point is |#6|, the lower case one |#7| and +% the title case one |#8|. These may or may not be present and the upper and % title case values may be identical. The compatibility data is first -% extracted into a sequence, then the main information is processed. -% Where there are values for upper/lower case, they are saved into the -% arrays. For title case, since the number of exceptions is small: they are -% added to the existing list of exceptions we've already started. Note -% that there is a space at the end of |#8| as we are reading the data in -% with spaces not ignored: that has to be allowed for to get the equality -% test right. The `business end' of the code here is inside a rescan block -% so the later parts of the code do not need to be concerned with string +% extracted into a sequence, then the main information is processed. Where +% there are values for upper/lower case, they are saved into the appropriate +% token lists. For title case, since the number of exceptions is small and so +% they are saved in a single dedicated space. Note that there is a space at +% the end of |#8| as we are reading the data in with spaces not ignored: that +% has to be allowed for to get the equality test right. The +% \enquote{business end} of the code here is inside a rescan block so the +% later parts of the code do not need to be concerned with string % \emph{versus} standard category codes. % \begin{macrocode} \cs_new_protected:Npn \__unicode_parse_line_auxi:w @@ -530,18 +442,21 @@ } \tl_rescan:nn { } { - \__unicode_parse_line_auxiv:nnNn {#1} {#6} a { upper } - \__unicode_parse_line_auxiv:nnNn {#1} {#7} b { lower } + \__unicode_parse_line_auxiv:nnn {#1} {#6} { upper } + \__unicode_parse_line_auxiv:nnn {#1} {#7} { lower } \bool_if:nF { \tl_if_empty_p:n {#6} || \str_if_eq_p:nn {#6} {#8} } { + \seq_if_in:NnTF \l__unicode_compat_seq {#1} + { \cs_set:Npn \__unicode_brace:n ##1 { { ##1 } } } + { \cs_set_eq:NN \__unicode_brace:n \use:n } \tl_put_right:Nx \l__unicode_title_exceptions_tl { - {#1} - { \luatex_Uchar:D "#8 \c_space_tl } + \__unicode_brace:n { \luatex_Uchar:D "#1 \c_space_tl } + \__unicode_brace:n { \luatex_Uchar:D "#8 \c_space_tl } } } } @@ -574,51 +489,37 @@ % The array structure here is in two parts, one for upper and one % for lower case mappings. % \begin{macrocode} -\cs_new_protected:Npn \__unicode_parse_line_auxiv:nnNn #1#2#3 +\cs_new_protected:Npn \__unicode_parse_line_auxiv:nnn #1#2 { - \exp_last_unbraced:Nf \__unicode_parse_line_auxv:wnnNn + \exp_last_unbraced:Nf \__unicode_parse_line_auxv:wnnn { \int_eval:n { 1000000 + "#1 } } \q_stop - {#1} {#2} #3 + {#1} {#2} } -\cs_new_protected:Npn \__unicode_parse_line_auxv:wnnNn +\cs_new_protected:Npn \__unicode_parse_line_auxv:wnnn #1#2#3#4#5#6#7 \q_stop #8#9 - { \__unicode_parse_line_auxvi:nnNNNn {#8} {#9} #6 #7 } + { \__unicode_parse_line_auxvi:nnNNn {#8} {#9} #6 #7 } % \end{macrocode} +% Store data as long as there is something to actually do in a mapping. % For entries in the the compatibility list there is a need to add braces % around the chars in case there is any normalisation during file reading. -% After that check, there is is question of whether the current code point -% is on the list of exceptions. If it is, that mapping is stored. Otherwise, -% the standard mapping is stored if there is one, otherwise the code point -% is simply skipped. % \begin{macrocode} -\cs_new_protected:Npn \__unicode_parse_line_auxvi:nnNNNn #1#2#3#4#5#6 +\cs_new_protected:Npn \__unicode_parse_line_auxvi:nnNNn #1#2#3#4#5 { - \seq_if_in:NnTF \l__unicode_compat_seq {#1} - { \cs_set:Npn \__unicode_brace:n ##1 { { ##1 } } } - { \cs_set_eq:NN \__unicode_brace:n \use:n } - \tl_set:Nx \l__unicode_tmp_tl - { \str_case:nv {#1} { l__unicode_ #6 _exceptions_tl } } - \tl_if_empty:NTF \l__unicode_tmp_tl - { - \tl_if_empty:nF {#2} - { - \tl_put_right:cx { l__unicode_ #5 _ #3 _ #4 _tl } - { - \__unicode_brace:n - { \luatex_Uchar:D "#1 \c_space_tl } - \__unicode_brace:n { \luatex_Uchar:D "#2 \c_space_tl } - } - } - } + \tl_if_empty:nF {#2} { - \tl_put_right:cx { l__unicode_ #5 _ #3 _ #4 _tl } + \seq_if_in:NnTF \l__unicode_compat_seq {#1} + { \cs_set:Npn \__unicode_brace:n ##1 { { ##1 } } } + { \cs_set_eq:NN \__unicode_brace:n \use:n } + \tl_put_right:cx { l__unicode_ #5 _ #3 _X_ #4 _tl } { \__unicode_brace:n { \luatex_Uchar:D "#1 \c_space_tl } - \__unicode_brace:n { \tl_use:N \l__unicode_tmp_tl } + \__unicode_brace:n + { \luatex_Uchar:D "#2 \c_space_tl } } } } +\cs_new_eq:NN \__unicode_brace:n \use:n % \end{macrocode} % \end{macro} % \end{macro} @@ -627,19 +528,102 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % Everything is set up and so the read loop can take place. % \begin{macrocode} -\ior_open:Nn \g__unicode_data_ior { UnicodeData.txt } -\ior_str_map_inline:Nn \g__unicode_data_ior - { \__unicode_parse_line:w #1\q_stop } -\ior_close:N \g__unicode_data_ior +\__unicode_file_map:nn + { UnicodeData.txt } + { \__unicode_parse_line:w #1 \q_stop } % \end{macrocode} % -% Saving the data uses a single file, with the upper case array -% followed by the lower case one and finally the title case exceptions. -% The saved data in the \texttt{a} storage array is also cleared to save a -% second loop later on when dealing with case folding. +% \begin{macro}{\__unicode_parse_line:w} +% \begin{macro}[aux]{\__unicode_parse_line_auxii:w} +% \begin{macro}[aux]{\__unicode_parse_line_auxiii:nnn} +% \begin{macro}[aux]{\__unicode_parse_line_auxiv:nwn} +% The file |SpecialCasing.txt| uses C-style comments and may contain +% blank lines: those two awkward situations need to be filtered out before +% parsing the real data in the line. +% \begin{macrocode} +\cs_set_protected:Npn \__unicode_parse_line:w #1 \q_stop + { + \tl_if_blank:nF {#1} + { + \str_if_eq_x:nnF { \tl_head:n {#1} } { \cs_to_str:N \# } + { \__unicode_parse_line_auxii:w #1 \q_stop } + } + } +% \end{macrocode} +% Here, |#1| is the code point for the input, |#2| is the lower case mapping, +% |#3| the title case mapping and |#4| the upper case mapping: all three +% mappings are always given even if they are also in |UnicodeData.txt|. As +% most of the title case exceptions are also upper case exceptions, a test is +% made so that we are only storing truly useful exceptions for title case. +% \begin{macrocode} +\cs_new_protected:Npn \__unicode_parse_line_auxii:w + #1 ;~ #2 ;~ #3 ;~ #4 ; #5 \q_stop + { + \__unicode_parse_line_auxiii:nnn {#1} {#2} { lower } + \str_if_eq:nnF {#3} {#4} + { \__unicode_parse_line_auxiii:nnn {#1} {#3} { title } } + \__unicode_parse_line_auxiii:nnn {#1} {#4} { upper } + } +% \end{macrocode} +% For each mapping there may be one, two or three code points in the +% output. After a bit of a trick to allow for ease of parsing, we check if +% there are at least two numbers for the case-changed char. If there are, +% then save the exception. If not, then the value will also be in the main +% table and we can ignore it here. There is also a test to see if the +% current value is a title case exception: they don't need extra braces +% for those. +% \begin{macrocode} +\cs_new_protected:Npn \__unicode_parse_line_auxiii:nnn #1#2#3 + { \use:n { \__unicode_parse_line_auxiv:nwn {#1} #2 ~ } ~ \q_stop {#3} } +\cs_new_protected:Npn \__unicode_parse_line_auxiv:nwn #1#2 ~ #3 ~ #4 \q_stop #5 + { + \tl_if_empty:nF {#3} + { + \seq_if_in:NnTF \l__unicode_compat_seq {#1} + { \cs_set:Npn \__unicode_brace:n ##1 { { ##1 } } } + { \cs_set_eq:NN \__unicode_brace:n \use:n } + \tl_rescan:nn + { } + { + \tl_put_right:cx { l__unicode_ #5 _exceptions_tl } + { + \__unicode_brace:n { \luatex_Uchar:D "#1 \c_space_tl } + { + \luatex_Uchar:D "#2 \c_space_tl + \luatex_Uchar:D "#3 \c_space_tl + \tl_if_empty:nF {#4} + { \luatex_Uchar:D "#4 \c_space_tl } + } + } + } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Parsing set up, read the special cases file. The input contains both +% general special cases and ones dependent on context. We only want to read +% the former, so there is a check for the line that splits the two: +% at that point, simply stop parsing. +% \begin{macrocode} +\__unicode_file_map:nn + { SpecialCasing.txt } + { + \str_if_eq_x:nnTF {#1} { \cs_to_str:N \# \c_space_tl Conditional~Mappings } + { \ior_map_break: } + { \__unicode_parse_line:w #1 \q_stop } + } +% \end{macrocode} +% +% Saving the data uses a single file, with the two arrays followed by the +% exceptions. % \begin{macrocode} \tl_map_inline:nn { 0123456789 } { @@ -648,10 +632,10 @@ \iow_now:Nx \g__unicode_result_iow { \tl_const:cn - { ~ c__tl_upper_ #1 _X_ ##1 _tl ~ } ~ - { ~ \exp_not:v { l__unicode_a_ #1 _ ##1 _tl } ~ } + { ~ c__unicode_lower_ #1 _X_ ##1 _tl ~ } ~ + { ~ \exp_not:v { l__unicode_lower_ #1 _X_ ##1 _tl } ~ } } - \tl_clear:c { l__unicode_a_ #1 _ ##1 _tl } + \tl_clear:c { l__unicode_lower_ #1 _X_ ##1 _tl } } } \tl_map_inline:nn { 0123456789 } @@ -661,45 +645,27 @@ \iow_now:Nx \g__unicode_result_iow { \tl_const:cn - { ~ c__tl_lower_ #1 _X_ ##1 _tl ~ } ~ - { ~ \exp_not:v { l__unicode_b_ #1 _ ##1 _tl } ~ } + { ~ c__unicode_upper_ #1 _X_ ##1 _tl ~ } ~ + { ~ \exp_not:v { l__unicode_upper_ #1 _X_ ##1 _tl } ~ } } } } -% \end{macrocode} -% -% \begin{macro}[EXP]{\unicode_title_exceptions:N} -% \begin{macro}[EXP, aux]{\__unicode_title_exceptions:nn} -% The exceptions list for title case conversion needs to be converted from -% using numbers to chars for the lookup part. Everything will already have -% the correct category codes, so it's just a case of an expansion-based -% loop. -% \begin{macrocode} -\cs_new:Npn \unicode_title_exceptions:N #1 +\clist_map_inline:nn + { upper , lower , title } { - \exp_after:wN \__unicode_title_exceptions:nn #1 - \q_recursion_tail ? \q_recursion_stop - } -\cs_new:Npn \__unicode_title_exceptions:nn #1#2 - { - \quark_if_recursion_tail_stop:n {#1} - { \luatex_Uchar:D "#1 \c_space_tl } - { #2 } - \__unicode_title_exceptions:nn - } -\iow_now:Nx \g__unicode_result_iow - { - \tl_const:Nn - \exp_not:N \c__tl_mixed_exceptions_tl - { - \c_space_tl - \unicode_title_exceptions:N \l__unicode_title_exceptions_tl - \c_space_tl + \iow_now:Nx \g__unicode_result_iow + { + \tl_const:Nn + \exp_not:c + { + c__unicode_ + \str_if_eq:nnTF {#1} { title } { mixed } {#1} + _exceptions_tl + } + { \exp_not:v { l__unicode_ #1 _ exceptions_tl } } } } % \end{macrocode} -% \end{macro} -% \end{macro} % % Data for the special cases is now stored. This is mainly a series of simple % token lists with appropriate names and content, but there is also one place @@ -710,7 +676,7 @@ \quark_if_recursion_tail_stop:n {#1} \iow_now:Nx \g__unicode_result_iow { - \tl_const:Nn \exp_not:c { c__tl_ #1 _tl } + \tl_const:Nn \exp_not:c { c__unicode_ #1 _tl } { ~ \luatex_Uchar:D "#2 \c_space_tl \c_space_tl } } \__unicode_special_case:nn @@ -721,11 +687,13 @@ { dotless_i } { 0131 } { dot_above } { 0307 } { dotted_I } { 0130 } + { i_ogonek } { 012F } + { I_ogonek } { 012E } \q_recursion_tail { } \q_recursion_stop \iow_now:Nx \g__unicode_result_iow { - \tl_const:Nn \exp_not:N \c__tl_accents_lt_tl + \tl_const:Nn \exp_not:N \c__unicode_accents_lt_tl { \luatex_Uchar:D "00CC { \luatex_Uchar:D "0069 \luatex_Uchar:D "0307 \luatex_Uchar:D "0300 } @@ -832,7 +800,7 @@ \tl_rescan:nn { } { - \tl_put_right:cx { l__unicode_a_ #6 _ #7 _tl } + \tl_put_right:cx { l__unicode_lower_ #6 _X_ #7 _tl } { \__unicode_brace:n { \luatex_Uchar:D "#8 \c_space_tl } \__unicode_brace:n { #9 } @@ -850,47 +818,12 @@ % The main loop can now take place, reading the source data and saving all of % the information in the token list array. % \begin{macrocode} -\ior_open:Nn \g__unicode_data_ior { CaseFolding.txt } -\ior_str_map_inline:Nn \g__unicode_data_ior +\__unicode_file_map:nn + { CaseFolding.txt } { \__unicode_parse_line:w #1 \q_stop } -\ior_close:N \g__unicode_data_ior -% \end{macrocode} -% -% To ensure that the output of the case-folding function is a string, all of -% the stored results need to be detokenized. That is done by including a loop -% in the |.def| file which will do the necessary change. To set that up, a -% slightly complicated bit of secondary work: write the functions which do -% the job into the |.def| file itself, using a group to trap the temporary -% code. There is also a test in the following so that the result only has -% braces around items which need it: this is a slight performance tweak when -% the code actually gets used. Notice that everything in the token list is -% detokenized except for the |{| and |}| chars needed for grouping: if the -% search part of the list is not detokenized there are issues with \XeTeX{} -% and chars beyond $0\mathrm{xFFFF}$ (probably a bug, but can be worked -% around!). -% \begin{macrocode} -\__unicode_verb: -\group_begin: - \cs_set_protected:Npn \__str_tmp:NNn #1#2#3 - { - \tl_const:cx { c__str_fold_#1 _X_ #2_tl } - { \__str_tmp:Nw #3 \q_recursion_tail { } \q_recursion_stop } - } - \cs_set:Npn \__str_tmp:Nw #1#2 - { - \quark_if_recursion_tail_stop:N #1 - \tl_to_str:N #1 - \tl_if_blank:oT { \use_none:n #2 } - { \use:n } - { \tl_to_str:n {#2} } - \__str_tmp:Nw - } -\__unicode_verb_end: % \end{macrocode} % -% The write loop is simple: map over the array and write everything to the -% output. The group used for the temporary stuff in the -% |.def| file is also closed at this point. +% Write the processed data to the |.def| file. % \begin{macrocode} \tl_map_inline:nn { 0123456789 } { @@ -898,13 +831,13 @@ { \iow_now:Nx \g__unicode_result_iow { - \c_space_tl \c_space_tl - \exp_not:N \__str_tmp:NNn #1 ~ ##1 ~ - { ~ \exp_not:v { l__unicode_a_ #1 _ ##1 _tl } ~ } + \tl_const:cn + { ~ c__unicode_fold_ #1 _X_ ##1 _tl ~ } ~ + { ~ \exp_not:v { l__unicode_lower_ #1 _X_ ##1 _tl } ~ } } + \tl_clear:c { l__unicode_lower_ #1 _X_ ##1 _tl } } } -\iow_now:Nn \g__unicode_result_iow { \group_end: } % \end{macrocode} % % Job done, end the \TeX{} run. diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index a5dccfde3e7..dffedf539df 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -80,8 +80,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2015/02/13} -\def\ExplFileVersion{5524} +\def\ExplFileDate{2015/03/01} +\def\ExplFileVersion{5547} \begingroup \def\next{\endgroup} \expandafter\ifx\csname PackageError\endcsname\relax @@ -240,7 +240,7 @@ } } \endgroup -\GetIdInfo$Id: l3bootstrap.dtx 5500 2015-01-27 14:37:04Z joseph $ +\GetIdInfo$Id: l3bootstrap.dtx 5542 2015-02-28 22:47:53Z joseph $ {L3 Bootstrap code} \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname pdfstrcmp\endcsname\relax @@ -326,11 +326,13 @@ \def\@tempa{LaTeX2e} \def\next{} \ifx\fmtname\@tempa - \def\next - {% - \RequirePackage{etex}% - \csname reserveinserts\endcsname{32}% - } + \unless\ifdefined\extrafloats + \def\next + {% + \RequirePackage{etex}% + \csname reserveinserts\endcsname{32}% + } + \fi \fi \expandafter\endgroup \next @@ -393,7 +395,7 @@ \tex_endlinechar:D = 32 \scan_stop: \bool_set_true:N \l__kernel_expl_bool } -%% File: l3names.dtx Copyright (C) 1990-2014 The LaTeX3 project +%% File: l3names.dtx Copyright (C) 1990-2015 The LaTeX3 project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -425,7 +427,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3names.dtx 5343 2014-08-22 19:32:35Z bruno $ +\GetIdInfo$Id: l3names.dtx 5535 2015-02-24 09:11:19Z joseph $ {L3 Namespace for primitives} \let \tex_global:D \global \let \tex_let:D \let @@ -434,441 +436,447 @@ { \tex_global:D \tex_let:D #2 #1 } - \__kernel_primitive:NN \ \tex_space:D - \__kernel_primitive:NN \/ \tex_italiccorrection:D - \__kernel_primitive:NN \- \tex_hyphen:D - \__kernel_primitive:NN \let \tex_let:D - \__kernel_primitive:NN \def \tex_def:D - \__kernel_primitive:NN \edef \tex_edef:D - \__kernel_primitive:NN \gdef \tex_gdef:D - \__kernel_primitive:NN \xdef \tex_xdef:D - \__kernel_primitive:NN \chardef \tex_chardef:D - \__kernel_primitive:NN \countdef \tex_countdef:D - \__kernel_primitive:NN \dimendef \tex_dimendef:D - \__kernel_primitive:NN \skipdef \tex_skipdef:D - \__kernel_primitive:NN \muskipdef \tex_muskipdef:D - \__kernel_primitive:NN \mathchardef \tex_mathchardef:D - \__kernel_primitive:NN \toksdef \tex_toksdef:D - \__kernel_primitive:NN \futurelet \tex_futurelet:D - \__kernel_primitive:NN \advance \tex_advance:D - \__kernel_primitive:NN \divide \tex_divide:D - \__kernel_primitive:NN \multiply \tex_multiply:D - \__kernel_primitive:NN \font \tex_font:D - \__kernel_primitive:NN \fam \tex_fam:D - \__kernel_primitive:NN \global \tex_global:D - \__kernel_primitive:NN \long \tex_long:D - \__kernel_primitive:NN \outer \tex_outer:D - \__kernel_primitive:NN \setlanguage \tex_setlanguage:D - \__kernel_primitive:NN \globaldefs \tex_globaldefs:D - \__kernel_primitive:NN \afterassignment \tex_afterassignment:D - \__kernel_primitive:NN \aftergroup \tex_aftergroup:D - \__kernel_primitive:NN \expandafter \tex_expandafter:D - \__kernel_primitive:NN \noexpand \tex_noexpand:D - \__kernel_primitive:NN \begingroup \tex_begingroup:D - \__kernel_primitive:NN \endgroup \tex_endgroup:D - \__kernel_primitive:NN \halign \tex_halign:D - \__kernel_primitive:NN \valign \tex_valign:D - \__kernel_primitive:NN \cr \tex_cr:D - \__kernel_primitive:NN \crcr \tex_crcr:D - \__kernel_primitive:NN \noalign \tex_noalign:D - \__kernel_primitive:NN \omit \tex_omit:D - \__kernel_primitive:NN \span \tex_span:D - \__kernel_primitive:NN \tabskip \tex_tabskip:D - \__kernel_primitive:NN \everycr \tex_everycr:D - \__kernel_primitive:NN \if \tex_if:D - \__kernel_primitive:NN \ifcase \tex_ifcase:D - \__kernel_primitive:NN \ifcat \tex_ifcat:D - \__kernel_primitive:NN \ifnum \tex_ifnum:D - \__kernel_primitive:NN \ifodd \tex_ifodd:D - \__kernel_primitive:NN \ifdim \tex_ifdim:D - \__kernel_primitive:NN \ifeof \tex_ifeof:D - \__kernel_primitive:NN \ifhbox \tex_ifhbox:D - \__kernel_primitive:NN \ifvbox \tex_ifvbox:D - \__kernel_primitive:NN \ifvoid \tex_ifvoid:D - \__kernel_primitive:NN \ifx \tex_ifx:D - \__kernel_primitive:NN \iffalse \tex_iffalse:D - \__kernel_primitive:NN \iftrue \tex_iftrue:D - \__kernel_primitive:NN \ifhmode \tex_ifhmode:D - \__kernel_primitive:NN \ifmmode \tex_ifmmode:D - \__kernel_primitive:NN \ifvmode \tex_ifvmode:D - \__kernel_primitive:NN \ifinner \tex_ifinner:D - \__kernel_primitive:NN \else \tex_else:D - \__kernel_primitive:NN \fi \tex_fi:D - \__kernel_primitive:NN \or \tex_or:D - \__kernel_primitive:NN \immediate \tex_immediate:D - \__kernel_primitive:NN \closeout \tex_closeout:D - \__kernel_primitive:NN \openin \tex_openin:D - \__kernel_primitive:NN \openout \tex_openout:D - \__kernel_primitive:NN \read \tex_read:D - \__kernel_primitive:NN \write \tex_write:D - \__kernel_primitive:NN \closein \tex_closein:D - \__kernel_primitive:NN \newlinechar \tex_newlinechar:D - \__kernel_primitive:NN \input \tex_input:D - \__kernel_primitive:NN \endinput \tex_endinput:D - \__kernel_primitive:NN \inputlineno \tex_inputlineno:D - \__kernel_primitive:NN \errmessage \tex_errmessage:D - \__kernel_primitive:NN \message \tex_message:D - \__kernel_primitive:NN \show \tex_show:D - \__kernel_primitive:NN \showthe \tex_showthe:D - \__kernel_primitive:NN \showbox \tex_showbox:D - \__kernel_primitive:NN \showlists \tex_showlists:D - \__kernel_primitive:NN \errhelp \tex_errhelp:D - \__kernel_primitive:NN \errorcontextlines \tex_errorcontextlines:D - \__kernel_primitive:NN \tracingcommands \tex_tracingcommands:D - \__kernel_primitive:NN \tracinglostchars \tex_tracinglostchars:D - \__kernel_primitive:NN \tracingmacros \tex_tracingmacros:D - \__kernel_primitive:NN \tracingonline \tex_tracingonline:D - \__kernel_primitive:NN \tracingoutput \tex_tracingoutput:D - \__kernel_primitive:NN \tracingpages \tex_tracingpages:D - \__kernel_primitive:NN \tracingparagraphs \tex_tracingparagraphs:D - \__kernel_primitive:NN \tracingrestores \tex_tracingrestores:D - \__kernel_primitive:NN \tracingstats \tex_tracingstats:D - \__kernel_primitive:NN \pausing \tex_pausing:D - \__kernel_primitive:NN \showboxbreadth \tex_showboxbreadth:D - \__kernel_primitive:NN \showboxdepth \tex_showboxdepth:D - \__kernel_primitive:NN \batchmode \tex_batchmode:D - \__kernel_primitive:NN \errorstopmode \tex_errorstopmode:D - \__kernel_primitive:NN \nonstopmode \tex_nonstopmode:D - \__kernel_primitive:NN \scrollmode \tex_scrollmode:D - \__kernel_primitive:NN \end \tex_end:D - \__kernel_primitive:NN \csname \tex_csname:D - \__kernel_primitive:NN \endcsname \tex_endcsname:D - \__kernel_primitive:NN \ignorespaces \tex_ignorespaces:D - \__kernel_primitive:NN \relax \tex_relax:D - \__kernel_primitive:NN \the \tex_the:D - \__kernel_primitive:NN \mag \tex_mag:D - \__kernel_primitive:NN \language \tex_language:D - \__kernel_primitive:NN \mark \tex_mark:D - \__kernel_primitive:NN \topmark \tex_topmark:D - \__kernel_primitive:NN \firstmark \tex_firstmark:D - \__kernel_primitive:NN \botmark \tex_botmark:D - \__kernel_primitive:NN \splitfirstmark \tex_splitfirstmark:D - \__kernel_primitive:NN \splitbotmark \tex_splitbotmark:D - \__kernel_primitive:NN \fontname \tex_fontname:D - \__kernel_primitive:NN \escapechar \tex_escapechar:D - \__kernel_primitive:NN \endlinechar \tex_endlinechar:D - \__kernel_primitive:NN \mathchoice \tex_mathchoice:D - \__kernel_primitive:NN \delimiter \tex_delimiter:D - \__kernel_primitive:NN \mathaccent \tex_mathaccent:D - \__kernel_primitive:NN \mathchar \tex_mathchar:D - \__kernel_primitive:NN \mskip \tex_mskip:D - \__kernel_primitive:NN \radical \tex_radical:D - \__kernel_primitive:NN \vcenter \tex_vcenter:D - \__kernel_primitive:NN \mkern \tex_mkern:D - \__kernel_primitive:NN \above \tex_above:D - \__kernel_primitive:NN \abovewithdelims \tex_abovewithdelims:D - \__kernel_primitive:NN \atop \tex_atop:D - \__kernel_primitive:NN \atopwithdelims \tex_atopwithdelims:D - \__kernel_primitive:NN \over \tex_over:D - \__kernel_primitive:NN \overwithdelims \tex_overwithdelims:D - \__kernel_primitive:NN \displaystyle \tex_displaystyle:D - \__kernel_primitive:NN \textstyle \tex_textstyle:D - \__kernel_primitive:NN \scriptstyle \tex_scriptstyle:D - \__kernel_primitive:NN \scriptscriptstyle \tex_scriptscriptstyle:D - \__kernel_primitive:NN \nonscript \tex_nonscript:D - \__kernel_primitive:NN \eqno \tex_eqno:D - \__kernel_primitive:NN \leqno \tex_leqno:D - \__kernel_primitive:NN \abovedisplayshortskip \tex_abovedisplayshortskip:D - \__kernel_primitive:NN \abovedisplayskip \tex_abovedisplayskip:D - \__kernel_primitive:NN \belowdisplayshortskip \tex_belowdisplayshortskip:D - \__kernel_primitive:NN \belowdisplayskip \tex_belowdisplayskip:D - \__kernel_primitive:NN \displaywidowpenalty \tex_displaywidowpenalty:D - \__kernel_primitive:NN \displayindent \tex_displayindent:D - \__kernel_primitive:NN \displaywidth \tex_displaywidth:D - \__kernel_primitive:NN \everydisplay \tex_everydisplay:D - \__kernel_primitive:NN \predisplaysize \tex_predisplaysize:D - \__kernel_primitive:NN \predisplaypenalty \tex_predisplaypenalty:D - \__kernel_primitive:NN \postdisplaypenalty \tex_postdisplaypenalty:D - \__kernel_primitive:NN \mathbin \tex_mathbin:D - \__kernel_primitive:NN \mathclose \tex_mathclose:D - \__kernel_primitive:NN \mathinner \tex_mathinner:D - \__kernel_primitive:NN \mathop \tex_mathop:D - \__kernel_primitive:NN \displaylimits \tex_displaylimits:D - \__kernel_primitive:NN \limits \tex_limits:D - \__kernel_primitive:NN \nolimits \tex_nolimits:D - \__kernel_primitive:NN \mathopen \tex_mathopen:D - \__kernel_primitive:NN \mathord \tex_mathord:D - \__kernel_primitive:NN \mathpunct \tex_mathpunct:D - \__kernel_primitive:NN \mathrel \tex_mathrel:D - \__kernel_primitive:NN \overline \tex_overline:D - \__kernel_primitive:NN \underline \tex_underline:D - \__kernel_primitive:NN \left \tex_left:D - \__kernel_primitive:NN \right \tex_right:D - \__kernel_primitive:NN \binoppenalty \tex_binoppenalty:D - \__kernel_primitive:NN \relpenalty \tex_relpenalty:D - \__kernel_primitive:NN \delimitershortfall \tex_delimitershortfall:D - \__kernel_primitive:NN \delimiterfactor \tex_delimiterfactor:D - \__kernel_primitive:NN \nulldelimiterspace \tex_nulldelimiterspace:D - \__kernel_primitive:NN \everymath \tex_everymath:D - \__kernel_primitive:NN \mathsurround \tex_mathsurround:D - \__kernel_primitive:NN \medmuskip \tex_medmuskip:D - \__kernel_primitive:NN \thinmuskip \tex_thinmuskip:D - \__kernel_primitive:NN \thickmuskip \tex_thickmuskip:D - \__kernel_primitive:NN \scriptspace \tex_scriptspace:D - \__kernel_primitive:NN \noboundary \tex_noboundary:D - \__kernel_primitive:NN \accent \tex_accent:D - \__kernel_primitive:NN \char \tex_char:D - \__kernel_primitive:NN \discretionary \tex_discretionary:D - \__kernel_primitive:NN \hfil \tex_hfil:D - \__kernel_primitive:NN \hfilneg \tex_hfilneg:D - \__kernel_primitive:NN \hfill \tex_hfill:D - \__kernel_primitive:NN \hskip \tex_hskip:D - \__kernel_primitive:NN \hss \tex_hss:D - \__kernel_primitive:NN \vfil \tex_vfil:D - \__kernel_primitive:NN \vfilneg \tex_vfilneg:D - \__kernel_primitive:NN \vfill \tex_vfill:D - \__kernel_primitive:NN \vskip \tex_vskip:D - \__kernel_primitive:NN \vss \tex_vss:D - \__kernel_primitive:NN \unskip \tex_unskip:D - \__kernel_primitive:NN \kern \tex_kern:D - \__kernel_primitive:NN \unkern \tex_unkern:D - \__kernel_primitive:NN \hrule \tex_hrule:D - \__kernel_primitive:NN \vrule \tex_vrule:D - \__kernel_primitive:NN \leaders \tex_leaders:D - \__kernel_primitive:NN \cleaders \tex_cleaders:D - \__kernel_primitive:NN \xleaders \tex_xleaders:D - \__kernel_primitive:NN \lastkern \tex_lastkern:D - \__kernel_primitive:NN \lastskip \tex_lastskip:D - \__kernel_primitive:NN \indent \tex_indent:D - \__kernel_primitive:NN \par \tex_par:D - \__kernel_primitive:NN \noindent \tex_noindent:D - \__kernel_primitive:NN \vadjust \tex_vadjust:D - \__kernel_primitive:NN \baselineskip \tex_baselineskip:D - \__kernel_primitive:NN \lineskip \tex_lineskip:D - \__kernel_primitive:NN \lineskiplimit \tex_lineskiplimit:D - \__kernel_primitive:NN \clubpenalty \tex_clubpenalty:D - \__kernel_primitive:NN \widowpenalty \tex_widowpenalty:D - \__kernel_primitive:NN \exhyphenpenalty \tex_exhyphenpenalty:D - \__kernel_primitive:NN \hyphenpenalty \tex_hyphenpenalty:D - \__kernel_primitive:NN \linepenalty \tex_linepenalty:D - \__kernel_primitive:NN \doublehyphendemerits \tex_doublehyphendemerits:D - \__kernel_primitive:NN \finalhyphendemerits \tex_finalhyphendemerits:D - \__kernel_primitive:NN \adjdemerits \tex_adjdemerits:D - \__kernel_primitive:NN \hangafter \tex_hangafter:D - \__kernel_primitive:NN \hangindent \tex_hangindent:D - \__kernel_primitive:NN \parshape \tex_parshape:D - \__kernel_primitive:NN \hsize \tex_hsize:D - \__kernel_primitive:NN \lefthyphenmin \tex_lefthyphenmin:D - \__kernel_primitive:NN \righthyphenmin \tex_righthyphenmin:D - \__kernel_primitive:NN \leftskip \tex_leftskip:D - \__kernel_primitive:NN \rightskip \tex_rightskip:D - \__kernel_primitive:NN \looseness \tex_looseness:D - \__kernel_primitive:NN \parskip \tex_parskip:D - \__kernel_primitive:NN \parindent \tex_parindent:D - \__kernel_primitive:NN \uchyph \tex_uchyph:D - \__kernel_primitive:NN \emergencystretch \tex_emergencystretch:D - \__kernel_primitive:NN \pretolerance \tex_pretolerance:D - \__kernel_primitive:NN \tolerance \tex_tolerance:D - \__kernel_primitive:NN \spaceskip \tex_spaceskip:D - \__kernel_primitive:NN \xspaceskip \tex_xspaceskip:D - \__kernel_primitive:NN \parfillskip \tex_parfillskip:D - \__kernel_primitive:NN \everypar \tex_everypar:D - \__kernel_primitive:NN \prevgraf \tex_prevgraf:D - \__kernel_primitive:NN \spacefactor \tex_spacefactor:D - \__kernel_primitive:NN \shipout \tex_shipout:D - \__kernel_primitive:NN \vsize \tex_vsize:D - \__kernel_primitive:NN \interlinepenalty \tex_interlinepenalty:D - \__kernel_primitive:NN \brokenpenalty \tex_brokenpenalty:D - \__kernel_primitive:NN \topskip \tex_topskip:D - \__kernel_primitive:NN \maxdeadcycles \tex_maxdeadcycles:D - \__kernel_primitive:NN \maxdepth \tex_maxdepth:D - \__kernel_primitive:NN \output \tex_output:D - \__kernel_primitive:NN \deadcycles \tex_deadcycles:D - \__kernel_primitive:NN \pagedepth \tex_pagedepth:D - \__kernel_primitive:NN \pagestretch \tex_pagestretch:D - \__kernel_primitive:NN \pagefilstretch \tex_pagefilstretch:D - \__kernel_primitive:NN \pagefillstretch \tex_pagefillstretch:D - \__kernel_primitive:NN \pagefilllstretch \tex_pagefilllstretch:D - \__kernel_primitive:NN \pageshrink \tex_pageshrink:D - \__kernel_primitive:NN \pagegoal \tex_pagegoal:D - \__kernel_primitive:NN \pagetotal \tex_pagetotal:D - \__kernel_primitive:NN \outputpenalty \tex_outputpenalty:D - \__kernel_primitive:NN \hoffset \tex_hoffset:D - \__kernel_primitive:NN \voffset \tex_voffset:D - \__kernel_primitive:NN \insert \tex_insert:D - \__kernel_primitive:NN \holdinginserts \tex_holdinginserts:D - \__kernel_primitive:NN \floatingpenalty \tex_floatingpenalty:D - \__kernel_primitive:NN \insertpenalties \tex_insertpenalties:D - \__kernel_primitive:NN \lower \tex_lower:D - \__kernel_primitive:NN \moveleft \tex_moveleft:D - \__kernel_primitive:NN \moveright \tex_moveright:D - \__kernel_primitive:NN \raise \tex_raise:D - \__kernel_primitive:NN \copy \tex_copy:D - \__kernel_primitive:NN \lastbox \tex_lastbox:D - \__kernel_primitive:NN \vsplit \tex_vsplit:D - \__kernel_primitive:NN \unhbox \tex_unhbox:D - \__kernel_primitive:NN \unhcopy \tex_unhcopy:D - \__kernel_primitive:NN \unvbox \tex_unvbox:D - \__kernel_primitive:NN \unvcopy \tex_unvcopy:D - \__kernel_primitive:NN \setbox \tex_setbox:D - \__kernel_primitive:NN \hbox \tex_hbox:D - \__kernel_primitive:NN \vbox \tex_vbox:D - \__kernel_primitive:NN \vtop \tex_vtop:D - \__kernel_primitive:NN \prevdepth \tex_prevdepth:D - \__kernel_primitive:NN \badness \tex_badness:D - \__kernel_primitive:NN \hbadness \tex_hbadness:D - \__kernel_primitive:NN \vbadness \tex_vbadness:D - \__kernel_primitive:NN \hfuzz \tex_hfuzz:D - \__kernel_primitive:NN \vfuzz \tex_vfuzz:D - \__kernel_primitive:NN \overfullrule \tex_overfullrule:D - \__kernel_primitive:NN \boxmaxdepth \tex_boxmaxdepth:D - \__kernel_primitive:NN \splitmaxdepth \tex_splitmaxdepth:D - \__kernel_primitive:NN \splittopskip \tex_splittopskip:D - \__kernel_primitive:NN \everyhbox \tex_everyhbox:D - \__kernel_primitive:NN \everyvbox \tex_everyvbox:D - \__kernel_primitive:NN \nullfont \tex_nullfont:D - \__kernel_primitive:NN \textfont \tex_textfont:D - \__kernel_primitive:NN \scriptfont \tex_scriptfont:D - \__kernel_primitive:NN \scriptscriptfont \tex_scriptscriptfont:D - \__kernel_primitive:NN \fontdimen \tex_fontdimen:D - \__kernel_primitive:NN \hyphenchar \tex_hyphenchar:D - \__kernel_primitive:NN \skewchar \tex_skewchar:D - \__kernel_primitive:NN \defaulthyphenchar \tex_defaulthyphenchar:D - \__kernel_primitive:NN \defaultskewchar \tex_defaultskewchar:D - \__kernel_primitive:NN \number \tex_number:D - \__kernel_primitive:NN \romannumeral \tex_romannumeral:D - \__kernel_primitive:NN \string \tex_string:D - \__kernel_primitive:NN \lowercase \tex_lowercase:D - \__kernel_primitive:NN \uppercase \tex_uppercase:D - \__kernel_primitive:NN \meaning \tex_meaning:D - \__kernel_primitive:NN \penalty \tex_penalty:D - \__kernel_primitive:NN \unpenalty \tex_unpenalty:D - \__kernel_primitive:NN \lastpenalty \tex_lastpenalty:D - \__kernel_primitive:NN \special \tex_special:D - \__kernel_primitive:NN \dump \tex_dump:D - \__kernel_primitive:NN \patterns \tex_patterns:D - \__kernel_primitive:NN \hyphenation \tex_hyphenation:D - \__kernel_primitive:NN \time \tex_time:D - \__kernel_primitive:NN \day \tex_day:D - \__kernel_primitive:NN \month \tex_month:D - \__kernel_primitive:NN \year \tex_year:D - \__kernel_primitive:NN \jobname \tex_jobname:D - \__kernel_primitive:NN \everyjob \tex_everyjob:D - \__kernel_primitive:NN \count \tex_count:D - \__kernel_primitive:NN \dimen \tex_dimen:D - \__kernel_primitive:NN \skip \tex_skip:D - \__kernel_primitive:NN \toks \tex_toks:D - \__kernel_primitive:NN \muskip \tex_muskip:D - \__kernel_primitive:NN \box \tex_box:D - \__kernel_primitive:NN \wd \tex_wd:D - \__kernel_primitive:NN \ht \tex_ht:D - \__kernel_primitive:NN \dp \tex_dp:D - \__kernel_primitive:NN \catcode \tex_catcode:D - \__kernel_primitive:NN \delcode \tex_delcode:D - \__kernel_primitive:NN \sfcode \tex_sfcode:D - \__kernel_primitive:NN \lccode \tex_lccode:D - \__kernel_primitive:NN \uccode \tex_uccode:D - \__kernel_primitive:NN \mathcode \tex_mathcode:D - \__kernel_primitive:NN \ifdefined \etex_ifdefined:D - \__kernel_primitive:NN \ifcsname \etex_ifcsname:D - \__kernel_primitive:NN \unless \etex_unless:D - \__kernel_primitive:NN \eTeXversion \etex_eTeXversion:D - \__kernel_primitive:NN \eTeXrevision \etex_eTeXrevision:D - \__kernel_primitive:NN \marks \etex_marks:D - \__kernel_primitive:NN \topmarks \etex_topmarks:D - \__kernel_primitive:NN \firstmarks \etex_firstmarks:D - \__kernel_primitive:NN \botmarks \etex_botmarks:D - \__kernel_primitive:NN \splitfirstmarks \etex_splitfirstmarks:D - \__kernel_primitive:NN \splitbotmarks \etex_splitbotmarks:D - \__kernel_primitive:NN \unexpanded \etex_unexpanded:D - \__kernel_primitive:NN \detokenize \etex_detokenize:D - \__kernel_primitive:NN \scantokens \etex_scantokens:D - \__kernel_primitive:NN \showtokens \etex_showtokens:D - \__kernel_primitive:NN \readline \etex_readline:D - \__kernel_primitive:NN \tracingassigns \etex_tracingassigns:D - \__kernel_primitive:NN \tracingscantokens \etex_tracingscantokens:D - \__kernel_primitive:NN \tracingnesting \etex_tracingnesting:D - \__kernel_primitive:NN \tracingifs \etex_tracingifs:D - \__kernel_primitive:NN \currentiflevel \etex_currentiflevel:D - \__kernel_primitive:NN \currentifbranch \etex_currentifbranch:D - \__kernel_primitive:NN \currentiftype \etex_currentiftype:D - \__kernel_primitive:NN \tracinggroups \etex_tracinggroups:D - \__kernel_primitive:NN \currentgrouplevel \etex_currentgrouplevel:D - \__kernel_primitive:NN \currentgrouptype \etex_currentgrouptype:D - \__kernel_primitive:NN \showgroups \etex_showgroups:D - \__kernel_primitive:NN \showifs \etex_showifs:D - \__kernel_primitive:NN \interactionmode \etex_interactionmode:D - \__kernel_primitive:NN \lastnodetype \etex_lastnodetype:D - \__kernel_primitive:NN \iffontchar \etex_iffontchar:D - \__kernel_primitive:NN \fontcharht \etex_fontcharht:D - \__kernel_primitive:NN \fontchardp \etex_fontchardp:D - \__kernel_primitive:NN \fontcharwd \etex_fontcharwd:D - \__kernel_primitive:NN \fontcharic \etex_fontcharic:D - \__kernel_primitive:NN \parshapeindent \etex_parshapeindent:D - \__kernel_primitive:NN \parshapelength \etex_parshapelength:D - \__kernel_primitive:NN \parshapedimen \etex_parshapedimen:D - \__kernel_primitive:NN \numexpr \etex_numexpr:D - \__kernel_primitive:NN \dimexpr \etex_dimexpr:D - \__kernel_primitive:NN \glueexpr \etex_glueexpr:D - \__kernel_primitive:NN \muexpr \etex_muexpr:D - \__kernel_primitive:NN \gluestretch \etex_gluestretch:D - \__kernel_primitive:NN \glueshrink \etex_glueshrink:D - \__kernel_primitive:NN \gluestretchorder \etex_gluestretchorder:D - \__kernel_primitive:NN \glueshrinkorder \etex_glueshrinkorder:D - \__kernel_primitive:NN \gluetomu \etex_gluetomu:D - \__kernel_primitive:NN \mutoglue \etex_mutoglue:D - \__kernel_primitive:NN \lastlinefit \etex_lastlinefit:D - \__kernel_primitive:NN \interlinepenalties \etex_interlinepenalties:D - \__kernel_primitive:NN \clubpenalties \etex_clubpenalties:D - \__kernel_primitive:NN \widowpenalties \etex_widowpenalties:D - \__kernel_primitive:NN \displaywidowpenalties \etex_displaywidowpenalties:D - \__kernel_primitive:NN \middle \etex_middle:D - \__kernel_primitive:NN \savinghyphcodes \etex_savinghyphcodes:D - \__kernel_primitive:NN \savingvdiscards \etex_savingvdiscards:D - \__kernel_primitive:NN \pagediscards \etex_pagediscards:D - \__kernel_primitive:NN \splitdiscards \etex_splitdiscards:D - \__kernel_primitive:NN \TeXXeTstate \etex_TeXXeTstate:D - \__kernel_primitive:NN \beginL \etex_beginL:D - \__kernel_primitive:NN \endL \etex_endL:D - \__kernel_primitive:NN \beginR \etex_beginR:D - \__kernel_primitive:NN \endR \etex_endR:D - \__kernel_primitive:NN \predisplaydirection \etex_predisplaydirection:D - \__kernel_primitive:NN \everyeof \etex_everyeof:D - \__kernel_primitive:NN \protected \etex_protected:D - \__kernel_primitive:NN \pdfcreationdate \pdftex_pdfcreationdate:D - \__kernel_primitive:NN \pdfcolorstack \pdftex_pdfcolorstack:D - \__kernel_primitive:NN \pdfcompresslevel \pdftex_pdfcompresslevel:D - \__kernel_primitive:NN \pdfdecimaldigits \pdftex_pdfdecimaldigits:D - \__kernel_primitive:NN \pdfhorigin \pdftex_pdfhorigin:D - \__kernel_primitive:NN \pdfinfo \pdftex_pdfinfo:D - \__kernel_primitive:NN \pdflastxform \pdftex_pdflastxform:D - \__kernel_primitive:NN \pdfliteral \pdftex_pdfliteral:D - \__kernel_primitive:NN \pdfminorversion \pdftex_pdfminorversion:D - \__kernel_primitive:NN \pdfobjcompresslevel \pdftex_pdfobjcompresslevel:D - \__kernel_primitive:NN \pdfoutput \pdftex_pdfoutput:D - \__kernel_primitive:NN \pdfrefxform \pdftex_pdfrefxform:D - \__kernel_primitive:NN \pdfrestore \pdftex_pdfrestore:D - \__kernel_primitive:NN \pdfsave \pdftex_pdfsave:D - \__kernel_primitive:NN \pdfsetmatrix \pdftex_pdfsetmatrix:D - \__kernel_primitive:NN \pdfpkresolution \pdftex_pdfpkresolution:D - \__kernel_primitive:NN \pdftexrevision \pdftex_pdftextrevision:D - \__kernel_primitive:NN \pdfvorigin \pdftex_pdfvorigin:D - \__kernel_primitive:NN \pdfxform \pdftex_pdfxform:D - \__kernel_primitive:NN \pdfstrcmp \pdftex_strcmp:D - \__kernel_primitive:NN \XeTeXversion \xetex_XeTeXversion:D - \__kernel_primitive:NN \catcodetable \luatex_catcodetable:D - \__kernel_primitive:NN \directlua \luatex_directlua:D - \__kernel_primitive:NN \expanded \luatex_expanded:D - \__kernel_primitive:NN \initcatcodetable \luatex_initcatcodetable:D - \__kernel_primitive:NN \latelua \luatex_latelua:D - \__kernel_primitive:NN \luaescapestring \luatex_luaescapestring:D - \__kernel_primitive:NN \luatexversion \luatex_luatexversion:D - \__kernel_primitive:NN \savecatcodetable \luatex_savecatcodetable:D - \__kernel_primitive:NN \Uchar \luatex_Uchar:D - \__kernel_primitive:NN \bodydir \luatex_bodydir:D - \__kernel_primitive:NN \mathdir \luatex_mathdir:D - \__kernel_primitive:NN \pagedir \luatex_pagedir:D - \__kernel_primitive:NN \pardir \luatex_pardir:D - \__kernel_primitive:NN \textdir \luatex_textdir:D + \__kernel_primitive:NN \ \tex_space:D + \__kernel_primitive:NN \/ \tex_italiccorrection:D + \__kernel_primitive:NN \- \tex_hyphen:D + \__kernel_primitive:NN \above \tex_above:D + \__kernel_primitive:NN \abovedisplayshortskip \tex_abovedisplayshortskip:D + \__kernel_primitive:NN \abovedisplayskip \tex_abovedisplayskip:D + \__kernel_primitive:NN \abovewithdelims \tex_abovewithdelims:D + \__kernel_primitive:NN \accent \tex_accent:D + \__kernel_primitive:NN \adjdemerits \tex_adjdemerits:D + \__kernel_primitive:NN \advance \tex_advance:D + \__kernel_primitive:NN \afterassignment \tex_afterassignment:D + \__kernel_primitive:NN \aftergroup \tex_aftergroup:D + \__kernel_primitive:NN \atop \tex_atop:D + \__kernel_primitive:NN \atopwithdelims \tex_atopwithdelims:D + \__kernel_primitive:NN \badness \tex_badness:D + \__kernel_primitive:NN \baselineskip \tex_baselineskip:D + \__kernel_primitive:NN \batchmode \tex_batchmode:D + \__kernel_primitive:NN \begingroup \tex_begingroup:D + \__kernel_primitive:NN \belowdisplayshortskip \tex_belowdisplayshortskip:D + \__kernel_primitive:NN \belowdisplayskip \tex_belowdisplayskip:D + \__kernel_primitive:NN \binoppenalty \tex_binoppenalty:D + \__kernel_primitive:NN \botmark \tex_botmark:D + \__kernel_primitive:NN \box \tex_box:D + \__kernel_primitive:NN \boxmaxdepth \tex_boxmaxdepth:D + \__kernel_primitive:NN \brokenpenalty \tex_brokenpenalty:D + \__kernel_primitive:NN \catcode \tex_catcode:D + \__kernel_primitive:NN \char \tex_char:D + \__kernel_primitive:NN \chardef \tex_chardef:D + \__kernel_primitive:NN \cleaders \tex_cleaders:D + \__kernel_primitive:NN \closein \tex_closein:D + \__kernel_primitive:NN \closeout \tex_closeout:D + \__kernel_primitive:NN \clubpenalty \tex_clubpenalty:D + \__kernel_primitive:NN \copy \tex_copy:D + \__kernel_primitive:NN \count \tex_count:D + \__kernel_primitive:NN \countdef \tex_countdef:D + \__kernel_primitive:NN \cr \tex_cr:D + \__kernel_primitive:NN \crcr \tex_crcr:D + \__kernel_primitive:NN \csname \tex_csname:D + \__kernel_primitive:NN \day \tex_day:D + \__kernel_primitive:NN \deadcycles \tex_deadcycles:D + \__kernel_primitive:NN \def \tex_def:D + \__kernel_primitive:NN \defaulthyphenchar \tex_defaulthyphenchar:D + \__kernel_primitive:NN \defaultskewchar \tex_defaultskewchar:D + \__kernel_primitive:NN \delcode \tex_delcode:D + \__kernel_primitive:NN \delimiter \tex_delimiter:D + \__kernel_primitive:NN \delimiterfactor \tex_delimiterfactor:D + \__kernel_primitive:NN \delimitershortfall \tex_delimitershortfall:D + \__kernel_primitive:NN \dimen \tex_dimen:D + \__kernel_primitive:NN \dimendef \tex_dimendef:D + \__kernel_primitive:NN \discretionary \tex_discretionary:D + \__kernel_primitive:NN \displayindent \tex_displayindent:D + \__kernel_primitive:NN \displaylimits \tex_displaylimits:D + \__kernel_primitive:NN \displaystyle \tex_displaystyle:D + \__kernel_primitive:NN \displaywidowpenalty \tex_displaywidowpenalty:D + \__kernel_primitive:NN \displaywidth \tex_displaywidth:D + \__kernel_primitive:NN \divide \tex_divide:D + \__kernel_primitive:NN \doublehyphendemerits \tex_doublehyphendemerits:D + \__kernel_primitive:NN \dp \tex_dp:D + \__kernel_primitive:NN \dump \tex_dump:D + \__kernel_primitive:NN \edef \tex_edef:D + \__kernel_primitive:NN \else \tex_else:D + \__kernel_primitive:NN \emergencystretch \tex_emergencystretch:D + \__kernel_primitive:NN \end \tex_end:D + \__kernel_primitive:NN \endcsname \tex_endcsname:D + \__kernel_primitive:NN \endgroup \tex_endgroup:D + \__kernel_primitive:NN \endinput \tex_endinput:D + \__kernel_primitive:NN \endlinechar \tex_endlinechar:D + \__kernel_primitive:NN \eqno \tex_eqno:D + \__kernel_primitive:NN \errhelp \tex_errhelp:D + \__kernel_primitive:NN \errmessage \tex_errmessage:D + \__kernel_primitive:NN \errorcontextlines \tex_errorcontextlines:D + \__kernel_primitive:NN \errorstopmode \tex_errorstopmode:D + \__kernel_primitive:NN \escapechar \tex_escapechar:D + \__kernel_primitive:NN \everycr \tex_everycr:D + \__kernel_primitive:NN \everydisplay \tex_everydisplay:D + \__kernel_primitive:NN \everyhbox \tex_everyhbox:D + \__kernel_primitive:NN \everyjob \tex_everyjob:D + \__kernel_primitive:NN \everymath \tex_everymath:D + \__kernel_primitive:NN \everypar \tex_everypar:D + \__kernel_primitive:NN \everyvbox \tex_everyvbox:D + \__kernel_primitive:NN \exhyphenpenalty \tex_exhyphenpenalty:D + \__kernel_primitive:NN \expandafter \tex_expandafter:D + \__kernel_primitive:NN \fam \tex_fam:D + \__kernel_primitive:NN \fi \tex_fi:D + \__kernel_primitive:NN \finalhyphendemerits \tex_finalhyphendemerits:D + \__kernel_primitive:NN \firstmark \tex_firstmark:D + \__kernel_primitive:NN \floatingpenalty \tex_floatingpenalty:D + \__kernel_primitive:NN \font \tex_font:D + \__kernel_primitive:NN \fontdimen \tex_fontdimen:D + \__kernel_primitive:NN \fontname \tex_fontname:D + \__kernel_primitive:NN \futurelet \tex_futurelet:D + \__kernel_primitive:NN \gdef \tex_gdef:D + \__kernel_primitive:NN \global \tex_global:D + \__kernel_primitive:NN \globaldefs \tex_globaldefs:D + \__kernel_primitive:NN \halign \tex_halign:D + \__kernel_primitive:NN \hangafter \tex_hangafter:D + \__kernel_primitive:NN \hangindent \tex_hangindent:D + \__kernel_primitive:NN \hbadness \tex_hbadness:D + \__kernel_primitive:NN \hbox \tex_hbox:D + \__kernel_primitive:NN \hfil \tex_hfil:D + \__kernel_primitive:NN \hfill \tex_hfill:D + \__kernel_primitive:NN \hfilneg \tex_hfilneg:D + \__kernel_primitive:NN \hfuzz \tex_hfuzz:D + \__kernel_primitive:NN \hoffset \tex_hoffset:D + \__kernel_primitive:NN \holdinginserts \tex_holdinginserts:D + \__kernel_primitive:NN \hrule \tex_hrule:D + \__kernel_primitive:NN \hsize \tex_hsize:D + \__kernel_primitive:NN \hskip \tex_hskip:D + \__kernel_primitive:NN \hss \tex_hss:D + \__kernel_primitive:NN \ht \tex_ht:D + \__kernel_primitive:NN \hyphenation \tex_hyphenation:D + \__kernel_primitive:NN \hyphenchar \tex_hyphenchar:D + \__kernel_primitive:NN \hyphenpenalty \tex_hyphenpenalty:D + \__kernel_primitive:NN \if \tex_if:D + \__kernel_primitive:NN \ifcase \tex_ifcase:D + \__kernel_primitive:NN \ifcat \tex_ifcat:D + \__kernel_primitive:NN \ifdim \tex_ifdim:D + \__kernel_primitive:NN \ifeof \tex_ifeof:D + \__kernel_primitive:NN \iffalse \tex_iffalse:D + \__kernel_primitive:NN \ifhbox \tex_ifhbox:D + \__kernel_primitive:NN \ifhmode \tex_ifhmode:D + \__kernel_primitive:NN \ifinner \tex_ifinner:D + \__kernel_primitive:NN \ifmmode \tex_ifmmode:D + \__kernel_primitive:NN \ifnum \tex_ifnum:D + \__kernel_primitive:NN \ifodd \tex_ifodd:D + \__kernel_primitive:NN \iftrue \tex_iftrue:D + \__kernel_primitive:NN \ifvbox \tex_ifvbox:D + \__kernel_primitive:NN \ifvmode \tex_ifvmode:D + \__kernel_primitive:NN \ifvoid \tex_ifvoid:D + \__kernel_primitive:NN \ifx \tex_ifx:D + \__kernel_primitive:NN \ignorespaces \tex_ignorespaces:D + \__kernel_primitive:NN \immediate \tex_immediate:D + \__kernel_primitive:NN \indent \tex_indent:D + \__kernel_primitive:NN \input \tex_input:D + \__kernel_primitive:NN \inputlineno \tex_inputlineno:D + \__kernel_primitive:NN \insert \tex_insert:D + \__kernel_primitive:NN \insertpenalties \tex_insertpenalties:D + \__kernel_primitive:NN \interlinepenalty \tex_interlinepenalty:D + \__kernel_primitive:NN \jobname \tex_jobname:D + \__kernel_primitive:NN \kern \tex_kern:D + \__kernel_primitive:NN \language \tex_language:D + \__kernel_primitive:NN \lastbox \tex_lastbox:D + \__kernel_primitive:NN \lastkern \tex_lastkern:D + \__kernel_primitive:NN \lastpenalty \tex_lastpenalty:D + \__kernel_primitive:NN \lastskip \tex_lastskip:D + \__kernel_primitive:NN \lccode \tex_lccode:D + \__kernel_primitive:NN \leaders \tex_leaders:D + \__kernel_primitive:NN \left \tex_left:D + \__kernel_primitive:NN \lefthyphenmin \tex_lefthyphenmin:D + \__kernel_primitive:NN \leftskip \tex_leftskip:D + \__kernel_primitive:NN \leqno \tex_leqno:D + \__kernel_primitive:NN \let \tex_let:D + \__kernel_primitive:NN \limits \tex_limits:D + \__kernel_primitive:NN \linepenalty \tex_linepenalty:D + \__kernel_primitive:NN \lineskip \tex_lineskip:D + \__kernel_primitive:NN \lineskiplimit \tex_lineskiplimit:D + \__kernel_primitive:NN \long \tex_long:D + \__kernel_primitive:NN \looseness \tex_looseness:D + \__kernel_primitive:NN \lower \tex_lower:D + \__kernel_primitive:NN \lowercase \tex_lowercase:D + \__kernel_primitive:NN \mag \tex_mag:D + \__kernel_primitive:NN \mark \tex_mark:D + \__kernel_primitive:NN \mathaccent \tex_mathaccent:D + \__kernel_primitive:NN \mathbin \tex_mathbin:D + \__kernel_primitive:NN \mathchar \tex_mathchar:D + \__kernel_primitive:NN \mathchardef \tex_mathchardef:D + \__kernel_primitive:NN \mathchoice \tex_mathchoice:D + \__kernel_primitive:NN \mathclose \tex_mathclose:D + \__kernel_primitive:NN \mathcode \tex_mathcode:D + \__kernel_primitive:NN \mathinner \tex_mathinner:D + \__kernel_primitive:NN \mathop \tex_mathop:D + \__kernel_primitive:NN \mathopen \tex_mathopen:D + \__kernel_primitive:NN \mathord \tex_mathord:D + \__kernel_primitive:NN \mathpunct \tex_mathpunct:D + \__kernel_primitive:NN \mathrel \tex_mathrel:D + \__kernel_primitive:NN \mathsurround \tex_mathsurround:D + \__kernel_primitive:NN \maxdeadcycles \tex_maxdeadcycles:D + \__kernel_primitive:NN \maxdepth \tex_maxdepth:D + \__kernel_primitive:NN \meaning \tex_meaning:D + \__kernel_primitive:NN \medmuskip \tex_medmuskip:D + \__kernel_primitive:NN \message \tex_message:D + \__kernel_primitive:NN \mkern \tex_mkern:D + \__kernel_primitive:NN \month \tex_month:D + \__kernel_primitive:NN \moveleft \tex_moveleft:D + \__kernel_primitive:NN \moveright \tex_moveright:D + \__kernel_primitive:NN \mskip \tex_mskip:D + \__kernel_primitive:NN \multiply \tex_multiply:D + \__kernel_primitive:NN \muskip \tex_muskip:D + \__kernel_primitive:NN \muskipdef \tex_muskipdef:D + \__kernel_primitive:NN \newlinechar \tex_newlinechar:D + \__kernel_primitive:NN \noalign \tex_noalign:D + \__kernel_primitive:NN \noboundary \tex_noboundary:D + \__kernel_primitive:NN \noexpand \tex_noexpand:D + \__kernel_primitive:NN \noindent \tex_noindent:D + \__kernel_primitive:NN \nolimits \tex_nolimits:D + \__kernel_primitive:NN \nonscript \tex_nonscript:D + \__kernel_primitive:NN \nonstopmode \tex_nonstopmode:D + \__kernel_primitive:NN \nulldelimiterspace \tex_nulldelimiterspace:D + \__kernel_primitive:NN \nullfont \tex_nullfont:D + \__kernel_primitive:NN \number \tex_number:D + \__kernel_primitive:NN \omit \tex_omit:D + \__kernel_primitive:NN \openin \tex_openin:D + \__kernel_primitive:NN \openout \tex_openout:D + \__kernel_primitive:NN \or \tex_or:D + \__kernel_primitive:NN \outer \tex_outer:D + \__kernel_primitive:NN \output \tex_output:D + \__kernel_primitive:NN \outputpenalty \tex_outputpenalty:D + \__kernel_primitive:NN \over \tex_over:D + \__kernel_primitive:NN \overfullrule \tex_overfullrule:D + \__kernel_primitive:NN \overline \tex_overline:D + \__kernel_primitive:NN \overwithdelims \tex_overwithdelims:D + \__kernel_primitive:NN \pagedepth \tex_pagedepth:D + \__kernel_primitive:NN \pagefilllstretch \tex_pagefilllstretch:D + \__kernel_primitive:NN \pagefillstretch \tex_pagefillstretch:D + \__kernel_primitive:NN \pagefilstretch \tex_pagefilstretch:D + \__kernel_primitive:NN \pagegoal \tex_pagegoal:D + \__kernel_primitive:NN \pageshrink \tex_pageshrink:D + \__kernel_primitive:NN \pagestretch \tex_pagestretch:D + \__kernel_primitive:NN \pagetotal \tex_pagetotal:D + \__kernel_primitive:NN \par \tex_par:D + \__kernel_primitive:NN \parfillskip \tex_parfillskip:D + \__kernel_primitive:NN \parindent \tex_parindent:D + \__kernel_primitive:NN \parshape \tex_parshape:D + \__kernel_primitive:NN \parskip \tex_parskip:D + \__kernel_primitive:NN \patterns \tex_patterns:D + \__kernel_primitive:NN \pausing \tex_pausing:D + \__kernel_primitive:NN \penalty \tex_penalty:D + \__kernel_primitive:NN \postdisplaypenalty \tex_postdisplaypenalty:D + \__kernel_primitive:NN \predisplaypenalty \tex_predisplaypenalty:D + \__kernel_primitive:NN \predisplaysize \tex_predisplaysize:D + \__kernel_primitive:NN \pretolerance \tex_pretolerance:D + \__kernel_primitive:NN \prevdepth \tex_prevdepth:D + \__kernel_primitive:NN \prevgraf \tex_prevgraf:D + \__kernel_primitive:NN \radical \tex_radical:D + \__kernel_primitive:NN \raise \tex_raise:D + \__kernel_primitive:NN \read \tex_read:D + \__kernel_primitive:NN \relax \tex_relax:D + \__kernel_primitive:NN \relpenalty \tex_relpenalty:D + \__kernel_primitive:NN \right \tex_right:D + \__kernel_primitive:NN \righthyphenmin \tex_righthyphenmin:D + \__kernel_primitive:NN \rightskip \tex_rightskip:D + \__kernel_primitive:NN \romannumeral \tex_romannumeral:D + \__kernel_primitive:NN \scriptfont \tex_scriptfont:D + \__kernel_primitive:NN \scriptscriptfont \tex_scriptscriptfont:D + \__kernel_primitive:NN \scriptscriptstyle \tex_scriptscriptstyle:D + \__kernel_primitive:NN \scriptspace \tex_scriptspace:D + \__kernel_primitive:NN \scriptstyle \tex_scriptstyle:D + \__kernel_primitive:NN \scrollmode \tex_scrollmode:D + \__kernel_primitive:NN \setbox \tex_setbox:D + \__kernel_primitive:NN \setlanguage \tex_setlanguage:D + \__kernel_primitive:NN \sfcode \tex_sfcode:D + \__kernel_primitive:NN \shipout \tex_shipout:D + \__kernel_primitive:NN \show \tex_show:D + \__kernel_primitive:NN \showbox \tex_showbox:D + \__kernel_primitive:NN \showboxbreadth \tex_showboxbreadth:D + \__kernel_primitive:NN \showboxdepth \tex_showboxdepth:D + \__kernel_primitive:NN \showlists \tex_showlists:D + \__kernel_primitive:NN \showthe \tex_showthe:D + \__kernel_primitive:NN \skewchar \tex_skewchar:D + \__kernel_primitive:NN \skip \tex_skip:D + \__kernel_primitive:NN \skipdef \tex_skipdef:D + \__kernel_primitive:NN \spacefactor \tex_spacefactor:D + \__kernel_primitive:NN \spaceskip \tex_spaceskip:D + \__kernel_primitive:NN \span \tex_span:D + \__kernel_primitive:NN \special \tex_special:D + \__kernel_primitive:NN \splitbotmark \tex_splitbotmark:D + \__kernel_primitive:NN \splitfirstmark \tex_splitfirstmark:D + \__kernel_primitive:NN \splitmaxdepth \tex_splitmaxdepth:D + \__kernel_primitive:NN \splittopskip \tex_splittopskip:D + \__kernel_primitive:NN \string \tex_string:D + \__kernel_primitive:NN \tabskip \tex_tabskip:D + \__kernel_primitive:NN \textfont \tex_textfont:D + \__kernel_primitive:NN \textstyle \tex_textstyle:D + \__kernel_primitive:NN \the \tex_the:D + \__kernel_primitive:NN \thickmuskip \tex_thickmuskip:D + \__kernel_primitive:NN \thinmuskip \tex_thinmuskip:D + \__kernel_primitive:NN \time \tex_time:D + \__kernel_primitive:NN \toks \tex_toks:D + \__kernel_primitive:NN \toksdef \tex_toksdef:D + \__kernel_primitive:NN \tolerance \tex_tolerance:D + \__kernel_primitive:NN \topmark \tex_topmark:D + \__kernel_primitive:NN \topskip \tex_topskip:D + \__kernel_primitive:NN \tracingcommands \tex_tracingcommands:D + \__kernel_primitive:NN \tracinglostchars \tex_tracinglostchars:D + \__kernel_primitive:NN \tracingmacros \tex_tracingmacros:D + \__kernel_primitive:NN \tracingonline \tex_tracingonline:D + \__kernel_primitive:NN \tracingoutput \tex_tracingoutput:D + \__kernel_primitive:NN \tracingpages \tex_tracingpages:D + \__kernel_primitive:NN \tracingparagraphs \tex_tracingparagraphs:D + \__kernel_primitive:NN \tracingrestores \tex_tracingrestores:D + \__kernel_primitive:NN \tracingstats \tex_tracingstats:D + \__kernel_primitive:NN \uccode \tex_uccode:D + \__kernel_primitive:NN \uchyph \tex_uchyph:D + \__kernel_primitive:NN \underline \tex_underline:D + \__kernel_primitive:NN \unhbox \tex_unhbox:D + \__kernel_primitive:NN \unhcopy \tex_unhcopy:D + \__kernel_primitive:NN \unkern \tex_unkern:D + \__kernel_primitive:NN \unpenalty \tex_unpenalty:D + \__kernel_primitive:NN \unskip \tex_unskip:D + \__kernel_primitive:NN \unvbox \tex_unvbox:D + \__kernel_primitive:NN \unvcopy \tex_unvcopy:D + \__kernel_primitive:NN \uppercase \tex_uppercase:D + \__kernel_primitive:NN \vadjust \tex_vadjust:D + \__kernel_primitive:NN \valign \tex_valign:D + \__kernel_primitive:NN \vbadness \tex_vbadness:D + \__kernel_primitive:NN \vbox \tex_vbox:D + \__kernel_primitive:NN \vcenter \tex_vcenter:D + \__kernel_primitive:NN \vfil \tex_vfil:D + \__kernel_primitive:NN \vfill \tex_vfill:D + \__kernel_primitive:NN \vfilneg \tex_vfilneg:D + \__kernel_primitive:NN \vfuzz \tex_vfuzz:D + \__kernel_primitive:NN \voffset \tex_voffset:D + \__kernel_primitive:NN \vrule \tex_vrule:D + \__kernel_primitive:NN \vsize \tex_vsize:D + \__kernel_primitive:NN \vskip \tex_vskip:D + \__kernel_primitive:NN \vsplit \tex_vsplit:D + \__kernel_primitive:NN \vss \tex_vss:D + \__kernel_primitive:NN \vtop \tex_vtop:D + \__kernel_primitive:NN \wd \tex_wd:D + \__kernel_primitive:NN \widowpenalty \tex_widowpenalty:D + \__kernel_primitive:NN \write \tex_write:D + \__kernel_primitive:NN \xdef \tex_xdef:D + \__kernel_primitive:NN \xleaders \tex_xleaders:D + \__kernel_primitive:NN \xspaceskip \tex_xspaceskip:D + \__kernel_primitive:NN \year \tex_year:D + \__kernel_primitive:NN \beginL \etex_beginL:D + \__kernel_primitive:NN \beginR \etex_beginR:D + \__kernel_primitive:NN \botmarks \etex_botmarks:D + \__kernel_primitive:NN \clubpenalties \etex_clubpenalties:D + \__kernel_primitive:NN \currentgrouplevel \etex_currentgrouplevel:D + \__kernel_primitive:NN \currentgrouptype \etex_currentgrouptype:D + \__kernel_primitive:NN \currentifbranch \etex_currentifbranch:D + \__kernel_primitive:NN \currentiflevel \etex_currentiflevel:D + \__kernel_primitive:NN \currentiftype \etex_currentiftype:D + \__kernel_primitive:NN \detokenize \etex_detokenize:D + \__kernel_primitive:NN \dimexpr \etex_dimexpr:D + \__kernel_primitive:NN \displaywidowpenalties \etex_displaywidowpenalties:D + \__kernel_primitive:NN \endL \etex_endL:D + \__kernel_primitive:NN \endR \etex_endR:D + \__kernel_primitive:NN \eTeXrevision \etex_eTeXrevision:D + \__kernel_primitive:NN \eTeXversion \etex_eTeXversion:D + \__kernel_primitive:NN \everyeof \etex_everyeof:D + \__kernel_primitive:NN \firstmarks \etex_firstmarks:D + \__kernel_primitive:NN \fontchardp \etex_fontchardp:D + \__kernel_primitive:NN \fontcharht \etex_fontcharht:D + \__kernel_primitive:NN \fontcharic \etex_fontcharic:D + \__kernel_primitive:NN \fontcharwd \etex_fontcharwd:D + \__kernel_primitive:NN \glueexpr \etex_glueexpr:D + \__kernel_primitive:NN \glueshrink \etex_glueshrink:D + \__kernel_primitive:NN \glueshrinkorder \etex_glueshrinkorder:D + \__kernel_primitive:NN \gluestretch \etex_gluestretch:D + \__kernel_primitive:NN \gluestretchorder \etex_gluestretchorder:D + \__kernel_primitive:NN \gluetomu \etex_gluetomu:D + \__kernel_primitive:NN \ifcsname \etex_ifcsname:D + \__kernel_primitive:NN \ifdefined \etex_ifdefined:D + \__kernel_primitive:NN \iffontchar \etex_iffontchar:D + \__kernel_primitive:NN \interactionmode \etex_interactionmode:D + \__kernel_primitive:NN \interlinepenalties \etex_interlinepenalties:D + \__kernel_primitive:NN \lastlinefit \etex_lastlinefit:D + \__kernel_primitive:NN \lastnodetype \etex_lastnodetype:D + \__kernel_primitive:NN \marks \etex_marks:D + \__kernel_primitive:NN \middle \etex_middle:D + \__kernel_primitive:NN \muexpr \etex_muexpr:D + \__kernel_primitive:NN \mutoglue \etex_mutoglue:D + \__kernel_primitive:NN \numexpr \etex_numexpr:D + \__kernel_primitive:NN \pagediscards \etex_pagediscards:D + \__kernel_primitive:NN \parshapedimen \etex_parshapedimen:D + \__kernel_primitive:NN \parshapeindent \etex_parshapeindent:D + \__kernel_primitive:NN \parshapelength \etex_parshapelength:D + \__kernel_primitive:NN \predisplaydirection \etex_predisplaydirection:D + \__kernel_primitive:NN \protected \etex_protected:D + \__kernel_primitive:NN \readline \etex_readline:D + \__kernel_primitive:NN \savinghyphcodes \etex_savinghyphcodes:D + \__kernel_primitive:NN \savingvdiscards \etex_savingvdiscards:D + \__kernel_primitive:NN \scantokens \etex_scantokens:D + \__kernel_primitive:NN \showgroups \etex_showgroups:D + \__kernel_primitive:NN \showifs \etex_showifs:D + \__kernel_primitive:NN \showtokens \etex_showtokens:D + \__kernel_primitive:NN \splitbotmarks \etex_splitbotmarks:D + \__kernel_primitive:NN \splitdiscards \etex_splitdiscards:D + \__kernel_primitive:NN \splitfirstmarks \etex_splitfirstmarks:D + \__kernel_primitive:NN \TeXXeTstate \etex_TeXXeTstate:D + \__kernel_primitive:NN \topmarks \etex_topmarks:D + \__kernel_primitive:NN \tracingassigns \etex_tracingassigns:D + \__kernel_primitive:NN \tracinggroups \etex_tracinggroups:D + \__kernel_primitive:NN \tracingifs \etex_tracingifs:D + \__kernel_primitive:NN \tracingnesting \etex_tracingnesting:D + \__kernel_primitive:NN \tracingscantokens \etex_tracingscantokens:D + \__kernel_primitive:NN \unexpanded \etex_unexpanded:D + \__kernel_primitive:NN \unless \etex_unless:D + \__kernel_primitive:NN \widowpenalties \etex_widowpenalties:D + \__kernel_primitive:NN \pdfcreationdate \pdftex_pdfcreationdate:D + \__kernel_primitive:NN \pdfcolorstack \pdftex_pdfcolorstack:D + \__kernel_primitive:NN \pdfcompresslevel \pdftex_pdfcompresslevel:D + \__kernel_primitive:NN \pdfdecimaldigits \pdftex_pdfdecimaldigits:D + \__kernel_primitive:NN \pdfhorigin \pdftex_pdfhorigin:D + \__kernel_primitive:NN \pdfinfo \pdftex_pdfinfo:D + \__kernel_primitive:NN \pdflastxform \pdftex_pdflastxform:D + \__kernel_primitive:NN \pdfliteral \pdftex_pdfliteral:D + \__kernel_primitive:NN \pdfminorversion \pdftex_pdfminorversion:D + \__kernel_primitive:NN \pdfobjcompresslevel \pdftex_pdfobjcompresslevel:D + \__kernel_primitive:NN \pdfoutput \pdftex_pdfoutput:D + \__kernel_primitive:NN \pdfrefxform \pdftex_pdfrefxform:D + \__kernel_primitive:NN \pdfrestore \pdftex_pdfrestore:D + \__kernel_primitive:NN \pdfsave \pdftex_pdfsave:D + \__kernel_primitive:NN \pdfsetmatrix \pdftex_pdfsetmatrix:D + \__kernel_primitive:NN \pdfpkresolution \pdftex_pdfpkresolution:D + \__kernel_primitive:NN \pdfvorigin \pdftex_pdfvorigin:D + \__kernel_primitive:NN \pdfxform \pdftex_pdfxform:D + \__kernel_primitive:NN \pdfstrcmp \pdftex_strcmp:D + \__kernel_primitive:NN \pdftexrevision \pdftex_pdftexrevision:D + \__kernel_primitive:NN \pdftexversion \pdftex_pdftexversion:D + \__kernel_primitive:NN \XeTeXcharclass \xetex_charclass:D + \__kernel_primitive:NN \XeTeXinterchartokenstate \xetex_interchartokenstate:D + \__kernel_primitive:NN \XeTeXinterchartoks \xetex_interchartoks:D + \__kernel_primitive:NN \XeTeXrevision \xetex_XeTeXrevision:D + \__kernel_primitive:NN \XeTeXversion \xetex_XeTeXversion:D + \__kernel_primitive:NN \catcodetable \luatex_catcodetable:D + \__kernel_primitive:NN \directlua \luatex_directlua:D + \__kernel_primitive:NN \expanded \luatex_expanded:D + \__kernel_primitive:NN \initcatcodetable \luatex_initcatcodetable:D + \__kernel_primitive:NN \latelua \luatex_latelua:D + \__kernel_primitive:NN \luaescapestring \luatex_luaescapestring:D + \__kernel_primitive:NN \luatexrevision \luatex_luatexrevision:D + \__kernel_primitive:NN \luatexversion \luatex_luatexversion:D + \__kernel_primitive:NN \savecatcodetable \luatex_savecatcodetable:D + \__kernel_primitive:NN \Uchar \luatex_Uchar:D + \__kernel_primitive:NN \bodydir \luatex_bodydir:D + \__kernel_primitive:NN \mathdir \luatex_mathdir:D + \__kernel_primitive:NN \pagedir \luatex_pagedir:D + \__kernel_primitive:NN \pardir \luatex_pardir:D + \__kernel_primitive:NN \textdir \luatex_textdir:D \tex_endgroup:D \etex_ifdefined:D \@@end - \tex_let:D \tex_end:D \@@end - \tex_let:D \tex_everydisplay:D \frozen@everydisplay - \tex_let:D \tex_everymath:D \frozen@everymath - \tex_let:D \tex_hyphen:D \@@hyph - \tex_let:D \tex_input:D \@@input - \tex_let:D \tex_italiccorrection:D \@@italiccorr - \tex_let:D \tex_underline:D \@@underline + \tex_let:D \tex_end:D \@@end + \tex_let:D \tex_everydisplay:D \frozen@everydisplay + \tex_let:D \tex_everymath:D \frozen@everymath + \tex_let:D \tex_hyphen:D \@@hyph + \tex_let:D \tex_input:D \@@input + \tex_let:D \tex_italiccorrection:D \@@italiccorr + \tex_let:D \tex_underline:D \@@underline \tex_let:D \luatex_catcodetable:D \luatexcatcodetable \tex_let:D \luatex_initcatcodetable:D \luatexinitcatcodetable \tex_let:D \luatex_latelua:D \luatexlatelua @@ -3067,7 +3075,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3str.dtx 5368 2014-08-24 22:32:57Z bruno $ +\GetIdInfo$Id: l3str.dtx 5545 2015-03-01 21:24:44Z joseph $ {L3 Strings} \cs_new:Npn \str_head:n #1 { @@ -3156,10 +3164,10 @@ } \cs_new:Npn \__str_case:nnTF #1#2#3#4 { \__str_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop } -\cs_generate_variant:Nn \str_case:nn { o } -\cs_generate_variant:Nn \str_case:nnT { o } -\cs_generate_variant:Nn \str_case:nnF { o } -\cs_generate_variant:Nn \str_case:nnTF { o } +\cs_generate_variant:Nn \str_case:nn { o , nV , nv } +\cs_generate_variant:Nn \str_case:nnT { o , nV , nv } +\cs_generate_variant:Nn \str_case:nnF { o , nV , nv } +\cs_generate_variant:Nn \str_case:nnTF { o , nV , nv } \cs_new:Npn \__str_case:nw #1#2#3 { \str_if_eq:nnTF {#1} {#2} @@ -3195,32 +3203,49 @@ { \__str_case_x:nw {#1} } } \cs_new_eq:NN \__str_case_end:nw \__prg_case_end:nw -\cs_new:Npn \str_fold_case:n #1 +\cs_new:Npn \str_fold_case:n #1 { \__str_change_case:nn {#1} { fold } } +\cs_new:Npn \str_lower_case:n #1 { \__str_change_case:nn {#1} { lower } } +\cs_new:Npn \str_upper_case:n #1 { \__str_change_case:nn {#1} { upper } } +\cs_generate_variant:Nn \str_lower_case:n { f } +\cs_generate_variant:Nn \str_upper_case:n { f } +\cs_new:Npn \__str_change_case:nn #1 { - \exp_after:wN \__str_fold_auxi:w \tl_to_str:n {#1} - { ~ \c_empty_tl } \__str_fold_end:w ? ~ + \exp_after:wN \__str_change_case_aux:nn \exp_after:wN + { \tl_to_str:n {#1} } } -\cs_new:Npn \__str_fold_auxi:w #1 ~ +\cs_new:Npn \__str_change_case_aux:nn #1#2 { - \__str_fold_auxii:N #1 { ~ \c_space_tl } - \__str_fold_auxi:w + \__str_change_case_loop:nw {#2} #1 \q_recursion_tail \q_recursion_stop } -\cs_new:Npn \__str_fold_auxii:N #1 +\cs_new:Npn \__str_change_case_loop:nw #1#2 \q_recursion_stop { - \exp_after:wN \__str_fold_auxiii:NNNNNNNN - \int_use:N \__int_eval:w 1000000 + `#1 \__int_eval_end: #1 + \tl_if_head_is_space:nTF {#2} + { \__str_change_case_space:n } + { \__str_change_case_char:nN } + {#1} #2 \q_recursion_stop } -\cs_new:Npn \__str_fold_auxiii:NNNNNNNN #1#2#3#4#5#6#7#8 +\use:x + { \cs_new:Npn \exp_not:N \__str_change_case_space:n ##1 \c_space_tl } { - \exp_args:NNv \str_case_x:nnF #8 - { c__str_fold_ #6 _X_ #7 _tl } + \c_space_tl + \__str_change_case_loop:nw {#1} + } +\cs_new:Npn \__str_change_case_char:nN #1#2 + { + \quark_if_recursion_tail_stop:N #2 + \exp_args:Nf \tl_to_str:n { - #8 - \exp_after:wN \use_none:n #8 + \exp_after:wN \__str_change_case_char:NNNNNNNNn + \int_use:N \__int_eval:w 1000000 + `#2 \__int_eval_end: #2 {#1} } - \__str_fold_auxii:N + \__str_change_case_loop:nw {#1} + } +\cs_new:Npn \__str_change_case_char:NNNNNNNNn #1#2#3#4#5#6#7#8#9 + { + \str_case:nvF #8 + { c__unicode_ #9 _ #6 _X_ #7 _tl } + { #8 } } -\cs_new:Npn \__str_fold_end:w ? #1 \__str_fold_auxi:w { } \cs_new_eq:NN \str_case:nnn \str_case:nnF \cs_new_eq:NN \str_case:onn \str_case:onF \cs_new_eq:NN \str_case_x:nnn \str_case_x:nnF @@ -3784,7 +3809,7 @@ \seq_new:N \l_tmpb_seq \seq_new:N \g_tmpa_seq \seq_new:N \g_tmpb_seq -%% File: l3int.dtx Copyright (C) 1990-2014 The LaTeX3 Project +%% File: l3int.dtx Copyright (C) 1990-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -3816,7 +3841,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3int.dtx 5421 2014-09-14 07:52:58Z joseph $ +\GetIdInfo$Id: l3int.dtx 5529 2015-02-21 16:17:50Z joseph $ {L3 Integers} \cs_new_eq:NN \__int_value:w \tex_number:D \cs_new_eq:NN \__int_eval:w \etex_numexpr:D @@ -6694,7 +6719,7 @@ \cs_generate_variant:Nn \prop_show:N { c } \cs_new_eq:NN \prop_get:Nn \prop_item:Nn \cs_new_eq:NN \prop_get:cn \prop_item:cn -%% File: l3msg.dtx Copyright (C) 2009-2014 The LaTeX3 Project +%% File: l3msg.dtx Copyright (C) 2009-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -6726,7 +6751,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3msg.dtx 5358 2014-08-24 09:19:52Z bruno $ +\GetIdInfo$Id: l3msg.dtx 5537 2015-02-26 21:25:23Z joseph $ {L3 Messages} \tl_new:N \l__msg_internal_tl \tl_const:Nn \c__msg_text_prefix_tl { msg~text~>~ } @@ -7254,8 +7279,8 @@ { Control~sequence~#1~undefined. } { \c__msg_coding_error_text_tl - LaTeX~has~been~asked~to~use~a~command~#1,~but~this~has~not~ - been~defined~yet. + LaTeX~has~been~asked~to~use~a~control~sequence~'#1':\\ + this~has~not~been~defined~yet. } \__msg_kernel_new:nnnn { kernel } { empty-search-pattern } { Empty~search~pattern. } @@ -15974,7 +15999,7 @@ %% %% ----------------------------------------------------------------------- %% -\GetIdInfo$Id: l3candidates.dtx 5523 2015-02-12 22:10:34Z joseph $ +\GetIdInfo$Id: l3candidates.dtx 5544 2015-03-01 18:30:00Z joseph $ {L3 Experimental additions to l3kernel} \group_begin: \tex_lccode:D `? = `: \scan_stop: @@ -17018,9 +17043,6 @@ #1 #2 \l__tl_internal_a_tl } } -\cs_generate_variant:Nn \str_case:nnF { nV , nv } -\cs_generate_variant:Nn \str_case:nnTF { nv } -\cs_generate_variant:Nn \tl_if_blank:nTF { f } \cs_generate_variant:Nn \tl_if_head_eq_catcode:nNTF { o } \cs_new_nopar:Npn \tl_lower_case:n { \__tl_change_case:nnn { lower } { } } \cs_new_nopar:Npn \tl_upper_case:n { \__tl_change_case:nnn { upper } { } } @@ -17030,8 +17052,18 @@ \cs_new_nopar:Npn \tl_mixed_case:nn { \__tl_mixed_case:nn } \cs_new:Npn \__tl_change_case:nnn #1#2#3 { - \__tl_change_case_loop:wnn #3 - \q_recursion_tail \q_recursion_stop {#1} {#2} + \etex_unexpanded:D \exp_after:wN + { + \tex_romannumeral:D + \__tl_change_case_aux:nnn {#1} {#2} {#3} + } + } +\cs_new:Npn \__tl_change_case_aux:nnn #1#2#3 + { + \group_align_safe_begin: + \__tl_change_case_loop:wnn + #3 \q_recursion_tail \q_recursion_stop {#1} {#2} + \__tl_change_case_result:n { } } \cs_new:Npn \__tl_change_case_loop:wnn #1 \q_recursion_stop { @@ -17044,105 +17076,130 @@ } #1 \q_recursion_stop } +\cs_new:Npn \__tl_change_case_output:nwn #1#2 \__tl_change_case_result:n #3 + { #2 \__tl_change_case_result:n { #3 #1 } } +\cs_generate_variant:Nn \__tl_change_case_output:nwn { V , o , f } +\cs_new:Npn \__tl_change_case_end:wn #1 \__tl_change_case_result:n #2 + { + \group_align_safe_end: + \c_zero + #2 + } +\cs_new:Npn \__tl_change_case_group:nwnn #1#2 \q_recursion_stop #3#4 + { + \__tl_change_case_output:own + { + \exp_after:wN + { + \tex_romannumeral:D + \__tl_change_case_aux:nnn {#3} {#4} {#1} + } + } + \__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} + } +\exp_last_unbraced:NNo \cs_new:Npn \__tl_change_case_space:wnn \c_space_tl + { + \__tl_change_case_output:nwn { ~ } + \__tl_change_case_loop:wnn + } \cs_new:Npn \__tl_change_case_N_type:Nwnn #1#2 \q_recursion_stop { - \quark_if_recursion_tail_stop_do:Nn #1 { \use_none:nnn } - \exp_after:wN \__tl_change_case_N_type:NNN + \quark_if_recursion_tail_stop_do:Nn #1 + { \__tl_change_case_end:wn } + \exp_after:wN \__tl_change_case_N_type:NNNnnn \exp_after:wN #1 \l_tl_case_change_math_tl \q_recursion_tail ? \q_recursion_stop {#2} } -\cs_new:Npn \__tl_change_case_N_type:NNN #1#2#3 +\cs_new:Npn \__tl_change_case_N_type:NNNnnn #1#2#3 { \quark_if_recursion_tail_stop_do:Nn #2 - { \__tl_change_case_N_type:Nnnn #1 } + { \__tl_change_case_N_type:Nnnn #1 } \token_if_eq_meaning:NNTF #1 #2 { \use_i_delimit_by_q_recursion_stop:nw { - \__tl_change_case_math:NNNn #1 #3 - \__tl_change_case_loop:wnn + \__tl_change_case_math:NNNnnn + #1 #3 \__tl_change_case_loop:wnn } } - { \__tl_change_case_N_type:NNN #1 } + { \__tl_change_case_N_type:NNNnnn #1 } } -\cs_new:Npn \__tl_change_case_N_type:Nnnn #1#2#3#4 +\cs_new:Npn \__tl_change_case_math:NNNnnn #1#2#3#4 { - \token_if_cs:NTF #1 - { - \__tl_change_case_cs:Nnnn #1 {#3} - { } - { \__tl_change_case_cs:N #1 } - } - { - \cs_if_exist_use:cF { __tl_change_case_ #3 _ #4 :Nnn } - { \use_iii:nnn } - #1 {#2} - { - \use:c { __tl_change_case_ #3 _ sigma:Nnn } #1 {#2} - { - \exp_after:wN \__tl_change_case_char:NNNNNNNNn - \int_use:N \__int_eval:w 1000000 + `#1 \__int_eval_end: - #1 {#3} - } - } - } - \__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} + \__tl_change_case_output:nwn {#1} + \__tl_change_case_math_loop:wNNnn #4 \q_recursion_stop #2 #3 } -\cs_new:Npn \__tl_change_case_group:nwnn #1#2 \q_recursion_stop #3#4 - { - { - \__tl_change_case_loop:wnn #1 - \q_recursion_tail \q_recursion_stop {#3} {#4} - } - \__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} - } -\exp_last_unbraced:NNo \cs_new:Npn \__tl_change_case_space:wnn \c_space_tl - { - \c_space_tl - \__tl_change_case_loop:wnn - } -\cs_new:Npn \__tl_change_case_char:NNNNNNNNn #1#2#3#4#5#6#7#8#9 - { - \str_case:nvF #8 - { c__tl_ #9 _ #6 _X_ #7 _tl } - { \exp_not:n {#8} } - } -\cs_new:Npn \__tl_change_case_math:NNNn #1#2#3#4 - { - \exp_not:n {#1} - \__tl_change_case_math_loop:wNN #4 \q_recursion_stop #2 #3 - } -\cs_new:Npn \__tl_change_case_math_loop:wNN #1 \q_recursion_stop +\cs_new:Npn \__tl_change_case_math_loop:wNNnn #1 \q_recursion_stop { \tl_if_head_is_N_type:nTF {#1} - { \__tl_change_case_math:NwNN } + { \__tl_change_case_math:NwNNnn } { \tl_if_head_is_group:nTF {#1} - { \__tl_change_case_math_group:nwNN } - { \__tl_change_case_math_space:wNN } + { \__tl_change_case_math_group:nwNNnn } + { \__tl_change_case_math_space:wNNnn } } #1 \q_recursion_stop } -\cs_new:Npn \__tl_change_case_math:NwNN #1#2 \q_recursion_stop #3#4 +\cs_new:Npn \__tl_change_case_math:NwNNnn #1#2 \q_recursion_stop #3#4 { \token_if_eq_meaning:NNTF \q_recursion_tail #1 - { #4 \q_recursion_tail \q_recursion_stop } + { \__tl_change_case_end:wn } { - \exp_not:n {#1} + \__tl_change_case_output:nwn {#1} \token_if_eq_meaning:NNTF #1 #3 { #4 #2 \q_recursion_stop } - { \__tl_change_case_math_loop:wNN #2 \q_recursion_stop #3#4 } + { \__tl_change_case_math_loop:wNNnn #2 \q_recursion_stop #3#4 } } } -\cs_new:Npn \__tl_change_case_math_group:nwNN #1#2 \q_recursion_stop +\cs_new:Npn \__tl_change_case_math_group:nwNNnn #1#2 \q_recursion_stop { - { \exp_not:n {#1} } - \__tl_change_case_math_loop:wNN #2 \q_recursion_stop + \__tl_change_case_output:nwn { {#1} } + \__tl_change_case_math_loop:wNNnn #2 \q_recursion_stop } -\exp_last_unbraced:NNo \cs_new:Npn \__tl_change_case_math_space:wNN \c_space_tl +\exp_last_unbraced:NNo + \cs_new:Npn \__tl_change_case_math_space:wNNnn \c_space_tl { - \c_space_tl - \__tl_change_case_math_loop:wNN + \__tl_change_case_output:nwn { ~ } + \__tl_change_case_math_loop:wNNnn + } +\cs_new:Npn \__tl_change_case_N_type:Nnnn #1#2#3#4 + { + \token_if_cs:NTF #1 + { + \__tl_change_case_cs:Nnnn #1 {#3} + { } + { \__tl_change_case_cs:N #1 } + } + { \__tl_change_case_char:Nnn #1 {#3} {#4} } + \__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} + } +\cs_new:Npn \__tl_change_case_char:Nnn #1#2#3 + { + \cs_if_exist_use:cF { __tl_change_case_ #2 _ #3 :Nnw } + { \use_ii:nn } + #1 + { + \use:c { __tl_change_case_ #2 _ sigma:Nnw } #1 + { \__tl_change_case_char:Nn #1 {#2} } + } + } +\cs_new:Npn \__tl_change_case_char:Nn #1#2 + { + \__tl_change_case_output:fwn + { + \str_case:nvF #1 { c__unicode_ #2 _exceptions_tl } + { + \exp_after:wN \__tl_change_case_char:NNNNNNNNn + \int_use:N \__int_eval:w 1000000 + `#1 \__int_eval_end: + #1 {#2} + } + } + } +\cs_new:Npn \__tl_change_case_char:NNNNNNNNn #1#2#3#4#5#6#7#8#9 + { + \str_case:nvF #8 + { c__unicode_ #9 _ #6 _X_ #7 _tl } + { \exp_stop_f: #8 } } \cs_new:Npn \__tl_change_case_cs:Nnnn #1#2 { @@ -17155,17 +17212,17 @@ { \__tl_change_case_cs_type:Nnnnn #2 { latin } {#3} } { \str_if_eq_x:nnTF - { \__tl_change_case_cs_three:w #1 \q_nil } + { \__tl_change_case_cs_three:NNNw #1 \q_nil } { \str_if_eq:nnTF {#3} { lower } { CYR } { cyr } } { \__tl_change_case_cs_cyr:NnNNNNw #2 {#3} #1 \q_stop } { \str_if_eq_x:nnTF - { \__tl_change_case_cs_three:w #1 \q_nil } + { \__tl_change_case_cs_three:NNNw #1 \q_nil } { acc } { \__tl_change_case_cs_type:Nnnnn #2 { acc } {#3} } { \str_if_eq_x:nnTF - { \__tl_change_case_cs_four:w #1 \q_nil } + { \__tl_change_case_cs_four:NNNNw #1 \q_nil } { text } { \__tl_change_case_cs_type:Nnnnn #2 { greek } {#3} } { \__tl_change_case_cs_type:Nnnnn #2 { misc } {#3} } @@ -17173,13 +17230,8 @@ } } } -\cs_new:Npn \__tl_change_case_cs_three:w #1#2#3#4 \q_nil { #1#2#3 } -\cs_new:Npn \__tl_change_case_cs_four:w #1#2#3#4#5 \q_nil { #1#2#3#4 } -\cs_new:Npn \__tl_change_case_cs_type:Nnnnn #1#2#3 - { - \str_case:nvTF #1 - { c__tl_change_case_ #2 _ #3 _ tl } - } +\cs_new:Npn \__tl_change_case_cs_three:NNNw #1#2#3#4 \q_nil { #1#2#3 } +\cs_new:Npn \__tl_change_case_cs_four:NNNNw #1#2#3#4#5 \q_nil { #1#2#3#4 } \cs_new:Npn \__tl_change_case_cs_cyr:NnNNNNw #1#2#3#4#5#6#7 \q_stop { \__tl_change_case_cs_type:Nnnnn #1 @@ -17197,6 +17249,24 @@ } } } +\cs_new:Npn \__tl_change_case_cs_type:Nnnnn #1#2#3 + { + \exp_args:Nf \__tl_change_case_cs_type:nnn + { + \str_case:nvF #1 + { c__tl_change_case_ #2 _ #3 _ tl } + { \exp_stop_f: } + } + } +\cs_new:Npn \__tl_change_case_cs_type:nnn #1#2#3 + { + \tl_if_blank:nTF {#1} + {#3} + { + \__tl_change_case_output:nwn {#1} + #2 + } + } \cs_new:Npn \__tl_change_case_cs:N #1 { \exp_after:wN \__tl_change_case_cs:NN @@ -17206,7 +17276,10 @@ \cs_new:Npn \__tl_change_case_cs:NN #1#2 { \quark_if_recursion_tail_stop_do:Nn #2 - { \__tl_change_case_cs_expand:N #1 } + { + \__tl_change_case_cs_expand:Nnw #1 + { \__tl_change_case_output:nwn {#1} } + } \str_if_eq:nnTF {#1} {#2} { \use_i_delimit_by_q_recursion_stop:nw @@ -17216,10 +17289,10 @@ } \cs_new:Npn \__tl_change_case_cs:NNn #1#2#3 { - \exp_not:n { #1 {#3} } + \__tl_change_case_output:nwn { #1 {#3} } #2 } -\cs_new:Npn \__tl_change_case_cs_expand:N #1 +\cs_new:Npn \__tl_change_case_cs_expand:Nnw #1#2 { \bool_if:nTF { @@ -17228,31 +17301,32 @@ && ! \token_if_protected_long_macro_p:N #1 } { \__tl_change_case_cs_expand:NN #1 } - { \exp_not:n {#1} } + { #2 } } \cs_new:Npn \__tl_change_case_cs_expand:NN #1#2 { \exp_after:wN #2 #1 } -\cs_new:Npn \__tl_change_case_lower_sigma:Nnn #1#2 +\cs_new:Npn \__tl_change_case_cs_expand:NNnw #1#2#3 + { \__tl_change_case_cs_expand:Nnw #2 {#3} #1 } +\cs_new:Npn \__tl_change_case_lower_sigma:Nnw #1#2#3#4 \q_recursion_stop { \int_compare:nNnTF { `#1 } = { "03A3 } { - \tl_if_head_is_N_type:nTF {#2} - { \__tl_change_case_lower_sigma:Nw #2 \q_recursion_stop } - { - \tl_if_head_is_group:nTF {#2} - { \c__tl_std_sigma_tl } - { \c__tl_final_sigma_tl } - } + \__tl_change_case_output:fwn + { \__tl_change_case_lower_sigma:w #4 \q_recursion_stop } } + {#2} + #3 #4 \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_lower_sigma:w #1 \q_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \__tl_change_case_lower_sigma:Nw #1 \q_recursion_stop } + { \c__unicode_final_sigma_tl } } \cs_new:Npn \__tl_change_case_lower_sigma:Nw #1#2 \q_recursion_stop { \token_if_cs:NTF #1 - { - \token_if_eq_meaning:NNTF #1 \q_recursion_tail - { \c__tl_final_sigma_tl } - { \c__tl_std_sigma_tl } - } + { \c__unicode_final_sigma_tl } { \exp_after:wN \__tl_change_case_lower_sigma_loop:NN \exp_after:wN #1 \l_tl_case_change_after_final_sigma_tl @@ -17261,18 +17335,160 @@ } \cs_new:Npn \__tl_change_case_lower_sigma_loop:NN #1#2 { - \quark_if_recursion_tail_stop_do:nn {#2} - { \c__tl_std_sigma_tl } + \quark_if_recursion_tail_stop_do:Nn #2 + { \c__unicode_std_sigma_tl } \int_compare:nNnT { `#1 } = { `#2 } - { \use_i_delimit_by_q_recursion_stop:nw { \c__tl_final_sigma_tl } } + { \use_i_delimit_by_q_recursion_stop:nw { \c__unicode_final_sigma_tl } } \__tl_change_case_lower_sigma_loop:NN #1 } -\cs_new_eq:NN \__tl_change_case_upper_sigma:Nnn \use_iii:nnn -\cs_new_eq:NN \__tl_change_case_mixed_sigma:Nnn \use_iii:nnn +\cs_new_eq:NN \__tl_change_case_upper_sigma:Nnw \use_ii:nn +\cs_new:Npn \__tl_change_case_lower_tr:Nnw #1#2 + { + \int_compare:nNnTF { `#1 } = { "0049 } + { \__tl_change_case_lower_tr_auxi:Nw } + { + \int_compare:nNnTF { `#1 } = { "0130 } + { \__tl_change_case_output:nwn { i } } + {#2} + } + } +\cs_new:Npn \__tl_change_case_lower_tr_auxi:Nw #1#2 \q_recursion_stop + { + \tl_if_head_is_N_type:nTF {#2} + { \__tl_change_case_lower_tr_auxii:Nw #2 \q_recursion_stop } + { \__tl_change_case_output:Vwn \c__unicode_dotless_i_tl } + #1 #2 \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_lower_tr_auxii:Nw #1#2 \q_recursion_stop + { + \bool_if:nTF + { + \token_if_cs_p:N #1 + || ! ( \int_compare_p:nNn { `#1 } = { "0307 } ) + } + { \__tl_change_case_output:Vwn \c__unicode_dotless_i_tl } + { + \__tl_change_case_output:nwn { i } + \use_i:nn + } + } +\cs_new:Npn \__tl_change_case_upper_tr:Nnw #1#2 + { + \int_compare:nNnTF { `#1 } = { "0069 } + { \__tl_change_case_output:Vwn \c__unicode_dotted_I_tl } + {#2} + } +\cs_new_eq:NN \__tl_change_case_lower_az:Nnw \__tl_change_case_lower_tr:Nnw +\cs_new_eq:NN \__tl_change_case_upper_az:Nnw \__tl_change_case_upper_tr:Nnw +\cs_new:Npn \__tl_change_case_lower_lt:Nnw #1 + { + \exp_args:Nf \__tl_change_case_lower_lt:nNnw + { \str_case:nVF #1 \c__unicode_accents_lt_tl \exp_stop_f: } + #1 + } +\cs_new:Npn \__tl_change_case_lower_lt:nNnw #1#2 + { + \tl_if_blank:nTF {#1} + { + \exp_args:Nf \__tl_change_case_lower_lt:nnw + { + \int_case:nnF {`#2} + { + { "0049 } i + { "004A } j + { "012E } \c__unicode_i_ogonek_tl + } + \exp_stop_f: + } + } + { + \__tl_change_case_output:nwn {#1} + \use_none:n + } + } +\cs_new:Npn \__tl_change_case_lower_lt:nnw #1#2 + { + \tl_if_blank:nTF {#1} + {#2} + { + \__tl_change_case_output:nwn {#1} + \__tl_change_case_lower_lt:Nw + } + } +\cs_new:Npn \__tl_change_case_lower_lt:Nw #1#2 \q_recursion_stop + { + \tl_if_head_is_N_type:nT {#2} + { \__tl_change_case_lower_lt:NNw } + #1 #2 \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_lower_lt:NNw #1#2#3 \q_recursion_stop + { + \bool_if:nT + { + ! \token_if_cs_p:N #2 + && + ( + \int_compare_p:nNn { `#2 } = { "0300 } + || \int_compare_p:nNn { `#2 } = { "0301 } + || \int_compare_p:nNn { `#2 } = { "0303 } + ) + } + { \__tl_change_case_output:Vwn \c__unicode_dot_above_tl } + #1 #2#3 \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_upper_lt:Nnw #1 + { + \exp_args:Nf \__tl_change_case_upper_lt:nnw + { + \int_case:nnF {`#1} + { + { "0069 } I + { "006A } J + { "012F } \c__unicode_I_ogonek_tl + } + \exp_stop_f: + } + } +\cs_new:Npn \__tl_change_case_upper_lt:nnw #1#2 + { + \tl_if_blank:nTF {#1} + {#2} + { + \__tl_change_case_output:nwn {#1} + \__tl_change_case_upper_lt:Nw + } + } +\cs_new:Npn \__tl_change_case_upper_lt:Nw #1#2 \q_recursion_stop + { + \tl_if_head_is_N_type:nT {#2} + { \__tl_change_case_upper_lt:NNw } + #1 #2 \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_upper_lt:NNw #1#2#3 \q_recursion_stop + { + \bool_if:nTF + { + ! \token_if_cs_p:N #2 + && \int_compare_p:nNn { `#2 } = { "0307 } + } + { #1 } + { #1 #2 } + #3 \q_recursion_stop + } \cs_new:Npn \__tl_mixed_case:nn #1#2 { - \__tl_mixed_case_loop:wn #2 - \q_recursion_tail \q_recursion_stop {#1} + \etex_unexpanded:D \exp_after:wN + { + \tex_romannumeral:D + \__tl_mixed_case_aux:nn {#1} {#2} + } + } +\cs_new:Npn \__tl_mixed_case_aux:nn #1#2 + { + \group_align_safe_begin: + \__tl_mixed_case_loop:wn + #2 \q_recursion_tail \q_recursion_stop {#1} + \__tl_change_case_result:n { } } \cs_new:Npn \__tl_mixed_case_loop:wn #1 \q_recursion_stop { @@ -17285,14 +17501,32 @@ } #1 \q_recursion_stop } +\cs_new:Npn \__tl_mixed_case_group:nwn #1#2 \q_recursion_stop #3 + { + \__tl_change_case_output:own + { + \exp_after:wN + { + \tex_romannumeral:D + \__tl_mixed_case_aux:nn {#3} {#1} + } + } + \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} + } +\exp_last_unbraced:NNo \cs_new:Npn \__tl_mixed_case_space:wn \c_space_tl + { + \__tl_change_case_output:nwn { ~ } + \__tl_mixed_case_loop:wn + } \cs_new:Npn \__tl_mixed_case_N_type:Nwn #1#2 \q_recursion_stop { - \quark_if_recursion_tail_stop_do:Nn #1 { \use_none:nn } - \exp_after:wN \__tl_mixed_case_N_type:NNN + \quark_if_recursion_tail_stop_do:Nn #1 + { \__tl_change_case_end:wn } + \exp_after:wN \__tl_mixed_case_N_type:NNNnn \exp_after:wN #1 \l_tl_case_change_math_tl \q_recursion_tail ? \q_recursion_stop {#2} } -\cs_new:Npn \__tl_mixed_case_N_type:NNN #1#2#3 +\cs_new:Npn \__tl_mixed_case_N_type:NNNnn #1#2#3 { \quark_if_recursion_tail_stop_do:Nn #2 { \__tl_mixed_case_N_type:Nnn #1 } @@ -17300,11 +17534,11 @@ { \use_i_delimit_by_q_recursion_stop:nw { - \__tl_change_case_math:NNNn #1 #3 - \__tl_mixed_case_loop:wn + \__tl_change_case_math:NNNnnn + #1 #3 \__tl_mixed_case_loop:wn } } - { \__tl_mixed_case_N_type:NNN #1 } + { \__tl_mixed_case_N_type:NNNnn #1 } } \cs_new:Npn \__tl_mixed_case_N_type:Nnn #1#2#3 { @@ -17321,177 +17555,89 @@ } } { - \cs_if_exist_use:cF { __tl_change_case_mixed_ #3 :Nnn } - { - \cs_if_exist_use:cF { __tl_change_case_upper_ #3 :Nnn } - { \use_iii:nnn } - } - #1 {#2} - { - \exp_after:wN \__tl_mixed_case_skip:NNn - \exp_after:wN #1 \l_tl_mixed_case_ignore_tl - \q_recursion_tail \q_recursion_stop - { - \str_case:nVF #1 \c__tl_mixed_exceptions_tl - { - \exp_after:wN \__tl_change_case_char:NNNNNNNNn - \int_use:N - \__int_eval:w 1000000 + `#1 \__int_eval_end: - #1 { upper } - } - } - } + \__tl_mixed_case_char:Nn #1 {#3} \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} } } -\cs_new:Npn \__tl_mixed_case_skip:NNn #1#2 +\cs_new:Npn \__tl_mixed_case_char:Nn #1#2 { - \quark_if_recursion_tail_stop_do:nn {#2} { \use:n } - \int_compare:nNnT { `#1 } = { `#2 } + \cs_if_exist_use:cF { __tl_change_case_mixed_ #2 :Nnw } { - \use_i_delimit_by_q_recursion_stop:nw - { - #1 - \__tl_mixed_case_skip_tidy:nNwn - } + \cs_if_exist_use:cF { __tl_change_case_upper_ #2 :Nnw } + { \use_ii:nn } } - \__tl_mixed_case_skip:NNn #1 - } -\cs_new:Npn \__tl_mixed_case_skip_tidy:nNwn #1#2#3 \q_recursion_stop #4 - { - \__tl_mixed_case_loop:wn #3 \q_recursion_stop - } -\cs_new:Npn \__tl_mixed_case_group:nwn #1#2 \q_recursion_stop #3 - { - \tl_if_blank:fTF {#1} - { { } \__tl_mixed_case_loop:wn #2 \q_recursion_stop {#3} } - { - { - \__tl_mixed_case_loop:wn #1 - \q_recursion_tail \q_recursion_stop {#3} - } - \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} - } - } -\exp_last_unbraced:NNo \cs_new:Npn \__tl_mixed_case_space:wn \c_space_tl - { - \c_space_tl - \__tl_mixed_case_loop:wn + #1 + { \__tl_mixed_case_skip:N #1 } } -\cs_new:Npn \__tl_change_case_lower_tr:Nnn #1#2#3 +\cs_new:Npn \__tl_mixed_case_skip:N #1 { - \int_compare:nNnTF { `#1 } = { "0049 } - { - \tl_if_head_is_N_type:nTF {#2} - { \__tl_change_case_lower_tr:Nw #2 \q_recursion_stop } - { \c__tl_dotless_i_tl } - } - { - \int_compare:nNnTF { `#1 } = { "0130 } - { i } - {#3} - } + \exp_after:wN \__tl_mixed_case_skip:NN + \exp_after:wN #1 \l_tl_mixed_case_ignore_tl + \q_recursion_tail \q_recursion_stop } -\cs_new_nopar:Npn \__tl_change_case_lower_az:Nnn - { \__tl_change_case_lower_tr:Nnn } -\cs_new:Npn \__tl_change_case_lower_tr:Nw #1#2 \q_recursion_stop +\cs_new:Npn \__tl_mixed_case_skip:NN #1#2 { - \bool_if:nTF - { - \token_if_cs_p:N #1 - || ! ( \int_compare_p:nNn { `#1 } = { "0307 } ) - } - { \c__tl_dotless_i_tl } + \quark_if_recursion_tail_stop_do:nn {#2} { - i - \use_i:nn + \exp_args:Nf \__tl_mixed_case_char:nN + { \str_case:nVF #1 \c__unicode_mixed_exceptions_tl \exp_stop_f: } + #1 } - } -\cs_new:Npn \__tl_change_case_upper_tr:Nnn #1#2#3 - { - \int_compare:nNnTF { `#1 } = { "0069 } - { \c__tl_dotted_I_tl } - {#3} - } -\cs_new_nopar:Npn \__tl_change_case_upper_az:Nnn - { \__tl_change_case_upper_tr:Nnn } -\cs_new:Npn \__tl_change_case_lower_lt:Nnn #1#2#3 - { - \str_case:nVF #1 \c__tl_accents_lt_tl + \int_compare:nNnT { `#1 } = { `#2 } { - #3 - \bool_if:nT - { - \int_compare_p:nNn { `#1 } = { "0049 } - || \int_compare_p:nNn { `#1 } = { "004A } - || \int_compare_p:nNn { `#1 } = { "012E } - } + \use_i_delimit_by_q_recursion_stop:nw { - \tl_if_head_is_N_type:nT {#2} - { \__tl_change_case_lower_lt:Nw #2 \q_recursion_stop } + \__tl_change_case_output:nwn {#1} + \__tl_mixed_case_skip_tidy:Nwn } } + \__tl_mixed_case_skip:NN #1 } -\cs_new:Npn \__tl_change_case_lower_lt:Nw #1#2 \q_recursion_stop +\cs_new:Npn \__tl_mixed_case_skip_tidy:Nwn #1#2 \q_recursion_stop #3 { - \bool_if:nT - { - ! ( \token_if_cs_p:N #1 ) - && - ( - \int_compare_p:nNn { `#1 } = { "0300 } - || \int_compare_p:nNn { `#1 } = { "0301 } - || \int_compare_p:nNn { `#1 } = { "0303 } - ) - } - { \c__tl_dot_above_tl } + \__tl_mixed_case_loop:wn #2 \q_recursion_stop } -\cs_new:Npn \__tl_change_case_upper_lt:Nnn #1#2#3 +\cs_new:Npn \__tl_mixed_case_char:nN #1#2 { - #3 - \bool_if:nT - { - \tl_if_head_is_N_type_p:n {#2} - && - ( - \int_compare_p:nNn { `#1 } = { "0069 } - || \int_compare_p:nNn { `#1 } = { "006A } - || \int_compare_p:nNn { `#1 } = { "012F } - ) - } - { \__tl_change_case_upper_lt:Nw #2 \q_recursion_stop } + \tl_if_blank:nTF {#1} + { \__tl_change_case_char:Nn #2 { upper } } + { \__tl_change_case_output:nwn {#1} } } -\cs_new:Npn \__tl_change_case_upper_lt:Nw #1#2 \q_recursion_stop +\cs_new:Npn \__tl_change_case_mixed_nl:Nnw #1 { - \bool_if:nT + \bool_if:nTF { - ! ( \token_if_cs_p:N #1 ) - && - \int_compare_p:nNn { `#1 } = { "0307 } + \int_compare_p:nNn { `#1 } = { `i } + || \int_compare_p:nNn { `#1 } = { `I } } - { \use_i:nn } - } -\cs_new:Npn \__tl_change_case_mixed_nl:Nnn #1#2 - { - \int_compare:nNnTF { `#1 } = { `i } { - I - \tl_if_head_is_N_type:nT {#2} - { \__tl_change_case_mixed_nl:Nw #2 \q_recursion_stop } + \__tl_change_case_output:nwn { I } + \__tl_change_case_mixed_nl:Nw } } \cs_new:Npn \__tl_change_case_mixed_nl:Nw #1#2 \q_recursion_stop { - \bool_if:nT + \tl_if_head_is_N_type:nT {#2} + { \__tl_change_case_mixed_nl:NNw } + #1 #2 \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_mixed_nl:NNw #1#2#3 \q_recursion_stop + { + \bool_if:nTF { - ! ( \token_if_cs_p:N #1 ) + ! ( \token_if_cs_p:N #2 ) && - \int_compare_p:nNn { `#1 } = { `j } + ( + \int_compare_p:nNn { `#2 } = { `j } + || \int_compare_p:nNn { `#2 } = { `J } + ) } { - J - \use_i:nn + \__tl_change_case_output:nwn { J } + #1 } + { #1 #2 } + #3 \q_recursion_stop } \tl_new:N \l_tl_case_change_math_tl \tl_set:Nn \l_tl_case_change_math_tl @@ -17534,14 +17680,14 @@ \cs_set:Npn \__tl_change_case_map:NN #1#2 { \quark_if_recursion_tail_stop:N #1 - \exp_not:N #1 \exp_not:n { { \exp_not:n {#2} } } + \exp_not:N #1 \exp_not:n { { \exp_stop_f: #2 } } \__tl_change_case_map:NN } \cs_set:Npn \__tl_change_case_map:NNN #1#2#3 { \str_if_eq:nnT {#1} {#2} { \use_none_delimit_by_q_recursion_stop:w } - \exp_not:N #3 \exp_not:n { { \exp_not:n {#2} } } + \exp_not:N #3 \exp_not:n { { \exp_stop_f: #2 } } \__tl_change_case_map:NNN #1 } \__tl_change_case_setup:nnnn @@ -17723,47 +17869,47 @@ { \textsigma } \tl_const:Nn \c__tl_change_case_acc_upper_tl { - \accdasia { \exp_not:n { \LGR@accdropped } } - \accdasiaoxia { \exp_not:n { \LGR@hiatus } } - \accdasiavaria { \exp_not:n { \LGR@accdropped } } - \accdasiaperispomeni { \exp_not:n { \LGR@accdropped } } - \accpsili { \exp_not:n { \LGR@hiatus } } - \accpsilioxia { \exp_not:n { \LGR@hiatus } } - \accpsilivaria { \exp_not:n { \LGR@hiatus } } - \accpsiliperispomeni { \exp_not:n { \LGR@accdropped } } - \acctonos { \exp_not:n { \LGR@hiatus } } - \accvaria { \exp_not:n { \LGR@accdropped } } - \accdialytikatonos { \exp_not:n { \LGR@accDialytika } } - \accdialytikavaria { \exp_not:n { \LGR@accDialytika } } - \accdialytikaperispomeni { \exp_not:n { \LGR@accDialytika } } - \accperispomeni { \exp_not:n { \LGR@accdropped } } + \accdasia { \exp_stop_f: \LGR@accdropped } + \accdasiaoxia { \exp_stop_f: \LGR@hiatus } + \accdasiavaria { \exp_stop_f: \LGR@accdropped } + \accdasiaperispomeni { \exp_stop_f: \LGR@accdropped } + \accpsili { \exp_stop_f: \LGR@hiatus } + \accpsilioxia { \exp_stop_f: \LGR@hiatus } + \accpsilivaria { \exp_stop_f: \LGR@hiatus } + \accpsiliperispomeni { \exp_stop_f: \LGR@accdropped } + \acctonos { \exp_stop_f: \LGR@hiatus } + \accvaria { \exp_stop_f: \LGR@accdropped } + \accdialytikatonos { \exp_stop_f: \LGR@accDialytika } + \accdialytikavaria { \exp_stop_f: \LGR@accDialytika } + \accdialytikaperispomeni { \exp_stop_f: \LGR@accDialytika } + \accperispomeni { \exp_stop_f: \LGR@accdropped } } \tl_const:Nn \c__tl_change_case_acc_lower_tl { } \tl_const:Nn \c__tl_change_case_misc_upper_tl { - \ypogegrammeni { \exp_not:n { \prosgegrammeni } } - \abreve { \exp_not:n { \Abreve } } - \acircumflex { \exp_not:n { \Acircumflex } } - \ecircumflex { \exp_not:n { \Ecircumflex } } - \ocircumflex { \exp_not:n { \Ocircumflex } } - \ohorn { \exp_not:n { \Ohorn } } - \uhorn { \exp_not:n { \Uhorn } } + \ypogegrammeni { \exp_stop_f: \prosgegrammeni } + \abreve { \exp_stop_f: \Abreve } + \acircumflex { \exp_stop_f: \Acircumflex } + \ecircumflex { \exp_stop_f: \Ecircumflex } + \ocircumflex { \exp_stop_f: \Ocircumflex } + \ohorn { \exp_stop_f: \Ohorn } + \uhorn { \exp_stop_f: \Uhorn } } \tl_const:Nn \c__tl_change_case_misc_lower_tl { - \prosgegrammeni { \exp_not:n { \ypogegrammeni } } - \Abreve { \exp_not:n { \abreve } } - \Acircumflex { \exp_not:n { \acircumflex } } - \Ecircumflex { \exp_not:n { \ecircumflex } } - \Ocircumflex { \exp_not:n { \ocircumflex } } - \Ohorn { \exp_not:n { \ohorn } } - \Uhorn { \exp_not:n { \uhorn } } - \ABREVE { \exp_not:n { \abreve } } - \ACIRCUMFLEX { \exp_not:n { \acircumflex } } - \ECIRCUMFLEX { \exp_not:n { \ecircumflex } } - \OCIRCUMFLEX { \exp_not:n { \ocircumflex } } - \OHORN { \exp_not:n { \ohorn } } - \UHORN { \exp_not:n { \uhorn } } + \prosgegrammeni { \exp_stop_f: \ypogegrammeni } + \Abreve { \exp_stop_f: \abreve } + \Acircumflex { \exp_stop_f: \acircumflex } + \Ecircumflex { \exp_stop_f: \ecircumflex } + \Ocircumflex { \exp_stop_f: \ocircumflex } + \Ohorn { \exp_stop_f: \ohorn } + \Uhorn { \exp_stop_f: \uhorn } + \ABREVE { \exp_stop_f: \abreve } + \ACIRCUMFLEX { \exp_stop_f: \acircumflex } + \ECIRCUMFLEX { \exp_stop_f: \ecircumflex } + \OCIRCUMFLEX { \exp_stop_f: \ocircumflex } + \OHORN { \exp_stop_f: \ohorn } + \UHORN { \exp_stop_f: \uhorn } } \group_end: \cs_new_protected:Npn \tl_log:N #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 28d8e2273fe..1e8738ee241 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -47,8 +47,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2015/02/13} -\def\ExplFileVersion{5524} +\def\ExplFileDate{2015/03/01} +\def\ExplFileVersion{5547} \let\ExplLoaderFileVersion\ExplFileVersion \begingroup \def\tempa{LaTeX2e} diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index 97b1d19317d..a9718fe6985 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -47,8 +47,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2015/02/13} -\def\ExplFileVersion{5524} +\def\ExplFileDate{2015/03/01} +\def\ExplFileVersion{5547} \let\ExplLoaderFileVersion\ExplFileVersion \ProvidesPackage{\ExplFileName} [% diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3unicode-data.def b/Master/texmf-dist/tex/latex/l3kernel/l3unicode-data.def index 3a0688f5d45..47c18029212 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3unicode-data.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3unicode-data.def @@ -7,9 +7,9 @@ %% - CaseFolding.txt %% which are maintained by the Unicode Consortium. %% -%% Generated on 2015-02-12. +%% Generated on 2015-03-01. %% -\ProvidesExplFile {l3unicode-data.def} {2015/02/12} {5523} {L3 Unicode data} +\ProvidesExplFile {l3unicode-data.def} {2015/03/01} {5544} {L3 Unicode data} \pdftex_if_engine:T { \group_begin: @@ -24,10 +24,9 @@ } \cs_set_protected:Npn \__unicode_tmp:NNNNNNN #1#2#3#4#5#6#7 { - \tl_const:cx { c__str_fold_ #1 _X_ #2 _ tl } - { \tl_to_str:n { #6#7 } } - \tl_const:cn { c__tl_lower_ #1 _X_ #2 _ tl } { #6#7 } - \tl_const:cn { c__tl_upper_ #4 _X_ #5 _ tl } { #7#6 } + \tl_const:cx { c__unicode_fold_ #1 _X_ #2 _ tl } { #6#7 } + \tl_const:cn { c__unicode_lower_ #1 _X_ #2 _ tl } { #6#7 } + \tl_const:cn { c__unicode_upper_ #4 _X_ #5 _ tl } { #7#6 } } \__unicode_tmp:NN AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz @@ -37,349 +36,334 @@ { \int_step_inline:nnnn { 0 } { 1 } { 9 } { - \tl_if_exist:cF { c__str_fold_ #1 _X_ ##1 _ tl } + \clist_map_inline:nn { fold , lower , upper } { - \tl_const:cn { c__str_fold_ #1 _X_ ##1 _ tl } { } - } - \tl_if_exist:cF { c__tl_lower_ #1 _X_ ##1 _ tl } - { - \tl_const:cn { c__tl_lower_ #1 _X_ ##1 _ tl } { } - } - \tl_if_exist:cF { c__tl_upper_ #1 _X_ ##1 _ tl } - { - \tl_const:cn { c__tl_upper_ #1 _X_ ##1 _ tl } { } + \tl_if_exist:cF { c__unicode_ ####1 _ #1 _X_ ##1 _ tl } + { \tl_const:cn { c__unicode_ ####1 _ #1 _X_ ##1 _ tl } { } } } } } - \tl_const:Nn \c__tl_mixed_exceptions_tl { } - \tl_const:Nn \c__tl_std_sigma_tl { } - \tl_const:Nn \c__tl_final_sigma_tl { } - \tl_const:Nn \c__tl_accents_lt_tl { } - \tl_const:Nn \c__tl_dot_above_tl { } - \tl_const:Nn \c__tl_dotless_i_tl { I } - \tl_const:Nn \c__tl_dotted_I_tl { i } + \tl_const:Nn \c__unicode_lower_exceptions_tl { } + \tl_const:Nn \c__unicode_mixed_exceptions_tl { } + \tl_const:Nn \c__unicode_upper_exceptions_tl { } + \tl_const:Nn \c__unicode_std_sigma_tl { } + \tl_const:Nn \c__unicode_final_sigma_tl { } + \tl_const:Nn \c__unicode_accents_lt_tl { } + \tl_const:Nn \c__unicode_dot_above_tl { } + \tl_const:Nn \c__unicode_dotless_i_tl { I } + \tl_const:Nn \c__unicode_dotted_I_tl { i } + \tl_const:Nn \c__unicode_i_ogonek_tl { } + \tl_const:Nn \c__unicode_I_ogonek_tl { } \tex_endinput:D } -\tl_const:cn { c__tl_upper_0_X_0_tl } { dDьЬոՈὀὈᾤ{ὬΙ}ⳬⳫ𐐨𐐀𑣜𑢼 } -\tl_const:cn { c__tl_upper_0_X_1_tl } { eEĭĬǵǴəƏϩϨэЭұҰԕԔչՉḕḔṹṸờỜὁὉᾥ{ὭΙ}ⲉⲈꙩꙨ𐐩𐐁𑣝𑢽 } -\tl_const:cn { c__tl_upper_0_X_2_tl } { fFƒƑюЮպՊὂὊᾦ{ὮΙ}ⳮⳭ𐐪𐐂𑣞𑢾 } -\tl_const:cn { c__tl_upper_0_X_3_tl } { gGįĮɛƐϫϪяЯҳҲԗԖջՋḗḖṻṺởỞὃὋᾧ{ὯΙ}ⲋⲊꙫꙪꜳꜲꞗꞖ𐐫𐐃𑣟𑢿 } -\tl_const:cn { c__tl_upper_0_X_4_tl } { hHɜꞫѐЀռՌὄὌᾨ{ὨΙ}𐐬𐐄 } -\tl_const:cn { c__tl_upper_0_X_5_tl } { iIıIƕǶǹǸϭϬёЁҵҴԙԘսՍḙḘṽṼỡỠὅὍᾩ{ὩΙ}ⲍⲌꙭꙬꜵꜴꞙꞘ𐐭𐐅 } -\tl_const:cn { c__tl_upper_0_X_6_tl } { jJђЂվՎᾪ{ὪΙ}𐐮𐐆 } -\tl_const:cn { c__tl_upper_0_X_7_tl } { kK{ij}{IJ}ǻǺϯϮѓЃҷҶԛԚտՏḛḚṿṾợỢᾫ{ὫΙ}ⲏⲎⳳⳲꜷꜶꞛꞚ𐐯𐐇 } -\tl_const:cn { c__tl_upper_0_X_8_tl } { lLɠƓϰΚєЄրՐᾬ{ὬΙ}𐐰𐐈 } -\tl_const:cn { c__tl_upper_0_X_9_tl } { mMĵĴƙƘǽǼɡꞬϱΡѕЅҹҸԝԜցՑḝḜẁẀụỤᾭ{ὭΙ}ⲑⲐꜹꜸꞝꞜ𐐱𐐉 } -\tl_const:cn { c__tl_upper_1_X_0_tl } { nNƚȽϲϹіІւՒᾮ{ὮΙ}𐐲𐐊 } -\tl_const:cn { c__tl_upper_1_X_1_tl } { oOķĶǿǾɣƔϳͿїЇһҺԟԞփՓḟḞẃẂủỦᾯ{ὯΙ}ⲓⲒꜻꜺꞟꞞ𐐳𐐋 } -\tl_const:cn { c__tl_upper_1_X_2_tl } { pPΐ{Ϊ́}јЈքՔᾰᾸⰰⰀ𐐴𐐌 } -\tl_const:cn { c__tl_upper_1_X_3_tl } { qQȁȀɥꞍϵΕљЉҽҼԡԠօՕḡḠẅẄứỨᾱᾹⰱⰁⲕⲔꜽꜼꞡꞠ𐐵𐐍 } -\tl_const:cn { c__tl_upper_1_X_4_tl } { rRĺĹƞȠɦꞪњЊֆՖᾲ{ᾺΙ}ⰲⰂ𐐶𐐎 } -\tl_const:cn { c__tl_upper_1_X_5_tl } { sSȃȂћЋҿҾԣԢ{և}{{ԵՒ}}ḣḢẇẆừỪᾳ{ΑΙ}ⰳⰃⲗⲖꜿꜾꞣꞢ𐐷𐐏 } -\tl_const:cn { c__tl_upper_1_X_6_tl } { tTļĻɨƗϸϷќЌὐ{Υ̓}ᾴ{ΆΙ}ⰴⰄ𐐸𐐐 } -\tl_const:cn { c__tl_upper_1_X_7_tl } { uUơƠȅȄɩƖѝЍԥԤḥḤẉẈửỬὑὙⰵⰅⲙⲘꝁꝀꞥꞤ𐐹𐐑 } -\tl_const:cn { c__tl_upper_1_X_8_tl } { vVľĽўЎӂӁὒ{Υ̓̀}ᾶ{Α͂}ⰶⰆ𐐺𐐒 } -\tl_const:cn { c__tl_upper_1_X_9_tl } { wWƣƢȇȆɫⱢϻϺџЏԧԦḧḦẋẊữỮὓὛᾷ{Α͂Ι}ⰷⰇⲛⲚꝃꝂꞧꞦ𐐻𐐓 } -\tl_const:cn { c__tl_upper_2_X_0_tl } { xX{ŀ}{Ŀ}ɬꞭӄӃὔ{Υ̓́}ⰸⰈⴀႠ𐐼𐐔 } -\tl_const:cn { c__tl_upper_2_X_1_tl } { yYƥƤȉȈѡѠԩԨḩḨẍẌựỰὕὝⰹⰉⲝⲜⴁႡꝅꝄꞩꞨ𐐽𐐕 } -\tl_const:cn { c__tl_upper_2_X_2_tl } { zZłŁӆӅὖ{Υ̓͂}ⰺⰊⴂႢ𐐾𐐖 } -\tl_const:cn { c__tl_upper_2_X_3_tl } { ß{SS}ȋȊɯƜѣѢԫԪḫḪẏẎỳỲὗὟⰻⰋⲟⲞⴃႣꝇꝆ𐐿𐐗 } -\tl_const:cn { c__tl_upper_2_X_4_tl } { àÀńŃƨƧӈӇᾼ{ΑΙ}ⓐⒶⰼⰌⴄႤ𐑀𐐘 } -\tl_const:cn { c__tl_upper_2_X_5_tl } { áÁȍȌɱⱮѥѤԭԬḭḬẑẐỵỴⓑⒷⰽⰍⲡⲠⴅႥꚁꚀꝉꝈ𐑁𐐙 } -\tl_const:cn { c__tl_upper_2_X_6_tl } { âÂņŅɲƝӊӉιΙⅎℲⓒⒸⰾⰎⴆႦ𐑂𐐚 } -\tl_const:cn { c__tl_upper_2_X_7_tl } { ãÃȏȎѧѦԯԮḯḮẓẒỷỶⓓⒹⰿⰏⲣⲢⴇႧꚃꚂꝋꝊ𐑃𐐛 } -\tl_const:cn { c__tl_upper_2_X_8_tl } { äÄňŇӌӋⓔⒺⱀⰐⴈႨ𐑄𐐜 } -\tl_const:cn { c__tl_upper_2_X_9_tl } { åÅ{ʼn}{{ʼN}}ƭƬȑȐɵƟѩѨḱḰẕẔỹỸⓕⒻⱁⰑⲥⲤⴉႩꚅꚄꝍꝌ𐑅𐐝 } -\tl_const:cn { c__tl_upper_3_X_0_tl } { æÆӎӍẖ{H̱}ῂ{ῊΙ}ⓖⒼⱂⰒⴊႪ𐑆𐐞 } -\tl_const:cn { c__tl_upper_3_X_1_tl } { çÇŋŊȓȒѫѪӏӀḳḲẗ{T̈}ỻỺῃ{ΗΙ}ⓗⒽⱃⰓⲧⲦⴋႫꚇꚆꝏꝎ𐑇𐐟 } -\tl_const:cn { c__tl_upper_3_X_2_tl } { èÈưƯẘ{W̊}ὠὨῄ{ΉΙ}ⓘⒾⱄⰔⴌႬ𐑈𐐠 } -\tl_const:cn { c__tl_upper_3_X_3_tl } { éÉōŌȕȔѭѬӑӐḵḴẙ{Y̊}ỽỼὡὩⓙⒿⱅⰕⲩⲨⴍႭꚉꚈꝑꝐ𐑉𐐡 } -\tl_const:cn { c__tl_upper_3_X_4_tl } { êÊẚ{Aʾ}ὢὪῆ{Η͂}ⓚⓀⱆⰖⴎႮ𐑊𐐢 } -\tl_const:cn { c__tl_upper_3_X_5_tl } { ëËŏŎȗȖѯѮӓӒḷḶẛṠỿỾὣὫῇ{Η͂Ι}ⓛⓁⱇⰗⲫⲪⴏႯꚋꚊꝓꝒ𐑋𐐣 } -\tl_const:cn { c__tl_upper_3_X_6_tl } { ìÌƴƳἀἈὤὬⓜⓂⱈⰘⴐႰ𐑌𐐤 } -\tl_const:cn { c__tl_upper_3_X_7_tl } { íÍőŐșȘɽⱤͅΙѱѰӕӔḹḸἁἉὥὭⓝⓃⱉⰙⲭⲬⴑႱꚍꚌꝕꝔ𐑍𐐥 } -\tl_const:cn { c__tl_upper_3_X_8_tl } { îÎƶƵἂἊὦὮⓞⓄⱊⰚⴒႲ𐑎𐐦 } -\tl_const:cn { c__tl_upper_3_X_9_tl } { ïÏœŒțȚѳѲӗӖḻḺἃἋὧὯⓟⓅⱋⰛⲯⲮⴓႳꚏꚎꝗꝖ𐑏𐐧 } -\tl_const:cn { c__tl_upper_4_X_0_tl } { ðÐʀƦάΆἄἌῌ{ΗΙ}ⓠⓆⱌⰜⴔႴ } -\tl_const:cn { c__tl_upper_4_X_1_tl } { ñÑŕŔƹƸȝȜέΈѵѴәӘḽḼạẠἅἍⓡⓇⱍⰝⲱⲰⴕႵꚑꚐꝙꝘ } -\tl_const:cn { c__tl_upper_4_X_2_tl } { òÒήΉἆἎⓢⓈⱎⰞⴖႶ } -\tl_const:cn { c__tl_upper_4_X_3_tl } { óÓŗŖȟȞʃƩίΊѷѶӛӚḿḾảẢἇἏⓣⓉⱏⰟⲳⲲⴗႷꚓꚒꝛꝚ } -\tl_const:cn { c__tl_upper_4_X_4_tl } { ôÔΰ{Ϋ́}ῐῘⓤⓊⱐⰠⴘႸ } -\tl_const:cn { c__tl_upper_4_X_5_tl } { õÕřŘƽƼαΑѹѸӝӜᵹꝽṁṀấẤῑῙⓥⓋⱑⰡⲵⲴⴙႹꚕꚔꝝꝜaA } -\tl_const:cn { c__tl_upper_4_X_6_tl } { öÖβΒῒ{Ϊ̀}ⓦⓌⱒⰢⴚႺbB } -\tl_const:cn { c__tl_upper_4_X_7_tl } { śŚƿǷȣȢʇꞱγΓѻѺӟӞṃṂầẦΐ{Ϊ́}ⓧⓍⱓⰣⲷⲶⴛႻꚗꚖꝟꝞcC } -\tl_const:cn { c__tl_upper_4_X_8_tl } { øØʈƮδΔὰᾺⓨⓎⱔⰤⴜႼdD } -\tl_const:cn { c__tl_upper_4_X_9_tl } { ùÙŝŜȥȤʉɄεΕѽѼӡӠᵽⱣṅṄẩẨάΆⓩⓏⱕⰥⲹⲸⴝႽꚙꚘꝡꝠeE } -\tl_const:cn { c__tl_upper_5_X_0_tl } { úÚʊƱζΖὲῈῖ{Ι͂}ⱖⰦⴞႾfF } -\tl_const:cn { c__tl_upper_5_X_1_tl } { ûÛşŞȧȦʋƲηΗѿѾӣӢṇṆẫẪέΈῗ{Ϊ͂}ⱗⰧⲻⲺⴟႿꚛꚚꝣꝢgG } -\tl_const:cn { c__tl_upper_5_X_2_tl } { üÜʌɅθΘἐἘὴῊⱘⰨⴠჀhH } -\tl_const:cn { c__tl_upper_5_X_3_tl } { ýÝšŠDžDŽȩȨιΙҁҀӥӤṉṈậẬἑἙήΉⱙⰩⲽⲼⴡჁꝥꝤiI } -\tl_const:cn { c__tl_upper_5_X_4_tl } { þÞdžDŽκΚἒἚὶῚⱚⰪⴢჂjJ } -\tl_const:cn { c__tl_upper_5_X_5_tl } { ÿŸţŢȫȪλΛӧӦṋṊắẮἓἛίΊⱛⰫⲿⲾⴣჃꝧꝦkK } -\tl_const:cn { c__tl_upper_5_X_6_tl } { LjLJμΜἔἜὸῸⱜⰬⴤჄff{FF}lL } -\tl_const:cn { c__tl_upper_5_X_7_tl } { āĀťŤljLJȭȬνΝөӨṍṌằẰἕἝόΌⱝⰭⳁⳀⴥჅꝩꝨfi{FI}mM } -\tl_const:cn { c__tl_upper_5_X_8_tl } { ʒƷξΞὺῪⱞⰮfl{FL}nN } -\tl_const:cn { c__tl_upper_5_X_9_tl } { ăĂŧŦNjNJȯȮοΟӫӪṏṎẳẲύΎⳃⳂⴧჇꝫꝪffi{FFI}oO } -\tl_const:cn { c__tl_upper_6_X_0_tl } { njNJπΠὼῺῠῨⅰⅠffl{FFL}pP } -\tl_const:cn { c__tl_upper_6_X_1_tl } { ąĄũŨȱȰρΡӭӬṑṐẵẴώΏῡῩ{ⅱ}{Ⅱ}ⱡⱠⳅⳄꙁꙀꝭꝬſt{ST}qQ } -\tl_const:cn { c__tl_upper_6_X_2_tl } { ǎǍςΣῢ{Ϋ̀}{ⅲ}{Ⅲ}st{ST}rR } -\tl_const:cn { c__tl_upper_6_X_3_tl } { ćĆūŪȳȲσΣҋҊӯӮṓṒặẶΰ{Ϋ́}{ⅳ}{Ⅳ}ⳇⳆꙃꙂꝯꝮsS } -\tl_const:cn { c__tl_upper_6_X_4_tl } { ǐǏτΤᾀ{ἈΙ}ῤ{Ρ̓}ⅴⅤtT } -\tl_const:cn { c__tl_upper_6_X_5_tl } { ĉĈŭŬυΥҍҌӱӰṕṔẹẸᾁ{ἉΙ}ῥῬ{ⅵ}{Ⅵ}ⱥȺⳉⳈⴭჍꙅꙄuU } -\tl_const:cn { c__tl_upper_6_X_6_tl } { ǒǑφΦᾂ{ἊΙ}ῦ{Υ͂}{ⅶ}{Ⅶ}ⱦȾvV } -\tl_const:cn { c__tl_upper_6_X_7_tl } { ċĊůŮχΧҏҎӳӲṗṖẻẺᾃ{ἋΙ}ῧ{Ϋ͂}{ⅷ}{Ⅷ}ⳋⳊꙇꙆwW } -\tl_const:cn { c__tl_upper_6_X_8_tl } { ǔǓψΨἠἨᾄ{ἌΙ}{ⅸ}{Ⅸ}ⱨⱧxX } -\tl_const:cn { c__tl_upper_6_X_9_tl } { čČűŰωΩґҐӵӴṙṘẽẼἡἩᾅ{ἍΙ}ⅹⅩⳍⳌꙉꙈyY } -\tl_const:cn { c__tl_upper_7_X_0_tl } { ǖǕʞꞰϊΪἢἪᾆ{ἎΙ}ⅺⅪⱪⱩzZ } -\tl_const:cn { c__tl_upper_7_X_1_tl } { ďĎųŲϋΫғҒӷӶṛṚếẾἣἫᾇ{ἏΙ}ⅻⅫⳏⳎꙋꙊ } -\tl_const:cn { c__tl_upper_7_X_2_tl } { ǘǗȼȻόΌаАἤἬᾈ{ἈΙ}ⅼⅬⱬⱫ𑣀𑢠 } -\tl_const:cn { c__tl_upper_7_X_3_tl } { đĐŵŴύΎбБҕҔӹӸṝṜềỀἥἭᾉ{ἉΙ}ⅽⅭⳑⳐꙍꙌ𑣁𑢡 } -\tl_const:cn { c__tl_upper_7_X_4_tl } { ǚǙώΏвВἦἮᾊ{ἊΙ}ⅾⅮꝺꝹ𑣂𑢢 } -\tl_const:cn { c__tl_upper_7_X_5_tl } { ēĒŷŶȿⱾгГҗҖӻӺṟṞểỂἧἯᾋ{ἋΙ}ⅿⅯⳓⳒꙏꙎﬓ{ՄՆ}𑣃𑢣 } -\tl_const:cn { c__tl_upper_7_X_6_tl } { ǜǛɀⱿϐΒдДᾌ{ἌΙ}ꝼꝻﬔ{ՄԵ}𑣄𑢤 } -\tl_const:cn { c__tl_upper_7_X_7_tl } { ĕĔǝƎϑΘеЕҙҘӽӼաԱṡṠễỄᾍ{ἍΙ}ⳕⳔꙑꙐﬕ{ՄԻ}𑣅𑢥 } -\tl_const:cn { c__tl_upper_7_X_8_tl } { źŹɂɁжЖբԲᾎ{ἎΙ}ῲ{ῺΙ}ﬖ{ՎՆ}𑣆𑢦 } -\tl_const:cn { c__tl_upper_7_X_9_tl } { ėĖǟǞзЗқҚӿӾգԳṣṢệỆᾏ{ἏΙ}ῳ{ΩΙ}ⱳⱲⳗⳖꙓꙒꝿꝾﬗ{ՄԽ}𑣇𑢧 } -\tl_const:cn { c__tl_upper_8_X_0_tl } { żŻиИդԴᾐ{ἨΙ}ῴ{ΏΙ}ↄↃ𑣈𑢨 } -\tl_const:cn { c__tl_upper_8_X_1_tl } { µΜęĘǡǠͱͰϕΦйЙҝҜԁԀեԵḁḀṥṤỉỈᾑ{ἩΙ}ⳙⳘꙕꙔꞁꞀ𑣉𑢩 } -\tl_const:cn { c__tl_upper_8_X_2_tl } { žŽϖΠкКզԶᾒ{ἪΙ}ῶ{Ω͂}ⱶⱵ𑣊𑢪 } -\tl_const:cn { c__tl_upper_8_X_3_tl } { ěĚſSǣǢɇɆͳͲϗϏлЛҟҞԃԂէԷḃḂṧṦịỊᾓ{ἫΙ}ῷ{Ω͂Ι}ⳛⳚꙗꙖꞃꞂ𑣋𑢫 } -\tl_const:cn { c__tl_upper_8_X_4_tl } { ƀɃмМըԸἰἸᾔ{ἬΙ}𑣌𑢬 } -\tl_const:cn { c__tl_upper_8_X_5_tl } { ĝĜǥǤɉɈϙϘнНҡҠԅԄթԹḅḄṩṨọỌἱἹᾕ{ἭΙ}ⳝⳜꙙꙘꞅꞄ𑣍𑢭 } -\tl_const:cn { c__tl_upper_8_X_6_tl } { оОժԺἲἺᾖ{ἮΙ}𑣎𑢮 } -\tl_const:cn { c__tl_upper_8_X_7_tl } { ğĞƃƂǧǦɋɊͷͶϛϚпПңҢԇԆիԻḇḆṫṪỏỎἳἻᾗ{ἯΙ}ⳟⳞꙛꙚꜣꜢꞇꞆ𑣏𑢯 } -\tl_const:cn { c__tl_upper_8_X_8_tl } { рРլԼἴἼᾘ{ἨΙ}ῼ{ΩΙ}𑣐𑢰 } -\tl_const:cn { c__tl_upper_8_X_9_tl } { ġĠƅƄǩǨɍɌϝϜсСҥҤԉԈխԽḉḈṭṬốỐἵἽᾙ{ἩΙ}ⳡⳠꙝꙜꜥꜤ𑣑𑢱 } -\tl_const:cn { c__tl_upper_9_X_0_tl } { тТծԾἶἾᾚ{ἪΙ}𑣒𑢲 } -\tl_const:cn { c__tl_upper_9_X_1_tl } { ģĢǫǪɏɎͻϽϟϞуУҧҦԋԊկԿḋḊṯṮồỒἷἿᾛ{ἫΙ}ⳣⳢꙟꙞꜧꜦ𑣓𑢳 } -\tl_const:cn { c__tl_upper_9_X_2_tl } { ƈƇɐⱯͼϾфФհՀᾜ{ἬΙ}ꞌꞋ𑣔𑢴 } -\tl_const:cn { c__tl_upper_9_X_3_tl } { ĥĤǭǬɑⱭͽϿϡϠхХҩҨԍԌձՁḍḌṱṰổỔᾝ{ἭΙ}ⲁⲀꙡꙠꜩꜨ𑣕𑢵 } -\tl_const:cn { c__tl_upper_9_X_4_tl } { ɒⱰцЦղՂᾞ{ἮΙ}𑣖𑢶 } -\tl_const:cn { c__tl_upper_9_X_5_tl } { ħĦǯǮɓƁϣϢчЧҫҪԏԎճՃḏḎṳṲỗỖᾟ{ἯΙ}ⲃⲂꙣꙢꜫꜪ𑣗𑢷 } -\tl_const:cn { c__tl_upper_9_X_6_tl } { ƌƋǰ{J̌}ɔƆшШմՄᾠ{ὨΙ}𑣘𑢸 } -\tl_const:cn { c__tl_upper_9_X_7_tl } { aAĩĨϥϤщЩҭҬԑԐյՅḑḐṵṴộỘᾡ{ὩΙ}ⲅⲄꙥꙤꜭꜬꞑꞐ𑣙𑢹 } -\tl_const:cn { c__tl_upper_9_X_8_tl } { bBDzDZɖƉъЪնՆᾢ{ὪΙ}𑣚𑢺 } -\tl_const:cn { c__tl_upper_9_X_9_tl } { cCīĪdzDZɗƊϧϦыЫүҮԓԒշՇḓḒṷṶớỚᾣ{ὫΙ}ⲇⲆꙧꙦꜯꜮꞓꞒ𑣛𑢻 } -\tl_const:cn { c__tl_lower_0_X_0_tl } { ÈèĬĭƐɛǴǵϨϩҰұԔԕḔḕṸṹỜờⒸⓒⰤⱔⲈⲉꙨꙩ } -\tl_const:cn { c__tl_lower_0_X_1_tl } { ÉéƑƒჍⴭⒹⓓⰥⱕⳭⳮ } -\tl_const:cn { c__tl_lower_0_X_2_tl } { ÊêĮįǶƕΆάϪϫҲҳԖԗḖḗṺṻỞởⒺⓔⰦⱖⲊⲋꙪꙫꜲꜳꞖꞗ } -\tl_const:cn { c__tl_lower_0_X_3_tl } { ËëƓɠǷƿⒻⓕⰧⱗ } -\tl_const:cn { c__tl_lower_0_X_4_tl } { Ììİ{i̇}ƔɣǸǹΈέϬϭҴҵԘԙḘḙṼṽỠỡᾨᾠⒼⓖⰨⱘⲌⲍꙬꙭꜴꜵꞘꞙ } -\tl_const:cn { c__tl_lower_0_X_5_tl } { ÍíΉήᾩᾡⒽⓗⰩⱙ } -\tl_const:cn { c__tl_lower_0_X_6_tl } { Îî{IJ}{ij}ƖɩǺǻΊίϮϯҶҷԚԛḚḛṾṿỢợᾪᾢⒾⓘⰪⱚⲎⲏⳲⳳꜶꜷꞚꞛ } -\tl_const:cn { c__tl_lower_0_X_7_tl } { ÏïƗɨᾫᾣⒿⓙⰫⱛ } -\tl_const:cn { c__tl_lower_0_X_8_tl } { ÐðĴĵƘƙǼǽΌόҸҹԜԝḜḝẀẁỤụὈὀᾬᾤⓀⓚⰬⱜⲐⲑꜸꜹꞜꞝ } -\tl_const:cn { c__tl_lower_0_X_9_tl } { ÑñὉὁᾭᾥⓁⓛⰭⱝ } -\tl_const:cn { c__tl_lower_1_X_0_tl } { ÒòĶķǾǿΎύҺһԞԟḞḟẂẃỦủὊὂᾮᾦⓂⓜⰮⱞⲒⲓꜺꜻꞞꞟ } -\tl_const:cn { c__tl_lower_1_X_1_tl } { ÓóΏώὋὃᾯᾧⓃⓝ } -\tl_const:cn { c__tl_lower_1_X_2_tl } { ÔôƜɯȀȁϴθҼҽԠԡḠḡẄẅỨứὌὄⓄⓞⲔⲕꜼꜽꞠꞡ } -\tl_const:cn { c__tl_lower_1_X_3_tl } { ÕõĹĺƝɲΑαὍὅⓅⓟAa } -\tl_const:cn { c__tl_lower_1_X_4_tl } { ÖöȂȃΒβҾҿԢԣḢḣẆẇỪừⓆⓠⲖⲗꜾꜿꞢꞣBb } -\tl_const:cn { c__tl_lower_1_X_5_tl } { ĻļƟɵΓγϷϸⓇⓡCc } -\tl_const:cn { c__tl_lower_1_X_6_tl } { ØøƠơȄȅΔδӀӏԤԥḤḥẈẉỬửⓈⓢⲘⲙꝀꝁꞤꞥDd } -\tl_const:cn { c__tl_lower_1_X_7_tl } { ÙùĽľΕεϹϲӁӂⓉⓣEe } -\tl_const:cn { c__tl_lower_1_X_8_tl } { ÚúƢƣȆȇΖζϺϻԦԧḦḧẊẋỮữⓊⓤⲚⲛꝂꝃꞦꞧFf } -\tl_const:cn { c__tl_lower_1_X_9_tl } { ÛûĿŀΗηӃӄⓋⓥGg } -\tl_const:cn { c__tl_lower_2_X_0_tl } { ÜüƤƥȈȉΘθѠѡԨԩḨḩẌẍỰựᾸᾰⓌⓦⲜⲝꝄꝅꞨꞩHh } -\tl_const:cn { c__tl_lower_2_X_1_tl } { ÝýŁłΙιϽͻӅӆᾹᾱⓍⓧIi } -\tl_const:cn { c__tl_lower_2_X_2_tl } { ÞþƦʀȊȋΚκϾͼѢѣԪԫḪḫẎẏỲỳᾺὰⓎⓨⲞⲟꝆꝇꞪɦJj } -\tl_const:cn { c__tl_lower_2_X_3_tl } { ŃńƧƨΛλϿͽӇӈΆάⓏⓩꞫɜKk } -\tl_const:cn { c__tl_lower_2_X_4_tl } { ȌȍΜμЀѐѤѥԬԭḬḭẐẑỴỵᾼᾳⲠⲡꚀꚁꝈꝉꞬɡLl } -\tl_const:cn { c__tl_lower_2_X_5_tl } { ŅņƩʃΝνЁёӉӊὙὑꞭɬMm } -\tl_const:cn { c__tl_lower_2_X_6_tl } { ȎȏΞξЂђѦѧԮԯḮḯẒẓỶỷⲢⲣꚂꚃꝊꝋNn } -\tl_const:cn { c__tl_lower_2_X_7_tl } { ŇňΟοЃѓӋӌὛὓOo } -\tl_const:cn { c__tl_lower_2_X_8_tl } { ƬƭȐȑΠπЄєѨѩḰḱẔẕỸỹⲤⲥꚄꚅꝌꝍꞰʞPp } -\tl_const:cn { c__tl_lower_2_X_9_tl } { ΡρЅѕӍӎԱաὝὕꞱʇQq } -\tl_const:cn { c__tl_lower_3_X_0_tl } { ŊŋƮʈȒȓІіѪѫԲբḲḳỺỻⲦⲧꚆꚇꝎꝏRr } -\tl_const:cn { c__tl_lower_3_X_1_tl } { ƯưΣσЇїԳգὟὗSs } -\tl_const:cn { c__tl_lower_3_X_2_tl } { ŌōȔȕΤτЈјѬѭӐӑԴդḴḵỼỽⲨⲩꚈꚉꝐꝑTt } -\tl_const:cn { c__tl_lower_3_X_3_tl } { ƱʊΥυЉљԵեUu } -\tl_const:cn { c__tl_lower_3_X_4_tl } { ŎŏƲʋȖȗΦφЊњѮѯӒӓԶզḶḷỾỿⲪⲫꚊꚋꝒꝓVv } -\tl_const:cn { c__tl_lower_3_X_5_tl } { ƳƴΧχЋћԷէWw } -\tl_const:cn { c__tl_lower_3_X_6_tl } { ŐőȘșΨψЌќѰѱӔӕԸըḸḹῈὲⲬⲭꚌꚍꝔꝕXx } -\tl_const:cn { c__tl_lower_3_X_7_tl } { ƵƶΩωЍѝԹթΈέYy } -\tl_const:cn { c__tl_lower_3_X_8_tl } { ŒœȚțΪϊЎўѲѳӖӗԺժḺḻẞßῊὴⲮⲯꚎꚏꝖꝗZz } -\tl_const:cn { c__tl_lower_3_X_9_tl } { ƷʒΫϋЏџԻիΉή } -\tl_const:cn { c__tl_lower_4_X_0_tl } { ŔŕƸƹȜȝАаѴѵӘәԼլḼḽẠạὨὠῌῃⲰⲱꚐꚑꝘꝙ𑢠𑣀 } -\tl_const:cn { c__tl_lower_4_X_1_tl } { БбԽխὩὡ𑢡𑣁 } -\tl_const:cn { c__tl_lower_4_X_2_tl } { ŖŗȞȟВвѶѷӚӛԾծḾḿẢảὪὢⲲⲳꚒꚓꝚꝛ𑢢𑣂 } -\tl_const:cn { c__tl_lower_4_X_3_tl } { ГгԿկὫὣ𑢣𑣃 } -\tl_const:cn { c__tl_lower_4_X_4_tl } { ŘřƼƽȠƞДдѸѹӜӝՀհṀṁẤấἈἀὬὤⅠⅰⲴⲵꚔꚕꝜꝝ𑢤𑣄 } -\tl_const:cn { c__tl_lower_4_X_5_tl } { ЕеՁձἉἁὭὥ{Ⅱ}{ⅱ}𑢥𑣅 } -\tl_const:cn { c__tl_lower_4_X_6_tl } { ŚśȢȣЖжѺѻӞӟՂղṂṃẦầἊἂὮὦ{Ⅲ}{ⅲ}ⲶⲷꚖꚗꝞꝟ𑢦𑣆 } -\tl_const:cn { c__tl_lower_4_X_7_tl } { ЗзՃճἋἃὯὧ{Ⅳ}{ⅳ}𑢧𑣇 } -\tl_const:cn { c__tl_lower_4_X_8_tl } { ŜŝȤȥИиѼѽӠӡՄմṄṅẨẩἌἄⅤⅴⲸⲹꚘꚙꝠꝡ𑢨𑣈 } -\tl_const:cn { c__tl_lower_4_X_9_tl } { ЙйՅյἍἅ{Ⅵ}{ⅵ}𑢩𑣉 } -\tl_const:cn { c__tl_lower_5_X_0_tl } { ŞşȦȧКкѾѿӢӣՆնṆṇẪẫἎἆ{Ⅶ}{ⅶ}ⲺⲻꚚꚛꝢꝣ𑢪𑣊 } -\tl_const:cn { c__tl_lower_5_X_1_tl } { ЛлՇշἏἇ{Ⅷ}{ⅷ}𑢫𑣋 } -\tl_const:cn { c__tl_lower_5_X_2_tl } { ŠšDŽdžȨȩМмҀҁӤӥՈոṈṉẬậῘῐ{Ⅸ}{ⅸ}ⲼⲽꝤꝥ𑢬𑣌 } -\tl_const:cn { c__tl_lower_5_X_3_tl } { DždžНнՉչῙῑⅩⅹ𑢭𑣍 } -\tl_const:cn { c__tl_lower_5_X_4_tl } { ŢţȪȫОоӦӧՊպṊṋẮắῚὶⅪⅺⲾⲿꝦꝧ𑢮𑣎 } -\tl_const:cn { c__tl_lower_5_X_5_tl } { LJljПпՋջΊίⅫⅻ𑢯𑣏 } -\tl_const:cn { c__tl_lower_5_X_6_tl } { ĀāŤťLjljȬȭРрӨөՌռႠⴀṌṍẰằⅬⅼⳀⳁꝨꝩ𑢰𑣐 } -\tl_const:cn { c__tl_lower_5_X_7_tl } { СсՍսႡⴁⅭⅽ𑢱𑣑 } -\tl_const:cn { c__tl_lower_5_X_8_tl } { ĂăŦŧNJnjȮȯТтӪӫՎվႢⴂṎṏẲẳⅮⅾⳂⳃꝪꝫ𑢲𑣒 } -\tl_const:cn { c__tl_lower_5_X_9_tl } { NjnjУуՏտႣⴃⅯⅿ𑢳𑣓 } -\tl_const:cn { c__tl_lower_6_X_0_tl } { ĄąŨũȰȱФфӬӭՐրႤⴄṐṑẴẵἘἐⱠⱡⳄⳅꙀꙁꝬꝭ𐐀𐐨𑢴𑣔 } -\tl_const:cn { c__tl_lower_6_X_1_tl } { ǍǎХхՑցႥⴅἙἑ𐐁𐐩𑢵𑣕 } -\tl_const:cn { c__tl_lower_6_X_2_tl } { ĆćŪūȲȳЦцҊҋӮӯՒւႦⴆṒṓẶặἚἒⱢɫⳆⳇꙂꙃꝮꝯ𐐂𐐪𑢶𑣖 } -\tl_const:cn { c__tl_lower_6_X_3_tl } { ǏǐЧчՓփႧⴇἛἓⱣᵽ𐐃𐐫𑢷𑣗 } -\tl_const:cn { c__tl_lower_6_X_4_tl } { ĈĉŬŭШшҌҍӰӱՔքႨⴈṔṕẸẹἜἔⰀⰰⱤɽⳈⳉꙄꙅ𐐄𐐬𑢸𑣘 } -\tl_const:cn { c__tl_lower_6_X_5_tl } { AaǑǒЩщՕօႩⴉἝἕⰁⰱ𐐅𐐭𑢹𑣙 } -\tl_const:cn { c__tl_lower_6_X_6_tl } { BbĊċŮůЪъҎҏӲӳՖֆႪⴊṖṗẺẻⰂⰲⳊⳋꙆꙇ𐐆𐐮𑢺𑣚 } -\tl_const:cn { c__tl_lower_6_X_7_tl } { CcǓǔЫыႫⴋⰃⰳⱧⱨ𐐇𐐯𑢻𑣛 } -\tl_const:cn { c__tl_lower_6_X_8_tl } { DdČčŰűЬьҐґӴӵႬⴌṘṙẼẽῨῠⰄⰴⳌⳍꙈꙉ𐐈𐐰𑢼𑣜 } -\tl_const:cn { c__tl_lower_6_X_9_tl } { EeǕǖЭэႭⴍῩῡⰅⰵⱩⱪ𐐉𐐱𑢽𑣝 } -\tl_const:cn { c__tl_lower_7_X_0_tl } { FfĎďŲųȺⱥЮюҒғӶӷႮⴎṚṛẾếῪὺⰆⰶⳎⳏꙊꙋ𐐊𐐲𑢾𑣞 } -\tl_const:cn { c__tl_lower_7_X_1_tl } { GgǗǘȻȼЯяႯⴏΎύⰇⰷⱫⱬ𐐋𐐳𑢿𑣟 } -\tl_const:cn { c__tl_lower_7_X_2_tl } { HhĐđŴŵҔҕӸӹႰⴐṜṝỀềᾈᾀῬῥⰈⰸⳐⳑꙌꙍ𐐌𐐴 } -\tl_const:cn { c__tl_lower_7_X_3_tl } { IiǙǚȽƚႱⴑᾉᾁⰉⰹⱭɑꝹꝺ𐐍𐐵 } -\tl_const:cn { c__tl_lower_7_X_4_tl } { JjĒēŶŷȾⱦҖҗӺӻႲⴒṞṟỂểᾊᾂⰊⰺⱮɱⳒⳓꙎꙏ𐐎𐐶 } -\tl_const:cn { c__tl_lower_7_X_5_tl } { KkǛǜϏϗႳⴓᾋᾃⰋⰻⱯɐꝻꝼ𐐏𐐷 } -\tl_const:cn { c__tl_lower_7_X_6_tl } { LlĔĕŸÿҘҙӼӽႴⴔṠṡỄễἨἠᾌᾄⰌⰼⱰɒⳔⳕꙐꙑ𐐐𐐸 } -\tl_const:cn { c__tl_lower_7_X_7_tl } { MmŹźɁɂႵⴕἩἡᾍᾅⰍⰽꝽᵹ𐐑𐐹 } -\tl_const:cn { c__tl_lower_7_X_8_tl } { NnĖėǞǟҚқӾӿႶⴖṢṣỆệἪἢᾎᾆⰎⰾⱲⱳⳖⳗꙒꙓꝾꝿ𐐒𐐺 } -\tl_const:cn { c__tl_lower_7_X_9_tl } { OoŻżɃƀႷⴗἫἣᾏᾇↃↄⰏⰿ𐐓𐐻 } -\tl_const:cn { c__tl_lower_8_X_0_tl } { PpĘęǠǡɄʉͰͱҜҝԀԁႸⴘḀḁṤṥỈỉἬἤⰐⱀⳘⳙꙔꙕꞀꞁ𐐔𐐼 } -\tl_const:cn { c__tl_lower_8_X_1_tl } { QqŽžɅʌႹⴙἭἥⰑⱁⱵⱶ𐐕𐐽 } -\tl_const:cn { c__tl_lower_8_X_2_tl } { RrĚěǢǣɆɇͲͳҞҟԂԃႺⴚḂḃṦṧỊịἮἦⰒⱂⳚⳛꙖꙗꞂꞃ𐐖𐐾 } -\tl_const:cn { c__tl_lower_8_X_3_tl } { SsႻⴛἯἧⰓⱃ𐐗𐐿 } -\tl_const:cn { c__tl_lower_8_X_4_tl } { TtĜĝǤǥɈɉϘϙҠҡԄԅႼⴜḄḅṨṩỌọῸὸⰔⱄⳜⳝꙘꙙꞄꞅ𐐘𐑀 } -\tl_const:cn { c__tl_lower_8_X_5_tl } { UuƁɓႽⴝΌόⰕⱅ𐐙𐑁 } -\tl_const:cn { c__tl_lower_8_X_6_tl } { VvĞğƂƃǦǧɊɋͶͷϚϛҢңԆԇႾⴞḆḇṪṫỎỏῺὼΩωⰖⱆⳞⳟꙚꙛꜢꜣꞆꞇ𐐚𐑂 } -\tl_const:cn { c__tl_lower_8_X_7_tl } { WwႿⴟΏώⰗⱇ𐐛𐑃 } -\tl_const:cn { c__tl_lower_8_X_8_tl } { XxĠġƄƅǨǩɌɍϜϝҤҥԈԉჀⴠḈḉṬṭỐốᾘᾐῼῳⰘⱈⳠⳡꙜꙝꜤꜥ𐐜𐑄 } -\tl_const:cn { c__tl_lower_8_X_9_tl } { YyჁⴡᾙᾑⰙⱉ𐐝𐑅 } -\tl_const:cn { c__tl_lower_9_X_0_tl } { ZzĢģƆɔǪǫɎɏϞϟҦҧԊԋჂⴢḊḋṮṯỒồᾚᾒKkⰚⱊⱾȿⳢⳣꙞꙟꜦꜧ𐐞𐑆 } -\tl_const:cn { c__tl_lower_9_X_1_tl } { ƇƈჃⴣᾛᾓÅåⰛⱋⱿɀꞋꞌ𐐟𐑇 } -\tl_const:cn { c__tl_lower_9_X_2_tl } { ÀàĤĥǬǭϠϡҨҩԌԍჄⴤḌḍṰṱỔổἸἰᾜᾔⰜⱌⲀⲁꙠꙡꜨꜩ𐐠𐑈 } -\tl_const:cn { c__tl_lower_9_X_3_tl } { ÁáƉɖჅⴥἹἱᾝᾕⰝⱍꞍɥ𐐡𐑉 } -\tl_const:cn { c__tl_lower_9_X_4_tl } { ÂâĦħƊɗǮǯϢϣҪҫԎԏḎḏṲṳỖỗἺἲᾞᾖⰞⱎⲂⲃꙢꙣꜪꜫ𐐢𐑊 } -\tl_const:cn { c__tl_lower_9_X_5_tl } { ÃãƋƌͿϳჇⴧἻἳᾟᾗⰟⱏ𐐣𐑋 } -\tl_const:cn { c__tl_lower_9_X_6_tl } { ÄäĨĩϤϥҬҭԐԑḐḑṴṵỘộἼἴⰠⱐⲄⲅꙤꙥꜬꜭꞐꞑ𐐤𐑌 } -\tl_const:cn { c__tl_lower_9_X_7_tl } { ÅåDZdzἽἵⰡⱑ𐐥𐑍 } -\tl_const:cn { c__tl_lower_9_X_8_tl } { ÆæĪīƎǝDzdzϦϧҮүԒԓḒḓṶṷỚớἾἶℲⅎⒶⓐⰢⱒⲆⲇꙦꙧꜮꜯꞒꞓ𐐦𐑎 } -\tl_const:cn { c__tl_lower_9_X_9_tl } { ÇçƏəἿἷⒷⓑⰣⱓⳫⳬ𐐧𐑏 } -\tl_const:Nn \c__tl_mixed_exceptions_tl { {ß}{Ss}{ff}{Ff}{fi}{Fi}{fl}{Fl}{ffi}{Ffi}{ffl}{Ffl}{ſt}{St}{st}{St}{և}{Եւ}{ﬓ}{Մն}{ﬔ}{Մե}{ﬕ}{Մի}{ﬖ}{Վն}{ﬗ}{Մխ}{ᾲ}{Ὰͅ}{ᾴ}{Άͅ}{ῂ}{Ὴͅ}{ῄ}{Ήͅ}{ῲ}{Ὼͅ}{ῴ}{Ώͅ}{ᾷ}{ᾼ͂}{ῇ}{ῌ͂}{ῷ}{ῼ͂}{Dž}{Dž}{dž}{Dž}{Lj}{Lj}{lj}{Lj}{Nj}{Nj}{nj}{Nj}{Dz}{Dz}{dz}{Dz} } -\tl_const:Nn \c__tl_std_sigma_tl { σ } -\tl_const:Nn \c__tl_final_sigma_tl { ς } -\tl_const:Nn \c__tl_dotless_i_tl { ı } -\tl_const:Nn \c__tl_dot_above_tl { ̇ } -\tl_const:Nn \c__tl_dotted_I_tl { İ } -\tl_const:Nn \c__tl_accents_lt_tl {Ì{i̇̀}Í{i̇́}Ĩ{i̇̃}} -\group_begin: - \cs_set_protected:Npn \__str_tmp:NNn #1#2#3 - { - \tl_const:cx { c__str_fold_#1 _X_ #2_tl } - { \__str_tmp:Nw #3 \q_recursion_tail { } \q_recursion_stop } - } - \cs_set:Npn \__str_tmp:Nw #1#2 - { - \quark_if_recursion_tail_stop:N #1 - \tl_to_str:N #1 - \tl_if_blank:oT { \use_none:n #2 } - { \use:n } - { \tl_to_str:n {#2} } - \__str_tmp:Nw - } - \__str_tmp:NNn 0 0 { ÈèĬĭƐɛǴǵϨϩҰұԔԕḔḕṸṹỜờᾤ{ὤι}ⒸⓒⰤⱔⲈⲉꙨꙩ } - \__str_tmp:NNn 0 1 { ÉéƑƒჍⴭᾥ{ὥι}ⒹⓓⰥⱕⳭⳮ } - \__str_tmp:NNn 0 2 { ÊêĮįǶƕΆάϪϫҲҳԖԗḖḗṺṻỞởᾦ{ὦι}ⒺⓔⰦⱖⲊⲋꙪꙫꜲꜳꞖꞗ } - \__str_tmp:NNn 0 3 { ËëƓɠǷƿᾧ{ὧι}ⒻⓕⰧⱗ } - \__str_tmp:NNn 0 4 { Ììİ{i̇}ƔɣǸǹΈέϬϭҴҵԘԙḘḙṼṽỠỡᾨ{ὠι}ⒼⓖⰨⱘⲌⲍꙬꙭꜴꜵꞘꞙ } - \__str_tmp:NNn 0 5 { ÍíΉήᾩ{ὡι}ⒽⓗⰩⱙ } - \__str_tmp:NNn 0 6 { Îî{IJ}{ij}ƖɩǺǻΊίϮϯҶҷԚԛḚḛṾṿỢợᾪ{ὢι}ⒾⓘⰪⱚⲎⲏⳲⳳꜶꜷꞚꞛ } - \__str_tmp:NNn 0 7 { ÏïƗɨᾫ{ὣι}ⒿⓙⰫⱛ } - \__str_tmp:NNn 0 8 { ÐðĴĵƘƙǼǽΌόϰκҸҹԜԝḜḝẀẁỤụὈὀᾬ{ὤι}ⓀⓚⰬⱜⲐⲑꜸꜹꞜꞝ } - \__str_tmp:NNn 0 9 { ÑñϱρὉὁᾭ{ὥι}ⓁⓛⰭⱝ } - \__str_tmp:NNn 1 0 { ÒòĶķǾǿΎύҺһԞԟḞḟẂẃỦủὊὂᾮ{ὦι}ⓂⓜⰮⱞⲒⲓꜺꜻꞞꞟ } - \__str_tmp:NNn 1 1 { ÓóΏώὋὃᾯ{ὧι}Ⓝⓝ } - \__str_tmp:NNn 1 2 { ÔôƜɯȀȁΐ{ΐ}ϴθҼҽԠԡḠḡẄẅỨứὌὄⓄⓞⲔⲕꜼꜽꞠꞡ } - \__str_tmp:NNn 1 3 { ÕõĹĺƝɲΑαϵεὍὅⓅⓟAa } - \__str_tmp:NNn 1 4 { ÖöȂȃΒβҾҿԢԣḢḣẆẇỪừᾲ{ὰι}ⓆⓠⲖⲗꜾꜿꞢꞣBb } - \__str_tmp:NNn 1 5 { ĻļƟɵΓγϷϸ{և}{եւ}ᾳ{αι}ⓇⓡCc } - \__str_tmp:NNn 1 6 { ØøƠơȄȅΔδӀӏԤԥḤḥẈẉỬửὐ{ὐ}ᾴ{άι}ⓈⓢⲘⲙꝀꝁꞤꞥDd } - \__str_tmp:NNn 1 7 { ÙùĽľΕεϹϲӁӂⓉⓣEe } - \__str_tmp:NNn 1 8 { ÚúƢƣȆȇΖζϺϻԦԧḦḧẊẋỮữὒ{ὒ}ᾶ{ᾶ}ⓊⓤⲚⲛꝂꝃꞦꞧFf } - \__str_tmp:NNn 1 9 { Ûû{Ŀ}{ŀ}ΗηӃӄᾷ{ᾶι}ⓋⓥGg } - \__str_tmp:NNn 2 0 { ÜüƤƥȈȉΘθѠѡԨԩḨḩẌẍỰựὔ{ὔ}ᾸᾰⓌⓦⲜⲝꝄꝅꞨꞩHh } - \__str_tmp:NNn 2 1 { ÝýŁłΙιϽͻӅӆᾹᾱⓍⓧIi } - \__str_tmp:NNn 2 2 { ÞþƦʀȊȋΚκϾͼѢѣԪԫḪḫẎẏỲỳὖ{ὖ}ᾺὰⓎⓨⲞⲟꝆꝇꞪɦJj } - \__str_tmp:NNn 2 3 { ß{ss}ŃńƧƨΛλϿͽӇӈΆάⓏⓩꞫɜKk } - \__str_tmp:NNn 2 4 { ȌȍΜμЀѐѤѥԬԭḬḭẐẑỴỵᾼ{αι}ⲠⲡꚀꚁꝈꝉꞬɡLl } - \__str_tmp:NNn 2 5 { ŅņƩʃΝνЁёӉӊὙὑꞭɬMm } - \__str_tmp:NNn 2 6 { ȎȏΞξЂђѦѧԮԯḮḯẒẓỶỷιιⲢⲣꚂꚃꝊꝋNn } - \__str_tmp:NNn 2 7 { ŇňΟοЃѓӋӌὛὓOo } - \__str_tmp:NNn 2 8 { ƬƭȐȑΠπЄєѨѩḰḱẔẕỸỹⲤⲥꚄꚅꝌꝍꞰʞPp } - \__str_tmp:NNn 2 9 { {ʼn}{ʼn}ΡρЅѕӍӎԱաὝὕꞱʇQq } - \__str_tmp:NNn 3 0 { ŊŋƮʈȒȓІіѪѫԲբḲḳẖ{ẖ}Ỻỻῂ{ὴι}ⲦⲧꚆꚇꝎꝏRr } - \__str_tmp:NNn 3 1 { ƯưΣσЇїԳգẗ{ẗ}Ὗὗῃ{ηι}Ss } - \__str_tmp:NNn 3 2 { ŌōȔȕΤτЈјѬѭӐӑԴդḴḵẘ{ẘ}Ỽỽῄ{ήι}ⲨⲩꚈꚉꝐꝑTt } - \__str_tmp:NNn 3 3 { ƱʊΥυЉљԵեẙ{ẙ}Uu } - \__str_tmp:NNn 3 4 { ŎŏƲʋȖȗΦφЊњѮѯӒӓԶզḶḷ{ẚ}{aʾ}Ỿỿῆ{ῆ}ⲪⲫꚊꚋꝒꝓVv } - \__str_tmp:NNn 3 5 { ƳƴΧχЋћԷէẛṡῇ{ῆι}Ww } - \__str_tmp:NNn 3 6 { ŐőȘșΨψЌќѰѱӔӕԸըḸḹῈὲⲬⲭꚌꚍꝔꝕXx } - \__str_tmp:NNn 3 7 { ƵƶͅιΩωЍѝԹթΈέYy } - \__str_tmp:NNn 3 8 { ŒœȚțΪϊЎўѲѳӖӗԺժḺḻẞ{ss}ῊὴⲮⲯꚎꚏꝖꝗZz } - \__str_tmp:NNn 3 9 { ƷʒΫϋЏџԻիΉή } - \__str_tmp:NNn 4 0 { ŔŕƸƹȜȝАаѴѵӘәԼլḼḽẠạὨὠῌ{ηι}ⲰⲱꚐꚑꝘꝙ𑢠𑣀 } - \__str_tmp:NNn 4 1 { БбԽխὩὡ𑢡𑣁 } - \__str_tmp:NNn 4 2 { ŖŗȞȟВвѶѷӚӛԾծḾḿẢảὪὢⲲⲳꚒꚓꝚꝛ𑢢𑣂 } - \__str_tmp:NNn 4 3 { ГгԿկὫὣ𑢣𑣃 } - \__str_tmp:NNn 4 4 { ŘřƼƽȠƞΰ{ΰ}ДдѸѹӜӝՀհṀṁẤấἈἀὬὤⅠⅰⲴⲵꚔꚕꝜꝝ𑢤𑣄 } - \__str_tmp:NNn 4 5 { ЕеՁձἉἁὭὥ{Ⅱ}{ⅱ}𑢥𑣅 } - \__str_tmp:NNn 4 6 { ŚśȢȣЖжѺѻӞӟՂղṂṃẦầἊἂὮὦῒ{ῒ}{Ⅲ}{ⅲ}ⲶⲷꚖꚗꝞꝟ𑢦𑣆 } - \__str_tmp:NNn 4 7 { ЗзՃճἋἃὯὧΐ{ΐ}{Ⅳ}{ⅳ}𑢧𑣇 } - \__str_tmp:NNn 4 8 { ŜŝȤȥИиѼѽӠӡՄմṄṅẨẩἌἄⅤⅴⲸⲹꚘꚙꝠꝡ𑢨𑣈 } - \__str_tmp:NNn 4 9 { ЙйՅյἍἅ{Ⅵ}{ⅵ}𑢩𑣉 } - \__str_tmp:NNn 5 0 { ŞşȦȧКкѾѿӢӣՆնṆṇẪẫἎἆῖ{ῖ}{Ⅶ}{ⅶ}ⲺⲻꚚꚛꝢꝣ𑢪𑣊 } - \__str_tmp:NNn 5 1 { ЛлՇշἏἇῗ{ῗ}{Ⅷ}{ⅷ}𑢫𑣋 } - \__str_tmp:NNn 5 2 { Šš{DŽ}{dž}ȨȩМмҀҁӤӥՈոṈṉẬậῘῐ{Ⅸ}{ⅸ}ⲼⲽꝤꝥ𑢬𑣌 } - \__str_tmp:NNn 5 3 { {Dž}{dž}НнՉչῙῑⅩⅹ𑢭𑣍 } - \__str_tmp:NNn 5 4 { ŢţȪȫОоӦӧՊպṊṋẮắῚὶ{Ⅺ}{ⅺ}ⲾⲿꝦꝧ𑢮𑣎 } - \__str_tmp:NNn 5 5 { {LJ}{lj}ПпՋջΊί{Ⅻ}{ⅻ}𑢯𑣏 } - \__str_tmp:NNn 5 6 { ĀāŤť{Lj}{lj}ȬȭРрӨөՌռႠⴀṌṍẰằⅬⅼⳀⳁꝨꝩ{ff}{ff}𑢰𑣐 } - \__str_tmp:NNn 5 7 { СсՍսႡⴁⅭⅽ{fi}{fi}𑢱𑣑 } - \__str_tmp:NNn 5 8 { ĂăŦŧ{NJ}{nj}ȮȯТтӪӫՎվႢⴂṎṏẲẳⅮⅾⳂⳃꝪꝫ{fl}{fl}𑢲𑣒 } - \__str_tmp:NNn 5 9 { {Nj}{nj}УуՏտႣⴃⅯⅿ{ffi}{ffi}𑢳𑣓 } - \__str_tmp:NNn 6 0 { ĄąŨũȰȱФфӬӭՐրႤⴄṐṑẴẵἘἐⱠⱡⳄⳅꙀꙁꝬꝭ{ffl}{ffl}𐐀𐐨𑢴𑣔 } - \__str_tmp:NNn 6 1 { ǍǎХхՑցႥⴅἙἑ{ſt}{st}𐐁𐐩𑢵𑣕 } - \__str_tmp:NNn 6 2 { ĆćŪūȲȳςσЦцҊҋӮӯՒւႦⴆṒṓẶặἚἒῢ{ῢ}ⱢɫⳆⳇꙂꙃꝮꝯ{st}{st}𐐂𐐪𑢶𑣖 } - \__str_tmp:NNn 6 3 { ǏǐЧчՓփႧⴇἛἓΰ{ΰ}Ᵽᵽ𐐃𐐫𑢷𑣗 } - \__str_tmp:NNn 6 4 { ĈĉŬŭШшҌҍӰӱՔքႨⴈṔṕẸẹἜἔᾀ{ἀι}ῤ{ῤ}ⰀⰰⱤɽⳈⳉꙄꙅ𐐄𐐬𑢸𑣘 } - \__str_tmp:NNn 6 5 { AaǑǒЩщՕօႩⴉἝἕᾁ{ἁι}Ⰱⰱ𐐅𐐭𑢹𑣙 } - \__str_tmp:NNn 6 6 { BbĊċŮůЪъҎҏӲӳՖֆႪⴊṖṗẺẻᾂ{ἂι}ῦ{ῦ}ⰂⰲⳊⳋꙆꙇ𐐆𐐮𑢺𑣚 } - \__str_tmp:NNn 6 7 { CcǓǔЫыႫⴋᾃ{ἃι}ῧ{ῧ}ⰃⰳⱧⱨ𐐇𐐯𑢻𑣛 } - \__str_tmp:NNn 6 8 { DdČčŰűЬьҐґӴӵႬⴌṘṙẼẽᾄ{ἄι}ῨῠⰄⰴⳌⳍꙈꙉ𐐈𐐰𑢼𑣜 } - \__str_tmp:NNn 6 9 { EeǕǖЭэႭⴍᾅ{ἅι}ῩῡⰅⰵⱩⱪ𐐉𐐱𑢽𑣝 } - \__str_tmp:NNn 7 0 { FfĎďŲųȺⱥЮюҒғӶӷႮⴎṚṛẾếᾆ{ἆι}ῪὺⰆⰶⳎⳏꙊꙋ𐐊𐐲𑢾𑣞 } - \__str_tmp:NNn 7 1 { GgǗǘȻȼЯяႯⴏᾇ{ἇι}ΎύⰇⰷⱫⱬ𐐋𐐳𑢿𑣟 } - \__str_tmp:NNn 7 2 { HhĐđŴŵҔҕӸӹႰⴐṜṝỀềᾈ{ἀι}ῬῥⰈⰸⳐⳑꙌꙍ𐐌𐐴 } - \__str_tmp:NNn 7 3 { IiǙǚȽƚႱⴑᾉ{ἁι}ⰉⰹⱭɑꝹꝺ𐐍𐐵 } - \__str_tmp:NNn 7 4 { JjĒēŶŷȾⱦҖҗӺӻႲⴒṞṟỂểᾊ{ἂι}ⰊⰺⱮɱⳒⳓꙎꙏ𐐎𐐶 } - \__str_tmp:NNn 7 5 { KkǛǜϏϗႳⴓᾋ{ἃι}ⰋⰻⱯɐꝻꝼ{ﬓ}{մն}𐐏𐐷 } - \__str_tmp:NNn 7 6 { LlĔĕŸÿϐβҘҙӼӽႴⴔṠṡỄễἨἠᾌ{ἄι}ⰌⰼⱰɒⳔⳕꙐꙑ{ﬔ}{մե}𐐐𐐸 } - \__str_tmp:NNn 7 7 { MmŹźɁɂϑθႵⴕἩἡᾍ{ἅι}ⰍⰽꝽᵹ{ﬕ}{մի}𐐑𐐹 } - \__str_tmp:NNn 7 8 { NnĖėǞǟҚқӾӿႶⴖṢṣỆệἪἢᾎ{ἆι}ῲ{ὼι}ⰎⰾⱲⱳⳖⳗꙒꙓꝾꝿ{ﬖ}{վն}𐐒𐐺 } - \__str_tmp:NNn 7 9 { OoŻżɃƀႷⴗἫἣᾏ{ἇι}ῳ{ωι}ↃↄⰏⰿ{ﬗ}{մխ}𐐓𐐻 } - \__str_tmp:NNn 8 0 { PpĘęǠǡɄʉͰͱҜҝԀԁႸⴘḀḁṤṥỈỉἬἤᾐ{ἠι}ῴ{ώι}ⰐⱀⳘⳙꙔꙕꞀꞁ𐐔𐐼 } - \__str_tmp:NNn 8 1 { QqµμŽžɅʌϕφႹⴙἭἥᾑ{ἡι}ⰑⱁⱵⱶ𐐕𐐽 } - \__str_tmp:NNn 8 2 { RrĚěǢǣɆɇͲͳϖπҞҟԂԃႺⴚḂḃṦṧỊịἮἦᾒ{ἢι}ῶ{ῶ}ⰒⱂⳚⳛꙖꙗꞂꞃ𐐖𐐾 } - \__str_tmp:NNn 8 3 { SsſsႻⴛἯἧᾓ{ἣι}ῷ{ῶι}Ⱃⱃ𐐗𐐿 } - \__str_tmp:NNn 8 4 { TtĜĝǤǥɈɉϘϙҠҡԄԅႼⴜḄḅṨṩỌọᾔ{ἤι}ῸὸⰔⱄⳜⳝꙘꙙꞄꞅ𐐘𐑀 } - \__str_tmp:NNn 8 5 { UuƁɓႽⴝᾕ{ἥι}ΌόⰕⱅ𐐙𐑁 } - \__str_tmp:NNn 8 6 { VvĞğƂƃǦǧɊɋͶͷϚϛҢңԆԇႾⴞḆḇṪṫỎỏᾖ{ἦι}ῺὼΩωⰖⱆⳞⳟꙚꙛꜢꜣꞆꞇ𐐚𐑂 } - \__str_tmp:NNn 8 7 { WwႿⴟᾗ{ἧι}ΏώⰗⱇ𐐛𐑃 } - \__str_tmp:NNn 8 8 { XxĠġƄƅǨǩɌɍϜϝҤҥԈԉჀⴠḈḉṬṭỐốᾘ{ἠι}ῼ{ωι}ⰘⱈⳠⳡꙜꙝꜤꜥ𐐜𐑄 } - \__str_tmp:NNn 8 9 { YyჁⴡᾙ{ἡι}Ⱉⱉ𐐝𐑅 } - \__str_tmp:NNn 9 0 { ZzĢģƆɔǪǫɎɏϞϟҦҧԊԋჂⴢḊḋṮṯỒồᾚ{ἢι}KkⰚⱊⱾȿⳢⳣꙞꙟꜦꜧ𐐞𐑆 } - \__str_tmp:NNn 9 1 { ƇƈჃⴣᾛ{ἣι}ÅåⰛⱋⱿɀꞋꞌ𐐟𐑇 } - \__str_tmp:NNn 9 2 { ÀàĤĥǬǭϠϡҨҩԌԍჄⴤḌḍṰṱỔổἸἰᾜ{ἤι}ⰜⱌⲀⲁꙠꙡꜨꜩ𐐠𐑈 } - \__str_tmp:NNn 9 3 { ÁáƉɖჅⴥἹἱᾝ{ἥι}ⰝⱍꞍɥ𐐡𐑉 } - \__str_tmp:NNn 9 4 { ÂâĦħƊɗǮǯϢϣҪҫԎԏḎḏṲṳỖỗἺἲᾞ{ἦι}ⰞⱎⲂⲃꙢꙣꜪꜫ𐐢𐑊 } - \__str_tmp:NNn 9 5 { ÃãƋƌͿϳჇⴧἻἳᾟ{ἧι}Ⱏⱏ𐐣𐑋 } - \__str_tmp:NNn 9 6 { ÄäĨĩǰ{ǰ}ϤϥҬҭԐԑḐḑṴṵỘộἼἴᾠ{ὠι}ⰠⱐⲄⲅꙤꙥꜬꜭꞐꞑ𐐤𐑌 } - \__str_tmp:NNn 9 7 { Åå{DZ}{dz}Ἵἵᾡ{ὡι}Ⱑⱑ𐐥𐑍 } - \__str_tmp:NNn 9 8 { ÆæĪīƎǝ{Dz}{dz}ϦϧҮүԒԓḒḓṶṷỚớἾἶᾢ{ὢι}ℲⅎⒶⓐⰢⱒⲆⲇꙦꙧꜮꜯꞒꞓ𐐦𐑎 } - \__str_tmp:NNn 9 9 { ÇçƏəἿἷᾣ{ὣι}ⒷⓑⰣⱓⳫⳬ𐐧𐑏 } -\group_end: +\tl_const:cn { c__unicode_lower_0_X_0_tl } { ÈèĬĭƐɛǴǵϨϩҰұԔԕḔḕṸṹỜờⒸⓒⰤⱔⲈⲉꙨꙩ } +\tl_const:cn { c__unicode_lower_0_X_1_tl } { ÉéƑƒჍⴭⒹⓓⰥⱕⳭⳮ } +\tl_const:cn { c__unicode_lower_0_X_2_tl } { ÊêĮįǶƕΆάϪϫҲҳԖԗḖḗṺṻỞởⒺⓔⰦⱖⲊⲋꙪꙫꜲꜳꞖꞗ } +\tl_const:cn { c__unicode_lower_0_X_3_tl } { ËëƓɠǷƿⒻⓕⰧⱗ } +\tl_const:cn { c__unicode_lower_0_X_4_tl } { ÌìİiƔɣǸǹΈέϬϭҴҵԘԙḘḙṼṽỠỡᾨᾠⒼⓖⰨⱘⲌⲍꙬꙭꜴꜵꞘꞙ } +\tl_const:cn { c__unicode_lower_0_X_5_tl } { ÍíΉήᾩᾡⒽⓗⰩⱙ } +\tl_const:cn { c__unicode_lower_0_X_6_tl } { Îî{IJ}{ij}ƖɩǺǻΊίϮϯҶҷԚԛḚḛṾṿỢợᾪᾢⒾⓘⰪⱚⲎⲏⳲⳳꜶꜷꞚꞛ } +\tl_const:cn { c__unicode_lower_0_X_7_tl } { ÏïƗɨᾫᾣⒿⓙⰫⱛ } +\tl_const:cn { c__unicode_lower_0_X_8_tl } { ÐðĴĵƘƙǼǽΌόҸҹԜԝḜḝẀẁỤụὈὀᾬᾤⓀⓚⰬⱜⲐⲑꜸꜹꞜꞝ } +\tl_const:cn { c__unicode_lower_0_X_9_tl } { ÑñὉὁᾭᾥⓁⓛⰭⱝ } +\tl_const:cn { c__unicode_lower_1_X_0_tl } { ÒòĶķǾǿΎύҺһԞԟḞḟẂẃỦủὊὂᾮᾦⓂⓜⰮⱞⲒⲓꜺꜻꞞꞟ } +\tl_const:cn { c__unicode_lower_1_X_1_tl } { ÓóΏώὋὃᾯᾧⓃⓝ } +\tl_const:cn { c__unicode_lower_1_X_2_tl } { ÔôƜɯȀȁϴθҼҽԠԡḠḡẄẅỨứὌὄⓄⓞⲔⲕꜼꜽꞠꞡ } +\tl_const:cn { c__unicode_lower_1_X_3_tl } { ÕõĹĺƝɲΑαὍὅⓅⓟAa } +\tl_const:cn { c__unicode_lower_1_X_4_tl } { ÖöȂȃΒβҾҿԢԣḢḣẆẇỪừⓆⓠⲖⲗꜾꜿꞢꞣBb } +\tl_const:cn { c__unicode_lower_1_X_5_tl } { ĻļƟɵΓγϷϸⓇⓡCc } +\tl_const:cn { c__unicode_lower_1_X_6_tl } { ØøƠơȄȅΔδӀӏԤԥḤḥẈẉỬửⓈⓢⲘⲙꝀꝁꞤꞥDd } +\tl_const:cn { c__unicode_lower_1_X_7_tl } { ÙùĽľΕεϹϲӁӂⓉⓣEe } +\tl_const:cn { c__unicode_lower_1_X_8_tl } { ÚúƢƣȆȇΖζϺϻԦԧḦḧẊẋỮữⓊⓤⲚⲛꝂꝃꞦꞧFf } +\tl_const:cn { c__unicode_lower_1_X_9_tl } { ÛûĿŀΗηӃӄⓋⓥGg } +\tl_const:cn { c__unicode_lower_2_X_0_tl } { ÜüƤƥȈȉΘθѠѡԨԩḨḩẌẍỰựᾸᾰⓌⓦⲜⲝꝄꝅꞨꞩHh } +\tl_const:cn { c__unicode_lower_2_X_1_tl } { ÝýŁłΙιϽͻӅӆᾹᾱⓍⓧIi } +\tl_const:cn { c__unicode_lower_2_X_2_tl } { ÞþƦʀȊȋΚκϾͼѢѣԪԫḪḫẎẏỲỳᾺὰⓎⓨⲞⲟꝆꝇꞪɦJj } +\tl_const:cn { c__unicode_lower_2_X_3_tl } { ŃńƧƨΛλϿͽӇӈΆάⓏⓩꞫɜKk } +\tl_const:cn { c__unicode_lower_2_X_4_tl } { ȌȍΜμЀѐѤѥԬԭḬḭẐẑỴỵᾼᾳⲠⲡꚀꚁꝈꝉꞬɡLl } +\tl_const:cn { c__unicode_lower_2_X_5_tl } { ŅņƩʃΝνЁёӉӊὙὑꞭɬMm } +\tl_const:cn { c__unicode_lower_2_X_6_tl } { ȎȏΞξЂђѦѧԮԯḮḯẒẓỶỷⲢⲣꚂꚃꝊꝋNn } +\tl_const:cn { c__unicode_lower_2_X_7_tl } { ŇňΟοЃѓӋӌὛὓOo } +\tl_const:cn { c__unicode_lower_2_X_8_tl } { ƬƭȐȑΠπЄєѨѩḰḱẔẕỸỹⲤⲥꚄꚅꝌꝍꞰʞPp } +\tl_const:cn { c__unicode_lower_2_X_9_tl } { ΡρЅѕӍӎԱաὝὕꞱʇQq } +\tl_const:cn { c__unicode_lower_3_X_0_tl } { ŊŋƮʈȒȓІіѪѫԲբḲḳỺỻⲦⲧꚆꚇꝎꝏRr } +\tl_const:cn { c__unicode_lower_3_X_1_tl } { ƯưΣσЇїԳգὟὗSs } +\tl_const:cn { c__unicode_lower_3_X_2_tl } { ŌōȔȕΤτЈјѬѭӐӑԴդḴḵỼỽⲨⲩꚈꚉꝐꝑTt } +\tl_const:cn { c__unicode_lower_3_X_3_tl } { ƱʊΥυЉљԵեUu } +\tl_const:cn { c__unicode_lower_3_X_4_tl } { ŎŏƲʋȖȗΦφЊњѮѯӒӓԶզḶḷỾỿⲪⲫꚊꚋꝒꝓVv } +\tl_const:cn { c__unicode_lower_3_X_5_tl } { ƳƴΧχЋћԷէWw } +\tl_const:cn { c__unicode_lower_3_X_6_tl } { ŐőȘșΨψЌќѰѱӔӕԸըḸḹῈὲⲬⲭꚌꚍꝔꝕXx } +\tl_const:cn { c__unicode_lower_3_X_7_tl } { ƵƶΩωЍѝԹթΈέYy } +\tl_const:cn { c__unicode_lower_3_X_8_tl } { ŒœȚțΪϊЎўѲѳӖӗԺժḺḻẞßῊὴⲮⲯꚎꚏꝖꝗZz } +\tl_const:cn { c__unicode_lower_3_X_9_tl } { ƷʒΫϋЏџԻիΉή } +\tl_const:cn { c__unicode_lower_4_X_0_tl } { ŔŕƸƹȜȝАаѴѵӘәԼլḼḽẠạὨὠῌῃⲰⲱꚐꚑꝘꝙ𑢠𑣀 } +\tl_const:cn { c__unicode_lower_4_X_1_tl } { БбԽխὩὡ𑢡𑣁 } +\tl_const:cn { c__unicode_lower_4_X_2_tl } { ŖŗȞȟВвѶѷӚӛԾծḾḿẢảὪὢⲲⲳꚒꚓꝚꝛ𑢢𑣂 } +\tl_const:cn { c__unicode_lower_4_X_3_tl } { ГгԿկὫὣ𑢣𑣃 } +\tl_const:cn { c__unicode_lower_4_X_4_tl } { ŘřƼƽȠƞДдѸѹӜӝՀհṀṁẤấἈἀὬὤⅠⅰⲴⲵꚔꚕꝜꝝ𑢤𑣄 } +\tl_const:cn { c__unicode_lower_4_X_5_tl } { ЕеՁձἉἁὭὥ{Ⅱ}{ⅱ}𑢥𑣅 } +\tl_const:cn { c__unicode_lower_4_X_6_tl } { ŚśȢȣЖжѺѻӞӟՂղṂṃẦầἊἂὮὦ{Ⅲ}{ⅲ}ⲶⲷꚖꚗꝞꝟ𑢦𑣆 } +\tl_const:cn { c__unicode_lower_4_X_7_tl } { ЗзՃճἋἃὯὧ{Ⅳ}{ⅳ}𑢧𑣇 } +\tl_const:cn { c__unicode_lower_4_X_8_tl } { ŜŝȤȥИиѼѽӠӡՄմṄṅẨẩἌἄⅤⅴⲸⲹꚘꚙꝠꝡ𑢨𑣈 } +\tl_const:cn { c__unicode_lower_4_X_9_tl } { ЙйՅյἍἅ{Ⅵ}{ⅵ}𑢩𑣉 } +\tl_const:cn { c__unicode_lower_5_X_0_tl } { ŞşȦȧКкѾѿӢӣՆնṆṇẪẫἎἆ{Ⅶ}{ⅶ}ⲺⲻꚚꚛꝢꝣ𑢪𑣊 } +\tl_const:cn { c__unicode_lower_5_X_1_tl } { ЛлՇշἏἇ{Ⅷ}{ⅷ}𑢫𑣋 } +\tl_const:cn { c__unicode_lower_5_X_2_tl } { ŠšDŽdžȨȩМмҀҁӤӥՈոṈṉẬậῘῐ{Ⅸ}{ⅸ}ⲼⲽꝤꝥ𑢬𑣌 } +\tl_const:cn { c__unicode_lower_5_X_3_tl } { DždžНнՉչῙῑⅩⅹ𑢭𑣍 } +\tl_const:cn { c__unicode_lower_5_X_4_tl } { ŢţȪȫОоӦӧՊպṊṋẮắῚὶⅪⅺⲾⲿꝦꝧ𑢮𑣎 } +\tl_const:cn { c__unicode_lower_5_X_5_tl } { LJljПпՋջΊίⅫⅻ𑢯𑣏 } +\tl_const:cn { c__unicode_lower_5_X_6_tl } { ĀāŤťLjljȬȭРрӨөՌռႠⴀṌṍẰằⅬⅼⳀⳁꝨꝩ𑢰𑣐 } +\tl_const:cn { c__unicode_lower_5_X_7_tl } { СсՍսႡⴁⅭⅽ𑢱𑣑 } +\tl_const:cn { c__unicode_lower_5_X_8_tl } { ĂăŦŧNJnjȮȯТтӪӫՎվႢⴂṎṏẲẳⅮⅾⳂⳃꝪꝫ𑢲𑣒 } +\tl_const:cn { c__unicode_lower_5_X_9_tl } { NjnjУуՏտႣⴃⅯⅿ𑢳𑣓 } +\tl_const:cn { c__unicode_lower_6_X_0_tl } { ĄąŨũȰȱФфӬӭՐրႤⴄṐṑẴẵἘἐⱠⱡⳄⳅꙀꙁꝬꝭ𐐀𐐨𑢴𑣔 } +\tl_const:cn { c__unicode_lower_6_X_1_tl } { ǍǎХхՑցႥⴅἙἑ𐐁𐐩𑢵𑣕 } +\tl_const:cn { c__unicode_lower_6_X_2_tl } { ĆćŪūȲȳЦцҊҋӮӯՒւႦⴆṒṓẶặἚἒⱢɫⳆⳇꙂꙃꝮꝯ𐐂𐐪𑢶𑣖 } +\tl_const:cn { c__unicode_lower_6_X_3_tl } { ǏǐЧчՓփႧⴇἛἓⱣᵽ𐐃𐐫𑢷𑣗 } +\tl_const:cn { c__unicode_lower_6_X_4_tl } { ĈĉŬŭШшҌҍӰӱՔքႨⴈṔṕẸẹἜἔⰀⰰⱤɽⳈⳉꙄꙅ𐐄𐐬𑢸𑣘 } +\tl_const:cn { c__unicode_lower_6_X_5_tl } { AaǑǒЩщՕօႩⴉἝἕⰁⰱ𐐅𐐭𑢹𑣙 } +\tl_const:cn { c__unicode_lower_6_X_6_tl } { BbĊċŮůЪъҎҏӲӳՖֆႪⴊṖṗẺẻⰂⰲⳊⳋꙆꙇ𐐆𐐮𑢺𑣚 } +\tl_const:cn { c__unicode_lower_6_X_7_tl } { CcǓǔЫыႫⴋⰃⰳⱧⱨ𐐇𐐯𑢻𑣛 } +\tl_const:cn { c__unicode_lower_6_X_8_tl } { DdČčŰűЬьҐґӴӵႬⴌṘṙẼẽῨῠⰄⰴⳌⳍꙈꙉ𐐈𐐰𑢼𑣜 } +\tl_const:cn { c__unicode_lower_6_X_9_tl } { EeǕǖЭэႭⴍῩῡⰅⰵⱩⱪ𐐉𐐱𑢽𑣝 } +\tl_const:cn { c__unicode_lower_7_X_0_tl } { FfĎďŲųȺⱥЮюҒғӶӷႮⴎṚṛẾếῪὺⰆⰶⳎⳏꙊꙋ𐐊𐐲𑢾𑣞 } +\tl_const:cn { c__unicode_lower_7_X_1_tl } { GgǗǘȻȼЯяႯⴏΎύⰇⰷⱫⱬ𐐋𐐳𑢿𑣟 } +\tl_const:cn { c__unicode_lower_7_X_2_tl } { HhĐđŴŵҔҕӸӹႰⴐṜṝỀềᾈᾀῬῥⰈⰸⳐⳑꙌꙍ𐐌𐐴 } +\tl_const:cn { c__unicode_lower_7_X_3_tl } { IiǙǚȽƚႱⴑᾉᾁⰉⰹⱭɑꝹꝺ𐐍𐐵 } +\tl_const:cn { c__unicode_lower_7_X_4_tl } { JjĒēŶŷȾⱦҖҗӺӻႲⴒṞṟỂểᾊᾂⰊⰺⱮɱⳒⳓꙎꙏ𐐎𐐶 } +\tl_const:cn { c__unicode_lower_7_X_5_tl } { KkǛǜϏϗႳⴓᾋᾃⰋⰻⱯɐꝻꝼ𐐏𐐷 } +\tl_const:cn { c__unicode_lower_7_X_6_tl } { LlĔĕŸÿҘҙӼӽႴⴔṠṡỄễἨἠᾌᾄⰌⰼⱰɒⳔⳕꙐꙑ𐐐𐐸 } +\tl_const:cn { c__unicode_lower_7_X_7_tl } { MmŹźɁɂႵⴕἩἡᾍᾅⰍⰽꝽᵹ𐐑𐐹 } +\tl_const:cn { c__unicode_lower_7_X_8_tl } { NnĖėǞǟҚқӾӿႶⴖṢṣỆệἪἢᾎᾆⰎⰾⱲⱳⳖⳗꙒꙓꝾꝿ𐐒𐐺 } +\tl_const:cn { c__unicode_lower_7_X_9_tl } { OoŻżɃƀႷⴗἫἣᾏᾇↃↄⰏⰿ𐐓𐐻 } +\tl_const:cn { c__unicode_lower_8_X_0_tl } { PpĘęǠǡɄʉͰͱҜҝԀԁႸⴘḀḁṤṥỈỉἬἤⰐⱀⳘⳙꙔꙕꞀꞁ𐐔𐐼 } +\tl_const:cn { c__unicode_lower_8_X_1_tl } { QqŽžɅʌႹⴙἭἥⰑⱁⱵⱶ𐐕𐐽 } +\tl_const:cn { c__unicode_lower_8_X_2_tl } { RrĚěǢǣɆɇͲͳҞҟԂԃႺⴚḂḃṦṧỊịἮἦⰒⱂⳚⳛꙖꙗꞂꞃ𐐖𐐾 } +\tl_const:cn { c__unicode_lower_8_X_3_tl } { SsႻⴛἯἧⰓⱃ𐐗𐐿 } +\tl_const:cn { c__unicode_lower_8_X_4_tl } { TtĜĝǤǥɈɉϘϙҠҡԄԅႼⴜḄḅṨṩỌọῸὸⰔⱄⳜⳝꙘꙙꞄꞅ𐐘𐑀 } +\tl_const:cn { c__unicode_lower_8_X_5_tl } { UuƁɓႽⴝΌόⰕⱅ𐐙𐑁 } +\tl_const:cn { c__unicode_lower_8_X_6_tl } { VvĞğƂƃǦǧɊɋͶͷϚϛҢңԆԇႾⴞḆḇṪṫỎỏῺὼΩωⰖⱆⳞⳟꙚꙛꜢꜣꞆꞇ𐐚𐑂 } +\tl_const:cn { c__unicode_lower_8_X_7_tl } { WwႿⴟΏώⰗⱇ𐐛𐑃 } +\tl_const:cn { c__unicode_lower_8_X_8_tl } { XxĠġƄƅǨǩɌɍϜϝҤҥԈԉჀⴠḈḉṬṭỐốᾘᾐῼῳⰘⱈⳠⳡꙜꙝꜤꜥ𐐜𐑄 } +\tl_const:cn { c__unicode_lower_8_X_9_tl } { YyჁⴡᾙᾑⰙⱉ𐐝𐑅 } +\tl_const:cn { c__unicode_lower_9_X_0_tl } { ZzĢģƆɔǪǫɎɏϞϟҦҧԊԋჂⴢḊḋṮṯỒồᾚᾒKkⰚⱊⱾȿⳢⳣꙞꙟꜦꜧ𐐞𐑆 } +\tl_const:cn { c__unicode_lower_9_X_1_tl } { ƇƈჃⴣᾛᾓÅåⰛⱋⱿɀꞋꞌ𐐟𐑇 } +\tl_const:cn { c__unicode_lower_9_X_2_tl } { ÀàĤĥǬǭϠϡҨҩԌԍჄⴤḌḍṰṱỔổἸἰᾜᾔⰜⱌⲀⲁꙠꙡꜨꜩ𐐠𐑈 } +\tl_const:cn { c__unicode_lower_9_X_3_tl } { ÁáƉɖჅⴥἹἱᾝᾕⰝⱍꞍɥ𐐡𐑉 } +\tl_const:cn { c__unicode_lower_9_X_4_tl } { ÂâĦħƊɗǮǯϢϣҪҫԎԏḎḏṲṳỖỗἺἲᾞᾖⰞⱎⲂⲃꙢꙣꜪꜫ𐐢𐑊 } +\tl_const:cn { c__unicode_lower_9_X_5_tl } { ÃãƋƌͿϳჇⴧἻἳᾟᾗⰟⱏ𐐣𐑋 } +\tl_const:cn { c__unicode_lower_9_X_6_tl } { ÄäĨĩϤϥҬҭԐԑḐḑṴṵỘộἼἴⰠⱐⲄⲅꙤꙥꜬꜭꞐꞑ𐐤𐑌 } +\tl_const:cn { c__unicode_lower_9_X_7_tl } { ÅåDZdzἽἵⰡⱑ𐐥𐑍 } +\tl_const:cn { c__unicode_lower_9_X_8_tl } { ÆæĪīƎǝDzdzϦϧҮүԒԓḒḓṶṷỚớἾἶℲⅎⒶⓐⰢⱒⲆⲇꙦꙧꜮꜯꞒꞓ𐐦𐑎 } +\tl_const:cn { c__unicode_lower_9_X_9_tl } { ÇçƏəἿἷⒷⓑⰣⱓⳫⳬ𐐧𐑏 } +\tl_const:cn { c__unicode_upper_0_X_0_tl } { dDьЬոՈὀὈᾤᾬⳬⳫ𐐨𐐀𑣜𑢼 } +\tl_const:cn { c__unicode_upper_0_X_1_tl } { eEĭĬǵǴəƏϩϨэЭұҰԕԔչՉḕḔṹṸờỜὁὉᾥᾭⲉⲈꙩꙨ𐐩𐐁𑣝𑢽 } +\tl_const:cn { c__unicode_upper_0_X_2_tl } { fFƒƑюЮպՊὂὊᾦᾮⳮⳭ𐐪𐐂𑣞𑢾 } +\tl_const:cn { c__unicode_upper_0_X_3_tl } { gGįĮɛƐϫϪяЯҳҲԗԖջՋḗḖṻṺởỞὃὋᾧᾯⲋⲊꙫꙪꜳꜲꞗꞖ𐐫𐐃𑣟𑢿 } +\tl_const:cn { c__unicode_upper_0_X_4_tl } { hHɜꞫѐЀռՌὄὌ𐐬𐐄 } +\tl_const:cn { c__unicode_upper_0_X_5_tl } { iIıIƕǶǹǸϭϬёЁҵҴԙԘսՍḙḘṽṼỡỠὅὍⲍⲌꙭꙬꜵꜴꞙꞘ𐐭𐐅 } +\tl_const:cn { c__unicode_upper_0_X_6_tl } { jJђЂվՎ𐐮𐐆 } +\tl_const:cn { c__unicode_upper_0_X_7_tl } { kK{ij}{IJ}ǻǺϯϮѓЃҷҶԛԚտՏḛḚṿṾợỢⲏⲎⳳⳲꜷꜶꞛꞚ𐐯𐐇 } +\tl_const:cn { c__unicode_upper_0_X_8_tl } { lLɠƓϰΚєЄրՐ𐐰𐐈 } +\tl_const:cn { c__unicode_upper_0_X_9_tl } { mMĵĴƙƘǽǼɡꞬϱΡѕЅҹҸԝԜցՑḝḜẁẀụỤⲑⲐꜹꜸꞝꞜ𐐱𐐉 } +\tl_const:cn { c__unicode_upper_1_X_0_tl } { nNƚȽϲϹіІւՒ𐐲𐐊 } +\tl_const:cn { c__unicode_upper_1_X_1_tl } { oOķĶǿǾɣƔϳͿїЇһҺԟԞփՓḟḞẃẂủỦⲓⲒꜻꜺꞟꞞ𐐳𐐋 } +\tl_const:cn { c__unicode_upper_1_X_2_tl } { pPјЈքՔᾰᾸⰰⰀ𐐴𐐌 } +\tl_const:cn { c__unicode_upper_1_X_3_tl } { qQȁȀɥꞍϵΕљЉҽҼԡԠօՕḡḠẅẄứỨᾱᾹⰱⰁⲕⲔꜽꜼꞡꞠ𐐵𐐍 } +\tl_const:cn { c__unicode_upper_1_X_4_tl } { rRĺĹƞȠɦꞪњЊֆՖⰲⰂ𐐶𐐎 } +\tl_const:cn { c__unicode_upper_1_X_5_tl } { sSȃȂћЋҿҾԣԢḣḢẇẆừỪᾳᾼⰳⰃⲗⲖꜿꜾꞣꞢ𐐷𐐏 } +\tl_const:cn { c__unicode_upper_1_X_6_tl } { tTļĻɨƗϸϷќЌⰴⰄ𐐸𐐐 } +\tl_const:cn { c__unicode_upper_1_X_7_tl } { uUơƠȅȄɩƖѝЍԥԤḥḤẉẈửỬὑὙⰵⰅⲙⲘꝁꝀꞥꞤ𐐹𐐑 } +\tl_const:cn { c__unicode_upper_1_X_8_tl } { vVľĽўЎӂӁⰶⰆ𐐺𐐒 } +\tl_const:cn { c__unicode_upper_1_X_9_tl } { wWƣƢȇȆɫⱢϻϺџЏԧԦḧḦẋẊữỮὓὛⰷⰇⲛⲚꝃꝂꞧꞦ𐐻𐐓 } +\tl_const:cn { c__unicode_upper_2_X_0_tl } { xX{ŀ}{Ŀ}ɬꞭӄӃⰸⰈⴀႠ𐐼𐐔 } +\tl_const:cn { c__unicode_upper_2_X_1_tl } { yYƥƤȉȈѡѠԩԨḩḨẍẌựỰὕὝⰹⰉⲝⲜⴁႡꝅꝄꞩꞨ𐐽𐐕 } +\tl_const:cn { c__unicode_upper_2_X_2_tl } { zZłŁӆӅⰺⰊⴂႢ𐐾𐐖 } +\tl_const:cn { c__unicode_upper_2_X_3_tl } { ȋȊɯƜѣѢԫԪḫḪẏẎỳỲὗὟⰻⰋⲟⲞⴃႣꝇꝆ𐐿𐐗 } +\tl_const:cn { c__unicode_upper_2_X_4_tl } { àÀńŃƨƧӈӇⓐⒶⰼⰌⴄႤ𐑀𐐘 } +\tl_const:cn { c__unicode_upper_2_X_5_tl } { áÁȍȌɱⱮѥѤԭԬḭḬẑẐỵỴⓑⒷⰽⰍⲡⲠⴅႥꚁꚀꝉꝈ𐑁𐐙 } +\tl_const:cn { c__unicode_upper_2_X_6_tl } { âÂņŅɲƝӊӉιΙⅎℲⓒⒸⰾⰎⴆႦ𐑂𐐚 } +\tl_const:cn { c__unicode_upper_2_X_7_tl } { ãÃȏȎѧѦԯԮḯḮẓẒỷỶⓓⒹⰿⰏⲣⲢⴇႧꚃꚂꝋꝊ𐑃𐐛 } +\tl_const:cn { c__unicode_upper_2_X_8_tl } { äÄňŇӌӋⓔⒺⱀⰐⴈႨ𐑄𐐜 } +\tl_const:cn { c__unicode_upper_2_X_9_tl } { åÅƭƬȑȐɵƟѩѨḱḰẕẔỹỸⓕⒻⱁⰑⲥⲤⴉႩꚅꚄꝍꝌ𐑅𐐝 } +\tl_const:cn { c__unicode_upper_3_X_0_tl } { æÆӎӍⓖⒼⱂⰒⴊႪ𐑆𐐞 } +\tl_const:cn { c__unicode_upper_3_X_1_tl } { çÇŋŊȓȒѫѪӏӀḳḲỻỺῃῌⓗⒽⱃⰓⲧⲦⴋႫꚇꚆꝏꝎ𐑇𐐟 } +\tl_const:cn { c__unicode_upper_3_X_2_tl } { èÈưƯὠὨⓘⒾⱄⰔⴌႬ𐑈𐐠 } +\tl_const:cn { c__unicode_upper_3_X_3_tl } { éÉōŌȕȔѭѬӑӐḵḴỽỼὡὩⓙⒿⱅⰕⲩⲨⴍႭꚉꚈꝑꝐ𐑉𐐡 } +\tl_const:cn { c__unicode_upper_3_X_4_tl } { êÊὢὪⓚⓀⱆⰖⴎႮ𐑊𐐢 } +\tl_const:cn { c__unicode_upper_3_X_5_tl } { ëËŏŎȗȖѯѮӓӒḷḶẛṠỿỾὣὫⓛⓁⱇⰗⲫⲪⴏႯꚋꚊꝓꝒ𐑋𐐣 } +\tl_const:cn { c__unicode_upper_3_X_6_tl } { ìÌƴƳἀἈὤὬⓜⓂⱈⰘⴐႰ𐑌𐐤 } +\tl_const:cn { c__unicode_upper_3_X_7_tl } { íÍőŐșȘɽⱤͅΙѱѰӕӔḹḸἁἉὥὭⓝⓃⱉⰙⲭⲬⴑႱꚍꚌꝕꝔ𐑍𐐥 } +\tl_const:cn { c__unicode_upper_3_X_8_tl } { îÎƶƵἂἊὦὮⓞⓄⱊⰚⴒႲ𐑎𐐦 } +\tl_const:cn { c__unicode_upper_3_X_9_tl } { ïÏœŒțȚѳѲӗӖḻḺἃἋὧὯⓟⓅⱋⰛⲯⲮⴓႳꚏꚎꝗꝖ𐑏𐐧 } +\tl_const:cn { c__unicode_upper_4_X_0_tl } { ðÐʀƦάΆἄἌⓠⓆⱌⰜⴔႴ } +\tl_const:cn { c__unicode_upper_4_X_1_tl } { ñÑŕŔƹƸȝȜέΈѵѴәӘḽḼạẠἅἍⓡⓇⱍⰝⲱⲰⴕႵꚑꚐꝙꝘ } +\tl_const:cn { c__unicode_upper_4_X_2_tl } { òÒήΉἆἎⓢⓈⱎⰞⴖႶ } +\tl_const:cn { c__unicode_upper_4_X_3_tl } { óÓŗŖȟȞʃƩίΊѷѶӛӚḿḾảẢἇἏⓣⓉⱏⰟⲳⲲⴗႷꚓꚒꝛꝚ } +\tl_const:cn { c__unicode_upper_4_X_4_tl } { ôÔῐῘⓤⓊⱐⰠⴘႸ } +\tl_const:cn { c__unicode_upper_4_X_5_tl } { õÕřŘƽƼαΑѹѸӝӜᵹꝽṁṀấẤῑῙⓥⓋⱑⰡⲵⲴⴙႹꚕꚔꝝꝜaA } +\tl_const:cn { c__unicode_upper_4_X_6_tl } { öÖβΒⓦⓌⱒⰢⴚႺbB } +\tl_const:cn { c__unicode_upper_4_X_7_tl } { śŚƿǷȣȢʇꞱγΓѻѺӟӞṃṂầẦⓧⓍⱓⰣⲷⲶⴛႻꚗꚖꝟꝞcC } +\tl_const:cn { c__unicode_upper_4_X_8_tl } { øØʈƮδΔὰᾺⓨⓎⱔⰤⴜႼdD } +\tl_const:cn { c__unicode_upper_4_X_9_tl } { ùÙŝŜȥȤʉɄεΕѽѼӡӠᵽⱣṅṄẩẨάΆⓩⓏⱕⰥⲹⲸⴝႽꚙꚘꝡꝠeE } +\tl_const:cn { c__unicode_upper_5_X_0_tl } { úÚʊƱζΖὲῈⱖⰦⴞႾfF } +\tl_const:cn { c__unicode_upper_5_X_1_tl } { ûÛşŞȧȦʋƲηΗѿѾӣӢṇṆẫẪέΈⱗⰧⲻⲺⴟႿꚛꚚꝣꝢgG } +\tl_const:cn { c__unicode_upper_5_X_2_tl } { üÜʌɅθΘἐἘὴῊⱘⰨⴠჀhH } +\tl_const:cn { c__unicode_upper_5_X_3_tl } { ýÝšŠDžDŽȩȨιΙҁҀӥӤṉṈậẬἑἙήΉⱙⰩⲽⲼⴡჁꝥꝤiI } +\tl_const:cn { c__unicode_upper_5_X_4_tl } { þÞdžDŽκΚἒἚὶῚⱚⰪⴢჂjJ } +\tl_const:cn { c__unicode_upper_5_X_5_tl } { ÿŸţŢȫȪλΛӧӦṋṊắẮἓἛίΊⱛⰫⲿⲾⴣჃꝧꝦkK } +\tl_const:cn { c__unicode_upper_5_X_6_tl } { LjLJμΜἔἜὸῸⱜⰬⴤჄlL } +\tl_const:cn { c__unicode_upper_5_X_7_tl } { āĀťŤljLJȭȬνΝөӨṍṌằẰἕἝόΌⱝⰭⳁⳀⴥჅꝩꝨmM } +\tl_const:cn { c__unicode_upper_5_X_8_tl } { ʒƷξΞὺῪⱞⰮnN } +\tl_const:cn { c__unicode_upper_5_X_9_tl } { ăĂŧŦNjNJȯȮοΟӫӪṏṎẳẲύΎⳃⳂⴧჇꝫꝪoO } +\tl_const:cn { c__unicode_upper_6_X_0_tl } { njNJπΠὼῺῠῨⅰⅠpP } +\tl_const:cn { c__unicode_upper_6_X_1_tl } { ąĄũŨȱȰρΡӭӬṑṐẵẴώΏῡῩ{ⅱ}{Ⅱ}ⱡⱠⳅⳄꙁꙀꝭꝬqQ } +\tl_const:cn { c__unicode_upper_6_X_2_tl } { ǎǍςΣ{ⅲ}{Ⅲ}rR } +\tl_const:cn { c__unicode_upper_6_X_3_tl } { ćĆūŪȳȲσΣҋҊӯӮṓṒặẶ{ⅳ}{Ⅳ}ⳇⳆꙃꙂꝯꝮsS } +\tl_const:cn { c__unicode_upper_6_X_4_tl } { ǐǏτΤᾀᾈⅴⅤtT } +\tl_const:cn { c__unicode_upper_6_X_5_tl } { ĉĈŭŬυΥҍҌӱӰṕṔẹẸᾁᾉῥῬ{ⅵ}{Ⅵ}ⱥȺⳉⳈⴭჍꙅꙄuU } +\tl_const:cn { c__unicode_upper_6_X_6_tl } { ǒǑφΦᾂᾊ{ⅶ}{Ⅶ}ⱦȾvV } +\tl_const:cn { c__unicode_upper_6_X_7_tl } { ċĊůŮχΧҏҎӳӲṗṖẻẺᾃᾋ{ⅷ}{Ⅷ}ⳋⳊꙇꙆwW } +\tl_const:cn { c__unicode_upper_6_X_8_tl } { ǔǓψΨἠἨᾄᾌ{ⅸ}{Ⅸ}ⱨⱧxX } +\tl_const:cn { c__unicode_upper_6_X_9_tl } { čČűŰωΩґҐӵӴṙṘẽẼἡἩᾅᾍⅹⅩⳍⳌꙉꙈyY } +\tl_const:cn { c__unicode_upper_7_X_0_tl } { ǖǕʞꞰϊΪἢἪᾆᾎⅺⅪⱪⱩzZ } +\tl_const:cn { c__unicode_upper_7_X_1_tl } { ďĎųŲϋΫғҒӷӶṛṚếẾἣἫᾇᾏⅻⅫⳏⳎꙋꙊ } +\tl_const:cn { c__unicode_upper_7_X_2_tl } { ǘǗȼȻόΌаАἤἬⅼⅬⱬⱫ𑣀𑢠 } +\tl_const:cn { c__unicode_upper_7_X_3_tl } { đĐŵŴύΎбБҕҔӹӸṝṜềỀἥἭⅽⅭⳑⳐꙍꙌ𑣁𑢡 } +\tl_const:cn { c__unicode_upper_7_X_4_tl } { ǚǙώΏвВἦἮⅾⅮꝺꝹ𑣂𑢢 } +\tl_const:cn { c__unicode_upper_7_X_5_tl } { ēĒŷŶȿⱾгГҗҖӻӺṟṞểỂἧἯⅿⅯⳓⳒꙏꙎ𑣃𑢣 } +\tl_const:cn { c__unicode_upper_7_X_6_tl } { ǜǛɀⱿϐΒдДꝼꝻ𑣄𑢤 } +\tl_const:cn { c__unicode_upper_7_X_7_tl } { ĕĔǝƎϑΘеЕҙҘӽӼաԱṡṠễỄⳕⳔꙑꙐ𑣅𑢥 } +\tl_const:cn { c__unicode_upper_7_X_8_tl } { źŹɂɁжЖբԲ𑣆𑢦 } +\tl_const:cn { c__unicode_upper_7_X_9_tl } { ėĖǟǞзЗқҚӿӾգԳṣṢệỆῳῼⱳⱲⳗⳖꙓꙒꝿꝾ𑣇𑢧 } +\tl_const:cn { c__unicode_upper_8_X_0_tl } { żŻиИդԴᾐᾘↄↃ𑣈𑢨 } +\tl_const:cn { c__unicode_upper_8_X_1_tl } { µΜęĘǡǠͱͰϕΦйЙҝҜԁԀեԵḁḀṥṤỉỈᾑᾙⳙⳘꙕꙔꞁꞀ𑣉𑢩 } +\tl_const:cn { c__unicode_upper_8_X_2_tl } { žŽϖΠкКզԶᾒᾚⱶⱵ𑣊𑢪 } +\tl_const:cn { c__unicode_upper_8_X_3_tl } { ěĚſSǣǢɇɆͳͲϗϏлЛҟҞԃԂէԷḃḂṧṦịỊᾓᾛⳛⳚꙗꙖꞃꞂ𑣋𑢫 } +\tl_const:cn { c__unicode_upper_8_X_4_tl } { ƀɃмМըԸἰἸᾔᾜ𑣌𑢬 } +\tl_const:cn { c__unicode_upper_8_X_5_tl } { ĝĜǥǤɉɈϙϘнНҡҠԅԄթԹḅḄṩṨọỌἱἹᾕᾝⳝⳜꙙꙘꞅꞄ𑣍𑢭 } +\tl_const:cn { c__unicode_upper_8_X_6_tl } { оОժԺἲἺᾖᾞ𑣎𑢮 } +\tl_const:cn { c__unicode_upper_8_X_7_tl } { ğĞƃƂǧǦɋɊͷͶϛϚпПңҢԇԆիԻḇḆṫṪỏỎἳἻᾗᾟⳟⳞꙛꙚꜣꜢꞇꞆ𑣏𑢯 } +\tl_const:cn { c__unicode_upper_8_X_8_tl } { рРլԼἴἼ𑣐𑢰 } +\tl_const:cn { c__unicode_upper_8_X_9_tl } { ġĠƅƄǩǨɍɌϝϜсСҥҤԉԈխԽḉḈṭṬốỐἵἽⳡⳠꙝꙜꜥꜤ𑣑𑢱 } +\tl_const:cn { c__unicode_upper_9_X_0_tl } { тТծԾἶἾ𑣒𑢲 } +\tl_const:cn { c__unicode_upper_9_X_1_tl } { ģĢǫǪɏɎͻϽϟϞуУҧҦԋԊկԿḋḊṯṮồỒἷἿⳣⳢꙟꙞꜧꜦ𑣓𑢳 } +\tl_const:cn { c__unicode_upper_9_X_2_tl } { ƈƇɐⱯͼϾфФհՀꞌꞋ𑣔𑢴 } +\tl_const:cn { c__unicode_upper_9_X_3_tl } { ĥĤǭǬɑⱭͽϿϡϠхХҩҨԍԌձՁḍḌṱṰổỔⲁⲀꙡꙠꜩꜨ𑣕𑢵 } +\tl_const:cn { c__unicode_upper_9_X_4_tl } { ɒⱰцЦղՂ𑣖𑢶 } +\tl_const:cn { c__unicode_upper_9_X_5_tl } { ħĦǯǮɓƁϣϢчЧҫҪԏԎճՃḏḎṳṲỗỖⲃⲂꙣꙢꜫꜪ𑣗𑢷 } +\tl_const:cn { c__unicode_upper_9_X_6_tl } { ƌƋɔƆшШմՄᾠᾨ𑣘𑢸 } +\tl_const:cn { c__unicode_upper_9_X_7_tl } { aAĩĨϥϤщЩҭҬԑԐյՅḑḐṵṴộỘᾡᾩⲅⲄꙥꙤꜭꜬꞑꞐ𑣙𑢹 } +\tl_const:cn { c__unicode_upper_9_X_8_tl } { bBDzDZɖƉъЪնՆᾢᾪ𑣚𑢺 } +\tl_const:cn { c__unicode_upper_9_X_9_tl } { cCīĪdzDZɗƊϧϦыЫүҮԓԒշՇḓḒṷṶớỚᾣᾫⲇⲆꙧꙦꜯꜮꞓꞒ𑣛𑢻 } +\tl_const:Nn \c__unicode_upper_exceptions_tl {ß{SS}{ff}{FF}{fi}{FI}{fl}{FL}{ffi}{FFI}{ffl}{FFL}{ſt}{ST}{st}{ST}{և}{ԵՒ}{ﬓ}{ՄՆ}{ﬔ}{ՄԵ}{ﬕ}{ՄԻ}{ﬖ}{ՎՆ}{ﬗ}{ՄԽ}{ʼn}{ʼN}ΐ{Ϊ́}ΰ{Ϋ́}ǰ{J̌}ẖ{H̱}ẗ{T̈}ẘ{W̊}ẙ{Y̊}{ẚ}{Aʾ}ὐ{Υ̓}ὒ{Υ̓̀}ὔ{Υ̓́}ὖ{Υ̓͂}ᾶ{Α͂}ῆ{Η͂}ῒ{Ϊ̀}ΐ{Ϊ́}ῖ{Ι͂}ῗ{Ϊ͂}ῢ{Ϋ̀}ΰ{Ϋ́}ῤ{Ρ̓}ῦ{Υ͂}ῧ{Ϋ͂}ῶ{Ω͂}ᾀ{ἈΙ}ᾁ{ἉΙ}ᾂ{ἊΙ}ᾃ{ἋΙ}ᾄ{ἌΙ}ᾅ{ἍΙ}ᾆ{ἎΙ}ᾇ{ἏΙ}ᾈ{ἈΙ}ᾉ{ἉΙ}ᾊ{ἊΙ}ᾋ{ἋΙ}ᾌ{ἌΙ}ᾍ{ἍΙ}ᾎ{ἎΙ}ᾏ{ἏΙ}ᾐ{ἨΙ}ᾑ{ἩΙ}ᾒ{ἪΙ}ᾓ{ἫΙ}ᾔ{ἬΙ}ᾕ{ἭΙ}ᾖ{ἮΙ}ᾗ{ἯΙ}ᾘ{ἨΙ}ᾙ{ἩΙ}ᾚ{ἪΙ}ᾛ{ἫΙ}ᾜ{ἬΙ}ᾝ{ἭΙ}ᾞ{ἮΙ}ᾟ{ἯΙ}ᾠ{ὨΙ}ᾡ{ὩΙ}ᾢ{ὪΙ}ᾣ{ὫΙ}ᾤ{ὬΙ}ᾥ{ὭΙ}ᾦ{ὮΙ}ᾧ{ὯΙ}ᾨ{ὨΙ}ᾩ{ὩΙ}ᾪ{ὪΙ}ᾫ{ὫΙ}ᾬ{ὬΙ}ᾭ{ὭΙ}ᾮ{ὮΙ}ᾯ{ὯΙ}ᾳ{ΑΙ}ᾼ{ΑΙ}ῃ{ΗΙ}ῌ{ΗΙ}ῳ{ΩΙ}ῼ{ΩΙ}ᾲ{ᾺΙ}ᾴ{ΆΙ}ῂ{ῊΙ}ῄ{ΉΙ}ῲ{ῺΙ}ῴ{ΏΙ}ᾷ{Α͂Ι}ῇ{Η͂Ι}ῷ{Ω͂Ι}} +\tl_const:Nn \c__unicode_lower_exceptions_tl {İ{i̇}} +\tl_const:Nn \c__unicode_mixed_exceptions_tl {DžDždžDžLjLjljLjNjNjnjNjDzDzdzDzß{Ss}{ff}{Ff}{fi}{Fi}{fl}{Fl}{ffi}{Ffi}{ffl}{Ffl}{ſt}{St}{st}{St}{և}{Եւ}{ﬓ}{Մն}{ﬔ}{Մե}{ﬕ}{Մի}{ﬖ}{Վն}{ﬗ}{Մխ}ᾲ{Ὰͅ}ᾴ{Άͅ}ῂ{Ὴͅ}ῄ{Ήͅ}ῲ{Ὼͅ}ῴ{Ώͅ}ᾷ{ᾼ͂}ῇ{ῌ͂}ῷ{ῼ͂}} +\tl_const:Nn \c__unicode_std_sigma_tl { σ } +\tl_const:Nn \c__unicode_final_sigma_tl { ς } +\tl_const:Nn \c__unicode_dotless_i_tl { ı } +\tl_const:Nn \c__unicode_dot_above_tl { ̇ } +\tl_const:Nn \c__unicode_dotted_I_tl { İ } +\tl_const:Nn \c__unicode_i_ogonek_tl { į } +\tl_const:Nn \c__unicode_I_ogonek_tl { Į } +\tl_const:Nn \c__unicode_accents_lt_tl {Ì{i̇̀}Í{i̇́}Ĩ{i̇̃}} +\tl_const:cn { c__unicode_fold_0_X_0_tl } { ÈèĬĭƐɛǴǵϨϩҰұԔԕḔḕṸṹỜờᾤ{ὤι}ⒸⓒⰤⱔⲈⲉꙨꙩ } +\tl_const:cn { c__unicode_fold_0_X_1_tl } { ÉéƑƒჍⴭᾥ{ὥι}ⒹⓓⰥⱕⳭⳮ } +\tl_const:cn { c__unicode_fold_0_X_2_tl } { ÊêĮįǶƕΆάϪϫҲҳԖԗḖḗṺṻỞởᾦ{ὦι}ⒺⓔⰦⱖⲊⲋꙪꙫꜲꜳꞖꞗ } +\tl_const:cn { c__unicode_fold_0_X_3_tl } { ËëƓɠǷƿᾧ{ὧι}ⒻⓕⰧⱗ } +\tl_const:cn { c__unicode_fold_0_X_4_tl } { Ììİ{i̇}ƔɣǸǹΈέϬϭҴҵԘԙḘḙṼṽỠỡᾨ{ὠι}ⒼⓖⰨⱘⲌⲍꙬꙭꜴꜵꞘꞙ } +\tl_const:cn { c__unicode_fold_0_X_5_tl } { ÍíΉήᾩ{ὡι}ⒽⓗⰩⱙ } +\tl_const:cn { c__unicode_fold_0_X_6_tl } { Îî{IJ}{ij}ƖɩǺǻΊίϮϯҶҷԚԛḚḛṾṿỢợᾪ{ὢι}ⒾⓘⰪⱚⲎⲏⳲⳳꜶꜷꞚꞛ } +\tl_const:cn { c__unicode_fold_0_X_7_tl } { ÏïƗɨᾫ{ὣι}ⒿⓙⰫⱛ } +\tl_const:cn { c__unicode_fold_0_X_8_tl } { ÐðĴĵƘƙǼǽΌόϰκҸҹԜԝḜḝẀẁỤụὈὀᾬ{ὤι}ⓀⓚⰬⱜⲐⲑꜸꜹꞜꞝ } +\tl_const:cn { c__unicode_fold_0_X_9_tl } { ÑñϱρὉὁᾭ{ὥι}ⓁⓛⰭⱝ } +\tl_const:cn { c__unicode_fold_1_X_0_tl } { ÒòĶķǾǿΎύҺһԞԟḞḟẂẃỦủὊὂᾮ{ὦι}ⓂⓜⰮⱞⲒⲓꜺꜻꞞꞟ } +\tl_const:cn { c__unicode_fold_1_X_1_tl } { ÓóΏώὋὃᾯ{ὧι}Ⓝⓝ } +\tl_const:cn { c__unicode_fold_1_X_2_tl } { ÔôƜɯȀȁΐ{ΐ}ϴθҼҽԠԡḠḡẄẅỨứὌὄⓄⓞⲔⲕꜼꜽꞠꞡ } +\tl_const:cn { c__unicode_fold_1_X_3_tl } { ÕõĹĺƝɲΑαϵεὍὅⓅⓟAa } +\tl_const:cn { c__unicode_fold_1_X_4_tl } { ÖöȂȃΒβҾҿԢԣḢḣẆẇỪừᾲ{ὰι}ⓆⓠⲖⲗꜾꜿꞢꞣBb } +\tl_const:cn { c__unicode_fold_1_X_5_tl } { ĻļƟɵΓγϷϸ{և}{եւ}ᾳ{αι}ⓇⓡCc } +\tl_const:cn { c__unicode_fold_1_X_6_tl } { ØøƠơȄȅΔδӀӏԤԥḤḥẈẉỬửὐ{ὐ}ᾴ{άι}ⓈⓢⲘⲙꝀꝁꞤꞥDd } +\tl_const:cn { c__unicode_fold_1_X_7_tl } { ÙùĽľΕεϹϲӁӂⓉⓣEe } +\tl_const:cn { c__unicode_fold_1_X_8_tl } { ÚúƢƣȆȇΖζϺϻԦԧḦḧẊẋỮữὒ{ὒ}ᾶ{ᾶ}ⓊⓤⲚⲛꝂꝃꞦꞧFf } +\tl_const:cn { c__unicode_fold_1_X_9_tl } { Ûû{Ŀ}{ŀ}ΗηӃӄᾷ{ᾶι}ⓋⓥGg } +\tl_const:cn { c__unicode_fold_2_X_0_tl } { ÜüƤƥȈȉΘθѠѡԨԩḨḩẌẍỰựὔ{ὔ}ᾸᾰⓌⓦⲜⲝꝄꝅꞨꞩHh } +\tl_const:cn { c__unicode_fold_2_X_1_tl } { ÝýŁłΙιϽͻӅӆᾹᾱⓍⓧIi } +\tl_const:cn { c__unicode_fold_2_X_2_tl } { ÞþƦʀȊȋΚκϾͼѢѣԪԫḪḫẎẏỲỳὖ{ὖ}ᾺὰⓎⓨⲞⲟꝆꝇꞪɦJj } +\tl_const:cn { c__unicode_fold_2_X_3_tl } { ß{ss}ŃńƧƨΛλϿͽӇӈΆάⓏⓩꞫɜKk } +\tl_const:cn { c__unicode_fold_2_X_4_tl } { ȌȍΜμЀѐѤѥԬԭḬḭẐẑỴỵᾼ{αι}ⲠⲡꚀꚁꝈꝉꞬɡLl } +\tl_const:cn { c__unicode_fold_2_X_5_tl } { ŅņƩʃΝνЁёӉӊὙὑꞭɬMm } +\tl_const:cn { c__unicode_fold_2_X_6_tl } { ȎȏΞξЂђѦѧԮԯḮḯẒẓỶỷιιⲢⲣꚂꚃꝊꝋNn } +\tl_const:cn { c__unicode_fold_2_X_7_tl } { ŇňΟοЃѓӋӌὛὓOo } +\tl_const:cn { c__unicode_fold_2_X_8_tl } { ƬƭȐȑΠπЄєѨѩḰḱẔẕỸỹⲤⲥꚄꚅꝌꝍꞰʞPp } +\tl_const:cn { c__unicode_fold_2_X_9_tl } { {ʼn}{ʼn}ΡρЅѕӍӎԱաὝὕꞱʇQq } +\tl_const:cn { c__unicode_fold_3_X_0_tl } { ŊŋƮʈȒȓІіѪѫԲբḲḳẖ{ẖ}Ỻỻῂ{ὴι}ⲦⲧꚆꚇꝎꝏRr } +\tl_const:cn { c__unicode_fold_3_X_1_tl } { ƯưΣσЇїԳգẗ{ẗ}Ὗὗῃ{ηι}Ss } +\tl_const:cn { c__unicode_fold_3_X_2_tl } { ŌōȔȕΤτЈјѬѭӐӑԴդḴḵẘ{ẘ}Ỽỽῄ{ήι}ⲨⲩꚈꚉꝐꝑTt } +\tl_const:cn { c__unicode_fold_3_X_3_tl } { ƱʊΥυЉљԵեẙ{ẙ}Uu } +\tl_const:cn { c__unicode_fold_3_X_4_tl } { ŎŏƲʋȖȗΦφЊњѮѯӒӓԶզḶḷ{ẚ}{aʾ}Ỿỿῆ{ῆ}ⲪⲫꚊꚋꝒꝓVv } +\tl_const:cn { c__unicode_fold_3_X_5_tl } { ƳƴΧχЋћԷէẛṡῇ{ῆι}Ww } +\tl_const:cn { c__unicode_fold_3_X_6_tl } { ŐőȘșΨψЌќѰѱӔӕԸըḸḹῈὲⲬⲭꚌꚍꝔꝕXx } +\tl_const:cn { c__unicode_fold_3_X_7_tl } { ƵƶͅιΩωЍѝԹթΈέYy } +\tl_const:cn { c__unicode_fold_3_X_8_tl } { ŒœȚțΪϊЎўѲѳӖӗԺժḺḻẞ{ss}ῊὴⲮⲯꚎꚏꝖꝗZz } +\tl_const:cn { c__unicode_fold_3_X_9_tl } { ƷʒΫϋЏџԻիΉή } +\tl_const:cn { c__unicode_fold_4_X_0_tl } { ŔŕƸƹȜȝАаѴѵӘәԼլḼḽẠạὨὠῌ{ηι}ⲰⲱꚐꚑꝘꝙ𑢠𑣀 } +\tl_const:cn { c__unicode_fold_4_X_1_tl } { БбԽխὩὡ𑢡𑣁 } +\tl_const:cn { c__unicode_fold_4_X_2_tl } { ŖŗȞȟВвѶѷӚӛԾծḾḿẢảὪὢⲲⲳꚒꚓꝚꝛ𑢢𑣂 } +\tl_const:cn { c__unicode_fold_4_X_3_tl } { ГгԿկὫὣ𑢣𑣃 } +\tl_const:cn { c__unicode_fold_4_X_4_tl } { ŘřƼƽȠƞΰ{ΰ}ДдѸѹӜӝՀհṀṁẤấἈἀὬὤⅠⅰⲴⲵꚔꚕꝜꝝ𑢤𑣄 } +\tl_const:cn { c__unicode_fold_4_X_5_tl } { ЕеՁձἉἁὭὥ{Ⅱ}{ⅱ}𑢥𑣅 } +\tl_const:cn { c__unicode_fold_4_X_6_tl } { ŚśȢȣЖжѺѻӞӟՂղṂṃẦầἊἂὮὦῒ{ῒ}{Ⅲ}{ⅲ}ⲶⲷꚖꚗꝞꝟ𑢦𑣆 } +\tl_const:cn { c__unicode_fold_4_X_7_tl } { ЗзՃճἋἃὯὧΐ{ΐ}{Ⅳ}{ⅳ}𑢧𑣇 } +\tl_const:cn { c__unicode_fold_4_X_8_tl } { ŜŝȤȥИиѼѽӠӡՄմṄṅẨẩἌἄⅤⅴⲸⲹꚘꚙꝠꝡ𑢨𑣈 } +\tl_const:cn { c__unicode_fold_4_X_9_tl } { ЙйՅյἍἅ{Ⅵ}{ⅵ}𑢩𑣉 } +\tl_const:cn { c__unicode_fold_5_X_0_tl } { ŞşȦȧКкѾѿӢӣՆնṆṇẪẫἎἆῖ{ῖ}{Ⅶ}{ⅶ}ⲺⲻꚚꚛꝢꝣ𑢪𑣊 } +\tl_const:cn { c__unicode_fold_5_X_1_tl } { ЛлՇշἏἇῗ{ῗ}{Ⅷ}{ⅷ}𑢫𑣋 } +\tl_const:cn { c__unicode_fold_5_X_2_tl } { Šš{DŽ}{dž}ȨȩМмҀҁӤӥՈոṈṉẬậῘῐ{Ⅸ}{ⅸ}ⲼⲽꝤꝥ𑢬𑣌 } +\tl_const:cn { c__unicode_fold_5_X_3_tl } { {Dž}{dž}НнՉչῙῑⅩⅹ𑢭𑣍 } +\tl_const:cn { c__unicode_fold_5_X_4_tl } { ŢţȪȫОоӦӧՊպṊṋẮắῚὶ{Ⅺ}{ⅺ}ⲾⲿꝦꝧ𑢮𑣎 } +\tl_const:cn { c__unicode_fold_5_X_5_tl } { {LJ}{lj}ПпՋջΊί{Ⅻ}{ⅻ}𑢯𑣏 } +\tl_const:cn { c__unicode_fold_5_X_6_tl } { ĀāŤť{Lj}{lj}ȬȭРрӨөՌռႠⴀṌṍẰằⅬⅼⳀⳁꝨꝩ{ff}{ff}𑢰𑣐 } +\tl_const:cn { c__unicode_fold_5_X_7_tl } { СсՍսႡⴁⅭⅽ{fi}{fi}𑢱𑣑 } +\tl_const:cn { c__unicode_fold_5_X_8_tl } { ĂăŦŧ{NJ}{nj}ȮȯТтӪӫՎվႢⴂṎṏẲẳⅮⅾⳂⳃꝪꝫ{fl}{fl}𑢲𑣒 } +\tl_const:cn { c__unicode_fold_5_X_9_tl } { {Nj}{nj}УуՏտႣⴃⅯⅿ{ffi}{ffi}𑢳𑣓 } +\tl_const:cn { c__unicode_fold_6_X_0_tl } { ĄąŨũȰȱФфӬӭՐրႤⴄṐṑẴẵἘἐⱠⱡⳄⳅꙀꙁꝬꝭ{ffl}{ffl}𐐀𐐨𑢴𑣔 } +\tl_const:cn { c__unicode_fold_6_X_1_tl } { ǍǎХхՑցႥⴅἙἑ{ſt}{st}𐐁𐐩𑢵𑣕 } +\tl_const:cn { c__unicode_fold_6_X_2_tl } { ĆćŪūȲȳςσЦцҊҋӮӯՒւႦⴆṒṓẶặἚἒῢ{ῢ}ⱢɫⳆⳇꙂꙃꝮꝯ{st}{st}𐐂𐐪𑢶𑣖 } +\tl_const:cn { c__unicode_fold_6_X_3_tl } { ǏǐЧчՓփႧⴇἛἓΰ{ΰ}Ᵽᵽ𐐃𐐫𑢷𑣗 } +\tl_const:cn { c__unicode_fold_6_X_4_tl } { ĈĉŬŭШшҌҍӰӱՔքႨⴈṔṕẸẹἜἔᾀ{ἀι}ῤ{ῤ}ⰀⰰⱤɽⳈⳉꙄꙅ𐐄𐐬𑢸𑣘 } +\tl_const:cn { c__unicode_fold_6_X_5_tl } { AaǑǒЩщՕօႩⴉἝἕᾁ{ἁι}Ⰱⰱ𐐅𐐭𑢹𑣙 } +\tl_const:cn { c__unicode_fold_6_X_6_tl } { BbĊċŮůЪъҎҏӲӳՖֆႪⴊṖṗẺẻᾂ{ἂι}ῦ{ῦ}ⰂⰲⳊⳋꙆꙇ𐐆𐐮𑢺𑣚 } +\tl_const:cn { c__unicode_fold_6_X_7_tl } { CcǓǔЫыႫⴋᾃ{ἃι}ῧ{ῧ}ⰃⰳⱧⱨ𐐇𐐯𑢻𑣛 } +\tl_const:cn { c__unicode_fold_6_X_8_tl } { DdČčŰűЬьҐґӴӵႬⴌṘṙẼẽᾄ{ἄι}ῨῠⰄⰴⳌⳍꙈꙉ𐐈𐐰𑢼𑣜 } +\tl_const:cn { c__unicode_fold_6_X_9_tl } { EeǕǖЭэႭⴍᾅ{ἅι}ῩῡⰅⰵⱩⱪ𐐉𐐱𑢽𑣝 } +\tl_const:cn { c__unicode_fold_7_X_0_tl } { FfĎďŲųȺⱥЮюҒғӶӷႮⴎṚṛẾếᾆ{ἆι}ῪὺⰆⰶⳎⳏꙊꙋ𐐊𐐲𑢾𑣞 } +\tl_const:cn { c__unicode_fold_7_X_1_tl } { GgǗǘȻȼЯяႯⴏᾇ{ἇι}ΎύⰇⰷⱫⱬ𐐋𐐳𑢿𑣟 } +\tl_const:cn { c__unicode_fold_7_X_2_tl } { HhĐđŴŵҔҕӸӹႰⴐṜṝỀềᾈ{ἀι}ῬῥⰈⰸⳐⳑꙌꙍ𐐌𐐴 } +\tl_const:cn { c__unicode_fold_7_X_3_tl } { IiǙǚȽƚႱⴑᾉ{ἁι}ⰉⰹⱭɑꝹꝺ𐐍𐐵 } +\tl_const:cn { c__unicode_fold_7_X_4_tl } { JjĒēŶŷȾⱦҖҗӺӻႲⴒṞṟỂểᾊ{ἂι}ⰊⰺⱮɱⳒⳓꙎꙏ𐐎𐐶 } +\tl_const:cn { c__unicode_fold_7_X_5_tl } { KkǛǜϏϗႳⴓᾋ{ἃι}ⰋⰻⱯɐꝻꝼ{ﬓ}{մն}𐐏𐐷 } +\tl_const:cn { c__unicode_fold_7_X_6_tl } { LlĔĕŸÿϐβҘҙӼӽႴⴔṠṡỄễἨἠᾌ{ἄι}ⰌⰼⱰɒⳔⳕꙐꙑ{ﬔ}{մե}𐐐𐐸 } +\tl_const:cn { c__unicode_fold_7_X_7_tl } { MmŹźɁɂϑθႵⴕἩἡᾍ{ἅι}ⰍⰽꝽᵹ{ﬕ}{մի}𐐑𐐹 } +\tl_const:cn { c__unicode_fold_7_X_8_tl } { NnĖėǞǟҚқӾӿႶⴖṢṣỆệἪἢᾎ{ἆι}ῲ{ὼι}ⰎⰾⱲⱳⳖⳗꙒꙓꝾꝿ{ﬖ}{վն}𐐒𐐺 } +\tl_const:cn { c__unicode_fold_7_X_9_tl } { OoŻżɃƀႷⴗἫἣᾏ{ἇι}ῳ{ωι}ↃↄⰏⰿ{ﬗ}{մխ}𐐓𐐻 } +\tl_const:cn { c__unicode_fold_8_X_0_tl } { PpĘęǠǡɄʉͰͱҜҝԀԁႸⴘḀḁṤṥỈỉἬἤᾐ{ἠι}ῴ{ώι}ⰐⱀⳘⳙꙔꙕꞀꞁ𐐔𐐼 } +\tl_const:cn { c__unicode_fold_8_X_1_tl } { QqµμŽžɅʌϕφႹⴙἭἥᾑ{ἡι}ⰑⱁⱵⱶ𐐕𐐽 } +\tl_const:cn { c__unicode_fold_8_X_2_tl } { RrĚěǢǣɆɇͲͳϖπҞҟԂԃႺⴚḂḃṦṧỊịἮἦᾒ{ἢι}ῶ{ῶ}ⰒⱂⳚⳛꙖꙗꞂꞃ𐐖𐐾 } +\tl_const:cn { c__unicode_fold_8_X_3_tl } { SsſsႻⴛἯἧᾓ{ἣι}ῷ{ῶι}Ⱃⱃ𐐗𐐿 } +\tl_const:cn { c__unicode_fold_8_X_4_tl } { TtĜĝǤǥɈɉϘϙҠҡԄԅႼⴜḄḅṨṩỌọᾔ{ἤι}ῸὸⰔⱄⳜⳝꙘꙙꞄꞅ𐐘𐑀 } +\tl_const:cn { c__unicode_fold_8_X_5_tl } { UuƁɓႽⴝᾕ{ἥι}ΌόⰕⱅ𐐙𐑁 } +\tl_const:cn { c__unicode_fold_8_X_6_tl } { VvĞğƂƃǦǧɊɋͶͷϚϛҢңԆԇႾⴞḆḇṪṫỎỏᾖ{ἦι}ῺὼΩωⰖⱆⳞⳟꙚꙛꜢꜣꞆꞇ𐐚𐑂 } +\tl_const:cn { c__unicode_fold_8_X_7_tl } { WwႿⴟᾗ{ἧι}ΏώⰗⱇ𐐛𐑃 } +\tl_const:cn { c__unicode_fold_8_X_8_tl } { XxĠġƄƅǨǩɌɍϜϝҤҥԈԉჀⴠḈḉṬṭỐốᾘ{ἠι}ῼ{ωι}ⰘⱈⳠⳡꙜꙝꜤꜥ𐐜𐑄 } +\tl_const:cn { c__unicode_fold_8_X_9_tl } { YyჁⴡᾙ{ἡι}Ⱉⱉ𐐝𐑅 } +\tl_const:cn { c__unicode_fold_9_X_0_tl } { ZzĢģƆɔǪǫɎɏϞϟҦҧԊԋჂⴢḊḋṮṯỒồᾚ{ἢι}KkⰚⱊⱾȿⳢⳣꙞꙟꜦꜧ𐐞𐑆 } +\tl_const:cn { c__unicode_fold_9_X_1_tl } { ƇƈჃⴣᾛ{ἣι}ÅåⰛⱋⱿɀꞋꞌ𐐟𐑇 } +\tl_const:cn { c__unicode_fold_9_X_2_tl } { ÀàĤĥǬǭϠϡҨҩԌԍჄⴤḌḍṰṱỔổἸἰᾜ{ἤι}ⰜⱌⲀⲁꙠꙡꜨꜩ𐐠𐑈 } +\tl_const:cn { c__unicode_fold_9_X_3_tl } { ÁáƉɖჅⴥἹἱᾝ{ἥι}ⰝⱍꞍɥ𐐡𐑉 } +\tl_const:cn { c__unicode_fold_9_X_4_tl } { ÂâĦħƊɗǮǯϢϣҪҫԎԏḎḏṲṳỖỗἺἲᾞ{ἦι}ⰞⱎⲂⲃꙢꙣꜪꜫ𐐢𐑊 } +\tl_const:cn { c__unicode_fold_9_X_5_tl } { ÃãƋƌͿϳჇⴧἻἳᾟ{ἧι}Ⱏⱏ𐐣𐑋 } +\tl_const:cn { c__unicode_fold_9_X_6_tl } { ÄäĨĩǰ{ǰ}ϤϥҬҭԐԑḐḑṴṵỘộἼἴᾠ{ὠι}ⰠⱐⲄⲅꙤꙥꜬꜭꞐꞑ𐐤𐑌 } +\tl_const:cn { c__unicode_fold_9_X_7_tl } { Åå{DZ}{dz}Ἵἵᾡ{ὡι}Ⱑⱑ𐐥𐑍 } +\tl_const:cn { c__unicode_fold_9_X_8_tl } { ÆæĪīƎǝ{Dz}{dz}ϦϧҮүԒԓḒḓṶṷỚớἾἶᾢ{ὢι}ℲⅎⒶⓐⰢⱒⲆⲇꙦꙧꜮꜯꞒꞓ𐐦𐑎 } +\tl_const:cn { c__unicode_fold_9_X_9_tl } { ÇçƏəἿἷᾣ{ὣι}ⒷⓑⰣⱓⳫⳬ𐐧𐑏 } |