%%^^A%% um-code-sscript.dtx -- part of UNICODE-MATH %%^^A%% Setup for active chars needed to process subscript/superscript input chars. % \section{Unicode sub- and super-scripts} % % \begin{macrocode} %<*package> % \end{macrocode} % % The idea here is to enter a scanning state after a superscript or subscript % is encountered. % If subsequent superscripts or subscripts (resp.) are found, % they are lumped together. % Each sub/super has a corresponding regular size % glyph which is used by \XeTeX\ to typeset the results; this means that the % actual subscript/superscript glyphs are never seen in the output % document~--- they are only used as input characters. % % Open question: should the superscript-like `modifiers' (\unichar{1D2C} % {modifier capital letter a} and on) be included here? % % \paragraph{Superscripts} % Populate a property list with superscript characters; themselves as their % key, and their replacement as each key's value. % Then make the superscript active and bind it to the scanning function. % % \cs{scantokens} makes this process much simpler since we can activate the % char and assign its meaning in one step. % \begin{macrocode} \cs_new:Nn \@@_setup_active_superscript:nn { \prop_gput:Nxn \g_@@_supers_prop { \int_eval:n {#1} } {#2} \@@_mathactive_remap:nn {#1} { \tl_set:Nn \l_@@_ss_chain_tl {#2} \cs_set_eq:NN \@@_sub_or_super:n \sp \tl_set:Nn \l_@@_tmpa_tl {supers} \@@_scan_sscript: } } % \end{macrocode} % % \paragraph{Subscripts} % \begin{macrocode} \cs_new:Nn \@@_setup_active_subscript:nn { \prop_gput:Nxn \g_@@_subs_prop { \int_eval:n {#1} } {#2} \@@_mathactive_remap:nn {#1} { \tl_set:Nn \l_@@_ss_chain_tl {#2} \cs_set_eq:NN \@@_sub_or_super:n \sb \tl_set:Nn \l_@@_tmpa_tl {subs} \@@_scan_sscript: } } % \end{macrocode} % % \paragraph{The scanning command} % Collects a chain of subscripts or a chain % of superscripts and then typesets what it has collected. % \begin{macrocode} \@@_cs_new:Nn \@@_scan_sscript: { \@@_scan_sscript:TF { \@@_scan_sscript: } { \@@_sub_or_super:n {\l_@@_ss_chain_tl} } } % \end{macrocode} % We do not skip spaces when scanning ahead, and we explicitly wish to % bail out on encountering a space or a brace. These cases are filtered % using \cs{peek_N_type:TF}. Otherwise the token can be taken as an % \texttt{N}-type argument. Then we search for it in the appropriate % property list (\cs{l_@@_tmpa_tl} is |subs| or |supers|). % If found, add the value to the current chain of sub/superscripts. % Remember to put the character back in the input otherwise. % The \cs{group_align_safe_begin:} and \cs{group_align_safe_end:} are % needed in case |#3| is |&|. % \begin{macrocode} \@@_cs_new:Nn \@@_scan_sscript:TF { \peek_N_type:TF { \group_align_safe_begin: \@@_scan_sscript_aux:nnN {#1} {#2} } {#2} } % \end{macrocode} % The look-ahead for the sscripts doesn't try to peek inside the lookahead. % \begin{macrocode} \@@_cs_new:Nn \@@_scan_sscript_aux:nnN { \tl_set:Nx \l_@@_tmpa_key_tl { \tl_to_str:n {#3} } \prop_get:cxNTF {g_@@_\l_@@_tmpa_tl _prop} { \int_eval:n { \exp_after:wN ` \l_@@_tmpa_key_tl } } \l_@@_tmpb_tl { \tl_put_right:NV \l_@@_ss_chain_tl \l_@@_tmpb_tl \group_align_safe_end: #1 } { \group_align_safe_end: #2 #3 } } % \end{macrocode} % % \paragraph{Definitions} % Superscripts. % \begin{macrocode} \@@_setup_active_superscript:nn {"2070} {0} \@@_setup_active_superscript:nn {"00B9} {1} \@@_setup_active_superscript:nn {"00B2} {2} \@@_setup_active_superscript:nn {"00B3} {3} \@@_setup_active_superscript:nn {"2074} {4} \@@_setup_active_superscript:nn {"2075} {5} \@@_setup_active_superscript:nn {"2076} {6} \@@_setup_active_superscript:nn {"2077} {7} \@@_setup_active_superscript:nn {"2078} {8} \@@_setup_active_superscript:nn {"2079} {9} \@@_setup_active_superscript:nn {"207A} {+} \@@_setup_active_superscript:nn {"207B} {-} \@@_setup_active_superscript:nn {"207C} {=} \@@_setup_active_superscript:nn {"207D} {(} \@@_setup_active_superscript:nn {"207E} {)} \@@_setup_active_superscript:nn {"1D2C} {A} \@@_setup_active_superscript:nn {"1D2E} {B} \@@_setup_active_superscript:nn {"1D30} {D} \@@_setup_active_superscript:nn {"1D31} {E} \@@_setup_active_superscript:nn {"1D33} {G} \@@_setup_active_superscript:nn {"1D34} {H} \@@_setup_active_superscript:nn {"1D35} {I} \@@_setup_active_superscript:nn {"1D36} {J} \@@_setup_active_superscript:nn {"1D37} {K} \@@_setup_active_superscript:nn {"1D38} {L} \@@_setup_active_superscript:nn {"1D39} {M} \@@_setup_active_superscript:nn {"1D3A} {N} \@@_setup_active_superscript:nn {"1D3C} {O} \@@_setup_active_superscript:nn {"1D3E} {P} \@@_setup_active_superscript:nn {"1D3F} {R} \@@_setup_active_superscript:nn {"1D40} {T} \@@_setup_active_superscript:nn {"1D41} {U} \@@_setup_active_superscript:nn {"2C7D} {V} \@@_setup_active_superscript:nn {"1D42} {W} \@@_setup_active_superscript:nn {"1D43} {a} \@@_setup_active_superscript:nn {"1D47} {b} \@@_setup_active_superscript:nn {"1D9C} {c} \@@_setup_active_superscript:nn {"1D48} {d} \@@_setup_active_superscript:nn {"1D49} {e} \@@_setup_active_superscript:nn {"1DA0} {f} \@@_setup_active_superscript:nn {"1D4D} {g} \@@_setup_active_superscript:nn {"02B0} {h} \@@_setup_active_superscript:nn {"2071} {i} \@@_setup_active_superscript:nn {"02B2} {j} \@@_setup_active_superscript:nn {"1D4F} {k} \@@_setup_active_superscript:nn {"02E1} {l} \@@_setup_active_superscript:nn {"1D50} {m} \@@_setup_active_superscript:nn {"207F} {n} \@@_setup_active_superscript:nn {"1D52} {o} \@@_setup_active_superscript:nn {"1D56} {p} \@@_setup_active_superscript:nn {"02B3} {r} \@@_setup_active_superscript:nn {"02E2} {s} \@@_setup_active_superscript:nn {"1D57} {t} \@@_setup_active_superscript:nn {"1D58} {u} \@@_setup_active_superscript:nn {"1D5B} {v} \@@_setup_active_superscript:nn {"02B7} {w} \@@_setup_active_superscript:nn {"02E3} {x} \@@_setup_active_superscript:nn {"02B8} {y} \@@_setup_active_superscript:nn {"1DBB} {z} \@@_setup_active_superscript:nn {"1D5D} {\beta} \@@_setup_active_superscript:nn {"1D5E} {\gamma} \@@_setup_active_superscript:nn {"1D5F} {\delta} \@@_setup_active_superscript:nn {"1D60} {\phi} \@@_setup_active_superscript:nn {"1D61} {\chi} \@@_setup_active_superscript:nn {"1DBF} {\theta} % \end{macrocode} % A few more subscripts than superscripts: % \begin{macrocode} \@@_setup_active_subscript:nn {"2080} {0} \@@_setup_active_subscript:nn {"2081} {1} \@@_setup_active_subscript:nn {"2082} {2} \@@_setup_active_subscript:nn {"2083} {3} \@@_setup_active_subscript:nn {"2084} {4} \@@_setup_active_subscript:nn {"2085} {5} \@@_setup_active_subscript:nn {"2086} {6} \@@_setup_active_subscript:nn {"2087} {7} \@@_setup_active_subscript:nn {"2088} {8} \@@_setup_active_subscript:nn {"2089} {9} \@@_setup_active_subscript:nn {"208A} {+} \@@_setup_active_subscript:nn {"208B} {-} \@@_setup_active_subscript:nn {"208C} {=} \@@_setup_active_subscript:nn {"208D} {(} \@@_setup_active_subscript:nn {"208E} {)} \@@_setup_active_subscript:nn {"2090} {a} \@@_setup_active_subscript:nn {"2091} {e} \@@_setup_active_subscript:nn {"2095} {h} \@@_setup_active_subscript:nn {"1D62} {i} \@@_setup_active_subscript:nn {"2C7C} {j} \@@_setup_active_subscript:nn {"2096} {k} \@@_setup_active_subscript:nn {"2097} {l} \@@_setup_active_subscript:nn {"2098} {m} \@@_setup_active_subscript:nn {"2099} {n} \@@_setup_active_subscript:nn {"2092} {o} \@@_setup_active_subscript:nn {"209A} {p} \@@_setup_active_subscript:nn {"1D63} {r} \@@_setup_active_subscript:nn {"209B} {s} \@@_setup_active_subscript:nn {"209C} {t} \@@_setup_active_subscript:nn {"1D64} {u} \@@_setup_active_subscript:nn {"1D65} {v} \@@_setup_active_subscript:nn {"2093} {x} \@@_setup_active_subscript:nn {"1D66} {\beta} \@@_setup_active_subscript:nn {"1D67} {\gamma} \@@_setup_active_subscript:nn {"1D68} {\rho} \@@_setup_active_subscript:nn {"1D69} {\phi} \@@_setup_active_subscript:nn {"1D6A} {\chi} % \end{macrocode} % % % \begin{macrocode} % % \end{macrocode} \endinput % /© % % ------------------------------------------------ % The UNICODE-MATH package % ------------------------------------------------ % This package is free software and may be redistributed and/or modified under % the conditions of the LaTeX Project Public License, version 1.3c or higher % (your choice): . % ------------------------------------------------ % Copyright 2006-2019 Will Robertson, LPPL "maintainer" % Copyright 2010-2017 Philipp Stephani % Copyright 2011-2017 Joseph Wright % Copyright 2012-2015 Khaled Hosny % ------------------------------------------------ % % ©/