diff options
author | Karl Berry <karl@freefriends.org> | 2017-11-18 21:45:46 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-11-18 21:45:46 +0000 |
commit | 9746eec6f52784c17ea0fdd0c1d47e8deb9ca0f8 (patch) | |
tree | 093bb019d314b4b6e27f3f9dca5f69308ac68fb8 /Master/texmf-dist/source/latex/unicode-math/um-code-fontopt.dtx | |
parent | ff1a4fd0b6a85c7280ae498ad531d5397bedea87 (diff) |
unicode-math (18nov17)
git-svn-id: svn://tug.org/texlive/trunk@45845 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/unicode-math/um-code-fontopt.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/unicode-math/um-code-fontopt.dtx | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/unicode-math/um-code-fontopt.dtx b/Master/texmf-dist/source/latex/unicode-math/um-code-fontopt.dtx new file mode 100644 index 00000000000..59805971ee7 --- /dev/null +++ b/Master/texmf-dist/source/latex/unicode-math/um-code-fontopt.dtx @@ -0,0 +1,265 @@ +%%^^A%% um-code-fontopt.dtx -- part of UNICODE-MATH <wspr.io/unicode-math> + +% \section{Font loading options} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Math version} +% \begin{macrocode} +\keys_define:nn {unicode-math} + { + version .code:n = + { + \tl_set:Nn \l_@@_mversion_tl {#1} + \DeclareMathVersion {\l_@@_mversion_tl} + } + } +% \end{macrocode} +% +% \subsection{Script and scriptscript font options} +% \begin{macrocode} +\keys_define:nn {unicode-math} + { + script-features .tl_set:N = \l_@@_script_features_tl , + sscript-features .tl_set:N = \l_@@_sscript_features_tl , + script-font .tl_set:N = \l_@@_script_font_tl , + sscript-font .tl_set:N = \l_@@_sscript_font_tl , + } +% \end{macrocode} +% +% \subsection{Range processing} +% \seclabel{rangeproc} +% +% \begin{macrocode} +\keys_define:nn {unicode-math} + { + range .code:n = + { + \bool_set_false:N \l_@@_init_bool +% \end{macrocode} +% Set processing functions if we're not defining the full Unicode math repetoire. +% Math symbols are defined with \cmd\_@@_sym:nnn; see \secref{mathsymbol} +% for the individual definitions +% \begin{macrocode} + \int_incr:N \g_@@_fam_int + \tl_set:Nx \l_@@_symfont_label_tl {@@_fam\int_use:N\g_@@_fam_int} + \cs_set_eq:NN \_@@_sym:nnn \@@_process_symbol_parse:nnn + \cs_set_eq:NN \@@_set_mathalphabet_char:Nnn \@@_mathmap_parse:Nnn + \cs_set_eq:NN \@@_remap_symbol:nnn \@@_remap_symbol_parse:nnn + \cs_set_eq:NN \@@_maybe_init_alphabet:n \use_none:n + \cs_set_eq:NN \@@_map_char_single:nn \@@_map_char_parse:nn + \cs_set_eq:NN \@@_assign_delcode:nn \@@_assign_delcode_parse:nn + \cs_set_eq:NN \@@_make_mathactive:nNN \@@_make_mathactive_parse:nNN +% \end{macrocode} +% Proceed by filling up the various `range' seqs according to the user options. +% \begin{macrocode} + \seq_clear:N \l_@@_char_range_seq + \seq_clear:N \l_@@_mclass_range_seq + \seq_clear:N \l_@@_cmd_range_seq + \seq_clear:N \l_@@_mathalph_seq + + \clist_map_inline:nn {#1} + { + \@@_if_mathalph_decl:nTF {##1} + { + \seq_put_right:Nx \l_@@_mathalph_seq + { + { \exp_not:V \l_@@_tmpa_tl } + { \exp_not:V \l_@@_tmpb_tl } + { \exp_not:V \l_@@_tmpc_tl } + } + } + { +% \end{macrocode} +% Four cases: +% math class matching the known list; +% single item that is a control sequence---command name; +% single item that isn't---edge case, must be 0--9; +% none of the above---char range. +% \begin{macrocode} + \seq_if_in:NnTF \g_@@_mathclasses_seq {##1} + { \seq_put_right:Nn \l_@@_mclass_range_seq {##1} } + { + \bool_lazy_and:nnTF { \tl_if_single_p:n {##1} } { \token_if_cs_p:N ##1 } + { \seq_put_right:Nn \l_@@_cmd_range_seq {##1} } + { \seq_put_right:Nn \l_@@_char_range_seq {##1} } + } + } + } + } + } +% \end{macrocode} +% +% +% \begin{macro}{\@@_if_mathalph_decl:nTF} +% Possible forms of input:\\ +% |\mathscr|\\ +% |\mathscr->\mathup|\\ +% |\mathscr/{Latin}|\\ +% |\mathscr/{Latin}->\mathup|\\ +% Outputs:\\ +% |tmpa|: math style (\eg, |\mathscr|)\\ +% |tmpb|: alphabets (\eg, |Latin|)\\ +% |tmpc|: remap style (\eg, |\mathup|). Defaults to |tmpa|. +% +% The remap style can also be |\mathcal->stixcal|, which I marginally prefer +% in the general case. +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_if_mathalph_decl:n {TF} + { + \tl_set:Nn \l_@@_tmpa_tl {#1} + \tl_clear:N \l_@@_tmpb_tl + \tl_clear:N \l_@@_tmpc_tl + + \tl_if_in:NnT \l_@@_tmpa_tl {->} + { \exp_after:wN \@@_split_arrow:w \l_@@_tmpa_tl \q_nil } + + \tl_if_in:NnT \l_@@_tmpa_tl {/} + { \exp_after:wN \@@_split_slash:w \l_@@_tmpa_tl \q_nil } + + \tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:N \l_@@_tmpa_tl } + \exp_args:NNx \tl_remove_all:Nn \l_@@_tmpa_tl { \token_to_str:N \math } + \exp_args:NNx \tl_remove_all:Nn \l_@@_tmpa_tl { \token_to_str:N \sym } + \tl_trim_spaces:N \l_@@_tmpa_tl + + \tl_if_empty:NT \l_@@_tmpc_tl + { \tl_set_eq:NN \l_@@_tmpc_tl \l_@@_tmpa_tl } + + \seq_if_in:NVTF \g_@@_named_ranges_seq \l_@@_tmpa_tl + { \prg_return_true: } { \prg_return_false: } + } +% \end{macrocode} +% \begin{macrocode} +\cs_set:Npn \@@_split_arrow:w #1->#2 \q_nil + { + \tl_set:Nx \l_@@_tmpa_tl { \tl_trim_spaces:n {#1} } + \tl_set:Nx \l_@@_tmpc_tl { \tl_trim_spaces:n {#2} } + } +% \end{macrocode} +% \begin{macrocode} +\cs_set:Npn \@@_split_slash:w #1/#2 \q_nil + { + \tl_set:Nx \l_@@_tmpa_tl { \tl_trim_spaces:n {#1} } + \tl_set:Nx \l_@@_tmpb_tl { \tl_trim_spaces:n {#2} } + } +% \end{macrocode} +% \end{macro} +% +% Pretty basic comma separated range processing. +% Donald Arseneau's \pkg{selectp} package has a cleverer technique. +% +% \begin{macro}{\@@_if_char_spec:nNNT} +% \darg{Unicode character slot} +% \darg{control sequence (character macro)} +% \darg{control sequence (math class)} +% \darg{code to execute} +% This macro expands to |#4| +% if any of its arguments are contained in \cmd\l_@@_char_range_seq. +% This list can contain either character ranges (for checking with |#1|) or control sequences. +% These latter can either be the command name of a specific character, \emph{or} the math +% type of one (\eg, \cmd\mathbin). +% +% Character ranges are passed to \cs{@@_if_char_spec:nNNT}, which accepts input in the form shown in \tabref{ranges}. +% +% \begin{table}[htbp] +% \centering +% \topcaption{Ranges accepted by \cs{@@_if_char_spec:nNNT}.} +% \label{tab:ranges} +% \begin{tabular}{>{\ttfamily}cc} +% \textrm{Input} & Range \\ +% \hline +% x & $r=x$ \\ +% x- & $r\geq x$ \\ +% -y & $r\leq y$ \\ +% x-y & $x \leq r \leq y$ \\ +% \end{tabular} +% \end{table} +% +% We have three tests, performed sequentially in order of execution time. +% Any test finding a match jumps directly to the end. +% \begin{macrocode} +\cs_new:Nn \@@_if_char_spec:nNNT + { + % math class: + \seq_if_in:NnT \l_@@_mclass_range_seq {#3} + { \use_none_delimit_by_q_nil:w } + + % command name: + \seq_if_in:NnT \l_@@_cmd_range_seq {#2} + { \use_none_delimit_by_q_nil:w } + + % character slot: + \seq_map_inline:Nn \l_@@_char_range_seq + { + \@@_int_if_slot_in_range:nnT {#1} {##1} + { \seq_map_break:n { \use_none_delimit_by_q_nil:w } } + } + + % the following expands to nil if no match was found: + \use_none:nnn + \q_nil + \use:n + { + \clist_put_right:Nx \l_@@_char_nrange_clist { \int_eval:n {#1} } + #4 + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_int_if_slot_in_range:nnT} +% A `numrange' is like |-2,5-8,12,17-| (can be unsorted). +% +% Four cases, four argument types: +% \begin{Verbatim} +% input #2 #3 #4 +% "1 " [ 1] - [qn] - [ ] qs +% "1- " [ 1] - [ ] - [qn-] qs +% " -3" [ ] - [ 3] - [qn-] qs +% "1-3" [ 1] - [ 3] - [qn-] qs +% \end{Verbatim} +% +% \begin{macrocode} +\cs_new:Nn \@@_int_if_slot_in_range:nnT + { \@@_numrange_parse:nwT {#1} #2 - \q_nil - \q_stop {#3} } +% \end{macrocode} +% +% \begin{macrocode} +\cs_set:Npn \@@_numrange_parse:nwT #1 #2 - #3 - #4 \q_stop #5 + { + \tl_if_empty:nTF {#4} { \int_compare:nT {#1=#2} {#5} } + { + \tl_if_empty:nTF {#3} { \int_compare:nT {#1>=#2} {#5} } + { + \tl_if_empty:nTF {#2} { \int_compare:nT {#1<=#3} {#5} } + { + \int_compare:nT {#1>=#2} { \int_compare:nT {#1<=#3} {#5} } + } } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</package> +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package <wspr.io/unicode-math> +% ------------------------------------------------ +% 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): <http://www.latex-project.org/lppl/>. +% ------------------------------------------------ +% Copyright 2006-2017 Will Robertson, LPPL "maintainer" +% Copyright 2010-2017 Philipp Stephani +% Copyright 2011-2017 Joseph Wright +% Copyright 2012-2015 Khaled Hosny +% ------------------------------------------------ +% +% ©/ |