summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin584552 -> 584619 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1486692 -> 1489631 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin268228 -> 268222 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin273234 -> 273228 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin220216 -> 220209 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin4676659 -> 4693662 bytes
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx36
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx1227
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3names.dtx884
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3str.dtx181
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx537
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex1656
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3unicode-data.def676
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
index ca63d71e84d..d30a7c36dd6 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
index 893e1bc352e..807cce8a3ac 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
index f72192c5866..a463c33dbd2 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
index 6126d306656..b2d4e58ded8 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index 5b530941082..4b02ec0e6c8 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index 20f845e710d..f4d15ad01ad 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
Binary files differ
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 } { ÇçƏəἿἷᾣ{ὣι}ⒷⓑⰣⱓⳫⳬ𐐧𐑏 }