From cb2b57ca95d65bf9d9d21ec4a0109380f1e50fc0 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 9 Jan 2019 22:44:11 +0000 Subject: fontspec (9jan19) git-svn-id: svn://tug.org/texlive/trunk@49650 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/fontspec/CHANGES.md | 8 +- .../doc/latex/fontspec/fontspec-code.pdf | Bin 614395 -> 622215 bytes Master/texmf-dist/doc/latex/fontspec/fontspec.pdf | Bin 703363 -> 685998 bytes .../source/latex/fontspec/fontspec-api.dtx | 381 --- .../source/latex/fontspec/fontspec-closing.dtx | 44 - .../source/latex/fontspec/fontspec-code-api.dtx | 378 +++ .../latex/fontspec/fontspec-code-closing.dtx | 44 + .../source/latex/fontspec/fontspec-code-enc.dtx | 173 ++ .../latex/fontspec/fontspec-code-feat-aat.dtx | 242 ++ .../latex/fontspec/fontspec-code-feat-opentype.dtx | 572 +++++ .../latex/fontspec/fontspec-code-fontload.dtx | 105 + .../latex/fontspec/fontspec-code-graphite.dtx | 128 + .../latex/fontspec/fontspec-code-interfaces.dtx | 246 ++ .../latex/fontspec/fontspec-code-internal.dtx | 1190 ++++++++++ .../source/latex/fontspec/fontspec-code-keyval.dtx | 867 +++++++ .../source/latex/fontspec/fontspec-code-lang.dtx | 418 ++++ .../source/latex/fontspec/fontspec-code-load.dtx | 2 +- .../source/latex/fontspec/fontspec-code-math.dtx | 255 ++ .../source/latex/fontspec/fontspec-code-msg.dtx | 290 +++ .../latex/fontspec/fontspec-code-opening.dtx | 195 ++ .../latex/fontspec/fontspec-code-opentype.dtx | 464 ++++ .../latex/fontspec/fontspec-code-patches.dtx | 209 ++ .../latex/fontspec/fontspec-code-scripts.dtx | 183 ++ .../source/latex/fontspec/fontspec-code-user.dtx | 509 ++++ .../source/latex/fontspec/fontspec-code-vars.dtx | 295 +++ .../source/latex/fontspec/fontspec-code-xfss.dtx | 286 +++ .../source/latex/fontspec/fontspec-code.ltx | 2 +- .../source/latex/fontspec/fontspec-doc-api.tex | 2 +- .../source/latex/fontspec/fontspec-doc-enc.tex | 2 +- .../source/latex/fontspec/fontspec-doc-featset.tex | 6 +- .../source/latex/fontspec/fontspec-doc-fontsel.tex | 2 +- .../source/latex/fontspec/fontspec-doc-intro.tex | 2 +- .../source/latex/fontspec/fontspec-doc-luatex.tex | 2 +- .../latex/fontspec/fontspec-doc-opentype.tex | 60 +- .../source/latex/fontspec/fontspec-doc-xetex.tex | 6 +- .../source/latex/fontspec/fontspec-enc.dtx | 173 -- .../source/latex/fontspec/fontspec-feat-aat.dtx | 243 -- .../latex/fontspec/fontspec-feat-opentype.dtx | 559 ----- .../source/latex/fontspec/fontspec-fontload.dtx | 105 - .../source/latex/fontspec/fontspec-graphite.dtx | 123 - .../source/latex/fontspec/fontspec-interfaces.dtx | 246 -- .../source/latex/fontspec/fontspec-internal.dtx | 1098 --------- .../source/latex/fontspec/fontspec-keyval.dtx | 864 ------- .../source/latex/fontspec/fontspec-lang.dtx | 418 ---- .../source/latex/fontspec/fontspec-lua.dtx | 2 +- .../source/latex/fontspec/fontspec-math.dtx | 254 -- .../source/latex/fontspec/fontspec-msg.dtx | 286 --- .../source/latex/fontspec/fontspec-opening.dtx | 195 -- .../source/latex/fontspec/fontspec-opentype.dtx | 438 ---- .../source/latex/fontspec/fontspec-patches.dtx | 208 -- .../source/latex/fontspec/fontspec-scripts.dtx | 183 -- .../source/latex/fontspec/fontspec-user.dtx | 509 ---- .../source/latex/fontspec/fontspec-vars.dtx | 281 --- .../source/latex/fontspec/fontspec-xfss.dtx | 286 --- .../texmf-dist/source/latex/fontspec/fontspec.dtx | 48 +- .../texmf-dist/source/latex/fontspec/fontspec.ins | 2 +- .../texmf-dist/source/latex/fontspec/fontspec.ltx | 2 +- .../tex/latex/fontspec/fontspec-luatex.sty | 2232 ++++++++--------- .../tex/latex/fontspec/fontspec-xetex.sty | 2507 ++++++++++---------- Master/texmf-dist/tex/latex/fontspec/fontspec.lua | 4 +- Master/texmf-dist/tex/latex/fontspec/fontspec.sty | 2 +- 61 files changed, 9512 insertions(+), 9324 deletions(-) delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-api.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-closing.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-api.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-closing.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-enc.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-aat.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-fontload.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-graphite.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-interfaces.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-keyval.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-lang.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-opening.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-patches.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-scripts.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-user.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-vars.dtx create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-xfss.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-enc.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-feat-aat.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-feat-opentype.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-fontload.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-graphite.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-interfaces.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-internal.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-lang.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-math.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-msg.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-opening.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-opentype.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-patches.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-scripts.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-user.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-vars.dtx delete mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-xfss.dtx diff --git a/Master/texmf-dist/doc/latex/fontspec/CHANGES.md b/Master/texmf-dist/doc/latex/fontspec/CHANGES.md index 52d1b86295f..74daa74118f 100644 --- a/Master/texmf-dist/doc/latex/fontspec/CHANGES.md +++ b/Master/texmf-dist/doc/latex/fontspec/CHANGES.md @@ -1,7 +1,13 @@ Change history ============== -## v2.6i (2018/07/30) +## v2.6j (2019/01/10) + + * Re-sync with `expl3` for deprecated commands. + * Added support for `\hbar` if anyone is relying on `fontspec` to emulate legacy maths. + + +## v2.6i (2018/08/02) * Emergency bug-fix -- a one-char typo broke loading of bold fonts! * Some minor updates to the docs regarding “family names” of fonts. diff --git a/Master/texmf-dist/doc/latex/fontspec/fontspec-code.pdf b/Master/texmf-dist/doc/latex/fontspec/fontspec-code.pdf index 74e8f037c45..392eb68a08f 100644 Binary files a/Master/texmf-dist/doc/latex/fontspec/fontspec-code.pdf and b/Master/texmf-dist/doc/latex/fontspec/fontspec-code.pdf differ diff --git a/Master/texmf-dist/doc/latex/fontspec/fontspec.pdf b/Master/texmf-dist/doc/latex/fontspec/fontspec.pdf index e353bde0765..befb4bbce75 100644 Binary files a/Master/texmf-dist/doc/latex/fontspec/fontspec.pdf and b/Master/texmf-dist/doc/latex/fontspec/fontspec.pdf differ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-api.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-api.dtx deleted file mode 100644 index 079227f9e76..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-api.dtx +++ /dev/null @@ -1,381 +0,0 @@ -%%^^A%% fontspec-api.dtx -- part of FONTSPEC - -% \section{Programmer's interface} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% -% -% These functions are not used directly by fontspec when defining fonts; -% they are designed to be used by other packages who wish to do font-related -% things on top of fontspec itself. -% -% Because I haven't fully explored how these functions will behave in -% practise, I am not giving them user-level names. As it becomes more clear -% which of these should be accessible by document writers, I'll open them up -% a little more. -% -% All functions are defined assuming that the font to be queried is -% currently selected as a fontspec font. (I.e., via \verb|\fontspec| or -% from a \verb|\newfontfamily| macro or from \verb|\setmainfont| and so on.) -% -% \begin{macro}{\fontspec_if_fontspec_font:TF} -% Test whether the currently selected font has been loaded by fontspec. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F} - { - \cs_if_exist:cTF {g_@@_fontinfo_ \f@family _prop} \prg_return_true: \prg_return_false: - } -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\fontspec_if_aat_feature:nnTF} -% Conditional to test if the currently selected font contains the \AAT\ -% feature (|#1|,|#2|). -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_aat_feature:nn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_atsui_bool - { - \@@_make_AAT_feature_string:NnnTF \font {#1} {#2} - \prg_return_true: \prg_return_false: - } - { - \prg_return_false: - } - } - { - \prg_return_false: - } - } -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\fontspec_if_opentype:TF} -% Test whether the currently selected font is an OpenType font. -% Always true for LuaTeX fonts. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_opentype: {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_ot_bool \prg_return_true: \prg_return_false: - } - { - \prg_return_false: - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_if_feature:nTF} -% Test whether the currently selected font contains the raw OpenType -% feature |#1|. E.g.: |\fontspec_if_feature:nTF {pnum} {True} {False}| -% Returns false if the font is not loaded by fontspec or is not an OpenType -% font. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_feature:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_ot_bool - { - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-num} \l_@@_tmp_tl - \int_set:Nn \l_@@_script_int {\l_@@_tmp_tl} - - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-num} \l_@@_tmp_tl - \int_set:Nn \l_@@_language_int {\l_@@_tmp_tl} - - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_fontspec_script_tl - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-tag} \l_fontspec_lang_tl - - \@@_check_ot_feat:NnTF \font {#1} {\prg_return_true:} {\prg_return_false:} - } - { - \prg_return_false: - } - } - { - \prg_return_false: - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_if_feature:nnnTF} -% Test whether the currently selected font with raw OpenType script tag |#1| and -% raw OpenType language tag |#2| contains the raw OpenType feature tag |#3|. -% E.g.:\\ | \fontspec_if_feature:nTF {latn} {ROM} {pnum} {True} {False}| -% Returns false if the font is not loaded by fontspec or is not an OpenType -% font. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_ot_bool - { - \@@_iv_str_to_num:Nn \l_@@_script_int {#1} - \@@_iv_str_to_num:Nn \l_@@_language_int {#2} - \@@_check_ot_feat:NnTF \font {#3} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_if_script:nTF} -% Test whether the currently selected font contains the raw OpenType -% script |#1|. E.g.: |\fontspec_if_script:nTF {latn} {True} {False}| -% Returns false if the font is not loaded by fontspec or is not an OpenType -% font. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_ot_bool - { - \@@_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_if_language:nTF} -% Test whether the currently selected font contains the raw OpenType language -% tag |#1|. E.g.: |\fontspec_if_language:nTF {ROM} {True} {False}|. -% Returns false if the font is not loaded by fontspec or is not an OpenType -% font. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_ot_bool - { - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-num} \l_@@_tmp_tl - \int_set:Nn \l_@@_script_int {\l_@@_tmp_tl} - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_fontspec_script_tl - - \@@_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_if_language:nnTF} -% Test whether the currently selected font contains the raw OpenType language -% tag |#2| in script |#1|. E.g.: |\fontspec_if_language:nnTF {cyrl} {SRB} {True} {False}|. -% Returns false if the font is not loaded by fontspec or is not an OpenType -% font. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_ot_bool - { - \tl_set:Nn \l_fontspec_script_tl {#1} - \@@_iv_str_to_num:Nn \l_@@_script_int {#1} - \@@_check_lang:NnTF \font {#2} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\fontspec_if_current_script:nTF} -% Test whether the currently loaded font is using the specified raw -% OpenType script tag |#1|. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_ot_bool - { - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_@@_tmp_tl - \str_if_eq:nVTF {#1} \l_@@_tmp_tl - {\prg_return_true:} {\prg_return_false:} - } - { \prg_return_false: } - } - { \prg_return_false: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_if_current_language:nTF} -% Test whether the currently loaded font is using the specified raw -% OpenType language tag |#1|. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \@@_set_font_type:N \font - \bool_if:NTF \l_@@_ot_bool - { - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-tag} \l_@@_tmp_tl - \str_if_eq:nVTF {#1} \l_@@_tmp_tl - {\prg_return_true:} {\prg_return_false:} - } - { \prg_return_false: } - } - { \prg_return_false: } - } -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\fontspec_set_family:Nnn} -% \darg{family} -% \darg{fontspec features} -% \darg{font name} -% Defines a new font family from given \meta{features} and \meta{font}, -% and stores the name in the variable \meta{family}. -% See the standard \pkg{fontspec} user commands for applications of this -% function. -% -% We want to store the actual name of the font family within the \meta{family} -% variable because the actual \LaTeX\ family name is automatically generated -% by fontspec and it's easier to keep it that way. -% \begin{macrocode} -\cs_new:Nn \fontspec_set_family:Nnn - { - \tl_set:Nn \l_@@_family_label_tl {#1} - \@@_select_font_family:nn {#2} {#3} - \tl_set_eq:NN #1 \l_fontspec_family_tl - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_generate_variant:Nn \fontspec_set_family:Nnn {c} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\fontspec_set_fontface:NNnn} -% TODO: the round-about approach of using \cs{fontname} -% means that settings such as fontdimens will be lost. -% (Discovered in unicode-math.) Investigate! -% \begin{macrocode} - \cs_new:Nn \fontspec_set_fontface:NNnn - { - \tl_set:Nn \l_@@_family_label_tl {#1} - \@@_select_font_family:nn {#3}{#4} - \global \font #1 = \fontname \l_fontspec_font \scan_stop: - \tl_set_eq:NN #2 \l_fontspec_family_tl - } -% \end{macrocode} -% \end{macro} -% -% -% -% \begin{macro}{\fontspec_font_if_exist:n} -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_font_if_exist:n {TF,T,F} - { - \group_begin: - \@@_init: - \@@_if_detect_external:nT {#1} { \@@_font_is_file: } - \@@_primitive_font_if_exist:nTF { \@@_construct_font_call:nn {#1} {} } - { \group_end: \prg_return_true: } - { \group_end: \prg_return_false: } - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_set_eq:NN \IfFontExistsTF \fontspec_font_if_exist:nTF -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\fontspec_if_current_feature:nTF} -% Test whether the currently loaded font is using the specified raw -% OpenType feature tag |#1|. -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_current_feature:n {TF,T,F} - { - \exp_args:Nxx \tl_if_in:nnTF - { \fontname\font } { \tl_to_str:n {#1} } - { \prg_return_true: } { \prg_return_false: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_if_small_caps:TF} -% \begin{macrocode} -\prg_new_conditional:Nnn \fontspec_if_small_caps: {TF,T,F} - { - \@@_if_merge_shape:nTF {sc} - { - \tl_set_eq:Nc \l_@@_smcp_shape_tl { \@@_shape_merge:nn {\f@shape} {sc} } - } - { - \tl_set:Nn \l_@@_smcp_shape_tl {sc} - } - - \cs_if_exist:cTF { \f@encoding/\f@family/\f@series/\l_@@_smcp_shape_tl } - { - \tl_if_eq:ccTF - { \f@encoding/\f@family/\f@series/\l_@@_smcp_shape_tl } - { \f@encoding/\f@family/\f@series/\updefault } - { \prg_return_false: } - { \prg_return_true: } - } - { \prg_return_false: } - } -% \end{macrocode} -% \end{macro} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-closing.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-closing.dtx deleted file mode 100644 index 0434c9fec2c..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-closing.dtx +++ /dev/null @@ -1,44 +0,0 @@ -%%^^A%% fontspec-closing.dtx -- part of FONTSPEC -% -% \section{Closing code} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% \subsection{Finishing up} -% Now we just want to set up loading the \texttt{.cfg} file, if it exists. -% \begin{macrocode} -\bool_if:NT \g_@@_cfg_bool - { - \InputIfFileExists{fontspec.cfg} - {} - {\typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.}} - } -% \end{macrocode} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-api.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-api.dtx new file mode 100644 index 00000000000..f53477df080 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-api.dtx @@ -0,0 +1,378 @@ +%%^^A%% fontspec-code-api.dtx -- part of FONTSPEC + +% \section{Programmer's interface} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% +% +% These functions are not used directly by fontspec when defining fonts; +% they are designed to be used by other packages who wish to do font-related +% things on top of fontspec itself. +% +% Because I haven't fully explored how these functions will behave in +% practise, I am not giving them user-level names. As it becomes more clear +% which of these should be accessible by document writers, I'll open them up +% a little more. +% +% All functions are defined assuming that the font to be queried is +% currently selected as a fontspec font. (I.e., via \verb|\fontspec| or +% from a \verb|\newfontfamily| macro or from \verb|\setmainfont| and so on.) +% +% \begin{macro}{\fontspec_if_fontspec_font:TF} +% Test whether the currently selected font has been loaded by fontspec. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F} + { + \cs_if_exist:cTF {g_@@_fontinfo_ \f@family _prop} \prg_return_true: \prg_return_false: + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\fontspec_if_aat_feature:nnTF} +% Conditional to test if the currently selected font contains the \AAT\ +% feature (|#1|,|#2|). +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_aat_feature:nn {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_atsui_bool + { + \@@_make_AAT_feature_string:NnnTF \font {#1} {#2} + \prg_return_true: \prg_return_false: + } + { + \prg_return_false: + } + } + { + \prg_return_false: + } + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\fontspec_if_opentype:TF} +% Test whether the currently selected font is an OpenType font. +% Always true for LuaTeX fonts. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_opentype: {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_ot_bool \prg_return_true: \prg_return_false: + } + { + \prg_return_false: + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_if_feature:nTF} +% Test whether the currently selected font contains the raw OpenType +% feature |#1|. E.g.: |\fontspec_if_feature:nTF {pnum} {True} {False}| +% Returns false if the font is not loaded by fontspec or is not an OpenType +% font. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_feature:n {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_ot_bool + { + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-num} \l_@@_tmp_tl + \int_set:Nn \l_@@_script_int {\l_@@_tmp_tl} + + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-num} \l_@@_tmp_tl + \int_set:Nn \l_@@_language_int {\l_@@_tmp_tl} + + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_fontspec_script_tl + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-tag} \l_fontspec_lang_tl + + \@@_check_ot_feat:NnTF \font {#1} {\prg_return_true:} {\prg_return_false:} + } + { + \prg_return_false: + } + } + { + \prg_return_false: + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_if_feature:nnnTF} +% Test whether the currently selected font with raw OpenType script tag |#1| and +% raw OpenType language tag |#2| contains the raw OpenType feature tag |#3|. +% E.g.:\\ | \fontspec_if_feature:nTF {latn} {ROM} {pnum} {True} {False}| +% Returns false if the font is not loaded by fontspec or is not an OpenType +% font. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_ot_bool + { + \@@_check_ot_feat:NnnnTF \font {#3} {#2} {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_if_script:nTF} +% Test whether the currently selected font contains the raw OpenType +% script |#1|. E.g.: |\fontspec_if_script:nTF {latn} {True} {False}| +% Returns false if the font is not loaded by fontspec or is not an OpenType +% font. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_ot_bool + { + \@@_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_if_language:nTF} +% Test whether the currently selected font contains the raw OpenType language +% tag |#1|. E.g.: |\fontspec_if_language:nTF {ROM} {True} {False}|. +% Returns false if the font is not loaded by fontspec or is not an OpenType +% font. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_ot_bool + { + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-num} \l_@@_tmp_tl + \int_set:Nn \l_@@_script_int {\l_@@_tmp_tl} + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_fontspec_script_tl + + \@@_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_if_language:nnTF} +% Test whether the currently selected font contains the raw OpenType language +% tag |#2| in script |#1|. E.g.: |\fontspec_if_language:nnTF {cyrl} {SRB} {True} {False}|. +% Returns false if the font is not loaded by fontspec or is not an OpenType +% font. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_ot_bool + { + \@@_check_lang:NnnTF \font {#2} {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\fontspec_if_current_script:nTF} +% Test whether the currently loaded font is using the specified raw +% OpenType script tag |#1|. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_ot_bool + { + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_@@_tmp_tl + \str_if_eq:nVTF {#1} \l_@@_tmp_tl + {\prg_return_true:} {\prg_return_false:} + } + { \prg_return_false: } + } + { \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_if_current_language:nTF} +% Test whether the currently loaded font is using the specified raw +% OpenType language tag |#1|. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F} + { + \fontspec_if_fontspec_font:TF + { + \@@_set_font_type:N \font + \bool_if:NTF \l_@@_ot_bool + { + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-tag} \l_@@_tmp_tl + \str_if_eq:nVTF {#1} \l_@@_tmp_tl + {\prg_return_true:} {\prg_return_false:} + } + { \prg_return_false: } + } + { \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\fontspec_set_family:Nnn} +% \darg{family} +% \darg{fontspec features} +% \darg{font name} +% Defines a new font family from given \meta{features} and \meta{font}, +% and stores the name in the variable \meta{family}. +% See the standard \pkg{fontspec} user commands for applications of this +% function. +% +% We want to store the actual name of the font family within the \meta{family} +% variable because the actual \LaTeX\ family name is automatically generated +% by fontspec and it's easier to keep it that way. +% \begin{macrocode} +\cs_new:Nn \fontspec_set_family:Nnn + { + \tl_set:Nn \l_@@_family_label_tl {#1} + \@@_select_font_family:nn {#2} {#3} + \tl_clear_new:N #1 + \tl_set_eq:NN #1 \l_fontspec_family_tl + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_generate_variant:Nn \fontspec_set_family:Nnn {c} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\fontspec_set_fontface:NNnn} +% TODO: the round-about approach of using \cs{fontname} +% means that settings such as fontdimens will be lost. +% (Discovered in unicode-math.) Investigate! +% \begin{macrocode} + \cs_new:Nn \fontspec_set_fontface:NNnn + { + \tl_set:Nn \l_@@_family_label_tl {#1} + \@@_select_font_family:nn {#3}{#4} + \global \font #1 = \fontname \l_fontspec_font \scan_stop: + \tl_set_eq:NN #2 \l_fontspec_family_tl + } +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\fontspec_font_if_exist:n} +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_font_if_exist:n {TF,T,F} + { + \group_begin: + \@@_init: + \@@_if_detect_external:nT {#1} { \@@_font_is_file: } + \@@_primitive_font_if_exist:nTF { \@@_construct_font_call:nn {#1} {} } + { \group_end: \prg_return_true: } + { \group_end: \prg_return_false: } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_set_eq:NN \IfFontExistsTF \fontspec_font_if_exist:nTF +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\fontspec_if_current_feature:nTF} +% Test whether the currently loaded font is using the specified raw +% OpenType feature tag |#1|. +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_current_feature:n {TF,T,F} + { + \exp_args:Nxx \tl_if_in:nnTF + { \fontname\font } { \tl_to_str:n {#1} } + { \prg_return_true: } { \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_if_small_caps:TF} +% \begin{macrocode} +\prg_new_conditional:Nnn \fontspec_if_small_caps: {TF,T,F} + { + \@@_if_merge_shape:nTF {sc} + { + \tl_set_eq:Nc \l_@@_smcp_shape_tl { \@@_shape_merge:nn {\f@shape} {sc} } + } + { + \tl_set:Nn \l_@@_smcp_shape_tl {sc} + } + + \cs_if_exist:cTF { \f@encoding/\f@family/\f@series/\l_@@_smcp_shape_tl } + { + \tl_if_eq:ccTF + { \f@encoding/\f@family/\f@series/\l_@@_smcp_shape_tl } + { \f@encoding/\f@family/\f@series/\updefault } + { \prg_return_false: } + { \prg_return_true: } + } + { \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-closing.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-closing.dtx new file mode 100644 index 00000000000..17fb823eefd --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-closing.dtx @@ -0,0 +1,44 @@ +%%^^A%% fontspec-code-closing.dtx -- part of FONTSPEC +% +% \section{Closing code} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% \subsection{Finishing up} +% Now we just want to set up loading the \texttt{.cfg} file, if it exists. +% \begin{macrocode} +\bool_if:NT \g_@@_cfg_bool + { + \InputIfFileExists{fontspec.cfg} + {} + { \typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.} } + } +% \end{macrocode} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-enc.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-enc.dtx new file mode 100644 index 00000000000..fef5d81549d --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-enc.dtx @@ -0,0 +1,173 @@ +%%^^A%% fontspec-code-enc.dtx -- part of FONTSPEC + +% \section{Extended font encodings} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% To be removed after the 2017 release of LaTeX2e: +% \begin{macrocode} +\providecommand\UnicodeFontFile[2]{"[#1]:#2"} +\providecommand\UnicodeFontName[2]{"#1:#2"} +%\providecommand\UnicodeFontTeXLigatures{mapping=tex-text;} +%\providecommand\UnicodeFontTeXLigatures{+tlig;} +% \end{macrocode} +% +% \begin{macrocode} +\providecommand\add@unicode@accent[2]{#2\char#1\relax} +\providecommand\DeclareUnicodeAccent[3]{% + \DeclareTextCommand{#1}{#2}{\add@unicode@accent{#3}}% +} +% \end{macrocode} +% +% \begin{macro}{\EncodingCommand} +% \begin{macrocode} +\DeclareDocumentCommand \EncodingCommand {mO{}m} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \EncodingCommand } + \DeclareTextCommand{#1}{\UnicodeEncodingName}[#2]{#3} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EncodingAccent} +% \begin{macrocode} +\DeclareDocumentCommand \EncodingAccent {mm} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \EncodingAccent } + \DeclareTextCommand{#1}{\UnicodeEncodingName}{\add@unicode@accent{#2}} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EncodingSymbol} +% \begin{macrocode} +\DeclareDocumentCommand \EncodingSymbol {mm} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \EncodingSymbol } + \DeclareTextSymbol{#1}{\UnicodeEncodingName}{#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EncodingComposite} +% \begin{macrocode} +\DeclareDocumentCommand \EncodingComposite {mmm} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \EncodingComposite } + \DeclareTextComposite{#1}{\UnicodeEncodingName}{#2}{#3} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EncodingCompositeCommand} +% \begin{macrocode} +\DeclareDocumentCommand \EncodingCompositeCommand {mmm} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \EncodingCompositeCommand } + \DeclareTextCompositeCommand{#1}{\UnicodeEncodingName}{#2}{#3} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareUnicodeEncoding} +% \begin{macrocode} +\DeclareDocumentCommand \DeclareUnicodeEncoding {mm} + { + \DeclareFontEncoding{#1}{}{} + \DeclareErrorFont{#1}{lmr}{m}{n}{10} + \DeclareFontSubstitution{#1}{lmr}{m}{n} + \DeclareFontFamily{#1}{lmr}{} + + \DeclareFontShape{#1}{lmr}{m}{n} + {<->\UnicodeFontFile{lmroman10-regular}{\UnicodeFontTeXLigatures}}{} + \DeclareFontShape{#1}{lmr}{m}{it} + {<->\UnicodeFontFile{lmroman10-italic}{\UnicodeFontTeXLigatures}}{} + \DeclareFontShape{#1}{lmr}{m}{sc} + {<->\UnicodeFontFile{lmromancaps10-regular}{\UnicodeFontTeXLigatures}}{} + \DeclareFontShape{#1}{lmr}{bx}{n} + {<->\UnicodeFontFile{lmroman10-bold}{\UnicodeFontTeXLigatures}}{} + \DeclareFontShape{#1}{lmr}{bx}{it} + {<->\UnicodeFontFile{lmroman10-bolditalic}{\UnicodeFontTeXLigatures}}{} + + \tl_set_eq:NN \l_@@_prev_unicode_name_tl \UnicodeEncodingName + \tl_set:Nn \UnicodeEncodingName {#1} + \bool_set_true:N \l_@@_defining_encoding_bool + #2 + \bool_set_false:N \l_@@_defining_encoding_bool + \tl_set_eq:NN \UnicodeEncodingName \l_@@_prev_unicode_name_tl + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\UndeclareSymbol} +% \begin{macro}{\UndeclareAccent} +% \begin{macro}{\UndeclareCommand} +% Synonyms for each other but all included for completeness. +% \begin{macrocode} +\DeclareDocumentCommand \UndeclareSymbol {m} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \UndeclareSymbol } + \UndeclareTextCommand {#1} {\UnicodeEncodingName} + } +\DeclareDocumentCommand \UndeclareAccent {m} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \UndeclareAccent } + \UndeclareTextCommand {#1} {\UnicodeEncodingName} + } +\DeclareDocumentCommand \UndeclareCommand {m} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \UndeclareCommand } + \UndeclareTextCommand {#1} {\UnicodeEncodingName} + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\UndeclareComposite} +% \begin{macrocode} +\DeclareDocumentCommand \UndeclareComposite {mm} + { + \bool_if:NF \l_@@_defining_encoding_bool + { \@@_error:nn {only-inside-encdef} \UndeclareComposite } + \cs_undefine:c + { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} } + } +% \end{macrocode} +% \end{macro} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-aat.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-aat.dtx new file mode 100644 index 00000000000..7fc1e382b7a --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-aat.dtx @@ -0,0 +1,242 @@ +%%^^A%% fontspec-code-feat-aat.dtx -- part of FONTSPEC + +% \section{AAT feature definitions} +% +% These are only defined for \XeTeX. +% +% \iffalse +% \begin{macrocode} +%<*fontspec&XE> +% \end{macrocode} +% \fi + +% \subsection{Ligatures} +% \begin{macrocode} +\@@_define_aat_feature_group:n {Ligatures} +\@@_define_aat_feature:nnnn {Ligatures} {Required} {1} {0} +\@@_define_aat_feature:nnnn {Ligatures} {NoRequired} {1} {1} +\@@_define_aat_feature:nnnn {Ligatures} {Common} {1} {2} +\@@_define_aat_feature:nnnn {Ligatures} {NoCommon} {1} {3} +\@@_define_aat_feature:nnnn {Ligatures} {Rare} {1} {4} +\@@_define_aat_feature:nnnn {Ligatures} {NoRare} {1} {5} +\@@_define_aat_feature:nnnn {Ligatures} {Discretionary} {1} {4} +\@@_define_aat_feature:nnnn {Ligatures} {NoDiscretionary} {1} {5} +\@@_define_aat_feature:nnnn {Ligatures} {Logos} {1} {6} +\@@_define_aat_feature:nnnn {Ligatures} {NoLogos} {1} {7} +\@@_define_aat_feature:nnnn {Ligatures} {Rebus} {1} {8} +\@@_define_aat_feature:nnnn {Ligatures} {NoRebus} {1} {9} +\@@_define_aat_feature:nnnn {Ligatures} {Diphthong} {1} {10} +\@@_define_aat_feature:nnnn {Ligatures} {NoDiphthong} {1} {11} +\@@_define_aat_feature:nnnn {Ligatures} {Squared} {1} {12} +\@@_define_aat_feature:nnnn {Ligatures} {NoSquared} {1} {13} +\@@_define_aat_feature:nnnn {Ligatures} {AbbrevSquared} {1} {14} +\@@_define_aat_feature:nnnn {Ligatures} {NoAbbrevSquared} {1} {15} +\@@_define_aat_feature:nnnn {Ligatures} {Icelandic} {1} {32} +\@@_define_aat_feature:nnnn {Ligatures} {NoIcelandic} {1} {33} +% \end{macrocode} +% Emulate CM extra ligatures. +% \begin{macrocode} +\keys_define:nn {fontspec-aat} + { + Ligatures / TeX .code:n = + { + \tl_set:Nn \l_@@_mapping_tl { tex-text } + } + } +% \end{macrocode} +% +% \subsection{Letters} +% \begin{macrocode} +\@@_define_aat_feature_group:n {Letters} +\@@_define_aat_feature:nnnn {Letters} {Normal} {3} {0} +\@@_define_aat_feature:nnnn {Letters} {Uppercase} {3} {1} +\@@_define_aat_feature:nnnn {Letters} {Lowercase} {3} {2} +\@@_define_aat_feature:nnnn {Letters} {SmallCaps} {3} {3} +\@@_define_aat_feature:nnnn {Letters} {InitialCaps} {3} {4} +% \end{macrocode} +% +% \subsection{Numbers} +% +% These were originally separated into \feat{NumberCase} and +% \feat{NumberSpacing} following \AAT, but it makes more sense to +% combine them. +% +% Both naming conventions are offered to select the number case. +% +% \begin{macrocode} +\@@_define_aat_feature_group:n {Numbers} +\@@_define_aat_feature:nnnn {Numbers} {Monospaced} {6} {0} +\@@_define_aat_feature:nnnn {Numbers} {Proportional} {6} {1} +\@@_define_aat_feature:nnnn {Numbers} {Lowercase} {21} {0} +\@@_define_aat_feature:nnnn {Numbers} {OldStyle} {21} {0} +\@@_define_aat_feature:nnnn {Numbers} {Uppercase} {21} {1} +\@@_define_aat_feature:nnnn {Numbers} {Lining} {21} {1} +\@@_define_aat_feature:nnnn {Numbers} {SlashedZero} {14} {5} +\@@_define_aat_feature:nnnn {Numbers} {NoSlashedZero} {14} {4} +% \end{macrocode} +% +% \subsection{Contextuals} +% \begin{macrocode} +\@@_define_aat_feature_group:n {Contextuals} +\@@_define_aat_feature:nnnn {Contextuals} {WordInitial} {8} {0} +\@@_define_aat_feature:nnnn {Contextuals} {NoWordInitial} {8} {1} +\@@_define_aat_feature:nnnn {Contextuals} {WordFinal} {8} {2} +\@@_define_aat_feature:nnnn {Contextuals} {NoWordFinal} {8} {3} +\@@_define_aat_feature:nnnn {Contextuals} {LineInitial} {8} {4} +\@@_define_aat_feature:nnnn {Contextuals} {NoLineInitial} {8} {5} +\@@_define_aat_feature:nnnn {Contextuals} {LineFinal} {8} {6} +\@@_define_aat_feature:nnnn {Contextuals} {NoLineFinal} {8} {7} +\@@_define_aat_feature:nnnn {Contextuals} {Inner} {8} {8} +\@@_define_aat_feature:nnnn {Contextuals} {NoInner} {8} {9} +% \end{macrocode} +% +% \subsection{Diacritics} +% \begin{macrocode} +\@@_define_aat_feature_group:n {Diacritics} +\@@_define_aat_feature:nnnn {Diacritics} {Show} {9} {0} +\@@_define_aat_feature:nnnn {Diacritics} {Hide} {9} {1} +\@@_define_aat_feature:nnnn {Diacritics} {Decompose} {9} {2} +% \end{macrocode} +% +% +% \subsection{Vertical position} +% \begin{macrocode} +\@@_define_aat_feature_group:n {VerticalPosition} +\@@_define_aat_feature:nnnn {VerticalPosition} {Normal} {10} {0} +\@@_define_aat_feature:nnnn {VerticalPosition} {Superior} {10} {1} +\@@_define_aat_feature:nnnn {VerticalPosition} {Inferior} {10} {2} +\@@_define_aat_feature:nnnn {VerticalPosition} {Ordinal} {10} {3} +% \end{macrocode} +% +% \subsection{Fractions} +% \begin{macrocode} +\@@_define_aat_feature_group:n {Fractions} +\@@_define_aat_feature:nnnn {Fractions} {On} {11} {1} +\@@_define_aat_feature:nnnn {Fractions} {Off} {11} {0} +\@@_define_aat_feature:nnnn {Fractions} {Diagonal} {11} {2} +% \end{macrocode} +% +% \subsection{Alternate} +% \begin{macrocode} +\@@_define_aat_feature_group:n { Alternate } +\keys_define:nn {fontspec-aat} + { + Alternate .default:n = {0} , + Alternate / unknown .code:n = + { + \clist_map_inline:nn {#1} + { + \@@_make_AAT_feature:nn {17}{##1} + } + } + } +% \end{macrocode} +% +% +% \subsection{Variant / StylisticSet} +% \begin{macrocode} +\@@_define_aat_feature_group:n {Variant} +\keys_define:nn {fontspec-aat} + { + Variant .default:n = {0} , + Variant / unknown .code:n = + { + \clist_map_inline:nn {#1} + { \@@_make_AAT_feature:nn {18}{##1} } + } + } +\aliasfontfeature{Variant}{StylisticSet} +% \end{macrocode} +% +% +% +% \begin{macrocode} +\@@_define_aat_feature_group:n {Vertical} +\keys_define:nn {fontspec-aat} + { + Vertical .choice: , + Vertical / RotatedGlyphs .code:n = + { + \__fontspec_update_featstr:n {vertical} + } + } +% \end{macrocode} +% +% +% \subsection{Style} +% \begin{macrocode} +\@@_define_aat_feature_group:n {Style} +\@@_define_aat_feature:nnnn {Style} {Italic} {32} {2} +\@@_define_aat_feature:nnnn {Style} {Ruby} {28} {2} +\@@_define_aat_feature:nnnn {Style} {Display} {19} {1} +\@@_define_aat_feature:nnnn {Style} {Engraved} {19} {2} +\@@_define_aat_feature:nnnn {Style} {TitlingCaps} {19} {4} +\@@_define_aat_feature:nnnn {Style} {TallCaps} {19} {5} +% \end{macrocode} +% +% \subsection{CJK shape} +% \begin{macrocode} +\@@_define_aat_feature_group:n {CJKShape} +\@@_define_aat_feature:nnnn {CJKShape} {Traditional} {20} {0} +\@@_define_aat_feature:nnnn {CJKShape} {Simplified} {20} {1} +\@@_define_aat_feature:nnnn {CJKShape} {JIS1978} {20} {2} +\@@_define_aat_feature:nnnn {CJKShape} {JIS1983} {20} {3} +\@@_define_aat_feature:nnnn {CJKShape} {JIS1990} {20} {4} +\@@_define_aat_feature:nnnn {CJKShape} {Expert} {20} {10} +\@@_define_aat_feature:nnnn {CJKShape} {NLC} {20} {13} +% \end{macrocode} +% +% \subsection{Character width} +% \begin{macrocode} +\@@_define_aat_feature_group:n {CharacterWidth} +\@@_define_aat_feature:nnnn {CharacterWidth} {Proportional} {22} {0} +\@@_define_aat_feature:nnnn {CharacterWidth} {Full} {22} {1} +\@@_define_aat_feature:nnnn {CharacterWidth} {Half} {22} {2} +\@@_define_aat_feature:nnnn {CharacterWidth} {Third} {22} {3} +\@@_define_aat_feature:nnnn {CharacterWidth} {Quarter} {22} {4} +\@@_define_aat_feature:nnnn {CharacterWidth} {AlternateProportional} {22} {5} +\@@_define_aat_feature:nnnn {CharacterWidth} {AlternateHalf} {22} {6} +\@@_define_aat_feature:nnnn {CharacterWidth} {Default} {22} {7} +% \end{macrocode} +% +% \subsection{Annotation} +% \begin{macrocode} +\@@_define_aat_feature_group:n {Annotation} +\@@_define_aat_feature:nnnn {Annotation} {Off} {24} {0} +\@@_define_aat_feature:nnnn {Annotation} {Box} {24} {1} +\@@_define_aat_feature:nnnn {Annotation} {RoundedBox} {24} {2} +\@@_define_aat_feature:nnnn {Annotation} {Circle} {24} {3} +\@@_define_aat_feature:nnnn {Annotation} {BlackCircle} {24} {4} +\@@_define_aat_feature:nnnn {Annotation} {Parenthesis} {24} {5} +\@@_define_aat_feature:nnnn {Annotation} {Period} {24} {6} +\@@_define_aat_feature:nnnn {Annotation} {RomanNumerals} {24} {7} +\@@_define_aat_feature:nnnn {Annotation} {Diamond} {24} {8} +\@@_define_aat_feature:nnnn {Annotation} {BlackSquare} {24} {9} +\@@_define_aat_feature:nnnn {Annotation} {BlackRoundSquare} {24} {10} +\@@_define_aat_feature:nnnn {Annotation} {DoubleCircle} {24} {11} +% \end{macrocode} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx new file mode 100644 index 00000000000..26a75f91166 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-feat-opentype.dtx @@ -0,0 +1,572 @@ +%%^^A%% fontspec-code-feat-opentype.dtx -- part of FONTSPEC + +% \section{OpenType feature definitions} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% +% \begin{macrocode} +\@@_feat_prop_add:nn {salt} { Alternate\,=\,$N$ } +\@@_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ } +\@@_feat_prop_add:nn {ornm} { Ornament\,=\,$N$ } +\@@_feat_prop_add:nn {cvNN} { CharacterVariant\,=\,$N$:$M$ } +\@@_feat_prop_add:nn {ssNN} { StylisticSet\,=\,$N$ } +% \end{macrocode} +% +% \section{Regular key=val / tag definitions} +% +% \subsection{Ligatures} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Ligatures} +\@@_define_opentype_feature:nnnnn {Ligatures} {ResetAll} {} {} + { + +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig, +% mapping = tex-text +% +tlig,-tlig + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Required} {rlig} {rlig} {} +\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Common} {liga} {liga} {} +\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Rare} {dlig} {dlig} {} +\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {} +\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual} {clig} {clig} {} +\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Historic} {hlig} {hlig} {} +% \end{macrocode} +% Emulate CM extra ligatures. +% \begin{macrocode} +%<*XE> +\keys_define:nn {fontspec-opentype} + { + Ligatures / TeX .code:n = { \tl_set:Nn \l_@@_mapping_tl {tex-text} }, + Ligatures / TeXReset .code:n = { \tl_clear:N \l_@@_mapping_tl }, + } +% +%\@@_define_opentype_onreset:nnnnn {Ligatures} {TeX} {} { +tlig } {} +% \end{macrocode} +% +% \subsection{Letters} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Letters} +\@@_define_opentype_feature:nnnnn {Letters} {ResetAll} {} {} + { + +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand, + -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {+smcp,+pcap,+c2sc,+c2pc,+unic,+rand} +\@@_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic,+rand} +\@@_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic,+rand} +\@@_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic,+rand} +\@@_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic,+rand} +\@@_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {+rand} +\@@_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {+unic} +% \end{macrocode} +% +% \subsection{Numbers} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Numbers} +\@@_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {} + { + +tnum,-tnum, + +pnum,-pnum, + +onum,-onum, + +lnum,-lnum, + +zero,-zero, + +anum,-anum, + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {Numbers} {Monospaced} {tnum} {tnum} {+pnum,-pnum} +\@@_define_opentype_onoffreset:nnnnn {Numbers} {Proportional} {pnum} {pnum} {+tnum,-tnum} +\@@_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase} {onum} {onum} {+lnum,-lnum} +\@@_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase} {lnum} {lnum} {+onum,-onum} +\@@_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero} {zero} {zero} {} +% \end{macrocode} +% +% \begin{macrocode} +\aliasfontfeatureoption {Numbers} {Monospaced} {Tabular} +\aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle} +\aliasfontfeatureoption {Numbers} {Uppercase} {Lining} +% \end{macrocode} +% +% |luaotload| provides a custom |anum| feature for replacing Latin +% (AKA Arabic) numbers with Arabic (AKA Indic-Arabic). The same feature +% maps to Farsi (Persian) numbers if font language is Farsi. +% \begin{macrocode} +% \@@_define_opentype_onoffreset:nnnnn {Numbers} {Arabic} {anum} {anum} {} +% \end{macrocode} +% +% \subsection{Vertical position} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {VerticalPosition} +\@@_define_opentype_feature:nnnnn {VerticalPosition} {ResetAll} {} {} + { + +sups,-sups, + +subs,-subs, + +ordn,-ordn, + +numr,-numr, + +dnom,-dnom, + +sinf,-sinf, + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Superior} {sups} {sups} {+subs,+ordn,+numr,+dnom,+sinf} +\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Inferior} {subs} {subs} {+sups,+ordn,+numr,+dnom,+sinf} +\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Ordinal} {ordn} {ordn} {+sups,+subs,+numr,+dnom,+sinf} +\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Numerator} {numr} {numr} {+sups,+subs,+ordn,+dnom,+sinf} +\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Denominator} {dnom} {dnom} {+sups,+subs,+ordn,+numr,+sinf} +\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {ScientificInferior} {sinf} {sinf} {+sups,+subs,+ordn,+numr,+dnom} +% \end{macrocode} +% +% \subsection{Contextuals} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Contextuals} +\@@_define_opentype_feature:nnnnn {Contextuals} {ResetAll} {} {} + { + +cswh,-cswh, + +calt,-calt, + +init,-init, + +fina,-fina, + +falt,-falt, + +medi,-medi, + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Swash} {cswh} {cswh} {} +\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Alternate} {calt} {calt} {} +\@@_define_opentype_onoffreset:nnnnn {Contextuals} {WordInitial} {init} {init} {} +\@@_define_opentype_onoffreset:nnnnn {Contextuals} {WordFinal} {fina} {fina} {} +\@@_define_opentype_onoffreset:nnnnn {Contextuals} {LineFinal} {falt} {falt} {} +\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Inner} {medi} {medi} {} +% \end{macrocode} +% +% \subsection{Diacritics} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Diacritics} +\@@_define_opentype_feature:nnnnn {Diacritics} {ResetAll} {} {} + { + +mark,-mark, + +mkmk,-mkmk, + +abvm,-abvm, + +blwm,-blwm, + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToBase} {mark} {mark} {} +\@@_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToMark} {mkmk} {mkmk} {} +\@@_define_opentype_onoffreset:nnnnn {Diacritics} {AboveBase} {abvm} {abvm} {} +\@@_define_opentype_onoffreset:nnnnn {Diacritics} {BelowBase} {blwm} {blwm} {} +% \end{macrocode} +% +% \subsection{Kerning} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Kerning} +\@@_define_opentype_feature:nnnnn {Kerning} {ResetAll} {} {} + { + +cpsp,-cpsp, + +kern,-kern, + } +\@@_define_opentype_onoffreset:nnnnn {Kerning} {Uppercase} {cpsp} {cpsp} {} +\@@_define_opentype_feature:nnnnn {Kerning} {On} {kern} {+kern} {-kern} +\@@_define_opentype_feature:nnnnn {Kerning} {Off} {kern} {-kern} {+kern} +\@@_define_opentype_feature:nnnnn {Kerning} {Reset} {} {} {+kern,-kern} +% \end{macrocode} +% +% \subsection{Fractions} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Fractions} +\@@_define_opentype_feature:nnnnn {Fractions} {ResetAll} {} {} + { + +frac,-frac, + +afrc,-afrc, + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_feature:nnnnn {Fractions} {On} {frac} {+frac} {} +\@@_define_opentype_feature:nnnnn {Fractions} {Off} {frac} {-frac} {} +\@@_define_opentype_feature:nnnnn {Fractions} {Reset} {} {} {+frac,-frac} +\@@_define_opentype_onoffreset:nnnnn {Fractions} {Alternate} {afrc} {afrc} {-frac} +% \end{macrocode} +% + +% \subsection{Style} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Style} +\@@_define_opentype_feature:nnnnn {Style} {ResetAll} {} {} + { + +salt,-salt, + +ital,-ital, + +ruby,-ruby, + +swsh,-swsh, + +hist,-hist, + +titl,-titl, + +hkna,-hkna, + +vkna,-vkna, + +ssty=0,-ssty=0, + +ssty=1,-ssty=1, + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {Style} {Alternate} {salt} {salt} {} +\@@_define_opentype_onoffreset:nnnnn {Style} {Italic} {ital} {ital} {} +\@@_define_opentype_onoffreset:nnnnn {Style} {Ruby} {ruby} {ruby} {} +\@@_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {} +\@@_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {} +\@@_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {} +\@@_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} +\@@_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna} +\@@_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna} +\@@_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna} +\@@_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1} +\@@_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0} +% \end{macrocode} +% +% \subsection{CJK shape} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {CJKShape} +\@@_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {} + { + +trad,-trad, + +smpl,-smpl, + +jp78,-jp78, + +jp83,-jp83, + +jp90,-jp90, + +jp04,-jp04, + +expt,-expt, + +nlck,-nlck, + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Traditional} {trad} {trad} {+smpl,+jp78,+jp83,+jp90,+jp04,+expt,+nlck} +\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Simplified} {smpl} {smpl} {+trad,+jp78,+jp83,+jp90,+jp04,+expt,+nlck} +\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1978} {jp78} {jp78} {+trad,+smpl,+jp83,+jp90,+jp04,+expt,+nlck} +\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1983} {jp83} {jp83} {+trad,+smpl,+jp78,+jp90,+jp04,+expt,+nlck} +\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1990} {jp90} {jp90} {+trad,+smpl,+jp78,+jp83,+jp04,+expt,+nlck} +\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS2004} {jp04} {jp04} {+trad,+smpl,+jp78,+jp83,+jp90,+expt,+nlck} +\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Expert} {expt} {expt} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+nlck} +\@@_define_opentype_onoffreset:nnnnn {CJKShape} {NLC} {nlck} {nlck} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+expt} +% \end{macrocode} +% +% \subsection{Character width} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {CharacterWidth} +\@@_define_opentype_feature:nnnnn {CharacterWidth} {ResetAll} {} {} + { + +pwid,-pwid, + +fwid,-fwid, + +hwid,-hwid, + +twid,-twid, + +qwid,-qwid, + +palt,-palt, + +halt,-halt, + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Proportional} {pwid} {pwid} {+fwid,+hwid,+twid,+qwid,+palt,+halt} +\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Full} {fwid} {fwid} {+pwid,+hwid,+twid,+qwid,+palt,+halt} +\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Half} {hwid} {hwid} {+pwid,+fwid,+twid,+qwid,+palt,+halt} +\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Third} {twid} {twid} {+pwid,+fwid,+hwid,+qwid,+palt,+halt} +\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Quarter} {qwid} {qwid} {+pwid,+fwid,+hwid,+twid,+palt,+halt} +\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateProportional} {palt} {palt} {+pwid,+fwid,+hwid,+twid,+qwid,+halt} +\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateHalf} {halt} {halt} {+pwid,+fwid,+hwid,+twid,+qwid,+palt} +% \end{macrocode} +% +% \subsection{Vertical} +% According to spec |vkrn| must also activate |vpal| if available but for simplicity we don't do that here (yet?). +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Vertical} +\@@_define_opentype_onoffreset:nnnnn {Vertical} {RotatedGlyphs} {vrt2} {vrt2} {+vrtr,+vert} +\@@_define_opentype_onoffreset:nnnnn {Vertical} {AlternatesForRotation} {vrtr} {vrtr} {+vrt2} +\@@_define_opentype_onoffreset:nnnnn {Vertical} {Alternates} {vert} {vert} {+vrt2} +\@@_define_opentype_onoffreset:nnnnn {Vertical} {KanaAlternates} {vkna} {vkna} {+hkna} +\@@_define_opentype_onoffreset:nnnnn {Vertical} {Kerning} {vkrn} {vkrn} {} +\@@_define_opentype_onoffreset:nnnnn {Vertical} {AlternateMetrics} {valt} {valt} {+vhal,+vpal,+kern} +\@@_define_opentype_onoffreset:nnnnn {Vertical} {HalfMetrics} {vhal} {vhal} {+valt,+vpal,+kern} +\@@_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal} +% \end{macrocode} +% +% +% +% +% \section{OpenType features that need numbering} +% +% \subsection{Alternate} +% +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Alternate} +\keys_define:nn {fontspec-opentype} + { + Alternate .default:n = {0} , + Alternate / unknown .code:n = + { + \clist_map_inline:nn {#1} + { \@@_make_OT_feature:nnn {salt}{ +salt = ##1 }{} } + } + } +% \end{macrocode} +% +% \begin{macrocode} +%<*LU> +\keys_define:nn {fontspec-opentype} + { + Alternate / Random .code:n = + { \@@_make_OT_feature:nnn {salt}{ +salt = random }{} } , + } +% +% \end{macrocode} +% +% \begin{macrocode} +\aliasfontfeature{Alternate}{StylisticAlternates} +% \end{macrocode} +% +% +% \subsection{Variant / StylisticSet} +% +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Variant} +\keys_define:nn {fontspec-opentype} + { + Variant .default:n = {0} , + Variant / unknown .code:n = + { + \clist_map_inline:nn {#1} + { + \@@_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {} + } + } + } +% \end{macrocode} +% +% \begin{macrocode} +\aliasfontfeature{Variant}{StylisticSet} +% \end{macrocode} +% +% \subsection{CharacterVariant} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {CharacterVariant} +\use:x + { + \cs_new:Npn \exp_not:N \fontspec_parse_cv:w + ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil + { + \@@_make_OT_feature:xxx + { cv \exp_not:N \two@digits {##1} } + { +cv \exp_not:N \two@digits {##1} = ##2 } {} + } + \keys_define:nn {fontspec-opentype} + { + CharacterVariant / unknown .code:n = + { + \clist_map_inline:nn {##1} + { + \exp_not:N \fontspec_parse_cv:w + ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil + } + } + } + } +% \end{macrocode} +% Possibilities: \verb|a:0:\q_nil| or \verb|a:b:0:\q_nil|. +% +% +% \subsection{Annotation} +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Annotation} +\keys_define:nn {fontspec-opentype} + { + Annotation .default:n = {0} , + Annotation / unknown .code:n = + { + \@@_make_OT_feature:nnn {nalt} {+nalt=#1} {} + } + } +% \end{macrocode} +% +% \subsection{Ornament} +% +% \begin{macrocode} +\@@_define_opentype_feature_group:n {Ornament} +\keys_define:nn {fontspec-opentype} + { + Ornament .default:n = {0} , + Ornament / unknown .code:n = + { + \@@_make_OT_feature:nnn {ornm} { +ornm=#1 } {} + } + } +% \end{macrocode} +% +% +% \section{Script and Language} +% +% +% \subsection{Script} +% +% \begin{macrocode} +\keys_define:nn { fontspec-opentype } { Script .choice: } +\cs_new:Nn \fontspec_new_script:nn + { + \keys_define:nn { fontspec-opentype } { Script / #1 .code:n = + \bool_set_false:N \l_@@_script_exist_bool + \clist_map_inline:nn {#2} + { + \@@_check_script:NnTF \l_fontspec_font {####1} + { + \tl_set:Nn \l_fontspec_script_tl {####1} + \int_set:Nn \l_@@_script_int {\l_@@_strnum_int} + \bool_set_true:N \l_@@_script_exist_bool + \tl_gset:Nx \g_@@_single_feat_tl { script=####1 } + \clist_map_break: + } + { } + } + \bool_if:NF \l_@@_script_exist_bool + { + \str_if_eq:nnTF {#1} {Latin} + { + \@@_warning:nx {script-not-exist} {#1} + } + { + \@@_check_script:NnTF \l_fontspec_font {latn} + { + \@@_warning:nx {script-not-exist-latn} {#1} + \tl_set:Nn \l_fontspec_script_tl {latn} + \int_set:Nn \l_@@_script_int {\l_@@_strnum_int} + } + { + \@@_warning:nx {script-not-exist} {#1} + } + } + } + } + } +% \end{macrocode} +% +% +% \subsection{Language} +% +% \begin{macrocode} +\keys_define:nn { fontspec-opentype } { Language .choice: } +\cs_new:Nn \fontspec_new_lang:nn + { + \keys_define:nn { fontspec-opentype } { Language / #1 .code:n = + \@@_check_lang:NnTF \l_fontspec_font {#2} + { + \tl_set:Nn \l_fontspec_lang_tl {#2} + \int_set:Nn \l_@@_language_int {\l_@@_strnum_int} + \tl_gset:Nx \g_@@_single_feat_tl { language=#2 } + } + { + \@@_warning:nx {language-not-exist} {#1} + \keys_set:nn { fontspec-opentype } { Language = Default } + } + } + } +% \end{macrocode} +% +% \paragraph{Default} +% +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-opentype}{ Language / Default } + { + \tl_set:Nn \l_fontspec_lang_tl {DFLT} + \int_zero:N \l_@@_language_int + \tl_gset:Nn \g_@@_single_feat_tl { language=DFLT } + } +% \end{macrocode} +% +% \paragraph{Turkish} Turns out that many fonts use `TUR' as their Turkish language tag rather than the specified `TRK'. So we check for both: +% \begin{macrocode} +\keys_define:nn {fontspec-opentype} + { + Language / Turkish .code:n = + { + \@@_check_lang:NnTF \l_fontspec_font {TRK} + { + \int_set:Nn \l_@@_language_int {\l_@@_strnum_int} + \tl_set:Nn \l_fontspec_lang_tl {TRK} + \tl_gset:Nn \g_@@_single_feat_tl { language=TRK } + } + { + \@@_check_lang:NnTF \l_fontspec_font {TUR} + { + \int_set:Nn \l_@@_language_int {\l_@@_strnum_int} + \tl_set:Nn \l_fontspec_lang_tl {TUR} + \tl_gset:Nn \g_@@_single_feat_tl { language=TUR } + } + { + \@@_warning:nx {language-not-exist} {Turkish} + \keys_set:nn {fontspec-opentype} {Language=Default} + } + } + } + } +% \end{macrocode} +% TODO: generalise the above +% +% +% \section{Backwards compatibility} +% +% \begin{macrocode} +\cs_new:Nn \@@_ot_compat:nn + { + \aliasfontfeatureoption {#1} {#2Off} {No#2} + } +\@@_ot_compat:nn {Ligatures} {Rare} +\@@_ot_compat:nn {Ligatures} {Required} +\@@_ot_compat:nn {Ligatures} {Common} +\@@_ot_compat:nn {Ligatures} {Discretionary} +\@@_ot_compat:nn {Ligatures} {Contextual} +\@@_ot_compat:nn {Ligatures} {Historic} +\@@_ot_compat:nn {Numbers} {SlashedZero} +\@@_ot_compat:nn {Contextuals} {Swash} +\@@_ot_compat:nn {Contextuals} {Alternate} +\@@_ot_compat:nn {Contextuals} {WordInitial} +\@@_ot_compat:nn {Contextuals} {WordFinal} +\@@_ot_compat:nn {Contextuals} {LineFinal} +\@@_ot_compat:nn {Contextuals} {Inner} +\@@_ot_compat:nn {Diacritics} {MarkToBase} +\@@_ot_compat:nn {Diacritics} {MarkToMark} +\@@_ot_compat:nn {Diacritics} {AboveBase} +\@@_ot_compat:nn {Diacritics} {BelowBase} +% \end{macrocode} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-fontload.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-fontload.dtx new file mode 100644 index 00000000000..be5155de476 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-fontload.dtx @@ -0,0 +1,105 @@ +%%^^A%% fontspec-code-fontload.dtx -- part of FONTSPEC + +% \section{expl3 interface for primitive font loading} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% \begin{macro}{\@@_primitive_font_set:Nnn,\@@_primitive_font_gset:Nnn} +% \begin{macrocode} +\cs_set:Npn \@@_primitive_font_set:Nnn #1#2#3 + { + \font #1 = #2 ~at~ #3 \scan_stop: + } +% \end{macrocode} +% \begin{macrocode} +\cs_set:Npn \@@_primitive_font_gset:Nnn #1#2#3 + { + \global \font #1 = #2 ~at~ #3 \scan_stop: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_font_suppress_not_found_error:} +% \begin{macrocode} +\cs_set:Npn \@@_font_suppress_not_found_error: + { + \int_set:Nn \suppressfontnotfounderror {1} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[pTF]{\@@_primitive_font_if_null:N} +% \begin{macrocode} +\prg_set_conditional:Nnn \@@_primitive_font_if_null:N {p,TF,T,F} + { + \ifx #1 \nullfont + \prg_return_true: + \else + \prg_return_false: + \fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[TF]{\@@_primitive_font_if_exist:n} +% \begin{macrocode} +\prg_set_conditional:Nnn \@@_primitive_font_if_exist:n {TF,T,F} + { + \group_begin: + \@@_font_suppress_not_found_error: + \@@_primitive_font_set:Nnn \l_@@_primitive_font {#1} {10pt} + \@@_primitive_font_if_null:NTF \l_@@_primitive_font + { \group_end: \prg_return_false: } + { \group_end: \prg_return_true: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_primitive_font_glyph_if_exist:NnTF} +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_primitive_font_glyph_if_exist:Nn {p,TF,T,F} + { + \tex_iffontchar:D #1 #2 \scan_stop: + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_primitive_font_set_hyphenchar:Nn} +% \begin{macrocode} +\cs_new:Nn \@@_primitive_font_set_hyphenchar:Nn + { + \tex_hyphenchar:D #1 = #2 \scan_stop: + } +% \end{macrocode} +% \end{macro} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-graphite.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-graphite.dtx new file mode 100644 index 00000000000..bb99c2a8870 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-graphite.dtx @@ -0,0 +1,128 @@ +%%^^A%% fontspec-code-graphite.dtx -- part of FONTSPEC + +% \section{Graphite/AAT code} +% +% \iffalse +% \begin{macrocode} +%<*fontspec&XE> +% \end{macrocode} +% \fi +% + + +% \begin{macro}{\@@_define_aat_feature_group:n} +% \begin{macrocode} +\cs_new:Nn \@@_define_aat_feature_group:n + { + \keys_define:nn {fontspec-aat} { #1 .multichoice: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_define_aat_feature:nnnn} +% \begin{macrocode} +\cs_new:Nn \@@_define_aat_feature:nnnn + { + \keys_define:nn {fontspec-aat} + { + #1/#2 .code:n = { \@@_make_AAT_feature:nn {#3}{#4} } + } + } +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\@@_make_AAT_feature:nn} +% \begin{macrocode} +\cs_new:Nn \@@_make_AAT_feature:nn + { + \tl_if_empty:nTF {#1} + { \@@_warning:n {aat-feature-not-exist} } + { + \@@_make_AAT_feature_string:NnnTF \l_fontspec_font {#1}{#2} + { + \@@_update_featstr:n {\l_fontspec_feature_string_tl} + } + { + \@@_warning:nx {aat-feature-not-exist-in-font} {#1,#2} + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_make_AAT_feature_string:NnnTF} +% This macro takes the numerical codes for a font feature and +% creates a specified macro containing the string required in the +% font definition to turn that feature on or off. Used primarily in +% [...], but also used to check if small caps +% exists in the requested font (see page~\pageref{mac:makesmallcaps}). +% +% For exclusive selectors, it's easy; just grab the string: +% For \emph{non}-exclusive selectors, it's a little more complex. +% If the selector is even, it corresponds to switching the feature on. +% If the selector is \emph{odd}, it corresponds to switching the feature off. +% But \XeTeX\ doesn't return a selector string for this number, since the +% feature is defined for the `switching on' value. So we need to check the +% selector of the previous number, and then prefix the feature string with |!| +% to denote the switch. +% +% Finally, save out the complete feature string in \cmd\l_fontspec_feature_string_tl. +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_make_AAT_feature_string:Nnn {TF,T,F} + { + \tl_set:Nx \l_@@_tmpa_tl { \XeTeXfeaturename #1 #2 } + \tl_if_empty:NTF \l_@@_tmpa_tl + { \prg_return_false: } + { + \int_compare:nTF { \XeTeXisexclusivefeature #1 #2 > 0 } + { + \tl_set:Nx \l_@@_tmpb_tl {\XeTeXselectorname #1 #2\space #3} + } + { + \int_if_even:nTF {#3} + { + \tl_set:Nx \l_@@_tmpb_tl {\XeTeXselectorname #1 #2\space #3} + } + { + \tl_set:Nx \l_@@_tmpb_tl + { + \XeTeXselectorname #1 #2\space \numexpr#3-1\relax + } + \tl_if_empty:NF \l_@@_tmpb_tl { \tl_put_left:Nn \l_@@_tmpb_tl {!} } + } + } + + \tl_if_empty:NTF \l_@@_tmpb_tl + { \prg_return_false: } + { + \tl_set:Nx \l_fontspec_feature_string_tl { \l_@@_tmpa_tl = \l_@@_tmpb_tl } + \prg_return_true: + } + } + } +% \end{macrocode} +% \end{macro} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-interfaces.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-interfaces.dtx new file mode 100644 index 00000000000..58979626f38 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-interfaces.dtx @@ -0,0 +1,246 @@ +%%^^A%% fontspec-code-interfaces.dtx -- part of FONTSPEC + +% \section{User commands}\label{sec:codeuser} +% +% This section contains the definitions of the commands detailed in +% the user documentation. Only the `top level' definitions of the +% commands are contained herein; they all use or define macros which +% are defined or used later on in \vref{sec:codeinternal}. +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% \begin{macrocode} +\NewDocumentCommand \fontspec { O{} m O{} } + { + \@@_main_fontspec:nn {#1,#3} {#2} + \ignorespaces + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \setmainfont { O{} m O{} } + { + \@@_main_setmainfont:nn {#1,#3} {#2} + \ignorespaces + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \setsansfont { O{} m O{} } + { + \@@_main_setsansfont:nn {#1,#3} {#2} + \ignorespaces + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \setmonofont { O{} m O{} } + { + \@@_main_setmonofont:nn {#1,#3} {#2} + \ignorespaces + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \setmathrm { O{} m O{} } + { + \@@_main_setmathrm:nn {#1,#3} {#2} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \setboldmathrm { O{} m O{} } + { + \@@_main_setboldmathrm:nn {#1,#3} {#2} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \setmathsf { O{} m O{} } + { + \@@_main_setmathsf:nn {#1,#3} {#2} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \setmathtt { O{} m O{} } + { + \@@_main_setmathtt:nn {#1,#3} {#2} + } +% \end{macrocode} +% +% \begin{macro}{\setromanfont} +% This is the old name for \cs{setmainfont}, retained \emph{ad infinitum} +% for backwards compatibility. It was deprecated in 2010. +% \begin{macrocode} +\NewDocumentCommand \setromanfont { O{} m O{} } + { + \@@_main_setmainfont:nn {#1,#3} {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\NewDocumentCommand \newfontfamily { m O{} m O{} } + { + \@@_main_newfontfamily:nnnN {#1} {#2,#4} {#3} \NewDocumentCommand + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \renewfontfamily { m O{} m O{} } + { + \@@_main_newfontfamily:nnnN {#1} {#2,#4} {#3} \RenewDocumentCommand + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \setfontfamily { m O{} m O{} } + { + \@@_main_newfontfamily:nnnN {#1} {#2,#4} {#3} \DeclareDocumentCommand + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \newfontface { m O{} m O{} } + { + \@@_main_newfontface:nnn {#1} {#2,#4} {#3} + } +% \end{macrocode} +% +% \begin{macro}{\defaultfontfeatures} +% This macro takes one argument that consists of all of feature +% options that will be applied by default to all subsequent \cs{fontspec} commands. +% \begin{macrocode} +\NewDocumentCommand \defaultfontfeatures { t+ o m } + { + \IfNoValueTF {#2} + { \@@_set_default_features:nn {#1} {#3} } + { \@@_set_font_default_features:nnn {#1} {#2} {#3} } + \ignorespaces + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\NewDocumentCommand \addfontfeatures {m} + { + \@@_main_addfontfeatures:n {#1} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \addfontfeature {m} + { + \@@_main_addfontfeatures:n {#1} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \newfontfeature {mm} + { + \@@_main_newfontfeature:nn {#1} {#2} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \newAATfeature {mmmm} + { + \@@_main_newAATfeature:nnnn {#1} {#2} {#3} {#4} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \newopentypefeature {mmm} + { + \@@_main_newopentypefeature:nnn {#1} {#2} {#3} + } +% \end{macrocode} +% +% \begin{macro}{\newICUfeature} +% Deprecated. +% \begin{macrocode} +\NewDocumentCommand \newICUfeature {mmm} + { + \@@_main_newopentypefeature:nnn {#1} {#2} {#3} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\NewDocumentCommand \aliasfontfeature {mm} + { + \@@_main_aliasfontfeature:nn {#1} {#2} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \aliasfontfeatureoption {mmm} + { + \@@_main_aliasfontfeatureoption:nnn {#1} {#2} {#3} + } +% \end{macrocode} +% +% \begin{macro}{\newfontscript} +% Mostly used internally, but also possibly useful for users, to define new OpenType +% `scripts', mapping logical names to OpenType script tags. +% \begin{macrocode} +\NewDocumentCommand \newfontscript {mm} + { + \fontspec_new_script:nn {#1} {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newfontlanguage} +% Mostly used internally, but also possibly useful for users, to define new OpenType +% `languages', mapping logical names to OpenType language tags. +% \begin{macrocode} +\NewDocumentCommand \newfontlanguage {mm} + { + \fontspec_new_lang:nn {#1} {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\NewDocumentCommand \DeclareFontExtensions {m} + { + \@@_main_DeclareFontExtensions:n {#1} + } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \IfFontFeatureActiveTF {mmm} + { + \@@_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3} + } +% \end{macrocode} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx new file mode 100644 index 00000000000..a8d8c49763c --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-internal.dtx @@ -0,0 +1,1190 @@ +%%^^A%% fontspec-code-internal.dtx -- part of FONTSPEC + +% \section{Internals} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% \subsection{The main function for setting fonts} +% +% \begin{macro}{\@@_select_font_family:nn} +% This is the command that defines font families for use, the underlying +% procedure of all \cmd\fontspec-like commands. Given a +% list of font features (|#1|) for a requested font (|#2|), +% it will define an NFSS +% family for that font and put the family name (globally) into \cs{l_fontspec_family_tl}. +% The \TeX\ `\cs{font}' command is (globally) stored in \cs{l_fontspec_font}. +% +% This macro does its processing inside a group to attempt to restrict the scope of its internal processing. +% This works to some degree to insulate the internal commands from having to be manually cleared. +% +% Some often-used variables to know about: +% \begin{itemize} +% \item \cmd{\l_fontspec_fontname_tl} is used as the generic name of the font being defined. +% \item \cmd{\l_@@_fontid_tl} is the unique identifier of the font with all its features. +% \item \cmd{\l_@@_fontname_up_tl} is the font specifically to be used as the upright font. +% \item \cmd{\l_@@_basename_tl} is the (immutable) original argument used for |*|-replacing. +% \item \cmd{\l_fontspec_font} is the plain \TeX{} font of the upright font requested. +% \end{itemize} +% \begin{macrocode} +\cs_new_protected:Nn \@@_select_font_family:nn + { +%\typeout{^^J^^J::::::::::::::::::::::::::::::^^J:: fontspec_select:nn~ {#1}~ {#2} } + \group_begin: + \@@_font_suppress_not_found_error: + \@@_init: + + \@@_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2} + \@@_sanitise_fontname:Nn \l_@@_fontname_up_tl {#2} + \@@_sanitise_fontname:Nn \l_@@_basename_tl {#2} + + \@@_if_detect_external:nT {#2} + { \keys_set:nn {fontspec-preparse-external} {Path} } + + \keys_set_known:nn {fontspec-preparse-cfg} {#1} + + \@@_init_ttc:n {#2} + \@@_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2} + + \@@_extract_all_features:n {#1} + \tl_set:Nx \l_@@_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l_@@_all_features_clist } + +%\typeout{fontid: \l_@@_fontid_tl} + + \@@_preparse_features: + \@@_load_font: + \@@_set_scriptlang: + \@@_get_features:n {} + \bool_set_false:N \l_@@_firsttime_bool + + \@@_save_family_needed:nTF {#2} + { + \@@_save_family:nn {#1} {#2} +%\@@_warning:nxx {defining-font} {#1} {#2} + } + { +%\typeout{Font~ family~ already~ defined.} + } + \group_end: + + \tl_set_eq:NN \l_fontspec_family_tl \g_@@_nfss_family_tl + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_select:nn} +% This old name has been used by 3rd party packages so for compatibility: +% \begin{macrocode} +\cs_set_eq:NN \fontspec_select:nn \@@_select_font_family:nn %% deprecated, for compatibility only +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_sanitise_fontname:Nn} +% Assigns font name |#2| to token list variable |#1| and strips extension(s) from it in the case of an external font. +% We strip spaces for luatex for consistency with luaotfload, although I'm not sure this is necessary any more. +% At one stage this also lowercased the name, but this step has been removed unless someone can remind me why it was necessary. +% \begin{macrocode} +\cs_new:Nn \@@_sanitise_fontname:Nn + { + \tl_set:Nx #1 {#2} +% \tl_remove_all:Nn #1 {~} + \clist_map_inline:Nn \l_@@_extensions_clist + { + \tl_if_in:NnT #1 {##1} + { + \tl_remove_once:Nn #1 {##1} + \tl_set:Nn \l_@@_extension_tl {##1} + \clist_map_break: + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_if_detect_external:nT} +% Check if either the fontname ends with a known font extension. +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_if_detect_external:n {T} + { +% \typeout{:: @@_if_detect_external:n { \exp_not:n {#1} } } + \clist_map_inline:Nn \l_@@_extensions_clist + { + \bool_set_false:N \l_@@_tmpa_bool + \exp_args:Nx % <- this should be handled earlier + \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string} + { \bool_set_true:N \l_@@_tmpa_bool \clist_map_break: } + } + \bool_if:NTF \l_@@_tmpa_bool \prg_return_true: \prg_return_false: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_init_ttc:n} +% For TTC fonts we assume they will be loading the italic/bold fonts from the same file, +% so prepopulate the fontnames to avoid needing to do it manually. +% \begin{macrocode} +\cs_new:Nn \@@_init_ttc:n + { + \str_if_eq:eeT { \str_lower_case:f {\l_@@_extension_tl} } {.ttc} + { + \@@_sanitise_fontname:Nn \l_@@_fontname_it_tl {#1} + \@@_sanitise_fontname:Nn \l_@@_fontname_bf_tl {#1} + \@@_sanitise_fontname:Nn \l_@@_fontname_bfit_tl {#1} + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_external_fontoptions:Nn} +% Load a possible \texttt{.fontspec} font configuration file. +% This file could set font-specific options for the font about to be loaded. +% \begin{macrocode} +\cs_new:Nn \@@_load_external_fontoptions:Nn + { + \bool_if:NT \l_@@_fontcfg_bool + { +% \typeout{:: @@_load_external_fontoptions:Nn \exp_not:N #1 {#2} } + \@@_sanitise_fontname:Nn #1 {#2} + \tl_set:Nx \l_@@_ext_filename_tl {#1.fontspec} + \tl_remove_all:Nn \l_@@_ext_filename_tl {~} + \prop_if_in:NVF \g_@@_fontopts_prop #1 + { + \exp_args:No \file_if_exist:nT { \l_@@_ext_filename_tl } + { \file_input:n { \l_@@_ext_filename_tl } } + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_extract_all_features:} +% \begin{macrocode} +\cs_new:Nn \@@_extract_all_features:n + { +% \typeout{:: @@_extract_all_features:n { \unexpanded {#1} } } + \bool_if:NTF \l_@@_disable_defaults_bool + { + \clist_set:Nx \l_@@_all_features_clist {#1} + } + { + \prop_get:NVNF \g_@@_fontopts_prop \l_fontspec_fontname_tl \l_@@_fontopts_clist + { \clist_clear:N \l_@@_fontopts_clist } + + \prop_get:NVNF \g_@@_fontopts_prop \l_@@_family_label_tl \l_@@_family_fontopts_clist + { \clist_clear:N \l_@@_family_fontopts_clist } + \tl_clear:N \l_@@_family_label_tl + + \clist_set:Nx \l_@@_all_features_clist + { + \g_@@_default_fontopts_clist, + \l_@@_family_fontopts_clist, + \l_@@_fontopts_clist, + #1 + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_preparse_features:} +% \darg{feature options} +% \darg{font name} +% Perform the (multi-step) feature parsing process. +% +% Convert the requested features to font definition +% strings. First the features are parsed for information about font +% loading (whether it's a named font or external font, etc.), and then +% information is extracted for the names of the other shape fonts. +% \begin{macrocode} +\cs_new:Nn \@@_preparse_features: + { +% \typeout{:: @@_preparse_features:} +% \end{macrocode} +% Detect if external fonts are to be used, possibly automatically, and +% parse fontspec features for bold/italic fonts and their features. +% \begin{macrocode} + + \@@_keys_set_known:nxN {fontspec-preparse-external} + { \l_@@_all_features_clist } + \l_@@_keys_leftover_clist + +% \end{macrocode} +% When \cmd{\l_fontspec_fontname_tl} is augmented with a prefix or whatever to create +% the name of the upright font (\cmd{\l_@@_fontname_up_tl}), this latter is the new `general +% font name' to use. +% \begin{macrocode} + \tl_set_eq:NN \l_fontspec_fontname_tl \l_@@_fontname_up_tl + \@@_keys_set_known:nxN {fontspec-renderer} {\l_@@_keys_leftover_clist} + \l_@@_keys_leftover_clist + \@@_keys_set_known:nxN {fontspec-preparse} {\l_@@_keys_leftover_clist} + \l_@@_fontfeat_clist + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font:} +% \begin{macrocode} +\cs_new:Nn \@@_load_font: + { +%\typeout{:: @@_load_font} +%\typeout{Set~ base~ font~ for~ preliminary~ analysis: \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } + \@@_primitive_font_set:Nnn \l_fontspec_font + { \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } {\f@size pt} + \@@_primitive_font_if_null:NT \l_fontspec_font { \@@_error:nx {font-not-found} {\l_@@_fontname_up_tl} } + \@@_set_font_type:N \l_fontspec_font +%\typeout{Set~ base~ font~ properly: \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } + \@@_primitive_font_gset:Nnn \l_fontspec_font + { \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } {\f@size pt} + \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_construct_font_call:nn} +% Constructs the complete font invocation. +% \darg{Base name} +% \darg{Extension} +% \darg{TTC Index} +% \darg{Renderer} +% \darg{Optical size} +% \darg{Font features} +% We check if \meta{Font features} are empty and if so don't add in the separator colon. +% \begin{macrocode} +\cs_new:Nn \@@_construct_font_call:nnnnnn + { +% " \@@_fontname_wrap:n { #1 #2 #3 } +% " \@@_fontname_wrap:n { #1 #2 } #3 + #4 #5 + \str_if_eq:eeF {#6}{} {:#6} " + } +% \end{macrocode} +% In practice, we don't use the six-argument version, since most arguments are constructed on-the-fly: +% \begin{macrocode} +\cs_new:Nn \@@_construct_font_call:nn + { + \@@_construct_font_call:nnnnnn + {#1} + \l_@@_extension_tl + \l_@@_ttc_index_tl + \l_fontspec_renderer_tl + \l_@@_optical_size_tl + {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_font_is_file:,\@@_font_is_name:} +% The \cs{@@_fontname_wrap:n} command takes the font name and either passes it through unchanged or wraps it in the syntax for loading a font `by filename'. +% \XeTeX's syntax is followed since \pkg{luaotfload} provides compatibility. +% \begin{macrocode} +\cs_new:Nn \@@_font_is_name: + { + \cs_set_eq:NN \@@_fontname_wrap:n \use:n + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \@@_font_is_file: + { + \cs_set:Npn \@@_fontname_wrap:n ##1 { [ \l_@@_font_path_tl ##1 ] } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_scriptlang:} +% Only necessary for OpenType fonts. +% First check if the font supports scripts, then apply defaults if +% none are explicitly requested. Similarly with the language settings. +% \begin{macrocode} +\cs_new:Nn \@@_set_scriptlang: + { +% \typeout{:: _set_scriptlang:} + \bool_if:NT \l_@@_firsttime_bool + { + \tl_if_empty:NTF \l_@@_script_name_tl + { + \@@_check_script:NnTF \l_fontspec_font {latn} + { + \tl_set:Nn \l_@@_script_name_tl {Latin} + \tl_if_empty:NT \l_@@_lang_name_tl + { + \tl_set:Nn \l_@@_lang_name_tl {Default} + } + \keys_set:nx {fontspec-opentype} {Script=\l_@@_script_name_tl} + \keys_set:nx {fontspec-opentype} {Language=\l_@@_lang_name_tl} +% \typeout{:::: Script=\l_@@_script_name_tl, Language=\l_@@_lang_name_tl} + } + { +% \typeout{:::: NADA} + \@@_info:n {no-scripts} + \bool_set_true:N \l_@@_never_check_bool + } + } + { + \tl_if_empty:NT \l_@@_lang_name_tl + { + \tl_set:Nn \l_@@_lang_name_tl {Default} + } + \keys_set:nx {fontspec-opentype} {Script=\l_@@_script_name_tl} + \keys_set:nx {fontspec-opentype} {Language=\l_@@_lang_name_tl} +% \typeout{:::: Script=\l_@@_script_name_tl, Language=\l_@@_lang_name_tl} + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_get_features:Nn} +% This macro is a wrapper for |\keys_set:nn| which expands and adds a +% default specification to the original passed options. It begins by +% initialising the commands used to hold font-feature specific +% strings. +% Its argument is any additional features to prepend to the default. +% +% Do not set the colour if not explicitly spec'd else \verb|\color| (using +% specials) will not work. +% \begin{macrocode} +\cs_new:Nn \@@_get_features:n + { +% \typeout{:: @@_get_features:Nn { \exp_not:n {#1} } } + \@@_init_fontface: + \@@_keys_set_known:nxN {fontspec-renderer} {\l_@@_fontfeat_clist,#1} + \l_@@_keys_leftover_clist + \@@_keys_set_known:nxN {fontspec} {\l_@@_keys_leftover_clist} \l_@@_keys_leftover_clist +%<*XE> + \bool_if:NTF \l_@@_ot_bool + { +% \typeout{::: Setting~ keys~ for~ OpenType~ font~ features:~"\l_@@_keys_leftover_clist"} + \keys_set:nV {fontspec-opentype} \l_@@_keys_leftover_clist + } + { +% \typeout{::: Setting~ keys~ for~ AAT/Graphite~ font~ features:~"\l_@@_keys_leftover_clist"} + \bool_if:nT { \l_@@_atsui_bool || \l_@@_graphite_bool } + { \keys_set:nV {fontspec-aat} \l_@@_keys_leftover_clist } + } +% +%<*LU> +% \typeout{::: Setting~ keys~ for~ OpenType~ font~ features:~"\l_@@_keys_leftover_clist"} + \keys_set:nV {fontspec-opentype} \l_@@_keys_leftover_clist +% + + \tl_if_empty:NF \l_@@_mapping_tl + { \@@_update_featstr:n { mapping = \l_@@_mapping_tl } } + + \str_if_eq:eeF { \l_@@_hexcol_tl \l_@@_opacity_tl } + { \c_@@_hexcol_tl \c_@@_opacity_tl } + { \@@_update_featstr:n { color = \l_@@_hexcol_tl\l_@@_opacity_tl } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_save_family_needed:nTF} +% Check if the family is unique and, if so, save its information. +% (\cs{addfontfeature} and other macros use this data.) +% Then the font family and its shapes are defined in the NFSS. +% +% Now we have a unique (in fact, too unique!) string that contains +% the family name and every option in abbreviated form. This is used +% with a counter to create a simple NFSS family name for the font we're +% selecting. +% +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_save_family_needed:n { TF } + { + +% \typeout{save~ family:~ #1} +% \typeout{== fontid_tl: "\l_@@_fontid_tl".} + + \tl_if_empty:NTF \l_@@_nfss_fam_tl + { + \prop_get:NVNTF \g_@@_fontid_family_prop \l_@@_fontid_tl \l_@@_tmp_tl + { + \tl_gset_eq:NN \g_@@_nfss_family_tl \l_@@_tmp_tl + \prg_return_false: + } + { + \tl_set:Nx \l_@@_tmp_tl {#1} + \tl_remove_all:Nn \l_@@_tmp_tl { ~ } + \@@_save_fontid_family:VV \l_@@_fontid_tl \l_@@_tmp_tl + \prg_return_true: + } + } + { + \tl_gset_eq:NN \g_@@_nfss_family_tl \l_@@_nfss_fam_tl + \cs_undefine:c { g_@@_fontinfo_ \g_@@_nfss_family_tl _prop } + \prg_return_true: + } + } +% \end{macrocode} +% \begin{macrocode} +\cs_new:Nn \@@_save_fontid_family:nn + { + \prop_get:NnNTF \g_@@_family_int_prop {#2} \l_@@_tmp_tl + { + \tl_set:Nx \l_@@_tmp_tl + { \int_eval:n { \l_@@_tmp_tl + 1 } } + } + { \tl_set:Nn \l_@@_tmp_tl { 0 } } + \prop_gput:NnV \g_@@_family_int_prop {#2} \l_@@_tmp_tl + \tl_gset:Nx \g_@@_nfss_family_tl { #2 ( \l_@@_tmp_tl ) } + \prop_gput:NnV \g_@@_fontid_family_prop {#1} \g_@@_nfss_family_tl + } +\cs_generate_variant:Nn \@@_save_fontid_family:nn { VV } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_save_family:nn} +% Saves the relevant font information for future processing. +% \begin{macrocode} +\cs_new:Nn \@@_save_family:nn + { + \@@_save_fontinfo:n {#2} + \@@_find_autofonts: + \DeclareFontFamily{\g_@@_nfss_enc_tl}{\g_@@_nfss_family_tl}{} + \@@_set_faces: + \@@_info:nxx {defining-font} {#1} {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_save_fontinfo:n} +% Saves the relevant font information for future processing. +% \begin{macrocode} +\cs_new:Nn \@@_save_fontinfo:n + { + \prop_new:c {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} + \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {fontname} { #1 } + \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {options} { \l_@@_all_features_clist } + \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {fontdef} + { + \@@_construct_font_call:nn {\l_fontspec_fontname_tl} + { \l_@@_pre_feat_sclist \g_@@_rawfeatures_sclist } + } + \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {script-num} \l_@@_script_int + \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {lang-num} \l_@@_language_int + \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {script-tag} \l_fontspec_script_tl + \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {lang-tag} \l_fontspec_lang_tl + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Setting font shapes in a family} +% +% All NFSS specifications take their default values, so if any of them +% are redefined, the shapes will be selected to fit in with the +% current state. For example, if \cmd\bfdefault\ is redefined to |b|, all +% bold shapes defined by this package will also be assigned to |b|. +% +% The combination shapes are searched first because they use information that may be redefined in the single cases. +% E.g., if no bold font is specified then |set_autofont| will attempt to set it. +% This has subtle/small ramifications on the logic of choosing the bold italic font. +% +% \begin{macro}{\@@_find_autofonts:} +% \begin{macrocode} +\cs_new:Nn \@@_find_autofonts: + { + \bool_if:nF {\l_@@_noit_bool || \l_@@_nobf_bool} + { + \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_@@_fontname_it_tl} {/B} + \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_@@_fontname_bf_tl} {/I} + \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI} + } + + \bool_if:NF \l_@@_nobf_bool + { + \@@_set_autofont:Nnn \l_@@_fontname_bf_tl {\l_fontspec_fontname_tl} {/B} + } + + \bool_if:NF \l_@@_noit_bool + { + \@@_set_autofont:Nnn \l_@@_fontname_it_tl {\l_fontspec_fontname_tl} {/I} + } + + \@@_set_autofont:Nnn \l_@@_fontname_bfsl_tl {\l_@@_fontname_sl_tl} {/B} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_faces:} +% \begin{macrocode} +\cs_new:Nn \@@_set_faces: + { + \@@_add_nfssfont:nnnn \mddefault \updefault \l_fontspec_fontname_tl \l_@@_fontfeat_up_clist + \@@_add_nfssfont:nnnn \bfdefault \updefault \l_@@_fontname_bf_tl \l_@@_fontfeat_bf_clist + \@@_add_nfssfont:nnnn \mddefault \itdefault \l_@@_fontname_it_tl \l_@@_fontfeat_it_clist + \@@_add_nfssfont:nnnn \mddefault \sldefault \l_@@_fontname_sl_tl \l_@@_fontfeat_sl_clist + \@@_add_nfssfont:nnnn \bfdefault \itdefault \l_@@_fontname_bfit_tl \l_@@_fontfeat_bfit_clist + \@@_add_nfssfont:nnnn \bfdefault \sldefault \l_@@_fontname_bfsl_tl \l_@@_fontfeat_bfsl_clist + + \prop_map_inline:Nn \l_@@_nfssfont_prop { \@@_set_faces_aux:nnnnn ##2 } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \@@_set_faces_aux:nnnnn + { + \fontspec_complete_fontname:Nn \l_@@_curr_fontname_tl {#3} + \@@_make_font_shapes:Nnnnn \l_@@_curr_fontname_tl {#1} {#2} {#4} {#5} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_complete_fontname:Nn} +% This macro defines |#1| as the input with any |*| tokens of its input +% replaced by the font name. This lets us define supplementary fonts in full +% (``\texttt{Baskerville Semibold}'') or in abbreviation (``\texttt{* Semibold}''). +% \begin{macrocode} +\cs_new:Nn \fontspec_complete_fontname:Nn + { + \tl_set:Nx #1 {#2} + \tl_replace_all:Nnx #1 {*} {\l_@@_basename_tl} +% \tl_remove_all:Nn #1 {~} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_add_nfssfont:nnnn} +% \darg{series} +% \darg{shape} +% \darg{fontname} +% \darg{fontspec features} +% \begin{macrocode} +\cs_new:Nn \@@_add_nfssfont:nnnn + { + \tl_set:Nx \l_@@_this_font_tl {#3} + + \tl_if_empty:xTF {#4} + { \clist_set:Nn \l_@@_sizefeat_clist {Size={-}} } + { \@@_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l_@@_tmp_tl } + + \tl_if_empty:NF \l_@@_this_font_tl + { + \prop_put:Nxx \l_@@_nfssfont_prop {#1/#2} + { {#1}{#2}{\l_@@_this_font_tl}{#4}{\l_@@_sizefeat_clist} } + } + } +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Fonts} +% +% \begin{macro}{\@@_set_font_type:N} +% Now check if the font is to be rendered with \ATSUI\ or Harfbuzz. This will either +% be automatic (based on the font type), or specified by the user via a font feature. +% +% This macro sets booleans +% accordingly depending if the font in \cmd\l_fontspec_font\ is an \AAT\ +% font or an OpenType font or a font with feature axes (either \AAT\ or +% Multiple Master), respectively. +% \begin{macrocode} +\cs_new:Nn \@@_set_font_type:N + { +% \typeout{:: @@_set_font_type:} +%<*XE> + \bool_set_false:N \l_@@_tfm_bool + \bool_set_false:N \l_@@_atsui_bool + \bool_set_false:N \l_@@_ot_bool + \bool_set_false:N \l_@@_mm_bool + \bool_set_false:N \l_@@_graphite_bool + \ifcase\XeTeXfonttype #1 +% \typeout{:::: TFM} + \bool_set_true:N \l_@@_tfm_bool + \or +% \typeout{:::: AAT} + \bool_set_true:N \l_@@_atsui_bool + \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/AAT} } + \ifnum\XeTeXcountvariations #1 > 0\relax +% \typeout{:::: MM} + \bool_set_true:N \l_@@_mm_bool + \fi + \or +% \typeout{:::: OpenType} + \bool_set_true:N \l_@@_ot_bool + \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/OT} } + \or +% \typeout{:::: Graphite} + \bool_set_true:N \l_@@_graphite_bool + \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/GR} } + \fi +% +% \end{macrocode} +% If automatic, the \cmd{\l_fontspec_renderer_tl} token list will still be +% empty (other suffices that could be added will be later in the feature +% processing), and if it is indeed still empty, assign it a value so that the +% other weights of the font are specifically loaded with the same renderer. +% +% LuaTeX only supports one: +% \begin{macrocode} +%<*LU> + \bool_set_true:N \l_@@_ot_bool +% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_autofont:Nnn} +% \darg{Font name tl} +% \darg{Base font name} +% \darg{Font name modifier} +% +% This function looks for font with \meta{name} and \meta{modifier} |#2#3|, and if found (i.e., different to font with name |#2|) stores it in tl |#1|. A modifier is something like |/B| to look for a bold font, for example. +% +% We can't match external fonts in this way (in \XeTeX\ anyway; todo: test with LuaTeX). +% If \meta{font name tl} is not empty, then it's already been specified by the user so abort. +% If \meta{Base font name} is not given, we also abort for obvious reasons. +% +% If \meta{font name tl} is empty, then proceed. +% If not found, \meta{font name tl} remains empty. +% Otherwise, we have a match. +% \begin{macrocode} +\cs_new:Nn \@@_set_autofont:Nnn + { + \bool_if:NF \l_@@_external_bool + { + \tl_if_empty:xF {#2} + { + \tl_if_empty:NT #1 + { + \@@_if_autofont:nnTF {#2} {#3} + { \tl_set:Nx #1 {#2#3} } + { \@@_info:nx {no-font-shape} {#2#3} } + } + } + } + } +% \end{macrocode} +% +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_if_autofont:nn {T,TF} + { + \@@_primitive_font_set:Nnn \l_tmpa_font { \@@_construct_font_call:nn {#1} {} } {\f@size pt} + \@@_primitive_font_set:Nnn \l_tmpb_font { \@@_construct_font_call:nn {#1#2} {} } {\f@size pt} + \str_if_eq:eeTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font } + { \prg_return_false: } + { \prg_return_true: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_make_font_shapes:Nnnnn} +% \darg{Font name} +% \darg{Font series} +% \darg{Font shape} +% \darg{Font features} +% \darg{Size features} +% This macro eventually uses \cs{DeclareFontShape} to define the font shape in +% question. +% \begin{macrocode} +\cs_new:Nn \@@_make_font_shapes:Nnnnn + { + \group_begin: + \@@_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l_@@_leftover_clist + \@@_load_fontname:n {#1} + \@@_declare_shape:nnxx {#2} {#3} { \l_@@_fontopts_clist, \l_@@_leftover_clist } {#5} + \group_end: + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \@@_load_fontname:n + { +% \typeout{:: @@_load_fontname:n {#1} } + \@@_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#1} + \prop_get:NVNF \g_@@_fontopts_prop \l_fontspec_fontname_tl \l_@@_fontopts_clist + { \clist_clear:N \l_@@_fontopts_clist } + \keys_set_groups:nnV {fontspec/fontname} {getfontname} \l_@@_fontopts_clist + \@@_primitive_font_set:Nnn \l_fontspec_font { \@@_construct_font_call:nn {\l_fontspec_fontname_tl} {} } {\f@size pt} + \@@_primitive_font_if_null:NT \l_fontspec_font { \@@_error:nx {font-not-found} {#1} } + } +% \end{macrocode} +% +% \begin{macrocode} +\keys_define:nn {fontspec/fontname} + { + Font .tl_set:N = \l_fontspec_fontname_tl , + Font .groups:n = {getfontname} , + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_declare_shape:nnnn} +% \darg{Font series} +% \darg{Font shape} +% \darg{Font features} +% \darg{Size features} +% Wrapper for \cmd\DeclareFontShape. +% And finally the actual font shape declaration using \cmd\l_@@_nfss_tl\ defined above. +% \cmd\l_@@_postadjust_tl\ is defined in various places to deal with things like the hyphenation +% character and interword spacing. +% +% The main part is to loop through \feat{SizeFeatures} arguments, which are of the form +% {\par\centering |SizeFeatures={{},{},{}}|.\par} +% \begin{macrocode} +\cs_new:Nn \@@_declare_shape:nnnn + { +%\typeout{=~ declare_shape:~{\l_fontspec_fontname_tl}~{#1}~{#2}} + \tl_clear:N \l_@@_nfss_tl + \tl_clear:N \l_@@_nfss_sc_tl + \tl_set_eq:NN \l_@@_saved_fontname_tl \l_fontspec_fontname_tl + + \exp_args:Nx \clist_map_inline:nn {#4} { \@@_setup_single_size:nn {#3} {##1} } + + \@@_declare_shapes_normal:nn {#1} {#2} + \@@_declare_shapes_smcaps:nn {#1} {#2} + \@@_declare_shape_slanted:nn {#1} {#2} + \@@_declare_shape_loginfo:nn {#1} {#2} + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_generate_variant:Nn \@@_declare_shape:nnnn {nnxx} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_setup_single_size:nn} +% \begin{macrocode} +\cs_new:Nn \@@_setup_single_size:nn + { + \tl_clear:N \l_@@_size_tl + \tl_set_eq:NN \l_@@_sizedfont_tl \l_@@_saved_fontname_tl % in case not spec'ed + + \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n #2 } + \l_@@_sizing_leftover_clist + \tl_if_empty:NT \l_@@_size_tl { \@@_error:n {no-size-info} } +%\typeout{==~ size:~\l_@@_size_tl} + + % "normal" + \@@_load_fontname:n {\l_@@_sizedfont_tl} + \@@_setup_nfss:Nnnn \l_@@_nfss_tl {#1} {\l_@@_sizing_leftover_clist} {} +% \typeout{===~ sized~ font:~ \l_@@_sizedfont_tl} + + % small caps + \clist_set_eq:NN \l_@@_fontfeat_curr_clist \l_@@_fontfeat_sc_clist + + \bool_if:NF \l_@@_nosc_bool + { + \tl_if_empty:NTF \l_@@_fontname_sc_tl + { + \@@_make_smallcaps:TF + { +%\typeout{====~Small~ caps~ found.} + \clist_put_left:Nn \l_@@_fontfeat_curr_clist {Letters=SmallCaps} + } + { +%\typeout{====~Small~ caps~ not~ found.} + \bool_set_true:N \l_@@_nosc_bool + } + } + { \@@_load_fontname:n {\l_@@_fontname_sc_tl} }% local for each size + } + + \bool_if:NF \l_@@_nosc_bool + { + \@@_setup_nfss:Nnnn \l_@@_nfss_sc_tl + {#1} {\l_@@_sizing_leftover_clist} {\l_@@_fontfeat_curr_clist} + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_setup_nfss:Nnnn} +% \begin{macrocode} +\cs_new:Nn \@@_setup_nfss:Nnnn + { +%\typeout{====~Setup~NFSS~shape:~<\l_@@_size_tl>~\l_fontspec_fontname_tl} + + \@@_get_features:n { #2 , #3 , #4 } +%\typeout{====~Gathered~features:~\g_@@_rawfeatures_sclist} + + \tl_put_right:Nx #1 + { + <\l_@@_size_tl> \l_@@_scale_tl + \@@_construct_font_call:nn { \l_fontspec_fontname_tl } + { \l_@@_pre_feat_sclist \g_@@_rawfeatures_sclist } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_declare_shapes_normal:nn} +% \begin{macrocode} +\cs_new:Nn \@@_declare_shapes_normal:nn + { + \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl} + {#1} {#2} {\l_@@_nfss_tl}{\l_@@_postadjust_tl} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_declare_shapes_smcaps:nn} +% \begin{macrocode} +\cs_new:Nn \@@_declare_shapes_smcaps:nn + { + \tl_if_empty:NF \l_@@_nfss_sc_tl + { + \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl} {#1} + { \@@_combo_sc_shape:n {#2} } {\l_@@_nfss_sc_tl} {\l_@@_postadjust_tl} + } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \@@_combo_sc_shape:n + { + \tl_if_exist:cTF { \@@_shape_merge:nn {#1} {\scdefault} } + { \tl_use:c { \@@_shape_merge:nn {#1} {\scdefault} } } + { \scdefault } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_DeclareFontShape:nnnnnn} +% \begin{macrocode} +\cs_new:Nn \@@_DeclareFontShape:nnnnnn + { +%\typeout{DeclareFontShape:~{#1}{#2}{#3}{#4}...} + \group_begin: + \normalsize + \cs_undefine:c {#1/#2/#3/#4/\f@size} + \group_end: + \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6} + } +\cs_generate_variant:Nn \@@_DeclareFontShape:nnnnnn {xxxxxx} +% \end{macrocode} +% +% \begin{macro}{\@@_declare_shape_slanted:nn} +% This extra stuff for the slanted shape substitution is a little bit awkward. +% We define the slanted shape to be a synonym for it when (a)~we're defining an italic font, but also (b)~when the default slanted shape isn't `it'. +% (Presumably this turned up once in a test and I realised it caused problems. I doubt this would happen much.) +% +% We should test when a slanted font has been specified and not run this code if so, but the \verb|\@@_set_slanted:| code will overwrite this anyway if necessary. +% \begin{macrocode} +\cs_new:Nn \@@_declare_shape_slanted:nn + { + \bool_if:nT + { + \str_if_eq_p:ee {#2} {\itdefault} && + !(\str_if_eq_p:ee {\itdefault} {\sldefault}) + } + { + \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl}{\g_@@_nfss_family_tl}{#1}{\sldefault} + {<->ssub*\g_@@_nfss_family_tl/#1/\itdefault}{\l_@@_postadjust_tl} + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_declare_shape_loginfo:nn} +% Lastly some informative messaging. +% \begin{macrocode} +\cs_new:Nn \@@_declare_shape_loginfo:nn + { + \tl_gput_right:Nx \g_@@_defined_shapes_tl + { + \exp_not:n { \\ } + -~ \exp_not:N \str_case:nn {#1/#2} + { + {\mddefault/\updefault} {'normal'~} + {\bfdefault/\updefault} {'bold'~} + {\mddefault/\itdefault} {'italic'~} + {\mddefault/\sldefault} {'slanted'~} + {\bfdefault/\itdefault} {'bold~ italic'~} + {\bfdefault/\sldefault} {'bold~ slanted'~} + } (#1/#2)~ + with~ NFSS~ spec.:~ + \l_@@_nfss_tl + \exp_not:n { \\ } + -~ \exp_not:N \str_case:nn { #1 / \@@_combo_sc_shape:n {#2} } + { + {\mddefault/\scdefault} {'small~ caps'~} + {\bfdefault/\scdefault} {'bold~ small~ caps'~} + {\mddefault/\itscdefault} {'italic~ small~ caps'~} + {\bfdefault/\itscdefault} {'bold~ italic~ small~ caps'~} + {\mddefault/\slscdefault} {'slanted~ small~ caps'~} + {\bfdefault/\slscdefault} {'bold~ slanted~ small~ caps'~} + }~( #1 / \@@_combo_sc_shape:n {#2} )~ + with~ NFSS~ spec.:~ + \l_@@_nfss_sc_tl + \tl_if_empty:fF {\l_@@_postadjust_tl} + { + \exp_not:N \\ and~ font~ adjustment~ code: + \exp_not:N \\ \l_@@_postadjust_tl + } + } + } +% \end{macrocode} +% Maybe |\str_if_eq:eeF| would be better? +% \end{macro} +% +% +% \subsubsection{Features} +% +% \begin{macro}{\l_@@_pre_feat_sclist} +% These are the features always applied to a font selection before other +% features. +% \begin{macrocode} +\tl_set:Nn \l_@@_pre_feat_sclist +%<*XE> + { + \bool_if:NT \l_@@_ot_bool + { + \tl_if_empty:NF \l_fontspec_script_tl + { + script = \l_fontspec_script_tl ; + language = \l_fontspec_lang_tl ; + } + } + } +% +%<*LU> + { + mode = \l_fontspec_mode_tl ; + \tl_if_empty:NF \l_fontspec_script_tl + { + script = \l_fontspec_script_tl ; + language = \l_fontspec_lang_tl ; + } + } +% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_make_ot_smallcaps:TF} +% \label{mac:makesmallcaps} +% This macro checks if the font contains small caps. +% \begin{macrocode} +%\cs_new:Nn \@@_make_smallcaps:TF +%\cs_new:Nn \@@_make_ot_smallcaps:TF + { + \@@_check_ot_feat:NnTF \l_fontspec_font {smcp} {#1} {#2} + } +%<*XE> +\cs_new:Nn \@@_make_smallcaps:TF + { + \bool_if:NTF \l_@@_ot_bool + { \@@_make_ot_smallcaps:TF {#1} {#2} } + { + \bool_if:NT \l_@@_atsui_bool + { \@@_make_AAT_feature_string:NnnTF \l_fontspec_font {3}{3} {#1} {#2} } + } + } +% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_update_featstr:n} +% \cmd{\g_@@_rawfeatures_sclist} is the string used to define the list of specific +% font features. Each time another font feature is requested, this +% macro is used to add that feature to the list. Font features are +% separated by semicolons. +% \begin{macrocode} +\cs_new:Nn \@@_update_featstr:n + { +% \typeout{:::: @@_update_featstr:n {#1}} + \bool_if:NF \l_@@_firsttime_bool + { + \tl_gset:Nx \g_@@_single_feat_tl { #1 } +% \typeout{::::~ Adding~ feature.} + \tl_gput_right:Nx \g_@@_rawfeatures_sclist {#1;} + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_remove_clashing_featstr:n} +% \begin{macrocode} +\cs_new:Nn \@@_remove_clashing_featstr:n + { +% \typeout{:::: @@_remove_clashing_featstr:n {#1}} + \clist_map_inline:nn {#1} + { +% \typeout{::::~ Removing~ feature~ "##1;"} + \tl_gremove_all:Nn \g_@@_rawfeatures_sclist {##1;} + } + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Initialisation} +% +% \begin{macro}{\@@_init:} +% Initialisations that need to occur once per fontspec font invocation. +% (Some of these may be redundant. +% Check whether they're assigned to globally or not.) +% \begin{macrocode} +\cs_set:Npn \@@_init: + { +% \typeout{:: @@_init:} + \bool_set_false:N \l_@@_ot_bool + \bool_set_true:N \l_@@_firsttime_bool + \@@_font_is_name: + \tl_clear:N \l_@@_font_path_tl + \tl_clear:N \l_@@_optical_size_tl + \tl_clear:N \l_@@_ttc_index_tl + \tl_clear:N \l_fontspec_renderer_tl + \tl_gclear:N \g_@@_defined_shapes_tl + \tl_gclear:N \g_@@_curr_series_tl + \tl_gset_eq:NN \g_@@_nfss_enc_tl \g_fontspec_encoding_tl +%<*LU> + \tl_set:Nn \l_fontspec_mode_tl {node} + \int_set:Nn \prehyphenchar { `\- } % fixme + \int_zero:N \posthyphenchar % fixme + \int_zero:N \preexhyphenchar % fixme + \int_zero:N \postexhyphenchar % fixme +% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_init_fontface:} +% Executed in \cs{@@_get_features:Nn}. +% \begin{macrocode} +\cs_new:Nn \@@_init_fontface: + { + \tl_gclear:N \g_@@_rawfeatures_sclist + \tl_clear:N \l_@@_scale_tl + \tl_set_eq:NN \l_@@_opacity_tl \c_@@_opacity_tl + \tl_set_eq:NN \l_@@_hexcol_tl \c_@@_hexcol_tl + \tl_set_eq:NN \l_@@_postadjust_tl \c_@@_postadjust_tl + \tl_clear:N \l_@@_wordspace_adjust_tl + \tl_clear:N \l_@@_punctspace_adjust_tl + } +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Miscellaneous} +% +% \begin{macro}{\@@_ot_validate_tag:n} +% This macro takes an OpenType tag and validates it. +% \begin{macrocode} +%<*LU> +% \end{macrocode} +% \begin{macrocode} +\cs_new_protected:Nn \@@_ot_validate_tag:n + { + \@@_ot_validate_tag:w #1 \q_nil + } +\cs_generate_variant:Nn \@@_ot_validate_tag:n {x} +% \end{macrocode} +% +% \begin{macrocode} +\cs_set:Npn \@@_ot_validate_tag:w #1 #2 \q_nil + { + \bool_if:nTF { \str_if_eq_p:nn {#1} {+} || \str_if_eq_p:nn {#1} {-} } + { \@@_ot_validate_tag_aux:w #2 \c_empty_tl \c_empty_tl \q_nil } + { \@@_ot_validate_tag_aux:w #1#2 \c_empty_tl \c_empty_tl \q_nil } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_set:Npn \@@_ot_validate_tag_aux:w #1#2#3#4#5 \q_nil + { + \int_compare:nT { \tl_count:n {#5} > 2 } + { \@@_error:nx {ot-tag-too-long} {#1#2#3#4#5} } + } +% \end{macrocode} +% \begin{macrocode} +% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_iv_str_to_num:Nn} +% This macro takes a four character string and converts it to the +% numerical representation required for \XeTeX\ OpenType script/language/feature +% purposes. The output is stored in |#1|. +% +% This code is not used in Lua\TeX, as the checking for that engine is done via Lua code +% provided by \pkg{luaotfload}. +% \begin{macrocode} +%<*XE> +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \@@_iv_str_to_num:Nn + { + \@@_strip_leading_sign:Nw #1#2 \q_nil + } +\cs_generate_variant:Nn \@@_iv_str_to_num:Nn {Nx} +% \end{macrocode} +% +% The input can be of the form of any of these: +% `|abcd|', `|abc|', `|abc |', `|ab|', `|ab |', \etc. +% (It is assumed the first two chars are \emph{always} not spaces.) So this macro +% reads in the string padded with \cmd\@empty s, +% and anything beyond four chars is snipped. The \cmd\@empty s then are used to reconstruct +% the spaces in the string to number calculation. +% +% For backwards compatibility this code also strips a leading |+| or |-|. +% +% \begin{macrocode} +\cs_set:Npn \@@_strip_leading_sign:Nw #1#2#3 \q_nil + { + \bool_if:nTF { \str_if_eq_p:nn {#2} {+} || \str_if_eq_p:nn {#2} {-} } + { \@@_iv_str_to_num:w #1 \q_nil #3 \c_empty_tl \c_empty_tl \q_nil } + { \@@_iv_str_to_num:w #1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil } + } +% \end{macrocode} +% If input string (after sign is stripped) is more than 4 chars, \verb|#6| will contain +% `\meta{excess}\cs{c_empty_tl}\cs{c_empty_tl}'. Therefore use \verb|#6| to verify string length. +% \begin{macrocode} +\cs_set:Npn \@@_iv_str_to_num:w #1 \q_nil #2#3#4#5#6 \q_nil + { + \int_compare:nT { \tl_count:n {#6} > 2 } + { \@@_error:nx {ot-tag-too-long} {#2#3#4#5#6} } + + \str_if_eq:eeTF {#2#3#4#5#6} {DFLT} + { + \int_set:Nn #1 {0} + } + { + + \int_set:Nn #1 + { + `#2 * "1000000 + + `#3 * "10000 + + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100 + + \ifx \c_empty_tl #5 32 \else `#5 \fi + } + } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_generate_variant:Nn \@@_iv_str_to_num:Nn {No} +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} +% \end{macro} +% +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-keyval.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-keyval.dtx new file mode 100644 index 00000000000..1adee94c741 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-keyval.dtx @@ -0,0 +1,867 @@ +%%^^A%% fontspec-code-keyval.dtx -- part of FONTSPEC + +% \section{Font loading (\pkg{keyval}) definitions} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% This package uses a large number of keyval modules which operate sequentially on keyval +% input to ensure priority. +% \begin{macrocode} +\clist_gset:Nn \g_@@_all_keyval_modules_clist + { + fontspec, fontspec-opentype, fontspec-aat, + fontspec-preparse, fontspec-preparse-cfg, fontspec-preparse-external, fontspec-preparse-nested, + fontspec-renderer + } +% \end{macrocode} +% +% Wrapper function to save some characters in the source: +% \begin{macrocode} +\cs_new:Nn \@@_keys_define_code:nnn + { + \keys_define:nn {#1} { #2 .code:n = {#3} } + } +% \end{macrocode} +% +% For catching features that cannot be used in |\addfontfeatures|: +% \begin{macrocode} +\cs_new:Nn \@@_aff_error:n + { + \@@_keys_define_code:nnn {fontspec-addfeatures} {#1} + { \@@_error:nx {not-in-addfontfeatures} {#1} } + } +% \end{macrocode} +% +% \subsection{Pre-pre-parsing stages} +% +% These features are extracted from the font feature list before all others. +% +% \paragraph{Don't load font config file} +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-cfg} {IgnoreFontspecFile} + { + \bool_set_false:N \l_@@_fontcfg_bool + } +\@@_keys_define_code:nnn {fontspec-preparse-external} {IgnoreFontspecFile} + { + \bool_set_false:N \l_@@_fontcfg_bool + } +% \end{macrocode} +% +% \begin{macro}{Path} +% For fonts that aren't installed in the system. If no argument is given, the font is located +% with |kpsewhich|; it's either in the current directory or the \TeX\ tree. Otherwise, the +% argument given defines the file path of the font. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-external} {Path} + { + \bool_set_true:N \l_@@_nobf_bool + \bool_set_true:N \l_@@_noit_bool + \bool_set_true:N \l_@@_external_bool + \tl_set:Nn \l_@@_font_path_tl {#1} + \@@_font_is_file: +%<*XE> + \keys_set:nn {fontspec-renderer} {Renderer=OpenType} +% + } +\aliasfontfeature{Path}{ExternalLocation} +\@@_keys_define_code:nnn {fontspec} {Path} {} +% \end{macrocode} +% \end{macro} +% +% \paragraph{\feat{Extension}} +% For fonts that aren't installed in the system. Specifies the font extension +% to use. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-external} {Extension} + { + \tl_set:Nn \l_@@_extension_tl {#1} + \bool_if:NF \l_@@_external_bool + { + \keys_set:nn {fontspec-preparse-external} {Path} + } + } +\tl_clear:N \l_@@_extension_tl +\@@_keys_define_code:nnn {fontspec} {Extension} {} +% \end{macrocode} +% +% +% \paragraph{\feat{Renderer}} +% This feature must be processed before all others (the other font shape and features options are also pre-parsed for convenience) because the renderer determines the format of the features and even whether certain features are available. +% \begin{macrocode} +\keys_define:nn {fontspec-renderer} + { + Renderer .choices:nn = + {AAT,ICU,OpenType,Graphite,Full,Basic} + { + \int_compare:nTF {\l_keys_choice_int <= 4} + { +%<*XE> + \tl_set:Nx \l_fontspec_renderer_tl + { + \int_case:nn \l_keys_choice_int { 1 {/AAT} 2 {/OT} 3 {/OT} 4 {/GR} } + } + \tl_gset:Nx \g_@@_single_feat_tl { \l_fontspec_renderer_tl } +% +%<*LU> + \@@_warning:nx {only-xetex-feature} {Renderer=AAT/OpenType/Graphite} +% + } + { +%<*XE> + \@@_warning:nx {only-luatex-feature} {Renderer=Full/Basic} +% +%<*LU> + \tl_set:Nx \l_fontspec_mode_tl + { + \int_case:nn \l_keys_choice_int { 5 {node} 6 {base} } + } + \tl_gset:Nx \g_@@_single_feat_tl { mode=\l_fontspec_mode_tl } +% + } + } + } +% \end{macrocode} +% +% \subsection{Pre-parsed features} +% +% \paragraph{OpenType script/language} +% See later for the resolutions from \pkg{fontspec} features to OpenType definitions. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse} {Script} + { +% \keys_set:nn {fontspec-renderer} {Renderer=OpenType} + \tl_set:Nn \l_@@_script_name_tl {#1} + } +% \end{macrocode} +% Exactly the same: +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse} {Language} + { +% \keys_set:nn {fontspec-renderer} {Renderer=OpenType} + \tl_set:Nn \l_@@_lang_name_tl {#1} + } +% \end{macrocode} +% +% +% \paragraph{TTC font index} +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse} {FontIndex} + { + \str_if_eq:eeF { \str_lower_case:f {\l_@@_extension_tl} } {.ttc} + { \@@_warning:n {font-index-needs-ttc} } +% \tl_set:Nn \l_@@_ttc_index_tl {:#1} +% \tl_set:Nn \l_@@_ttc_index_tl {(#1)} + } +\@@_keys_define_code:nnn {fontspec} {FontIndex} + { +% \tl_set:Nn \l_@@_ttc_index_tl {:#1} +% \tl_set:Nn \l_@@_ttc_index_tl {(#1)} + } +% \end{macrocode} +% +% \subsection{Font faces} +% +% \paragraph{Upright} +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-external} {UprightFont} + { + \fontspec_complete_fontname:Nn \l_@@_fontname_up_tl {#1} + } +% \end{macrocode} +% +% \paragraph{Italic and slanted} +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont} + { + \tl_if_empty:nTF {#1} + { + \bool_set_true:N \l_@@_noit_bool + } + { + \bool_set_false:N \l_@@_noit_bool + \fontspec_complete_fontname:Nn \l_@@_fontname_it_tl {#1} + } + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont} + { + \fontspec_complete_fontname:Nn \l_@@_fontname_sl_tl {#1} + } +% \end{macrocode} +% +% +% \paragraph{Bold (NFSS) Series} +% By default, \pkg{fontspec} uses the default bold series, \cs{bfdefault}. +% We want to be able to make this extensible. This code is not yet functional! +% \begin{macrocode} +%\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldSeries} +% { +% \tl_gset:Nx \g_@@_curr_series_tl { #1 } +% \seq_put_right:Nx \l_@@_bf_series_seq { #1 } +% } +% \end{macrocode} +% +% \paragraph{Bold} +% This contains some stubb code to allow more than one bold font to be loaded. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldFont} + { + \tl_if_empty:nTF {#1} + { + \bool_set_true:N \l_@@_nobf_bool + } + { + \bool_set_false:N \l_@@_nobf_bool + \fontspec_complete_fontname:Nn \l_@@_curr_bfname_tl {#1} + + \seq_if_empty:NT \l_@@_bf_series_seq + { + \tl_gset:Nx \g_@@_curr_series_tl {\bfdefault} + \seq_put_right:Nx \l_@@_bf_series_seq {\bfdefault} + } + + \tl_if_eq:oxT \g_@@_curr_series_tl {\bfdefault} + { + \tl_set_eq:NN \l_@@_fontname_bf_tl \l_@@_curr_bfname_tl + } + + \prop_put:NxV \l_@@_nfss_prop {BoldFont-\g_@@_curr_series_tl} \l_@@_curr_bfname_tl + +%\typeout{Setting~bold~font~"\l_@@_curr_bfname_tl"~with~series~"\g_@@_curr_series_tl"} + + } + } +% \end{macrocode} +% +% \paragraph{Bold italic/slanted} +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont} + { + \fontspec_complete_fontname:Nn \l_@@_fontname_bfit_tl {#1} + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont} + { + \fontspec_complete_fontname:Nn \l_@@_fontname_bfsl_tl {#1} + } +% \end{macrocode} +% +% \paragraph{Small caps} +% Small caps isn't pre-parsed because it can vary with others above: +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {SmallCapsFont} + { + \tl_if_empty:nTF {#1} + { + \bool_set_true:N \l_@@_nosc_bool + } + { + \bool_set_false:N \l_@@_nosc_bool + \fontspec_complete_fontname:Nn \l_@@_fontname_sc_tl {#1} + } + } +% \end{macrocode} +% +% +% \subsubsection{Preparsed font features} +% +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse} {UprightFeatures} + { + \clist_set:Nn \l_@@_fontfeat_up_clist {#1} + } +\@@_keys_define_code:nnn {fontspec-preparse} {BoldFeatures} + { + \clist_set:Nn \l_@@_fontfeat_bf_clist {#1} + +% \prop_put:NxV \l_@@_nfss_prop +% {BoldFont-\g_@@_curr_series_tl} \l_@@_curr_bfname_tl + } +\@@_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures} + { + \clist_set:Nn \l_@@_fontfeat_it_clist {#1} + } +\@@_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures} + { + \clist_set:Nn \l_@@_fontfeat_bfit_clist {#1} + } +\@@_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures} + { + \clist_set:Nn \l_@@_fontfeat_sl_clist {#1} + } +\@@_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures} + { + \clist_set:Nn \l_@@_fontfeat_bfsl_clist {#1} + } +% \end{macrocode} +% Note that small caps features can vary by shape, so these in fact \emph{aren't} pre-parsed. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {SmallCapsFeatures} + { + \bool_if:NF \l_@@_firsttime_bool + { + \clist_set:Nn \l_@@_fontfeat_sc_clist {#1} + } + } +% \end{macrocode} +% +% \paragraph{Features varying by size} +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse} {SizeFeatures} + { + \clist_set:Nn \l_@@_sizefeat_clist {#1} + \clist_put_right:Nn \l_@@_fontfeat_up_clist { SizeFeatures = {#1} } + } +\@@_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures} + { + \clist_set:Nn \l_@@_sizefeat_clist {#1} + \tl_if_empty:NT \l_@@_this_font_tl + { \tl_set:Nn \l_@@_this_font_tl { -- } } % needs to be non-empty as a flag + } +\@@_keys_define_code:nnn {fontspec-preparse-nested} {Font} + { + \tl_set:Nn \l_@@_this_font_tl {#1} + } +\@@_keys_define_code:nnn {fontspec} {SizeFeatures} + { + % dummy + } +\@@_keys_define_code:nnn {fontspec} {Font} + { + % dummy + } +% \end{macrocode} +% +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-sizing} {Size} + { + \tl_set:Nn \l_@@_size_tl {#1} + } +\@@_keys_define_code:nnn {fontspec-sizing} {Font} + { + \fontspec_complete_fontname:Nn \l_@@_sizedfont_tl {#1} + } +% \end{macrocode} +% +% +% +% \subsection{General font-independent features} +% +% These features can be applied to any font. +% +% \paragraph{NFSS encoding} +% For the very brave. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding} + { + \tl_gset:Nx \g_@@_nfss_enc_tl { #1 } + } +% \end{macrocode} +% +% \paragraph{NFSS family} +% Interactions with other packages will sometimes require setting the NFSS family explicitly. +% (By default \pkg{fontspec} auto-generates one based on the font name.) +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-preparse} {NFSSFamily} + { + \tl_set:Nx \l_@@_nfss_fam_tl { #1 } + } +% \end{macrocode} +% +% \paragraph{NFSS series/shape} +% This option looks similar in name but has a very different function. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {FontFace} + { + \tl_clear:N \l_@@_this_font_tl + \clist_set:No \l_@@_arg_clist { \use_iii:nnn #1 } + \clist_set_eq:NN \l_@@_this_feat_clist \l_@@_arg_clist + \int_compare:nT { \clist_count:N \l_@@_arg_clist = 1 } + { +%\typeout{FontFace~ parsing:~ one~ clist~ item} + \tl_if_in:NnF \l_@@_arg_clist {=} + { +%\typeout{FontFace~ parsing:~ no~ equals~ =>~ font~ name~ only} + \tl_set_eq:NN \l_@@_this_font_tl \l_@@_arg_clist + \tl_clear:N \l_@@_this_feat_clist + } + } + + \@@_add_nfssfont:nnnn + {\use_i:nnn #1} {\use_ii:nnn #1} {\l_@@_this_font_tl} {\l_@@_this_feat_clist} + } +% \end{macrocode} +% +% +% +% \paragraph{Scale} +% If the input isn't one of the pre-defined string options, then +% it's gotta be numerical. \cs{fontspec_calc_scale:n} does all the work in +% the auto-scaling cases. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {Scale} + { + \str_case:nnF {#1} + { + {MatchLowercase} { \@@_calc_scale:n {5} } + {MatchUppercase} { \@@_calc_scale:n {8} } + } + { \tl_set:Nx \l_@@_scale_tl {#1} } + \tl_set:Nx \l_@@_scale_tl { s*[\l_@@_scale_tl] } + } +% \end{macrocode} +% +% \begin{macro}{\@@_calc_scale:n} +% This macro calculates the amount of scaling between the default +% roman font and the (default shape of) the font being selected such +% that the font dimension that is input is equal for both. The only +% font dimensions that justify this are 5 (lowercase height) +% and 8 (uppercase height in \XeTeX). +% +% This script is executed for every extra shape, which seems wasteful, +% but allows alternate italic shapes from a separate font, say, to +% be loaded and to be auto-scaled correctly. Even if this would be ugly. +% +% To begin, change to \cs{rmfamily} but use internal commands in case cs{rmfamily} +% has been overwritten. +% (Note that changing \cs{rmfamily} with fontspec resets \cs{encodingdefault} +% appropriately.) +% \begin{macrocode} +\cs_new:Nn \@@_calc_scale:n + { + \group_begin: + + \fontencoding { \encodingdefault } + \fontfamily { \rmdefault } + \selectfont + + \@@_set_font_dimen:NnN \l_@@_tmpa_dim {#1} \font + \@@_set_font_dimen:NnN \l_@@_tmpb_dim {#1} \l_fontspec_font + + \tl_set:Nx \l_@@_scale_tl + { + \fp_eval:n { \dim_to_fp:n {\l_@@_tmpa_dim} / + \dim_to_fp:n {\l_@@_tmpb_dim} } + } + + \@@_info:n {set-scale} + \exp_args:NNNx + \group_end: + \tl_set:Nx \l_@@_scale_tl { \l_@@_scale_tl } + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_set_font_dimen:NnN} +% This function sets the dimension |#1| (for font |#3|) to `fontdimen' |#2| +% for either font dimension 5 (x-height) or 8 (cap-height). If, for some +% reason, these return an incorrect `zero' value (as \cs{fontdimen8} might +% for a \texttt{.tfm} font), then we cheat and measure the height of a glyph. +% We assume in this case that the font contains either an `X' or an `x'. +% \begin{macrocode} +\cs_new:Nn \@@_set_font_dimen:NnN + { + \dim_set:Nn #1 { \fontdimen #2 #3 } + \dim_compare:nNnT #1 = {0pt} + { + \settoheight #1 + { + \str_if_eq:nnTF {#3} {\font} \rmfamily #3 + \int_case:nnF #2 + { + {5} {x} % x-height + {8} {X} % cap-height + } {?} % "else" clause; never reached. + } + } + } +% \end{macrocode} +% \end{macro} +% +% +% \paragraph{Inter-word space} +% These options set the relevant \cmd\fontdimen s for the +% font being loaded. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {WordSpace} + { + \bool_if:NF \l_@@_firsttime_bool + { \_fontspec_parse_wordspace:w #1,,,\q_stop } + } +\@@_aff_error:n {WordSpace} +% \end{macrocode} +% +% \begin{macro}{\_fontspec_parse_wordspace:w} +% This macro determines if the input to \feat{WordSpace} is +% of the form |{X}| or |{X,Y,Z}| and executes the font scaling. +% If the former input, it executes |{X,X,X}|. +% \begin{macrocode} +\cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop + { + \tl_if_empty:nTF {#4} + { + \tl_set:Nn \l_@@_wordspace_adjust_tl + { + \fontdimen 2 \font = #1 \fontdimen 2 \font + \fontdimen 3 \font = #1 \fontdimen 3 \font + \fontdimen 4 \font = #1 \fontdimen 4 \font + } + } + { + \tl_set:Nn \l_@@_wordspace_adjust_tl + { + \fontdimen 2 \font = #1 \fontdimen 2 \font + \fontdimen 3 \font = #2 \fontdimen 3 \font + \fontdimen 4 \font = #3 \fontdimen 4 \font + } + } + } +% \end{macrocode} +% \end{macro} +% +% \paragraph{Punctuation space} +% Scaling factor for the nominal \cmd\fontdimen \#7. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {PunctuationSpace} + { + \str_case_e:nnF {#1} + { + {WordSpace} + { + \tl_set:Nn \l_@@_punctspace_adjust_tl + { \fontdimen 7 \font = 0 \fontdimen 2 \font } + } + {TwiceWordSpace} + { + \tl_set:Nn \l_@@_punctspace_adjust_tl + { \fontdimen 7 \font = 1 \fontdimen 2 \font } + } + } + { + \tl_set:Nn \l_@@_punctspace_adjust_tl + { \fontdimen 7 \font = #1 \fontdimen 7 \font } + } + } +\@@_aff_error:n {PunctuationSpace} +% \end{macrocode} +% +% \paragraph{Secret hook into the font-adjustment code} +% +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {FontAdjustment} + { + \tl_put_right:Nx \l_@@_postadjust_tl {#1} + } +% \end{macrocode} +% +% \paragraph{Letterspacing} +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {LetterSpace} + { + \@@_update_featstr:n {letterspace=#1} + } +% \end{macrocode} +% +% \paragraph{Hyphenation character} +% This feature takes one of three arguments: `\opt{None}', +% \meta{glyph}, or \meta{slot}. If the input isn't the first, +% and it's one character, then it's the second; otherwise, it's +% the third. +% +% LuaTeX decouples hyphenation from font settings, so only \verb|HyphenChar=None| works +% for that engine. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {HyphenChar} + { + \str_if_eq:nnTF {#1} {None} + { + \tl_put_right:Nn \l_@@_postadjust_tl + { \@@_primitive_font_set_hyphenchar:Nn \font {-1} } + } + { + \@@_warning:nx {only-xetex-feature} {HyphenChar} + + \tl_if_single:nTF {#1} + { \tl_set:Nn \l_@@_hyphenchar_tl {`#1} } + { \tl_set:Nn \l_@@_hyphenchar_tl { #1} } + + \@@_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l_@@_hyphenchar_tl} + { + \tl_put_right:Nn \l_@@_postadjust_tl + { \@@_primitive_font_set_hyphenchar:Nn \font { \l_@@_hyphenchar_tl } } + } + { \@@_error:nx {no-glyph}{#1} } + + } + } +\@@_aff_error:n {HyphenChar} +% \end{macrocode} +% +% \paragraph{Color} +% Hooks into pkg{xcolor}, which names its colours \texttt{\char`\\color@}. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {Color} + { + \cs_if_exist:cTF { \token_to_str:N \color@ #1 } + { + \convertcolorspec{named}{#1}{HTML}\l_@@_hexcol_tl + } + { + \int_compare:nTF { \tl_count:n {#1} == 6 } + { \tl_set:Nn \l_@@_hexcol_tl {#1} } + { + \int_compare:nTF { \tl_count:n {#1} == 8 } + { \fontspec_parse_colour:viii #1 } + { + \bool_if:NF \l_@@_firsttime_bool + { \@@_warning:nx {bad-colour} {#1} } + } + } + } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8 + { + \tl_set:Nn \l_@@_hexcol_tl {#1#2#3#4#5#6} + \tl_if_eq:NNF \l_@@_opacity_tl \c_@@_opacity_tl + { + \bool_if:NF \l_@@_firsttime_bool + { \@@_warning:nx {opa-twice-col} {#7#8} } + } + \tl_set:Nn \l_@@_opacity_tl {#7#8} + } +\aliasfontfeature{Color}{Colour} +% \end{macrocode} +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {Opacity} + { + \int_set:Nn \l_@@_tmp_int {255} + \@@_int_mult_truncate:Nn \l_@@_tmp_int { #1 } + \tl_if_eq:NNF \l_@@_opacity_tl \c_@@_opacity_tl + { + \bool_if:NF \l_@@_firsttime_bool + { \@@_warning:nx {opa-twice} {#1} } + } + \tl_set:Nx \l_@@_opacity_tl + { + \int_compare:nT { \l_@@_tmp_int <= "F } {0} % zero pad + \int_to_hex:n { \l_@@_tmp_int } + } + } +% \end{macrocode} +% +% +% \paragraph{Mapping} +% \begin{macrocode} +%<*XE> +\@@_keys_define_code:nnn {fontspec-aat} {Mapping} + { + \tl_set:Nn \l_@@_mapping_tl { #1 } + } +\@@_keys_define_code:nnn {fontspec-opentype} {Mapping} + { + \tl_set:Nn \l_@@_mapping_tl { #1 } + } +% +%<*LU> +\@@_keys_define_code:nnn {fontspec-opentype} {Mapping} + { + \str_if_eq:nnTF {#1} {tex-text} + { + \@@_warning:n {no-mapping-ligtex} + \msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none} + \keys_set:nn {fontspec-opentype} { Ligatures=TeX } + } + { \@@_warning:n {no-mapping} } + } +% +% \end{macrocode} +% +% +% \subsubsection{Continuous font axes} +% +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec} {Weight} + { + \@@_update_featstr:n{weight=#1} + } +\@@_keys_define_code:nnn {fontspec} {Width} + { + \@@_update_featstr:n{width=#1} + } +\@@_keys_define_code:nnn {fontspec} {OpticalSize} +%<*XE> + { + \bool_if:NTF \l_@@_ot_bool + { + \tl_set:Nn \l_@@_optical_size_tl {/ S = #1} + } + { + \bool_if:NT \l_@@_mm_bool + { + \@@_update_featstr:n { optical size = #1 } + } + } + \bool_if:nT { !\l_@@_ot_bool && !\l_@@_mm_bool } + { + \bool_if:NT \l_@@_firsttime_bool + { \@@_warning:n {no-opticals} } + } + } +% +%<*LU> + { + \tl_set:Nn \l_@@_optical_size_tl {/ S = #1} + } +% +% \end{macrocode} +% +% \subsubsection{Font transformations} +% These are to be specified to apply directly to a font shape: +% \begin{macrocode} +\keys_define:nn {fontspec} + { + FakeSlant .code:n = + { + \@@_update_featstr:n {slant=#1} + }, + FakeSlant .default:n = {0.2} + } +\keys_define:nn {fontspec} + { + FakeStretch .code:n = + { + \@@_update_featstr:n {extend=#1} + }, + FakeStretch .default:n = {1.2} + } +%<*XE> +\keys_define:nn {fontspec} + { + FakeBold .code:n = + { + \@@_update_featstr:n {embolden=#1} + }, + FakeBold .default:n = {1.5} + } +% +%<*LU> +\keys_define:nn {fontspec} + { + FakeBold .code:n = { \@@_warning:n {fakebold-only-xetex} } + } +% +% \end{macrocode} +% These are to be given to a shape that has no real bold/italic +% to signal that \pkg{fontspec} should automatically create `fake' shapes. +% +% The behaviour is currently that only if both \opt{AutoFakeSlant} \emph{and} +% \opt{AutoFakeBold} are specified, the bold italic is also faked. +% +% These features presently \emph{override} real shapes found in the font; +% in the future I'd like these features to be ignored in this case, instead. +% (This is just a bit harder to program in the current design of +% \pkg{fontspec}.) +% \begin{macrocode} +\keys_define:nn {fontspec} + { + AutoFakeSlant .code:n = + { + \bool_if:NT \l_@@_firsttime_bool + { + \tl_set:Nn \l_@@_fake_slant_tl {#1} + \clist_put_right:Nn \l_@@_fontfeat_it_clist {FakeSlant=#1} + \tl_set_eq:NN \l_@@_fontname_it_tl \l_fontspec_fontname_tl + \bool_set_false:N \l_@@_noit_bool + + \tl_if_empty:NF \l_@@_fake_embolden_tl + { + \clist_put_right:Nx \l_@@_fontfeat_bfit_clist + {FakeBold=\l_@@_fake_embolden_tl} + \clist_put_right:Nx \l_@@_fontfeat_bfit_clist {FakeSlant=#1} + \tl_set_eq:NN \l_@@_fontname_bfit_tl \l_fontspec_fontname_tl + } + } + }, + AutoFakeSlant .default:n = {0.2} + } +% \end{macrocode} +% Same but reversed: +% \begin{macrocode} +\keys_define:nn {fontspec} + { + AutoFakeBold .code:n = + { + \bool_if:NT \l_@@_firsttime_bool + { + \tl_set:Nn \l_@@_fake_embolden_tl {#1} + \clist_put_right:Nn \l_@@_fontfeat_bf_clist {FakeBold=#1} + \tl_set_eq:NN \l_@@_fontname_bf_tl \l_fontspec_fontname_tl + \bool_set_false:N \l_@@_nobf_bool + + \tl_if_empty:NF \l_@@_fake_slant_tl + { + \clist_put_right:Nx \l_@@_fontfeat_bfit_clist + {FakeSlant=\l_@@_fake_slant_tl} + \clist_put_right:Nx \l_@@_fontfeat_bfit_clist {FakeBold=#1} + \tl_set_eq:NN \l_@@_fontname_bfit_tl \l_fontspec_fontname_tl + } + } + }, + AutoFakeBold .default:n = {1.5} + } +% \end{macrocode} +% +% +% \subsubsection{Raw feature string} +% This allows savvy \XeTeX-ers to input font features manually if they have +% already memorised the OpenType abbreviations and don't mind not having error checking. +% \begin{macrocode} +\@@_keys_define_code:nnn {fontspec-opentype} {RawFeature} + { + \@@_update_featstr:n {#1} + } +\@@_keys_define_code:nnn {fontspec-aat} {RawFeature} + { + \@@_update_featstr:n {#1} + } +% \end{macrocode} +% +% +% +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-lang.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-lang.dtx new file mode 100644 index 00000000000..adcdcb8a355 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-lang.dtx @@ -0,0 +1,418 @@ +%%^^A%% fontspec-code-lang.dtx -- part of FONTSPEC + +% \section{Font language definitions} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% \begin{macrocode} +\newfontlanguage{Abaza}{ABA} +\newfontlanguage{Abkhazian}{ABK} +\newfontlanguage{Adyghe}{ADY} +\newfontlanguage{Afrikaans}{AFK} +\newfontlanguage{Afar}{AFR} +\newfontlanguage{Agaw}{AGW} +\newfontlanguage{Altai}{ALT} +\newfontlanguage{Amharic}{AMH} +\newfontlanguage{Arabic}{ARA} +\newfontlanguage{Aari}{ARI} +\newfontlanguage{Arakanese}{ARK} +\newfontlanguage{Assamese}{ASM} +\newfontlanguage{Athapaskan}{ATH} +\newfontlanguage{Avar}{AVR} +\newfontlanguage{Awadhi}{AWA} +\newfontlanguage{Aymara}{AYM} +\newfontlanguage{Azeri}{AZE} +\newfontlanguage{Badaga}{BAD} +\newfontlanguage{Baghelkhandi}{BAG} +\newfontlanguage{Balkar}{BAL} +\newfontlanguage{Baule}{BAU} +\newfontlanguage{Berber}{BBR} +\newfontlanguage{Bench}{BCH} +\newfontlanguage{Bible~Cree}{BCR} +\newfontlanguage{Belarussian}{BEL} +\newfontlanguage{Bemba}{BEM} +\newfontlanguage{Bengali}{BEN} +\newfontlanguage{Bulgarian}{BGR} +\newfontlanguage{Bhili}{BHI} +\newfontlanguage{Bhojpuri}{BHO} +\newfontlanguage{Bikol}{BIK} +\newfontlanguage{Bilen}{BIL} +\newfontlanguage{Blackfoot}{BKF} +\newfontlanguage{Balochi}{BLI} +\newfontlanguage{Balante}{BLN} +\newfontlanguage{Balti}{BLT} +\newfontlanguage{Bambara}{BMB} +\newfontlanguage{Bamileke}{BML} +\newfontlanguage{Breton}{BRE} +\newfontlanguage{Brahui}{BRH} +\newfontlanguage{Braj~Bhasha}{BRI} +\newfontlanguage{Burmese}{BRM} +\newfontlanguage{Bashkir}{BSH} +\newfontlanguage{Beti}{BTI} +\newfontlanguage{Catalan}{CAT} +\newfontlanguage{Cebuano}{CEB} +\newfontlanguage{Chechen}{CHE} +\newfontlanguage{Chaha~Gurage}{CHG} +\newfontlanguage{Chattisgarhi}{CHH} +\newfontlanguage{Chichewa}{CHI} +\newfontlanguage{Chukchi}{CHK} +\newfontlanguage{Chipewyan}{CHP} +\newfontlanguage{Cherokee}{CHR} +\newfontlanguage{Chuvash}{CHU} +\newfontlanguage{Comorian}{CMR} +\newfontlanguage{Coptic}{COP} +\newfontlanguage{Cree}{CRE} +\newfontlanguage{Carrier}{CRR} +\newfontlanguage{Crimean~Tatar}{CRT} +\newfontlanguage{Church~Slavonic}{CSL} +\newfontlanguage{Czech}{CSY} +\newfontlanguage{Danish}{DAN} +\newfontlanguage{Dargwa}{DAR} +\newfontlanguage{Woods~Cree}{DCR} +\newfontlanguage{German}{DEU} +\newfontlanguage{Dogri}{DGR} +\newfontlanguage{Divehi}{DIV} +\newfontlanguage{Djerma}{DJR} +\newfontlanguage{Dangme}{DNG} +\newfontlanguage{Dinka}{DNK} +\newfontlanguage{Dungan}{DUN} +\newfontlanguage{Dzongkha}{DZN} +\newfontlanguage{Ebira}{EBI} +\newfontlanguage{Eastern~Cree}{ECR} +\newfontlanguage{Edo}{EDO} +\newfontlanguage{Efik}{EFI} +\newfontlanguage{Greek}{ELL} +\newfontlanguage{English}{ENG} +\newfontlanguage{Erzya}{ERZ} +\newfontlanguage{Spanish}{ESP} +\newfontlanguage{Estonian}{ETI} +\newfontlanguage{Basque}{EUQ} +\newfontlanguage{Evenki}{EVK} +\newfontlanguage{Even}{EVN} +\newfontlanguage{Ewe}{EWE} +\newfontlanguage{French~Antillean}{FAN} +\newfontlanguage{Farsi}{FAR} +\newfontlanguage{Parsi}{FAR} +\newfontlanguage{Persian}{FAR} +\newfontlanguage{Finnish}{FIN} +\newfontlanguage{Fijian}{FJI} +\newfontlanguage{Flemish}{FLE} +\newfontlanguage{Forest~Nenets}{FNE} +\newfontlanguage{Fon}{FON} +\newfontlanguage{Faroese}{FOS} +\newfontlanguage{French}{FRA} +\newfontlanguage{Frisian}{FRI} +\newfontlanguage{Friulian}{FRL} +\newfontlanguage{Futa}{FTA} +\newfontlanguage{Fulani}{FUL} +\newfontlanguage{Ga}{GAD} +\newfontlanguage{Gaelic}{GAE} +\newfontlanguage{Gagauz}{GAG} +\newfontlanguage{Galician}{GAL} +\newfontlanguage{Garshuni}{GAR} +\newfontlanguage{Garhwali}{GAW} +\newfontlanguage{Ge'ez}{GEZ} +\newfontlanguage{Gilyak}{GIL} +\newfontlanguage{Gumuz}{GMZ} +\newfontlanguage{Gondi}{GON} +\newfontlanguage{Greenlandic}{GRN} +\newfontlanguage{Garo}{GRO} +\newfontlanguage{Guarani}{GUA} +\newfontlanguage{Gujarati}{GUJ} +\newfontlanguage{Haitian}{HAI} +\newfontlanguage{Halam}{HAL} +\newfontlanguage{Harauti}{HAR} +\newfontlanguage{Hausa}{HAU} +\newfontlanguage{Hawaiin}{HAW} +\newfontlanguage{Hammer-Banna}{HBN} +\newfontlanguage{Hiligaynon}{HIL} +\newfontlanguage{Hindi}{HIN} +\newfontlanguage{High~Mari}{HMA} +\newfontlanguage{Hindko}{HND} +\newfontlanguage{Ho}{HO} +\newfontlanguage{Harari}{HRI} +\newfontlanguage{Croatian}{HRV} +\newfontlanguage{Hungarian}{HUN} +\newfontlanguage{Armenian}{HYE} +\newfontlanguage{Igbo}{IBO} +\newfontlanguage{Ijo}{IJO} +\newfontlanguage{Ilokano}{ILO} +\newfontlanguage{Indonesian}{IND} +\newfontlanguage{Ingush}{ING} +\newfontlanguage{Inuktitut}{INU} +\newfontlanguage{Irish}{IRI} +\newfontlanguage{Irish~Traditional}{IRT} +\newfontlanguage{Icelandic}{ISL} +\newfontlanguage{Inari~Sami}{ISM} +\newfontlanguage{Italian}{ITA} +\newfontlanguage{Hebrew}{IWR} +\newfontlanguage{Javanese}{JAV} +\newfontlanguage{Yiddish}{JII} +\newfontlanguage{Japanese}{JAN} +\newfontlanguage{Judezmo}{JUD} +\newfontlanguage{Jula}{JUL} +\newfontlanguage{Kabardian}{KAB} +\newfontlanguage{Kachchi}{KAC} +\newfontlanguage{Kalenjin}{KAL} +\newfontlanguage{Kannada}{KAN} +\newfontlanguage{Karachay}{KAR} +\newfontlanguage{Georgian}{KAT} +\newfontlanguage{Kazakh}{KAZ} +\newfontlanguage{Kebena}{KEB} +\newfontlanguage{Khutsuri~Georgian}{KGE} +\newfontlanguage{Khakass}{KHA} +\newfontlanguage{Khanty-Kazim}{KHK} +\newfontlanguage{Khmer}{KHM} +\newfontlanguage{Khanty-Shurishkar}{KHS} +\newfontlanguage{Khanty-Vakhi}{KHV} +\newfontlanguage{Khowar}{KHW} +\newfontlanguage{Kikuyu}{KIK} +\newfontlanguage{Kirghiz}{KIR} +\newfontlanguage{Kisii}{KIS} +\newfontlanguage{Kokni}{KKN} +\newfontlanguage{Kalmyk}{KLM} +\newfontlanguage{Kamba}{KMB} +\newfontlanguage{Kumaoni}{KMN} +\newfontlanguage{Komo}{KMO} +\newfontlanguage{Komso}{KMS} +\newfontlanguage{Kanuri}{KNR} +\newfontlanguage{Kodagu}{KOD} +\newfontlanguage{Korean~Old~Hangul}{KOH} +\newfontlanguage{Konkani}{KOK} +\newfontlanguage{Kikongo}{KON} +\newfontlanguage{Komi-Permyak}{KOP} +\newfontlanguage{Korean}{KOR} +\newfontlanguage{Komi-Zyrian}{KOZ} +\newfontlanguage{Kpelle}{KPL} +\newfontlanguage{Krio}{KRI} +\newfontlanguage{Karakalpak}{KRK} +\newfontlanguage{Karelian}{KRL} +\newfontlanguage{Karaim}{KRM} +\newfontlanguage{Karen}{KRN} +\newfontlanguage{Koorete}{KRT} +\newfontlanguage{Kashmiri}{KSH} +\newfontlanguage{Khasi}{KSI} +\newfontlanguage{Kildin~Sami}{KSM} +\newfontlanguage{Kui}{KUI} +\newfontlanguage{Kulvi}{KUL} +\newfontlanguage{Kumyk}{KUM} +\newfontlanguage{Kurdish}{KUR} +\newfontlanguage{Kurukh}{KUU} +\newfontlanguage{Kuy}{KUY} +\newfontlanguage{Koryak}{KYK} +\newfontlanguage{Ladin}{LAD} +\newfontlanguage{Lahuli}{LAH} +\newfontlanguage{Lak}{LAK} +\newfontlanguage{Lambani}{LAM} +\newfontlanguage{Lao}{LAO} +\newfontlanguage{Latin}{LAT} +\newfontlanguage{Laz}{LAZ} +\newfontlanguage{L-Cree}{LCR} +\newfontlanguage{Ladakhi}{LDK} +\newfontlanguage{Lezgi}{LEZ} +\newfontlanguage{Lingala}{LIN} +\newfontlanguage{Low~Mari}{LMA} +\newfontlanguage{Limbu}{LMB} +\newfontlanguage{Lomwe}{LMW} +\newfontlanguage{Lower~Sorbian}{LSB} +\newfontlanguage{Lule~Sami}{LSM} +\newfontlanguage{Lithuanian}{LTH} +\newfontlanguage{Luba}{LUB} +\newfontlanguage{Luganda}{LUG} +\newfontlanguage{Luhya}{LUH} +\newfontlanguage{Luo}{LUO} +\newfontlanguage{Latvian}{LVI} +\newfontlanguage{Majang}{MAJ} +\newfontlanguage{Makua}{MAK} +\newfontlanguage{Malayalam~Traditional}{MAL} +\newfontlanguage{Mansi}{MAN} +\newfontlanguage{Marathi}{MAR} +\newfontlanguage{Marwari}{MAW} +\newfontlanguage{Mbundu}{MBN} +\newfontlanguage{Manchu}{MCH} +\newfontlanguage{Moose~Cree}{MCR} +\newfontlanguage{Mende}{MDE} +\newfontlanguage{Me'en}{MEN} +\newfontlanguage{Mizo}{MIZ} +\newfontlanguage{Macedonian}{MKD} +\newfontlanguage{Male}{MLE} +\newfontlanguage{Malagasy}{MLG} +\newfontlanguage{Malinke}{MLN} +\newfontlanguage{Malayalam~Reformed}{MLR} +\newfontlanguage{Malay}{MLY} +\newfontlanguage{Mandinka}{MND} +\newfontlanguage{Mongolian}{MNG} +\newfontlanguage{Manipuri}{MNI} +\newfontlanguage{Maninka}{MNK} +\newfontlanguage{Manx~Gaelic}{MNX} +\newfontlanguage{Moksha}{MOK} +\newfontlanguage{Moldavian}{MOL} +\newfontlanguage{Mon}{MON} +\newfontlanguage{Moroccan}{MOR} +\newfontlanguage{Maori}{MRI} +\newfontlanguage{Maithili}{MTH} +\newfontlanguage{Maltese}{MTS} +\newfontlanguage{Mundari}{MUN} +\newfontlanguage{Naga-Assamese}{NAG} +\newfontlanguage{Nanai}{NAN} +\newfontlanguage{Naskapi}{NAS} +\newfontlanguage{N-Cree}{NCR} +\newfontlanguage{Ndebele}{NDB} +\newfontlanguage{Ndonga}{NDG} +\newfontlanguage{Nepali}{NEP} +\newfontlanguage{Newari}{NEW} +\newfontlanguage{Nagari}{NGR} +\newfontlanguage{Norway~House~Cree}{NHC} +\newfontlanguage{Nisi}{NIS} +\newfontlanguage{Niuean}{NIU} +\newfontlanguage{Nkole}{NKL} +\newfontlanguage{N'ko}{NKO} +\newfontlanguage{Dutch}{NLD} +\newfontlanguage{Nogai}{NOG} +\newfontlanguage{Norwegian}{NOR} +\newfontlanguage{Northern~Sami}{NSM} +\newfontlanguage{Northern~Tai}{NTA} +\newfontlanguage{Esperanto}{NTO} +\newfontlanguage{Nynorsk}{NYN} +\newfontlanguage{Oji-Cree}{OCR} +\newfontlanguage{Ojibway}{OJB} +\newfontlanguage{Oriya}{ORI} +\newfontlanguage{Oromo}{ORO} +\newfontlanguage{Ossetian}{OSS} +\newfontlanguage{Palestinian~Aramaic}{PAA} +\newfontlanguage{Pali}{PAL} +\newfontlanguage{Punjabi}{PAN} +\newfontlanguage{Palpa}{PAP} +\newfontlanguage{Pashto}{PAS} +\newfontlanguage{Polytonic~Greek}{PGR} +\newfontlanguage{Pilipino}{PIL} +\newfontlanguage{Palaung}{PLG} +\newfontlanguage{Polish}{PLK} +\newfontlanguage{Provencal}{PRO} +\newfontlanguage{Portuguese}{PTG} +\newfontlanguage{Chin}{QIN} +\newfontlanguage{Rajasthani}{RAJ} +\newfontlanguage{R-Cree}{RCR} +\newfontlanguage{Russian~Buriat}{RBU} +\newfontlanguage{Riang}{RIA} +\newfontlanguage{Rhaeto-Romanic}{RMS} +\newfontlanguage{Romanian}{ROM} +\newfontlanguage{Romany}{ROY} +\newfontlanguage{Rusyn}{RSY} +\newfontlanguage{Ruanda}{RUA} +\newfontlanguage{Russian}{RUS} +\newfontlanguage{Sadri}{SAD} +\newfontlanguage{Sanskrit}{SAN} +\newfontlanguage{Santali}{SAT} +\newfontlanguage{Sayisi}{SAY} +\newfontlanguage{Sekota}{SEK} +\newfontlanguage{Selkup}{SEL} +\newfontlanguage{Sango}{SGO} +\newfontlanguage{Shan}{SHN} +\newfontlanguage{Sibe}{SIB} +\newfontlanguage{Sidamo}{SID} +\newfontlanguage{Silte~Gurage}{SIG} +\newfontlanguage{Skolt~Sami}{SKS} +\newfontlanguage{Slovak}{SKY} +\newfontlanguage{Slavey}{SLA} +\newfontlanguage{Slovenian}{SLV} +\newfontlanguage{Somali}{SML} +\newfontlanguage{Samoan}{SMO} +\newfontlanguage{Sena}{SNA} +\newfontlanguage{Sindhi}{SND} +\newfontlanguage{Sinhalese}{SNH} +\newfontlanguage{Soninke}{SNK} +\newfontlanguage{Sodo~Gurage}{SOG} +\newfontlanguage{Sotho}{SOT} +\newfontlanguage{Albanian}{SQI} +\newfontlanguage{Serbian}{SRB} +\newfontlanguage{Saraiki}{SRK} +\newfontlanguage{Serer}{SRR} +\newfontlanguage{South~Slavey}{SSL} +\newfontlanguage{Southern~Sami}{SSM} +\newfontlanguage{Suri}{SUR} +\newfontlanguage{Svan}{SVA} +\newfontlanguage{Swedish}{SVE} +\newfontlanguage{Swadaya~Aramaic}{SWA} +\newfontlanguage{Swahili}{SWK} +\newfontlanguage{Swazi}{SWZ} +\newfontlanguage{Sutu}{SXT} +\newfontlanguage{Syriac}{SYR} +\newfontlanguage{Tabasaran}{TAB} +\newfontlanguage{Tajiki}{TAJ} +\newfontlanguage{Tamil}{TAM} +\newfontlanguage{Tatar}{TAT} +\newfontlanguage{TH-Cree}{TCR} +\newfontlanguage{Telugu}{TEL} +\newfontlanguage{Tongan}{TGN} +\newfontlanguage{Tigre}{TGR} +\newfontlanguage{Tigrinya}{TGY} +\newfontlanguage{Thai}{THA} +\newfontlanguage{Tahitian}{THT} +\newfontlanguage{Tibetan}{TIB} +\newfontlanguage{Turkmen}{TKM} +\newfontlanguage{Temne}{TMN} +\newfontlanguage{Tswana}{TNA} +\newfontlanguage{Tundra~Nenets}{TNE} +\newfontlanguage{Tonga}{TNG} +\newfontlanguage{Todo}{TOD} +\newfontlanguage{Tsonga}{TSG} +\newfontlanguage{Turoyo~Aramaic}{TUA} +\newfontlanguage{Tulu}{TUL} +\newfontlanguage{Tuvin}{TUV} +\newfontlanguage{Twi}{TWI} +\newfontlanguage{Udmurt}{UDM} +\newfontlanguage{Ukrainian}{UKR} +\newfontlanguage{Urdu}{URD} +\newfontlanguage{Upper~Sorbian}{USB} +\newfontlanguage{Uyghur}{UYG} +\newfontlanguage{Uzbek}{UZB} +\newfontlanguage{Venda}{VEN} +\newfontlanguage{Vietnamese}{VIT} +\newfontlanguage{Wa}{WA} +\newfontlanguage{Wagdi}{WAG} +\newfontlanguage{West-Cree}{WCR} +\newfontlanguage{Welsh}{WEL} +\newfontlanguage{Wolof}{WLF} +\newfontlanguage{Tai~Lue}{XBD} +\newfontlanguage{Xhosa}{XHS} +\newfontlanguage{Yakut}{YAK} +\newfontlanguage{Yoruba}{YBA} +\newfontlanguage{Y-Cree}{YCR} +\newfontlanguage{Yi~Classic}{YIC} +\newfontlanguage{Yi~Modern}{YIM} +\newfontlanguage{Chinese~Hong~Kong}{ZHH} +\newfontlanguage{Chinese~Phonetic}{ZHP} +\newfontlanguage{Chinese~Simplified}{ZHS} +\newfontlanguage{Chinese~Traditional}{ZHT} +\newfontlanguage{Zande}{ZND} +\newfontlanguage{Zulu}{ZUL} +% \end{macrocode} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-load.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-load.dtx index 102800b98c2..809b282921e 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-code-load.dtx +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-load.dtx @@ -60,7 +60,7 @@ % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx new file mode 100644 index 00000000000..aedef402cd8 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx @@ -0,0 +1,255 @@ +%%^^A%% fontspec-code-math.dtx -- part of FONTSPEC +% +% \section{Selecting maths fonts} +% Here, the fonts used in math mode are redefined to correspond to the +% default roman, sans serif and typewriter fonts. Unfortunately, you +% can only define maths fonts in the preamble, otherwise I'd run this +% code whenever \cs{setmainfont} and friends was run. +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% \begin{macro}{\fontspec_setup_maths:} +% Everything here is performed \cs{AtBeginDocument} in order to +% overwrite \pkg{euler}'s attempt. This means \pkg{fontspec} must be +% loaded \emph{after} \pkg{euler}. We set up a conditional to return +% an error if this rule is violated. +% +% Since every maths setup is slightly different, we also take +% different paths for defining various math glyphs depending which +% maths font package has been loaded. +% +% \begin{macrocode} +\@ifpackageloaded{euler} + { \bool_gset_true:N \g_@@_pkg_euler_loaded_bool } + { \bool_gset_false:N \g_@@_pkg_euler_loaded_bool } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \fontspec_setup_maths: + { + \@ifpackageloaded{euler} + { + \bool_if:NTF \g_@@_pkg_euler_loaded_bool + { \bool_gset_true:N \g_@@_math_euler_bool } + { \@@_error:n {euler-too-late} } + } + {} + \@ifpackageloaded{lucbmath}{ \bool_gset_true:N \g_@@_math_lucida_bool }{} + \@ifpackageloaded{lucidabr}{ \bool_gset_true:N \g_@@_math_lucida_bool }{} + \@ifpackageloaded{lucimatx}{ \bool_gset_true:N \g_@@_math_lucida_bool }{} +% \end{macrocode} +% Knuth's CM fonts fonts are all squashed together, combining letters, +% accents, text symbols and maths symbols all in the one font, +% \texttt{cmr}, plus other things in other fonts. Because we are +% changing the roman font in the document, we need to redefine all of +% the maths glyphs in \LaTeX's \texttt{operators} maths font to still +% go back to the legacy \texttt{cmr} font for all these random glyphs, +% unless a separate maths font package has been loaded instead. +% +% In every case, the maths accents are always taken from the +% \texttt{operators} font, which is generally the main text +% font. (Actually, there is a \cmd\hat\ accent in +% \texttt{EulerFractur}, but it's \emph{ugly}. So I ignore it. Sorry +% if this causes inconvenience.) +% \begin{macrocode} + \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n} + \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n} + \DeclareMathAccent{\acute} {\mathalpha}{legacymaths}{19} + \DeclareMathAccent{\grave} {\mathalpha}{legacymaths}{18} + \DeclareMathAccent{\ddot} {\mathalpha}{legacymaths}{127} + \DeclareMathAccent{\tilde} {\mathalpha}{legacymaths}{126} + \DeclareMathAccent{\bar} {\mathalpha}{legacymaths}{22} + \DeclareMathAccent{\breve} {\mathalpha}{legacymaths}{21} + \DeclareMathAccent{\check} {\mathalpha}{legacymaths}{20} + \DeclareMathAccent{\hat} {\mathalpha}{legacymaths}{94} % too bad, euler + \DeclareMathAccent{\dot} {\mathalpha}{legacymaths}{95} + \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths}{23} +% \end{macrocode} +% \paragraph{\cmd\colon: what's going on?} Okay, so \verb":" and \cmd\colon\ in maths mode are defined in a few places, so I need to work out what does what. Respectively, we have: +% \begin{Verbatim} +% % fontmath.ltx: +% \DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A} +% \DeclareMathSymbol{:}{\mathrel}{operators}{"3A} +% +% % amsmath.sty: +% \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +% \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} +% +% % euler.sty: +% \DeclareMathSymbol{:}\mathrel {EulerFraktur}{"3A} +% +% % lucbmath.sty: +% \DeclareMathSymbol{\@tempb}{\mathpunct}{operators}{58} +% \ifx\colon\@tempb +% \DeclareMathSymbol{\colon}{\mathpunct}{operators}{58} +% \fi +% \DeclareMathSymbol{:}{\mathrel}{operators}{58} +% \end{Verbatim} +% ($\mathrm{3A_{16}}=\mathrm{58_{10}}$) So I think, based on this summary, that it is fair to tell \pkg{fontspec} to `replace' the operators font with legacymaths for this symbol, except when \pkg{amsmath} is loaded since we want to keep its definition. +% +% +% \begin{macrocode} + \group_begin: + \mathchardef\@tempa="603A \relax + \ifx\colon\@tempa + \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58} + \fi + \group_end: +% \end{macrocode} +% The following symbols are only defined specifically in \pkg{euler}, so skip them +% if that package is loaded. +% \begin{macrocode} + \bool_if:NF \g_@@_math_euler_bool + { + \DeclareMathSymbol{!}{\mathclose}{legacymaths}{33} + \DeclareMathSymbol{:}{\mathrel} {legacymaths}{58} + \DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59} + \DeclareMathSymbol{?}{\mathclose}{legacymaths}{63} +% \end{macrocode} +% And these ones are defined both in \pkg{euler} and \pkg{lucbmath}, +% so we only need to run this code if no extra maths package has been +% loaded. +% \begin{macrocode} + \bool_if:NF \g_@@_math_lucida_bool + { + \DeclareMathSymbol{0}{\mathalpha}{legacymaths}{`0} + \DeclareMathSymbol{1}{\mathalpha}{legacymaths}{`1} + \DeclareMathSymbol{2}{\mathalpha}{legacymaths}{`2} + \DeclareMathSymbol{3}{\mathalpha}{legacymaths}{`3} + \DeclareMathSymbol{4}{\mathalpha}{legacymaths}{`4} + \DeclareMathSymbol{5}{\mathalpha}{legacymaths}{`5} + \DeclareMathSymbol{6}{\mathalpha}{legacymaths}{`6} + \DeclareMathSymbol{7}{\mathalpha}{legacymaths}{`7} + \DeclareMathSymbol{8}{\mathalpha}{legacymaths}{`8} + \DeclareMathSymbol{9}{\mathalpha}{legacymaths}{`9} + \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths}{0} + \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths}{1} + \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths}{2} + \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths}{3} + \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths}{4} + \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths}{5} + \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths}{6} + \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths}{7} + \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths}{8} + \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths}{9} + \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths}{10} + \DeclareMathSymbol{+}{\mathbin}{legacymaths}{43} + \DeclareMathSymbol{=}{\mathrel}{legacymaths}{61} + \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0} + \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1} + \DeclareMathDelimiter{[}{\mathopen} {legacymaths}{91}{largesymbols}{2} + \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3} + \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14} + \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36} + \renewcommand{\hbar}{{\mathchar"AF\mkern-9mu h}}% TODO: test with other fonts + } + } +% \end{macrocode} +% Finally, we change the font definitions for \cmd\mathrm\ and so +% on. These are defined using the \cmd\g_@@_mathrm_tl\ (\dots) macros, +% which default to \cmd\rmdefault\ but may be specified with the +% \cmd\setmathrm\ (\dots) commands in the preamble. +% +% Since \LaTeX\ only generally defines one level of boldness, we omit +% \cmd\mathbf\ in the \textsf{bold} maths series. It can be specified +% as per usual with \cmd\setboldmathrm, which stores the appropriate +% family name in \cmd\g_@@_bfmathrm_tl. +% \begin{macrocode} + \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\updefault + \SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\updefault + \DeclareSymbolFontAlphabet\mathrm{operators} + \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\itdefault + \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\updefault + \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g_@@_mathsf_tl\mddefault\updefault + \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g_@@_mathtt_tl\mddefault\updefault + \SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\updefault + \tl_if_empty:NTF \g_@@_bfmathrm_tl + { + \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\itdefault + } + { + \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\mddefault\updefault + \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\bfdefault\updefault + \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\mddefault\itdefault + } + \SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g_@@_mathsf_tl\bfdefault\updefault + \SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g_@@_mathtt_tl\bfdefault\updefault + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_maybe_setup_maths:} +% We're a little less sophisticated about not executing the maths setup if various other maths font packages are loaded. This list is based on the wonderful `\LaTeX Font Catalogue': \url{http://www.tug.dk/FontCatalogue/mathfonts.html}. I'm sure there are more I've missed. Do the \TeX\ Gyre fonts have maths support yet? +% +% Untested: would |\unless\ifnum\Gamma=28672\relax\bool_set_false:N \g_@@_math_bool\fi| be a better test? +% This needs more cooperation with euler and lucida, I think. +% \begin{macrocode} +\cs_new:Nn \fontspec_maybe_setup_maths: + { + \@ifpackageloaded{anttor} + { + \ifx\define@antt@mathversions a\bool_gset_false:N \g_@@_math_bool\fi + }{} + \@ifpackageloaded{arevmath} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{eulervm} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{mathdesign} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{concmath} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{cmbright} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{mathesf} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{gfsartemisia} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{gfsneohellenic} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{iwona} + { + \ifx\define@iwona@mathversions a\bool_set_false:N \g_@@_math_bool\fi + }{} + \@ifpackageloaded{kpfonts}{\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{kmath} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{kurier} + { + \ifx\define@kurier@mathversions a\bool_set_false:N \g_@@_math_bool\fi + }{} + \@ifpackageloaded{fouriernc} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{fourier} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{lmodern} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{mathpazo} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{mathptmx} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{MinionPro} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{unicode-math} {\bool_gset_false:N \g_@@_math_bool}{} + \@ifpackageloaded{breqn} {\bool_gset_false:N \g_@@_math_bool}{} + \bool_if:NT \g_@@_math_bool + { + \@@_info:n {setup-math} + \fontspec_setup_maths: + } + } +\AtBeginDocument{\fontspec_maybe_setup_maths:} +% \end{macrocode} +% \end{macro} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx new file mode 100644 index 00000000000..64aa1b96212 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-msg.dtx @@ -0,0 +1,290 @@ +%%^^A%% fontspec-code-msg.dtx -- part of FONTSPEC +% +% \section{Error/warning/info messages} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% Shorthands for messages: +% \begin{macrocode} +\cs_new:Npn \@@_error:n { \msg_error:nn {fontspec} } +\cs_new:Npn \@@_error:nn { \msg_error:nnn {fontspec} } +\cs_new:Npn \@@_error:nx { \msg_error:nnx {fontspec} } +\cs_new:Npn \@@_warning:n { \msg_warning:nn {fontspec} } +\cs_new:Npn \@@_warning:nx { \msg_warning:nnx {fontspec} } +\cs_new:Npn \@@_warning:nxx { \msg_warning:nnxx {fontspec} } +\cs_new:Npn \@@_info:n { \msg_info:nn {fontspec} } +\cs_new:Npn \@@_info:nx { \msg_info:nnx {fontspec} } +\cs_new:Npn \@@_info:nxx { \msg_info:nnxx {fontspec} } +\cs_new:Npn \@@_trace:n { \msg_trace:nn {fontspec} } +% \end{macrocode} +% +% Allow messages to be written with spaces acting as normal: +% \begin{macrocode} +\cs_generate_variant:Nn \msg_new:nnn {nnx} +\cs_generate_variant:Nn \msg_new:nnnn {nnxx} +\cs_new:Nn \@@_msg_new:nnn + { \msg_new:nnx {#1} {#2} { \tl_trim_spaces:n {#3} } } +\cs_new:Nn \@@_msg_new:nnnn + { \msg_new:nnxx {#1} {#2} { \tl_trim_spaces:n {#3} } { \tl_trim_spaces:n {#4} } } +\char_set_catcode_space:n {32} +% \end{macrocode} +% +% \subsection{Errors} +% +% \begin{macrocode} +\@@_msg_new:nnn {fontspec} {only-inside-encdef} + { + \exp_not:N#1can only be used in the second argument + to \string\DeclareUnicodeEncoding. + } +\@@_msg_new:nnn {fontspec} {no-size-info} + { + Size information must be supplied.\\ + For example, SizeFeatures={Size={8-12},...}. + } +\@@_msg_new:nnnn {fontspec} {font-not-found} + { + The font "#1" cannot be found. + } + { + A font might not be found for many reasons.\\ + Check the spelling, where the font is installed etc. etc.\\\\ + When in doubt, ask someone for help! + } +\@@_msg_new:nnnn {fontspec} {rename-feature-not-exist} + { + The feature #1 doesn't appear to be defined. + } + { + It looks like you're trying to rename a feature that doesn't exist. + } +\@@_msg_new:nnn {fontspec} {no-glyph} + { + '\l_fontspec_fontname_tl' does not contain glyph #1. + } +\@@_msg_new:nnnn {fontspec} {euler-too-late} + { + The euler package must be loaded BEFORE fontspec. + } + { + fontspec only overwrites euler's attempt to + define the maths text fonts if fontspec is + loaded after euler. Type to proceed + with incorrect \string\mathit, \string\mathbf, etc. + } +\@@_msg_new:nnnn {fontspec} {no-xcolor} + { + Cannot load named colours without the xcolor package. + } + { + Sorry, I can't do anything to help. Instead of loading + the color package, use xcolor instead. + } +\@@_msg_new:nnnn {fontspec} {unknown-color-model} + { + Error loading colour `#1'; unknown colour model. + } + { + Sorry, I can't do anything to help. Please report this error + to my developer with a minimal example that causes the problem. + } +\@@_msg_new:nnnn {fontspec} {not-in-addfontfeatures} + { + The "#1" font feature cannot be used in \string\addfontfeatures. + } + { + This is due to how TeX loads fonts; such settings + are global so adding them mid-document within a group causes + confusion. You'll need to define multiple font families to achieve + what you want. + } +% \end{macrocode} +% +% \subsection{Warnings} +% +% \begin{macrocode} +\@@_msg_new:nnn {fontspec} {tu-clash} + { + I have found the tuenc.def encoding definition file but the TU encoding is not + defined by the LaTeX2e kernel; attempting to correct but you really should update + to the latest version of LaTeX2e. + } +\@@_msg_new:nnn {fontspec} {tu-missing} + { + The TU encoding seems to be missing; please update to the latest version of LaTeX2e. + } +\@@_msg_new:nnn {fontspec} {addfontfeatures-ignored} + { + \string\addfontfeature (s) ignored \msg_line_context:; + it cannot be used with a font that wasn't selected by a fontspec command.\\ + \\ + The current font is "\use:c{font@name}".\\ + \int_compare:nTF { \clist_count:n {#1} = 1 } + { The requested feature is "#1". } + { The requested features are "#1". } + } +\@@_msg_new:nnn {fontspec} {feature-option-overwrite} + { + Option '#2' of font feature '#1' overwritten. + } +\@@_msg_new:nnn {fontspec} {ot-tag-too-long} + { + OpenType tag '#1' is too long; script, language, and feature tags must be four characters or fewer. + } +\@@_msg_new:nnn {fontspec} {script-not-exist-latn} + { + Font '\l_fontspec_fontname_tl' does not contain script '#1'.\\ + 'Latin' script used instead. + } +\@@_msg_new:nnn {fontspec} {script-not-exist} + { + Font '\l_fontspec_fontname_tl' does not contain script '#1'. + } +\@@_msg_new:nnn {fontspec} {aat-feature-not-exist} + { + '\l_keys_key_tl=\l_keys_value_tl' feature not supported + for AAT font '\l_fontspec_fontname_tl'. + } +\@@_msg_new:nnn {fontspec} {aat-feature-not-exist-in-font} + { + AAT feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available + in font '\l_fontspec_fontname_tl'. + } +\@@_msg_new:nnn {fontspec} {icu-feature-not-exist} + { + '\l_keys_key_tl=\l_keys_value_tl' feature not supported + for OpenType font '\l_fontspec_fontname_tl' + } +\@@_msg_new:nnn {fontspec} {icu-feature-not-exist-in-font} + { + OpenType feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available + for font '\l_fontspec_fontname_tl' + with script '\l_@@_script_name_tl' and language '\l_@@_lang_name_tl'. + } +\@@_msg_new:nnn {fontspec} {no-opticals} + { + '\l_fontspec_fontname_tl' doesn't appear to have an Optical Size axis. + } +\@@_msg_new:nnn {fontspec} {language-not-exist} + { + Language '#1' not available + for font '\l_fontspec_fontname_tl' + with script '\l_@@_script_name_tl'.\\ + 'Default' language used instead. + } +\@@_msg_new:nnn {fontspec} {only-xetex-feature} + { + Ignored XeTeX only feature: '#1'. + } +\@@_msg_new:nnn {fontspec} {only-luatex-feature} + { + Ignored LuaTeX only feature: '#1'. + } +\@@_msg_new:nnn {fontspec} {no-mapping} + { + Input mapping not (yet?) supported in LuaTeX. + } +\@@_msg_new:nnn {fontspec} {no-mapping-ligtex} + { + Input mapping not (yet?) supported in LuaTeX.\\ + Use "Ligatures=TeX" instead of "Mapping=tex-text". + } +\@@_msg_new:nnn {fontspec} {cm-default-obsolete} + { + The "cm-default" package option is obsolete. + } +\@@_msg_new:nnn {fontspec} {fakebold-only-xetex} + { + The "FakeBold" and "AutoFakeBold" options are only available with XeLaTeX.\\ + Option ignored. + } +\@@_msg_new:nnn {fontspec} {font-index-needs-ttc} + { + The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\ + Feature ignored. + } +\@@_msg_new:nnn {fontspec} {feat-cannot-remove} + { + The "#1" feature cannot be deactivated. Request ignored. + } +% \end{macrocode} +% +% \subsection{Info messages} +% +% \begin{macrocode} +\@@_msg_new:nnn {fontspec} {defining-font} + { + Font family '\g_@@_nfss_family_tl' created for font '#2' + with options [\l_@@_all_features_clist].\\ + \\ + This font family consists of the following NFSS series/shapes:\\ + \g_@@_defined_shapes_tl + } +\@@_msg_new:nnn {fontspec} {no-font-shape} + { + Could not resolve font "#1" (it probably doesn't exist). + } +\@@_msg_new:nnn {fontspec} {set-scale} + { + \l_fontspec_fontname_tl\space scale = \l_@@_scale_tl. + } +\@@_msg_new:nnn {fontspec} {setup-math} + { + Adjusting the maths setup (use [no-math] to avoid this). + } +\@@_msg_new:nnn {fontspec} {no-scripts} + { + Font "\l_fontspec_fontname_tl" does not contain any OpenType `Script' information. + } +\@@_msg_new:nnn {fontspec} {opa-twice} + { + Opacity set twice, in both Colour and Opacity.\\ + Using specification "Opacity=#1". + } +\@@_msg_new:nnn {fontspec} {opa-twice-col} + { + Opacity set twice, in both Opacity and Colour.\\ + Using an opacity specification in hex of "#1/FF". + } +\@@_msg_new:nnn {fontspec} {bad-colour} + { + Bad colour declaration "#1". + Colour must be one of:\\ + * a named xcolor colour\\ + * a six-digit hex colour RRGGBB\\ + * an eight-digit hex colour RRGGBBTT with opacity + } +% \end{macrocode} +% +% Reset `space' behaviour: +% \begin{macrocode} +\char_set_catcode_ignore:n {32} +% \end{macrocode} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-opening.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-opening.dtx new file mode 100644 index 00000000000..b067c2ff7bd --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-opening.dtx @@ -0,0 +1,195 @@ +%%^^A%% fontspec-code-opening.dtx -- part of FONTSPEC +% +% \section{Opening code} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% \subsection{Package options} +% +% \begin{macrocode} +\DeclareOption{cm-default} + { + \@@_warning:n {cm-default-obsolete} + } +% \end{macrocode} +% +% \begin{macrocode} +\DeclareOption {math} { \bool_gset_true:N \g_@@_math_bool } +\DeclareOption {no-math} { \bool_gset_false:N \g_@@_math_bool } +\DeclareOption {config} { \bool_gset_true:N \g_@@_cfg_bool } +\DeclareOption {no-config}{ \bool_gset_false:N \g_@@_cfg_bool } +\DeclareOption {euenc} { \bool_gset_true:N \g_@@_euenc_bool } +\DeclareOption {tuenc} { \bool_gset_false:N \g_@@_euenc_bool } +% \end{macrocode} +% +% \begin{macrocode} +\DeclareOption {quiet} + { + \msg_redirect_module:nnn { fontspec } { warning } { info } + \msg_redirect_module:nnn { fontspec } { info } { none } + } +\DeclareOption{silent} + { + \msg_redirect_module:nnn { fontspec } { warning } { none } + \msg_redirect_module:nnn { fontspec } { info } { none } + } +% \end{macrocode} +% +% \begin{macrocode} +\ExecuteOptions{config,math,tuenc} +\ProcessOptions* +% \end{macrocode} +% +% +% +% +% \subsection{Encodings} +% +% Soon to be the default, with a just-in-case check: +% \begin{macrocode} +\bool_if:NF \g_@@_euenc_bool + { + \file_if_exist:nTF {tuenc.def} + { + \cs_if_exist:cF {T@TU} + { + \@@_warning:n {tu-clash} + \DeclareFontEncoding{TU}{}{} + \DeclareFontSubstitution{TU}{lmr}{m}{n} + } + } + { + \@@_warning:n {tu-missing} + \bool_gset_true:N \g_@@_euenc_bool + } + } +\bool_if:NTF \g_@@_euenc_bool + { +% \tl_gset:Nn \g_fontspec_encoding_tl {EU1} +% \tl_gset:Nn \g_fontspec_encoding_tl {EU2} + } + { \tl_gset:Nn \g_fontspec_encoding_tl { TU } } +% \end{macrocode} +% +% \begin{macrocode} +\tl_set:Nn \rmdefault {lmr} +\tl_set:Nn \sfdefault {lmss} +\tl_set:Nn \ttdefault {lmtt} +\RequirePackage[\g_fontspec_encoding_tl]{fontenc} +\tl_set_eq:NN \UTFencname \g_fontspec_encoding_tl % for xunicode if needed +% \end{macrocode} +% To overcome the encoding changing the current font size, but only if a class has been loaded first: +% \begin{macrocode} +\tl_if_in:NnT \@filelist {.cls} { \normalsize } +% \end{macrocode} +% Dealing with a couple of the problems introduced by \pkg{babel}: +% \begin{macrocode} +\tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl +\tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl +\AtBeginDocument + { + \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl + \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl + } +% \end{macrocode} +% That latin encoding definition is repeated to suppress font warnings. +% Something to do with \cmd\select@language\ ending up in the \texttt{.aux} +% file which is read at the beginning of the document. +% +% \begin{macrocode} +\bool_if:NT \g_@@_euenc_bool + { +% \cs_set_eq:NN \fontspec_tmp: \XeTeXpicfile +% \cs_set:Npn \XeTeXpicfile {} + \RequirePackage{xunicode} +% \cs_set_eq:NN \XeTeXpicfile \fontspec_tmp: + } +% \end{macrocode} +% +% +% \subsection{Generic functions} +% +% \begin{macro}{\FontspecSetCheckBoolTrue} +% \begin{macro}{\FontspecSetCheckBoolFalse} +% These strange set functions are to simplify returning code from LuaTeX: +% \begin{macrocode} +\cs_new:Npn \FontspecSetCheckBoolTrue { \bool_set_true:N \l_@@_check_bool } +\cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l_@@_check_bool } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_keys_set_known:nnN} +% \begin{macrocode} +\cs_new:Nn \@@_keys_set_known:nnN + { +% \typeout{:::: Keys~set:~{#1}~{#2} } + \keys_set_known:nnN {#1} {#2} #3 +% \typeout{:::: Leftover:~{#3} } + } +\cs_generate_variant:Nn \@@_keys_set_known:nnN {nx} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_int_mult_truncate:Nn} +% Missing in expl3, IMO. +% \begin{macrocode} +\cs_new:Nn \@@_int_mult_truncate:Nn + { + \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: } + } +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{\pkg{expl3} variants} +% +% \begin{macrocode} +\cs_generate_variant:Nn \int_set:Nn {Nv} +\cs_generate_variant:Nn \keys_set:nn {nx} +\cs_generate_variant:Nn \keys_set_known:nnN {nx} +\cs_generate_variant:Nn \prop_put:Nnn {Nxx} +\cs_generate_variant:Nn \prop_put:Nnn {NxV} +\cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV} +\cs_generate_variant:Nn \prop_gput:Nnn {Nxn} +\cs_generate_variant:Nn \prop_get:NnNT {NxN} +\cs_generate_variant:Nn \prop_get:NnNTF {NxN} +\cs_generate_variant:Nn \str_if_eq:nnTF {nv} +\cs_generate_variant:Nn \tl_if_empty:nTF {x} +\cs_generate_variant:Nn \tl_if_empty:nF {x} +\cs_generate_variant:Nn \tl_if_empty:nF {f} +\cs_generate_variant:Nn \tl_if_eq:nnT {ox} +\cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx} +% \end{macrocode} +% +% +% +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx new file mode 100644 index 00000000000..e7820d14dfb --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-opentype.dtx @@ -0,0 +1,464 @@ +%%^^A%% fontspec-code-opentype.dtx -- part of FONTSPEC + +% \section{OpenType definitions code} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% +% +% \begin{macro}{\@@_define_opentype_feature_group:n} +% \begin{macrocode} +\cs_new:Nn \@@_define_opentype_feature_group:n + { + \keys_define:nn {fontspec-opentype} { #1 .multichoice: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_define_opentype_feature:nnnnn} +% \darg{Feature key} +% \darg{Feature option val} +% \darg{Check feature --- leave empty for no check} +% \darg{Exact tag string to activate --- leave empty for disable only} +% \darg{Tags to remove (clist)} +% \begin{macrocode} +\cs_new:Nn \@@_feat_prop_add:nn + { + \tl_if_empty:nF {#1} + { + \prop_if_in:NnF \g_@@_OT_features_prop {#1} + { + \prop_gput:Nnn \g_@@_OT_features_prop {#1} {#2} + } + } + } +\cs_new:Nn \@@_define_opentype_feature:nnnnn + { + \@@_feat_prop_add:nn {#3} {#1\,=\,#2} + \tl_if_empty:nTF {#4} + { + \keys_define:nn {fontspec-opentype} + { + #1/#2 .code:n = + { \@@_remove_clashing_featstr:n {#5} } + } + } + { + \keys_define:nn {fontspec-opentype} + { + #1/#2 .code:n = + { +% \typeout{::::::::fontspec-opentype~#1/#2~=~#3/#4/#5} + \@@_make_OT_feature:nnn {#3} {#4} {#5} + } + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_define_opentype_onoffreset:nnnnn} +% \darg{Feature key} +% \darg{Feature option val} +% \darg{Check feature} +% \darg{Tag prefix to activate: \texttt{+\#4} = on, \texttt{-\#4} = off.} +% \darg{Tags to remove in the on case (clist)} +% \begin{macrocode} +\cs_new:Nn \@@_feat_off:n {#1Off} +\cs_new:Nn \@@_feat_reset:n {#1Reset} +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \@@_define_opentype_onoffreset:nnnnn + { + \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5} + \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_off:n {#2} } {#3} {-#4} {} + \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_reset:n {#2} } {} {} {+#4,-#4} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_define_opentype_onreset:nnnnn} +% \darg{Feature key} +% \darg{Feature option val} +% \darg{Check feature} +% \darg{Exact tag string to activate} +% \darg{Tags to remove (clist)} +% \begin{macrocode} +\cs_new:Nn \@@_define_opentype_onreset:nnnnn + { + \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5} + \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_reset:n {#2} } {} {} {#4} + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Adding features when loading fonts} +% +% When remove clashing features, +% \begin{enumerate} +% \item remove the feature being added (to avoid duplicates); +% \item remove the inverse of the feature (to avoid cancellation); +% \item finally remove all clashing features. +% \end{enumerate} +% \begin{macrocode} +\cs_new:Nn \@@_make_OT_feature:nnn + { +% \typeout{:: @@_make_OT_feature:nnn \exp_not:n { {#1}{#2}{#3} } } + + \bool_set_true:N \l_@@_proceed_bool + \bool_set_true:N \l_@@_check_feat_bool + + \tl_if_empty:nT {#1} { \bool_set_false:N \l_@@_check_feat_bool } + \bool_if:NT \l_@@_check_feat_bool + { + \@@_check_ot_feat:NnF \l_fontspec_font {#1} + { + \@@_warning:nx {icu-feature-not-exist-in-font} {#1} + \bool_set_false:N \l_@@_proceed_bool + } + } + + \bool_if:NT \l_@@_proceed_bool + { + \exp_args:Nx \@@_remove_clashing_featstr:n + { #2 , \@@_swap_plus_minus:n {#2} , #3 } + + \@@_update_featstr:n {#2} + } + } +\cs_generate_variant:Nn \@@_make_OT_feature:nnn {xxx} +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \@@_swap_plus_minus:n { \@@_swap_plus_minus_aux:Nq #1 \q_nil } +\cs_new:Npn \@@_swap_plus_minus_aux:Nq #1#2 \q_nil + { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_check_script:NnTF} +% This macro takes an OpenType script tag and checks if it exists in the current +% font. \cmd\l_@@_script_int\ is used to store +% the number corresponding to the script tag string. +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_check_script:Nn {TF} + { + \bool_if:NTF \l_@@_never_check_bool + { \prg_return_true: } +%<*XE> + { + \@@_iv_str_to_num:Nx \l_@@_strnum_int {#2} + \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts #1 } + \int_zero:N \l_tmpa_int + \bool_set_false:N \l__fontspec_check_bool + \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } + { + \ifnum \XeTeXOTscripttag #1 \l_tmpa_int = \l_@@_strnum_int + \bool_set_true:N \l__fontspec_check_bool + \int_set:Nn \l_tmpa_int {\l_tmpb_int} + \else + \int_incr:N \l_tmpa_int + \fi + } + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + } +% +%<*LU> + { + \@@_ot_validate_tag:x {#2} + \cs_if_eq:NNTF #1 \font + { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} } + { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} } + \directlua{fontspec.check_ot_script("\l_@@_tmp_tl", "#2")} + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + } +% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_check_lang:NnnTF} +% \begin{macro}{\@@_check_lang:NnTF} +% This macro takes an OpenType language tag and checks if it exists in the current +% font/script. \cmd\l_@@_language_int\ is used to store +% the number corresponding to the language tag string. +% The script used is whatever's held in \cmd\l_@@_script_int. By default, that's the +% number corresponding to `|latn|'. +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_check_lang:Nn {TF} + { + \@@_check_lang:NnnTF #1 {#2} {\l_fontspec_script_tl} {\prg_return_true:} {\prg_return_false:} + } +% \end{macrocode} +% +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_check_lang:Nnn {TF} + { + \bool_if:NTF \l_@@_never_check_bool + { \prg_return_true: } +%<*XE> + { + \@@_iv_str_to_num:Nx \l_@@_strnum_int {#2} + \@@_iv_str_to_num:Nx \l_@@_script_int {#3} + \int_set:Nn \l_tmpb_int + { \XeTeXOTcountlanguages #1 \l_@@_script_int } + \int_zero:N \l_tmpa_int + \bool_set_false:N \l__fontspec_check_bool + \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } + { + \ifnum\XeTeXOTlanguagetag #1 \l_@@_script_int \l_tmpa_int = \l_@@_strnum_int + \bool_set_true:N \l__fontspec_check_bool + \int_set:Nn \l_tmpa_int {\l_tmpb_int} + \else + \int_incr:N \l_tmpa_int + \fi + } + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + } +% +%<*LU> + { + \@@_ot_validate_tag:x {#2} + \@@_ot_validate_tag:x {#3} + \cs_if_eq:NNTF #1 \font + { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} } + { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} } + \directlua + { + fontspec.check_ot_lang( "\l_@@_tmp_tl", "#2", "#3" ) + } + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + } +% + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_check_ot_feat:NnTF} +% \begin{macro}{\@@_check_ot_feat:NnnnTF} +% This macro takes an OpenType feature tag and checks if it exists in the current +% font/script/language. +% \cmd\l_@@_strnum_int\ is used to store the number corresponding to the feature tag string. +% The script used is whatever's held in \cmd\l_@@_script_int. By default, that's the +% number corresponding to `|latn|'. The language used is \cmd\l_@@_language_int, +% by default |0|, the `default language'. +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_check_ot_feat:Nn {TF,F} + { + \@@_check_ot_feat:NnnnTF #1 {#2} {\l_fontspec_lang_tl} {\l_fontspec_script_tl} + {\prg_return_true:} {\prg_return_false:} + } +% \end{macrocode} +% +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_check_ot_feat:Nnnn {TF,F} + { + \bool_if:NTF \l_@@_never_check_bool + { \prg_return_true: } +%<*XE> + { +%\typeout{::~ fontspec_check_ot_feat:nnn~ {#2}{#3}{#4}} + \@@_iv_str_to_num:Nx \l_@@_strnum_int {#2} + \@@_iv_str_to_num:Nx \l_@@_language_int {#3} + \@@_iv_str_to_num:Nx \l_@@_script_int {#4} + \int_set:Nn \l_tmpb_int + { + \XeTeXOTcountfeatures #1 + \l_@@_script_int + \l_@@_language_int + } + \int_zero:N \l_tmpa_int + \bool_set_false:N \l_@@_check_bool + \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } + { + \ifnum\XeTeXOTfeaturetag #1 \l_@@_script_int \l_@@_language_int + \l_tmpa_int =\l_@@_strnum_int + \bool_set_true:N \l_@@_check_bool + \int_set:Nn \l_tmpa_int {\l_tmpb_int} + \else + \int_incr:N \l_tmpa_int + \fi + } + \bool_if:NTF \l_@@_check_bool \prg_return_true: \prg_return_false: + } +% +%<*LU> + { +%\typeout{::~ fontspec_check_ot_feat:n~ {#1}} + \@@_ot_validate_tag:x {#2} + \@@_ot_validate_tag:x {#3} + \@@_ot_validate_tag:x {#4} + \cs_if_eq:NNTF #1 \font + { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} } + { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} } + \directlua + { + fontspec.check_ot_feat("\l_@@_tmp_tl", "#2", "#3", "#4") + } + \bool_if:NTF \l_@@_check_bool \prg_return_true: \prg_return_false: + } +% + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{OpenType feature information} +% +% \begin{macrocode} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {aalt}{Access~All~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvf}{Above-base~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvm}{Above-base~Mark~Positioning} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvs}{Above-base~Substitutions} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {afrc}{Alternative~Fractions} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {akhn}{Akhands} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blwf}{Below-base~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blwm}{Below-base~Mark~Positioning} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blws}{Below-base~Substitutions} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {calt}{Contextual~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {case}{Case-Sensitive~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ccmp}{Glyph~Composition~/~Decomposition} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cfar}{Conjunct~Form~After~Ro} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cjct}{Conjunct~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {clig}{Contextual~Ligatures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cpct}{Centered~CJK~Punctuation} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cpsp}{Capital~Spacing} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cswh}{Contextual~Swash} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {curs}{Cursive~Positioning} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cvNN}{Character~Variant~$N$} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {c2pc}{Petite~Capitals~From~Capitals} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {c2sc}{Small~Capitals~From~Capitals} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dist}{Distances} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dlig}{Discretionary~Ligatures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dnom}{Denominators} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dtls}{Dotless~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {expt}{Expert~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {falt}{Final~Glyph~on~Line~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fin2}{Terminal~Forms~\#2} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fin3}{Terminal~Forms~\#3} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fina}{Terminal~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {flac}{Flattened~accent~forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {frac}{Fractions} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fwid}{Full~Widths} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {half}{Half~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {haln}{Halant~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {halt}{Alternate~Half~Widths} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hist}{Historical~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hkna}{Horizontal~Kana~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hlig}{Historical~Ligatures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hngl}{Hangul} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hojo}{Hojo~Kanji~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hwid}{Half~Widths} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {init}{Initial~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {isol}{Isolated~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ital}{Italics} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jalt}{Justification~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp78}{JIS78~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp83}{JIS83~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp90}{JIS90~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp04}{JIS2004~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {kern}{Kerning} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {lfbd}{Left~Bounds} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {liga}{Standard~Ligatures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ljmo}{Leading~Jamo~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {lnum}{Lining~Figures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {locl}{Localized~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ltra}{Left-to-right~alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ltrm}{Left-to-right~mirrored~forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mark}{Mark~Positioning} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {med2}{Medial~Forms~\#2} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {medi}{Medial~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mgrk}{Mathematical~Greek} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mkmk}{Mark~to~Mark~Positioning} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mset}{Mark~Positioning~via~Substitution} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nalt}{Alternate~Annotation~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nlck}{NLC~Kanji~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nukt}{Nukta~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {numr}{Numerators} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {onum}{Oldstyle~Figures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {opbd}{Optical~Bounds} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ordn}{Ordinals} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ornm}{Ornaments} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {palt}{Proportional~Alternate~Widths} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pcap}{Petite~Capitals} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pkna}{Proportional~Kana} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pnum}{Proportional~Figures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pref}{Pre-Base~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pres}{Pre-base~Substitutions} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pstf}{Post-base~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {psts}{Post-base~Substitutions} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pwid}{Proportional~Widths} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {qwid}{Quarter~Widths} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rand}{Randomize} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rclt}{Required~Contextual~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rkrf}{Rakar~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rlig}{Required~Ligatures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rphf}{Reph~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtbd}{Right~Bounds} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtla}{Right-to-left~alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtlm}{Right-to-left~mirrored~forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ruby}{Ruby~Notation~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rvrn}{Required~Variation~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {salt}{Stylistic~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {sinf}{Scientific~Inferiors} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {size}{Optical~size} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {smcp}{Small~Capitals} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {smpl}{Simplified~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ssNN}{Stylistic~Set~$N$} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ssty}{Math~script~style~alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {stch}{Stretching~Glyph~Decomposition} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {subs}{Subscript} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {sups}{Superscript} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {swsh}{Swash} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {titl}{Titling} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tjmo}{Trailing~Jamo~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tnam}{Traditional~Name~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tnum}{Tabular~Figures} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {trad}{Traditional~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {twid}{Third~Widths} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {unic}{Unicase} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {valt}{Alternate~Vertical~Metrics} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vatu}{Vattu~Variants} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vert}{Vertical~Writing} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vhal}{Alternate~Vertical~Half~Metrics} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vjmo}{Vowel~Jamo~Forms} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vkna}{Vertical~Kana~Alternates} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vkrn}{Vertical~Kerning} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vpal}{Proportional~Alternate~Vertical~Metrics} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vrt2}{Vertical~Alternates~and~Rotation} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation} +\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {zero}{Slashed~Zero} +% \end{macrocode} +% TODO: move the above elsewhere!! +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-patches.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-patches.dtx new file mode 100644 index 00000000000..2df1d18f3fe --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-patches.dtx @@ -0,0 +1,209 @@ +%%^^A%% fontspec-code-patches.dtx -- part of FONTSPEC + +% \section{Patching code} +% +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% +% \subsection{\cmd\-} +% +% \begin{macro}{\-} +% This macro is courtesy of Frank Mittelbach and the \LaTeXe\ source code. +% \begin{macrocode} +\DeclareRobustCommand{\-} + { + \discretionary + { + \char\ifnum\hyphenchar\font<\z@ + \xlx@defaulthyphenchar + \else + \hyphenchar\font + \fi + }{}{} + } +\def\xlx@defaulthyphenchar{`\-} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Verbatims} +% +% Many thanks to Apostolos Syropoulos for discovering this problem and writing the redefinion of \LaTeX's |verbatim| environment and \cs{verb*} command. +% +% \begin{macro}{\fontspec_visible_space:} +% Print \unichar{2423}{Open box}, which is used to visibly display a space character. +% \begin{macrocode} +\cs_new:Nn \fontspec_visible_space: + { + \@@_primitive_font_glyph_if_exist:NnTF \font {"2423} + { \char"2423\scan_stop: } + { \fontspec_visible_space_fallback: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_visible_space_fallback:} +% If the current font doesn't have \unichar{2423}{Open box}, use Latin Modern Mono instead. +% \begin{macrocode} +\cs_new:Nn \fontspec_visible_space_fallback: + { + { + \usefont{\g_fontspec_encoding_tl}{lmtt}{\f@series}{\f@shape} + \textvisiblespace + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontspec_print_visible_spaces:} +% Helper macro to turn spaces (\verb|^^20|) active and print visible space instead. +% \begin{macrocode} +\group_begin: +\char_set_catcode_active:n{"20}% +\cs_gset:Npn\fontspec_print_visible_spaces:{% +\char_set_catcode_active:n{"20}% +\cs_set_eq:NN^^20\fontspec_visible_space:% +}% +\group_end: +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verb} +% \begin{macro}{\verb*} +% Redefine \cmd\verb\ to use \cmd\fontspec_print_visible_spaces:. +% \begin{macrocode} +\def\verb + { + \relax\ifmmode\hbox\else\leavevmode\null\fi + \bgroup + \verb@eol@error \let\do\@makeother \dospecials + \verbatim@font\@noligs + \@ifstar\@@sverb\@verb + } +\def\@@sverb{\fontspec_print_visible_spaces:\@sverb} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% It's better to put small things into \cmd\AtBeginDocument, so here we go: +% \begin{macrocode} +\AtBeginDocument + { + \fontspec_patch_verbatim: + \fontspec_patch_moreverb: + \fontspec_patch_fancyvrb: + \fontspec_patch_listings: + } +% \end{macrocode} +% +% \begin{environment}{verbatim*} +% With the \pkg{verbatim} package. +% \begin{macrocode} +\cs_set:Npn \fontspec_patch_verbatim: + { + \@ifpackageloaded{verbatim} + { + \cs_set:cpn {verbatim*} + { + \group_begin: \@verbatim \fontspec_print_visible_spaces: \verbatim@start + } + } +% \end{macrocode} +% This is for vanilla \LaTeX. +% \begin{macrocode} + { + \cs_set:cpn {verbatim*} + { + \@verbatim \fontspec_print_visible_spaces: \@sxverbatim + } + } + } +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{listingcont*} +% This is for \pkg{moreverb}. +% The main |listing*| environment inherits this definition. +% \begin{macrocode} +\cs_set:Npn \fontspec_patch_moreverb: + { + \@ifpackageloaded{moreverb} + { + \cs_set:cpn {listingcont*} + { + \cs_set:Npn \verbatim@processline + { + \thelisting@line \global\advance\listing@line1\relax + \the\verbatim@line\par + } + \@verbatim \fontspec_print_visible_spaces: \verbatim@start + } + }{} + } +% \end{macrocode} +% \end{environment} +% +% \pkg{listings} and \pkg{fancvrb} make things nice and easy: +% \begin{macrocode} +\cs_set:Npn \fontspec_patch_fancyvrb: + { + \@ifpackageloaded{fancyvrb} + { + \cs_set_eq:NN \FancyVerbSpace \fontspec_visible_space: + }{} + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_set:Npn \fontspec_patch_listings: + { + \@ifpackageloaded{listings} + { + \cs_set_eq:NN \lst@visiblespace \fontspec_visible_space: + }{} + } +% \end{macrocode} +% +% \subsection{\cs{oldstylenums}} +% +% +% \begin{macro}{\oldstylenums} +% \begin{macro}{\liningnums} +% This command obviously needs a redefinition. +% And we may as well provide the reverse command. +% \begin{macrocode} +\RenewDocumentCommand \oldstylenums {m} + { + { \addfontfeature{Numbers=OldStyle} #1 } + } +\NewDocumentCommand \liningnums {m} + { + { \addfontfeature{Numbers=Lining} #1 } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macrocode} +% +% \end{macrocode} + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-scripts.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-scripts.dtx new file mode 100644 index 00000000000..57d32e5c485 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-scripts.dtx @@ -0,0 +1,183 @@ +%%^^A%% fontspec-code-scripts.dtx -- part of FONTSPEC + +% \section{Font script definitions} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% \begin{macrocode} +\newfontscript{Adlam}{adlm} +\newfontscript{Ahom}{ahom} +\newfontscript{Anatolian~Hieroglyphs}{hluw} +\newfontscript{Arabic}{arab} +\newfontscript{Armenian}{armn} +\newfontscript{Avestan}{avst} +\newfontscript{Balinese}{bali} +\newfontscript{Bamum}{bamu} +\newfontscript{Bassa~Vah}{bass} +\newfontscript{Batak}{batk} +\newfontscript{Bengali}{bng2,beng} +\newfontscript{Bhaiksuki}{bhks} +\newfontscript{Bopomofo}{bopo} +\newfontscript{Brahmi}{brah} +\newfontscript{Braille}{brai} +\newfontscript{Buginese}{bugi} +\newfontscript{Buhid}{buhd} +\newfontscript{Byzantine~Music}{byzm} +\newfontscript{Canadian~Syllabics}{cans} +\newfontscript{Carian}{cari} +\newfontscript{Caucasian~Albanian}{aghb} +\newfontscript{Chakma}{cakm} +\newfontscript{Cham}{cham} +\newfontscript{Cherokee}{cher} +\newfontscript{CJK~Ideographic}{hani} +\newfontscript{Coptic}{copt} +\newfontscript{Cypriot~Syllabary}{cprt} +\newfontscript{Cyrillic}{cyrl} +\newfontscript{Default}{DFLT} +\newfontscript{Deseret}{dsrt} +\newfontscript{Devanagari}{dev2,deva} +\newfontscript{Duployan}{dupl} +\newfontscript{Egyptian~Hieroglyphs}{egyp} +\newfontscript{Elbasan}{elba} +\newfontscript{Ethiopic}{ethi} +\newfontscript{Georgian}{geor} +\newfontscript{Glagolitic}{glag} +\newfontscript{Gothic}{goth} +\newfontscript{Grantha}{gran} +\newfontscript{Greek}{grek} +\newfontscript{Gujarati}{gjr2,gujr} +\newfontscript{Gurmukhi}{gur2,guru} +\newfontscript{Hangul~Jamo}{jamo} +\newfontscript{Hangul}{hang} +\newfontscript{Hanunoo}{hano} +\newfontscript{Hatran}{hatr} +\newfontscript{Hebrew}{hebr} +\newfontscript{Hiragana~and~Katakana}{kana} +\newfontscript{Imperial~Aramaic}{armi} +\newfontscript{Inscriptional~Pahlavi}{phli} +\newfontscript{Inscriptional~Parthian}{prti} +\newfontscript{Javanese}{java} +\newfontscript{Kaithi}{kthi} +\newfontscript{Kannada}{knd2,knda} +\newfontscript{Kayah~Li}{kali} +\newfontscript{Kharosthi}{khar} +\newfontscript{Khmer}{khmr} +\newfontscript{Khojki}{khoj} +\newfontscript{Khudawadi}{sind} +\newfontscript{Lao}{lao~} +\newfontscript{Latin}{latn} +\newfontscript{Lepcha}{lepc} +\newfontscript{Limbu}{limb} +\newfontscript{Linear~A}{lina} +\newfontscript{Linear~B}{linb} +\newfontscript{Lisu}{lisu} +\newfontscript{Lycian}{lyci} +\newfontscript{Lydian}{lydi} +\newfontscript{Mahajani}{mahj} +\newfontscript{Malayalam}{mlm2,mlym} +\newfontscript{Mandaic}{mand} +\newfontscript{Manichaean}{mani} +\newfontscript{Marchen}{marc} +\newfontscript{Math}{math} +\newfontscript{Meitei~Mayek}{mtei} +\newfontscript{Mende~Kikakui}{mend} +\newfontscript{Meroitic~Cursive}{merc} +\newfontscript{Meroitic~Hieroglyphs}{mero} +\newfontscript{Miao}{plrd} +\newfontscript{Modi}{modi} +\newfontscript{Mongolian}{mong} +\newfontscript{Mro}{mroo} +\newfontscript{Multani}{mult} +\newfontscript{Musical~Symbols}{musc} +\newfontscript{Myanmar}{mym2,mymr} +\newfontscript{N'Ko}{nko~} +\newfontscript{Nabataean}{nbat} +\newfontscript{Newa}{newa} +\newfontscript{Odia}{ory2,orya} +\newfontscript{Ogham}{ogam} +\newfontscript{Ol~Chiki}{olck} +\newfontscript{Old~Italic}{ital} +\newfontscript{Old~Hungarian}{hung} +\newfontscript{Old~North~Arabian}{narb} +\newfontscript{Old~Permic}{perm} +\newfontscript{Old~Persian~Cuneiform}{xpeo} +\newfontscript{Old~South~Arabian}{sarb} +\newfontscript{Old~Turkic}{orkh} +\newfontscript{Osage}{osge} +\newfontscript{Osmanya}{osma} +\newfontscript{Pahawh~Hmong}{hmng} +\newfontscript{Palmyrene}{palm} +\newfontscript{Pau~Cin~Hau}{pauc} +\newfontscript{Phags-pa}{phag} +\newfontscript{Phoenician}{phnx} +\newfontscript{Psalter~Pahlavi}{phlp} +\newfontscript{Rejang}{rjng} +\newfontscript{Runic}{runr} +\newfontscript{Samaritan}{samr} +\newfontscript{Saurashtra}{saur} +\newfontscript{Sharada}{shrd} +\newfontscript{Shavian}{shaw} +\newfontscript{Siddham}{sidd} +\newfontscript{Sign~Writing}{sgnw} +\newfontscript{Sinhala}{sinh} +\newfontscript{Sora~Sompeng}{sora} +\newfontscript{Sumero-Akkadian~Cuneiform}{xsux} +\newfontscript{Sundanese}{sund} +\newfontscript{Syloti~Nagri}{sylo} +\newfontscript{Syriac}{syrc} +\newfontscript{Tagalog}{tglg} +\newfontscript{Tagbanwa}{tagb} +\newfontscript{Tai~Le}{tale} +\newfontscript{Tai~Lu}{talu} +\newfontscript{Tai~Tham}{lana} +\newfontscript{Tai~Viet}{tavt} +\newfontscript{Takri}{takr} +\newfontscript{Tamil}{tml2,taml} +\newfontscript{Tangut}{tang} +\newfontscript{Telugu}{tel2,telu} +\newfontscript{Thaana}{thaa} +\newfontscript{Thai}{thai} +\newfontscript{Tibetan}{tibt} +\newfontscript{Tifinagh}{tfng} +\newfontscript{Tirhuta}{tirh} +\newfontscript{Ugaritic~Cuneiform}{ugar} +\newfontscript{Vai}{vai~} +\newfontscript{Warang~Citi}{wara} +\newfontscript{Yi}{yi~~} +% \end{macrocode} +% For convenience or backwards compatibility: +% \begin{macrocode} +\newfontscript{CJK}{hani} +\newfontscript{Kana}{kana} +\newfontscript{Maths}{math} +\newfontscript{N'ko}{nko~} +\newfontscript{Oriya}{ory2,orya} +% \end{macrocode} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-user.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-user.dtx new file mode 100644 index 00000000000..b17020e5f8c --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-user.dtx @@ -0,0 +1,509 @@ +%%^^A%% fontspec-code-user.dtx -- part of FONTSPEC + +% \section{User command internals} +% \label{sec:codeinternal} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% +% \subsection{Font selection} +% +% \begin{macro}{\@@_main_fontspec:nn} +% This is the main command of the package that +% selects fonts with various features. It takes two arguments: the +% font name and the optional requested features of that +% font. +% \begin{macrocode} +\cs_new:Nn \@@_main_fontspec:nn + { + \fontspec_set_family:Nnn \f@family {#1} {#2} + \fontencoding { \g_@@_nfss_enc_tl } + \selectfont + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setmainfont} +% The following three macros perform equivalent operations setting +% the default font for a particular family: `roman', sans serif, or typewriter +% (monospaced). +% +% They end with |\normalfont| so that if they're +% used in the document, the change registers immediately. +% \begin{macrocode} +\cs_new:Nn \@@_main_setmainfont:nn + { + \fontspec_set_family:Nnn \l_@@_rmfamily_family_tl {#1} {#2} + \tl_set_eq:NN \rmdefault \l_@@_rmfamily_family_tl + \use:x + { + \exp_not:n { \DeclareRobustCommand \rmfamily } + { + \exp_not:N \fontencoding { \g_@@_nfss_enc_tl } + \exp_not:N \fontfamily { \l_@@_rmfamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\rmdefault} + { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl } + \@@_setmainfont_hook:nn {#1} {#2} + \normalfont + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setsansfont} +% Same as above. +% \begin{macrocode} +\cs_new:Nn \@@_main_setsansfont:nn + { + \fontspec_set_family:Nnn \l_@@_sffamily_family_tl {#1} {#2} + \tl_set_eq:NN \sfdefault \l_@@_sffamily_family_tl + \use:x + { + \exp_not:n { \DeclareRobustCommand \sffamily } + { + \exp_not:N \fontencoding { \g_@@_nfss_enc_tl } + \exp_not:N \fontfamily { \l_@@_sffamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\sfdefault} + { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl } + \@@_setsansfont_hook:nn {#1} {#2} + \normalfont + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setmonofont} +% Same as above. +% \begin{macrocode} +\cs_new:Nn \@@_main_setmonofont:nn + { + \fontspec_set_family:Nnn \l_@@_ttfamily_family_tl {#1} {#2} + \tl_set_eq:NN \ttdefault \l_@@_ttfamily_family_tl + \use:x + { + \exp_not:n { \DeclareRobustCommand \ttfamily } + { + \exp_not:N \fontencoding { \g_@@_nfss_enc_tl } + \exp_not:N \fontfamily { \l_@@_ttfamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\ttdefault} + { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl } + \@@_setmonofont_hook:nn {#1} {#2} + \normalfont + } +% \end{macrocode} +% \end{macro} +% +% +% +% +% \begin{macro}{\setmathrm} +% These commands are analogous to \cmd\setmainfont\ and others, +% but for selecting the font used for \cmd\mathrm, \etc. They +% can only be used in the preamble of the +% document. \cmd\setboldmathrm\ is used for specifying which +% fonts should be used in \cmd\boldmath. +% \begin{macrocode} +\cs_new:Nn \@@_main_setmathrm:nn + { +% \fontspec_set_family:Nnn \g_@@_mathrm_tl {#1} {#2} +% \fontspec_set_family:Nnn \g_@@_mathrm_tl {Renderer=Basic,#1} {#2} + \@@_setmathrm_hook:nn {#1} {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setboldmathrm} +% \begin{macrocode} +\cs_new:Nn \@@_main_setboldmathrm:nn + { +% \fontspec_set_family:Nnn \g_@@_bfmathrm_tl {#1} {#2} +% \fontspec_set_family:Nnn \g_@@_bfmathrm_tl {Renderer=Basic,#1} {#2} + \@@_setboldmathrm_hook:nn {#1} {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setmathsf} +% \begin{macrocode} +\cs_new:Nn \@@_main_setmathsf:nn + { +% \fontspec_set_family:Nnn \g_@@_mathsf_tl {#1} {#2} +% \fontspec_set_family:Nnn \g_@@_mathsf_tl {Renderer=Basic,#1} {#2} + \@@_setmathsf_hook:nn {#1} {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setmathtt} +% \begin{macrocode} +\cs_new:Nn \@@_main_setmathtt:nn + { +% \fontspec_set_family:Nnn \g_@@_mathtt_tl {#1} {#2} +% \fontspec_set_family:Nnn \g_@@_mathtt_tl {Renderer=Basic,#1} {#2} + \@@_setmathtt_hook:nn {#1} {#2} + } +% \end{macrocode} +% \end{macro} +% +% Hooks: +% \begin{macrocode} +\cs_set_eq:NN \@@_setmainfont_hook:nn \use_none:nn +\cs_set_eq:NN \@@_setsansfont_hook:nn \use_none:nn +\cs_set_eq:NN \@@_setmonofont_hook:nn \use_none:nn +\cs_set_eq:NN \@@_setmathrm_hook:nn \use_none:nn +\cs_set_eq:NN \@@_setmathsf_hook:nn \use_none:nn +\cs_set_eq:NN \@@_setmathtt_hook:nn \use_none:nn +\cs_set_eq:NN \@@_setboldmathrm_hook:nn \use_none:nn +% \end{macrocode} +% +% Hmm, this isn't necessary with \pkg{unicode-math}; oh well: +% \begin{macrocode} +\@onlypreamble\setmathrm +\@onlypreamble\setboldmathrm +\@onlypreamble\setmathsf +\@onlypreamble\setmathtt +% \end{macrocode} +% +% If the commands above are not executed, then \cmd\rmdefault\ (\etc) +% will be used. +% \begin{macrocode} +\tl_gset:Nn \g_@@_mathrm_tl {\rmdefault} +\tl_gset:Nn \g_@@_mathsf_tl {\sfdefault} +\tl_gset:Nn \g_@@_mathtt_tl {\ttdefault} +% \end{macrocode} +% +% \begin{macro}{\@@_main_newfontfamily:nnnN} +% The inner fontspec workings define a font family, which is then used in a typical +% NFSS \cmd\fontfamily\ declaration, saved in the macro name specified. +% The fourth argument determines which xparse function to set the macro with (new/renew/etc). +% \begin{macrocode} +\cs_new:Nn \@@_main_newfontfamily:nnnN + { + \fontspec_set_family:cnn { l_@@_ \cs_to_str:N #1 _family_tl } {#2} {#3} + \use:x + { + \exp_not:N #4 \exp_not:N #1 {} + { + \exp_not:N \fontfamily { \use:c { l_@@_ \cs_to_str:N #1 _family_tl } } + \exp_not:N \fontencoding { \g_@@_nfss_enc_tl } + \exp_not:N \selectfont + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_main_newfontface:nnn} +% \cmd\newfontface\ uses the fact that if the argument to \feat{BoldFont}, etc., is empty (\ie, |BoldFont={}|), then no bold font is searched for. +% \begin{macrocode} +\cs_new:Nn \@@_main_newfontface:nnn + { + \newfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2 ] {#3} + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Font feature selection} +% +% \begin{macro}{\@@_set_default_features:nn} +% \begin{macrocode} +\cs_new:Nn \@@_set_default_features:nn + { + \IfBooleanTF {#1} \clist_gput_right:Nn \clist_gset:Nn + \g_@@_default_fontopts_clist {#2} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_font_default_features:nnn} +% The optional argument |#2| specifies font identifier(s). +% Branch for either (a)~single token input such as \verb|\rmdefault|, or (b)~otherwise assume its a fontname. +% In that case, strip spaces and file extensions and lower-case to ensure consistency. +% \begin{macrocode} +\cs_new:Nn \@@_set_font_default_features:nnn + { +% \typeout{\unexpanded{_set_font_default_features:nnn:{#1}{#2}{#3}}} + \clist_map_inline:nn {#2} + { + \tl_if_single:nTF {##1} + { \tl_set:No \l_@@_tmp_tl { \cs:w l_@@_ \cs_to_str:N ##1 _family_tl\cs_end: } } + { \@@_sanitise_fontname:Nn \l_@@_tmp_tl {##1} } + + \IfBooleanTF {#1} + { + \prop_get:NVNF \g_@@_fontopts_prop \l_@@_tmp_tl \l_@@_tmpb_tl + { \tl_clear:N \l_@@_tmpb_tl } + \tl_put_right:Nn \l_@@_tmpb_tl {#3,} + \prop_gput:NVV \g_@@_fontopts_prop \l_@@_tmp_tl \l_@@_tmpb_tl + } + { + \tl_if_empty:nTF {#3} + { \prop_gremove:NV \g_@@_fontopts_prop \l_@@_tmp_tl } + { \prop_gput:NVn \g_@@_fontopts_prop \l_@@_tmp_tl {#3,} } + } + } + } +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\addfontfeatures} +% In order to be able to extend the feature selection of +% a given font, two things need to be known: the currently selected +% features, and the currently selected font. Every time a font +% family is created, this information is saved inside a control +% sequence with the name of the font family itself. +% +% This macro extracts this information, then appends the requested +% font features to add to the already existing ones, and calls the +% font again with the top level \cs{fontspec} command. +% +% The default options are \emph{not} applied (which is why +% \cs{g_fontspec_default_fontopts_tl} is emptied inside the group; this is allowed +% as \cmd\l_fontspec_family_tl\ is globally defined in \cmd\@@_select_font_family:nn), so this +% means that the only added features to the font are strictly those +% specified by this command. +% +% \cs{addfontfeature} is defined as an alias, as I found that I +% often typed this instead when adding only a single font feature. +% \begin{macrocode} +\cs_new:Nn \@@_main_addfontfeatures:n + { +% \typeout{^^J::::::::::::::::::::::::::::::::::^^J: addfontfeatures} + \fontspec_if_fontspec_font:TF + { + \group_begin: + \keys_set_known:nnN {fontspec-addfeatures} {#1} \l_@@_tmp_tl + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {options} \l_@@_options_tl + \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {fontname} \l_@@_fontname_tl + \bool_set_true:N \l_@@_disable_defaults_bool +% \typeout{ \@@_select_font_family:nn { \l_@@_options_tl , #1 } {\l_@@_fontname_tl} } + \use:x + { + \@@_select_font_family:nn + { \l_@@_options_tl , #1 } {\l_@@_fontname_tl} + } + \group_end: + \fontfamily \g_@@_nfss_family_tl \selectfont + } + { + \@@_warning:nx {addfontfeatures-ignored} {#1} + } + \ignorespaces + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Defining new font features} +% +% \begin{macro}{\newfontfeature} +% \cs{newfontfeature} takes two arguments: the name of the feature +% tag by which to reference it, and the string that is used to +% select the font feature. +% \begin{macrocode} +\cs_new:Nn \@@_main_newfontfeature:nn + { + \keys_define:nn { fontspec } + { + #1 .code:n = { \@@_update_featstr:n {#2} } + } + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\newAATfeature} +% This command assigns a new AAT feature by its code (|#2|,|#3|) to a new name (|#1|). +% Better than \cmd\newfontfeature\ because it checks if the feature exists in the +% font it's being used for. +% \begin{macrocode} +\cs_new:Nn \@@_main_newAATfeature:nnnn + { + \keys_if_exist:nnF { fontspec } {#1} + { \@@_define_aat_feature_group:n {#1} } + + \keys_if_choice_exist:nnnT {fontspec} {#1} {#2} + { \@@_warning:nxx {feature-option-overwrite} {#1} {#2} } + + \@@_define_aat_feature:nnnn {#1}{#2}{#3}{#4} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newopentypefeature} +% This command assigns a new OpenType feature by its abbreviation (|#2|) to a new name (|#1|). +% Better than \cmd\newfontfeature\ because it checks if the feature exists in the +% font it's being used for. +% \begin{macrocode} +\cs_new:Nn \@@_main_newopentypefeature:nnn + { + \keys_if_exist:nnF { fontspec / options } {#1} + { \@@_define_opentype_feature_group:n {#1} } + + \keys_if_choice_exist:nnnT {fontspec} {#1} {#2} + { \@@_warning:nxx {feature-option-overwrite} {#1} {#2} } + + \exp_args:Nnnx \@@_define_opentype_feature:nnnnn + {#1} {#2} { \@@_strip_plus_minus:n {#3} } {#3} {} + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new:Nn \@@_strip_plus_minus:n { \@@_strip_plus_minus_aux:Nq #1 \q_nil } +\cs_new:Npn \@@_strip_plus_minus_aux:Nq #1#2 \q_nil + { + \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2} + } +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\aliasfontfeature} +% User commands for renaming font features and font feature options. +% \begin{macrocode} +\cs_new:Nn \@@_main_aliasfontfeature:nn + { +% \typeout{::::::::::::::::::::^^J:: aliasfontfeature{#1}{#2}} + \bool_set_false:N \l_@@_alias_bool + + \clist_map_inline:Nn \g_@@_all_keyval_modules_clist + { + \keys_if_exist:nnT {##1} {#1} + { +% \typeout{:::: Key~exists~##1~/~#1} + \bool_set_true:N \l_@@_alias_bool + \keys_define:nn {##1} + { #2 .code:n = { \keys_set:nn {##1} { #1 = {####1} } } } + } + } + + \bool_if:NF \l_@@_alias_bool + { \@@_warning:nx {rename-feature-not-exist} {#1} } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\aliasfontfeatureoption} +% \begin{macrocode} +\cs_new:Nn \@@_main_aliasfontfeatureoption:nnn + { + \bool_set_false:N \l_@@_alias_bool + + \clist_map_inline:Nn \g_@@_all_keyval_modules_clist + { + \keys_if_exist:nnT { ##1 / #1 } {#2} + { +% \typeout{:::: Keyval~exists~##1~/~#1~=~#2} + \bool_set_true:N \l_@@_alias_bool + \keys_define:nn { ##1 / #1 } + { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } } + } + + \keys_if_exist:nnT { ##1 / #1 } {#2Reset} + { +% \typeout{:::: Keyval~exists~##1~/~#1~=~#2Reset} + \keys_define:nn { ##1 / #1 } + { #3Reset .code:n = { \keys_set:nn {##1} { #1 = {#2Reset} } } } + } + + \keys_if_exist:nnT { ##1 / #1 } {#2Off} + { +% \typeout{:::: Keyval~exists~##1~/~#1~=~#2Off} + \keys_define:nn { ##1 / #1 } + { #3Off .code:n = { \keys_set:nn {##1} { #1 = {#2Off} } } } + } + } + + \bool_if:NF \l_@@_alias_bool + { \@@_warning:nx {rename-feature-not-exist} {#1/#2} } + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_main_DeclareFontExtensions:n} +% \begin{macrocode} +\cs_new:Nn \@@_main_DeclareFontExtensions:n + { + \clist_set:Nn \l_@@_extensions_clist { #1 } + } +% \end{macrocode} +% Defaults: +% \begin{macrocode} +\@@_main_DeclareFontExtensions:n {.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\IfFontFeatureActiveTF} +% \begin{macrocode} +\cs_new:Nn \@@_main_IfFontFeatureActiveTF:nnn + { +% \typeout{^^J:::::::::::::::::::::::::::::::::::::::::::::::} +% \typeout{:IfFontFeatureActiveTF \exp_not:n{{#1}{#2}{#3}}} + \@@_if_font_feature:nTF {#1} {#2} {#3} + } +% \end{macrocode} +% +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_if_font_feature:n {TF} + { + \tl_gclear:N \g_@@_single_feat_tl + \group_begin: + \@@_font_suppress_not_found_error: + \@@_init: + \bool_set_true:N \l_@@_ot_bool + \bool_set_true:N \l_@@_never_check_bool + \bool_set_false:N \l_@@_firsttime_bool + \clist_clear:N \l_@@_fontfeat_clist + \@@_get_features:n {#1} + \group_end: + +% \typeout{:::> \exp_not:N\g_@@_rawfeatures_sclist->~{\g_@@_rawfeatures_sclist}} +% \typeout{:::> \exp_not:N\g_@@_single_feat_tl->~{\g_@@_single_feat_tl}} + + \tl_if_empty:NTF \g_@@_single_feat_tl { \prg_return_false: } + { + \exp_args:NV \fontspec_if_current_feature:nTF \g_@@_single_feat_tl + { \prg_return_true: } { \prg_return_false: } + } + } +% \end{macrocode} +% \end{macro} +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-vars.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-vars.dtx new file mode 100644 index 00000000000..c7ca26bb0e3 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-vars.dtx @@ -0,0 +1,295 @@ +%%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC +% +% \section{Declaration of variables} +% +% \iffalse +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% \fi +% +% This file consists solely of declaration of variables used by \pkg{fontspec}. +% In some cases these variables are also initialised with default values. +% In time I would like to move these initialisations +% +% \paragraph{Booleans} +% +% \begin{macro}{\l_@@_firsttime_bool} +% As \cs{keys_set:nn} is run multiple times, some of its +% information storing only occurs once while we decide if the font family +% has been defined or not. When the later processing is occuring per-shape +% this no longer needs to happen; this is indicated by the `firsttime' +% conditional. +% \begin{macrocode} +\bool_new:N \l_@@_firsttime_bool +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\bool_new:N \l_@@_nobf_bool +\bool_new:N \l_@@_noit_bool +\bool_new:N \l_@@_nosc_bool +\bool_new:N \l_@@_check_bool +% \end{macrocode} +% +% \begin{macrocode} +\bool_new:N \l_@@_tfm_bool +\bool_new:N \l_@@_atsui_bool +\bool_new:N \l_@@_ot_bool +\bool_new:N \l_@@_mm_bool +\bool_new:N \l_@@_graphite_bool +\bool_new:N \l_@@_fontcfg_bool +\bool_set_true:N \l_@@_fontcfg_bool +% \end{macrocode} +% For dealing with legacy maths: +% \begin{macrocode} +\bool_new:N \g_@@_math_euler_bool +\bool_new:N \g_@@_math_lucida_bool +\bool_new:N \g_@@_pkg_euler_loaded_bool +% \end{macrocode} +% For package options: +% \begin{macrocode} +\bool_new:N \g_@@_cfg_bool +\bool_new:N \g_@@_math_bool +\bool_new:N \g_@@_euenc_bool +% \end{macrocode} +% +% \begin{macrocode} +\bool_new:N \l_@@_tmpa_bool +\bool_new:N \l_@@_disable_defaults_bool +\bool_new:N \l_@@_alias_bool +\bool_new:N \l_@@_external_bool +\bool_new:N \l_@@_defining_encoding_bool +\bool_new:N \l_@@_script_exist_bool +\bool_new:N \g_@@_em_normalise_slant_bool +\bool_new:N \l_@@_proceed_bool +\bool_new:N \l_@@_check_feat_bool +% \end{macrocode} +% +% \begin{macro}{\l_@@_never_check_bool} +% This boolean is overloaded. It is used to disable checking opentype script, language, and tags +% for two purposes: when a font has no opentype features, we just turn it true (i.e., disable checking); +% and, when running checking code that has a user-defined return path we want to allow the higher-level +% code to dictate the logic. +% TODO: tidy this up! +% \begin{macrocode} +\bool_new:N \l_@@_never_check_bool +% \end{macrocode} +% \end{macro} +% +% \paragraph{Counters} +% \begin{macrocode} +\int_new:N \l_@@_script_int +\int_new:N \l_@@_language_int +\int_new:N \l_@@_strnum_int +\int_new:N \l_@@_tmp_int +\int_new:N \l_@@_em_int +\int_new:N \l_@@_emdef_int +\int_new:N \l_@@_strong_int +\int_new:N \l_@@_strongdef_int +% \end{macrocode} +% +% \paragraph{Floats} +% \begin{macrocode} +\fp_new:N \l_@@_tmpa_fp +\fp_new:N \l_@@_tmpb_fp +% \end{macrocode} +% +% \paragraph{Dimensions} +% \begin{macrocode} +\dim_new:N \l_@@_tmpa_dim +\dim_new:N \l_@@_tmpb_dim +\dim_new:N \l_@@_tmpc_dim +% \end{macrocode} +% +% \paragraph{Sequences} +% \begin{macrocode} +\seq_new:N \l_@@_bf_series_seq +% \end{macrocode} +% +% \paragraph{Comma-lists} +% \begin{macrocode} +\clist_new:N \g_@@_default_fontopts_clist +\clist_new:N \g_@@_all_keyval_modules_clist +\clist_new:N \l_@@_sizefeat_clist +\clist_set:Nn \l_@@_sizefeat_clist {Size={-}} +\clist_new:N \l_@@_extensions_clist +\clist_new:N \l_@@_fontopts_clist +\clist_new:N \l_@@_family_fontopts_clist +\clist_new:N \l_@@_all_features_clist +\clist_new:N \l_@@_leftover_clist +\clist_new:N \l_@@_keys_leftover_clist +\clist_new:N \l_@@_sizing_leftover_clist +\clist_new:N \l_@@_fontfeat_clist +\clist_new:N \l_@@_fontfeat_curr_clist +\clist_new:N \l_@@_arg_clist +\clist_new:N \l_@@_this_feat_clist +% \end{macrocode} +% +% \begin{macrocode} +\clist_new:N \l_@@_fontfeat_up_clist +\clist_new:N \l_@@_fontfeat_bf_clist +\clist_new:N \l_@@_fontfeat_it_clist +\clist_new:N \l_@@_fontfeat_bfit_clist +\clist_new:N \l_@@_fontfeat_sl_clist +\clist_new:N \l_@@_fontfeat_bfsl_clist +\clist_new:N \l_@@_fontfeat_sc_clist +% \end{macrocode} +% +% \paragraph{Property lists} +% \begin{macrocode} +\prop_new:N \g_@@_fontopts_prop +\prop_new:N \l_@@_nfss_prop +\prop_new:N \l_@@_nfssfont_prop +\prop_new:N \g_@@_OT_features_prop +\prop_new:N \g_@@_all_opentype_feature_names_prop +\prop_new:N \g_@@_em_prop +\prop_new:N \g_@@_strong_prop +\prop_new:N \g_@@_fontid_family_prop +\prop_new:N \g_@@_family_int_prop +% \end{macrocode} +% +% \paragraph{Token lists} +% \begin{macrocode} +\tl_new:N \l_fontspec_family_tl +\tl_new:N \g_fontspec_encoding_tl +\tl_new:N \l_fontspec_renderer_tl +\tl_new:N \l_fontspec_fontname_tl +% \end{macrocode} +% +% \begin{macrocode} +\tl_clear_new:N \UTFencname +\tl_clear_new:N \cyrillicencoding +\tl_clear_new:N \latinencoding +% \end{macrocode} +% +% \begin{macrocode} +\tl_new:N \l_fontspec_mode_tl +\tl_new:N \g_@@_curr_series_tl +\tl_new:N \g_@@_defined_shapes_tl +\tl_new:N \g_@@_nfss_enc_tl +\tl_new:N \g_@@_nfss_family_tl +\tl_new:N \g_@@_single_feat_tl +\tl_new:N \l_@@_basename_tl +\tl_new:N \l_@@_curr_fontname_tl +\tl_new:N \l_@@_curr_bfname_tl +\tl_new:N \l_@@_ext_filename_tl +\tl_new:N \l_@@_extension_tl +\tl_new:N \l_@@_font_path_tl +\tl_new:N \l_@@_fontid_tl +\tl_new:N \l_@@_fontname_tl +\tl_new:N \l_@@_hexcol_tl +\tl_new:N \l_@@_nfss_sc_tl +\tl_new:N \l_@@_nfss_tl +\tl_new:N \l_@@_nfss_fam_tl +\tl_new:N \l_@@_opacity_tl +\tl_new:N \l_@@_optical_size_tl +\tl_new:N \l_@@_options_tl +\tl_new:N \l_@@_saved_fontname_tl +\tl_new:N \l_@@_scale_tl +\tl_new:N \l_@@_size_tl +\tl_new:N \l_@@_sizedfont_tl +\tl_new:N \l_@@_this_font_tl +\tl_new:N \l_@@_tmp_tl +\tl_new:N \l_@@_tmpa_tl +\tl_new:N \l_@@_tmpb_tl +\tl_new:N \l_@@_ttc_index_tl +\tl_new:N \l_@@_emshape_query_tl +\tl_new:N \l_@@_em_switch_tl +\tl_new:N \l_@@_em_tmp_tl +\tl_new:N \l_@@_strong_tmp_tl +\tl_new:N \l_@@_strong_switch_tl +\tl_new:N \l_@@_hyphenchar_tl +\tl_new:N \l_@@_smcp_shape_tl +% \end{macrocode} +% +% \begin{macrocode} +\tl_new:N \g_@@_mathrm_tl +\tl_new:N \g_@@_bfmathrm_tl +\tl_new:N \g_@@_mathsf_tl +\tl_new:N \g_@@_mathtt_tl +% \end{macrocode} +% +% Defaults: +% \begin{macrocode} +\tl_gset:Nn \g_@@_mathrm_tl {\rmdefault} +\tl_gset:Nn \g_@@_mathsf_tl {\sfdefault} +\tl_gset:Nn \g_@@_mathtt_tl {\ttdefault} +% \end{macrocode} +% +% \begin{macrocode} +\tl_new:N \l_@@_family_label_tl +\tl_new:N \l_@@_fake_slant_tl +\tl_new:N \l_@@_fake_embolden_tl +% \end{macrocode} +% +% \begin{macrocode} +\tl_new:N \l_@@_fontname_up_tl +\tl_new:N \l_@@_fontname_bf_tl +\tl_new:N \l_@@_fontname_it_tl +\tl_new:N \l_@@_fontname_bfit_tl +\tl_new:N \l_@@_fontname_sl_tl +\tl_new:N \l_@@_fontname_bfsl_tl +\tl_new:N \l_@@_fontname_sc_tl +% \end{macrocode} +% +% \begin{macrocode} +\tl_new:N \l_@@_script_name_tl +\tl_new:N \l_fontspec_script_tl +\tl_new:N \l_@@_lang_name_tl +\tl_new:N \l_fontspec_lang_tl +% \end{macrocode} +% +% \begin{macrocode} +\tl_new:N \l_@@_mapping_tl +\tl_new:N \l_@@_punctspace_adjust_tl +\tl_new:N \l_@@_wordspace_adjust_tl +\tl_new:N \l_@@_postadjust_tl +% \end{macrocode} +% +% \begin{macrocode} +\tl_const:Nn \c_@@_hexcol_tl {000000} +\tl_const:Nn \c_@@_opacity_tl {FF~} +\tl_const:Nn \c_@@_postadjust_tl { \l_@@_wordspace_adjust_tl \l_@@_punctspace_adjust_tl } +% \end{macrocode} +% +% \paragraph{Semi-colon-lists} +% Not a real data structure but sensible to name accordingly. +% \begin{macrocode} +\tl_new:N \g_@@_rawfeatures_sclist +\tl_new:N \l_@@_pre_feat_sclist +% \end{macrocode} +% +% \paragraph{Font families} +% Again not a real data structure, and also probably poorly named. +% \begin{macrocode} +\tl_new:N \l_@@_rmfamily_family_tl +\tl_new:N \l_@@_sffamily_family_tl +\tl_new:N \l_@@_ttfamily_family_tl +% \end{macrocode} +% +% +% +% \iffalse +% \begin{macrocode} +% +% \end{macrocode} +% \fi + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-xfss.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-xfss.dtx new file mode 100644 index 00000000000..1d408074909 --- /dev/null +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-xfss.dtx @@ -0,0 +1,286 @@ +%%^^A%% fontspec-code-xfss.dtx -- part of FONTSPEC + +% \section{Changes to the NFSS} +% +% \begin{macrocode} +%<*fontspec> +% \end{macrocode} +% +% +% \subsection{Italic small caps and so on} \label{sec:sishape} +% +% \begin{macro}{\sishape} +% \begin{macro}{\textsi} +% These commands for actually selecting italic small caps have been defined for many years; I'm inclined to drop them. +% They're probably used very infrequently; I personally prefer just writing +% |\textit{\textsc{...}}| instead. +% +% \begin{macrocode} +\providecommand*\itscdefault{\itdefault\scdefault} +\providecommand*\slscdefault{\sldefault\scdefault} +\DeclareRobustCommand{\sishape} + { + \not@math@alphabet\sishape\relax + \fontshape{\itscdefault}\selectfont + } +\DeclareTextFontCommand{\textsi}{\sishape} +% \end{macrocode} +% \end{macro} \end{macro} +% +% \LaTeX's `shape' font axis needs to be overloaded to support italic small caps and slanted small caps. +% These are the combinations to support: +% \begin{macrocode} +\cs_new:Nn \@@_shape_merge:nn { c_@@_shape_#1_#2_tl } +\tl_const:cn { \@@_shape_merge:nn \itdefault \scdefault } {\itscdefault} +\tl_const:cn { \@@_shape_merge:nn \sldefault \scdefault } {\slscdefault} +\tl_const:cn { \@@_shape_merge:nn \scdefault \itdefault } {\itscdefault} +\tl_const:cn { \@@_shape_merge:nn \scdefault \sldefault } {\slscdefault} +\tl_const:cn { \@@_shape_merge:nn \slscdefault \itdefault } {\itscdefault} +\tl_const:cn { \@@_shape_merge:nn \itscdefault \sldefault } {\slscdefault} +\tl_const:cn { \@@_shape_merge:nn \itscdefault \updefault } {\scdefault} +\tl_const:cn { \@@_shape_merge:nn \slscdefault \updefault } {\scdefault} +% \end{macrocode} +% +% \begin{macro}{\fontspec_merge_shape:n} +% These macros enable the overload on the |\..shape| commands. +% First, a shape `new+current' (prefix) or `current+new' (suffix) is tried. +% If not found, fall back on the `new' shape. +% \begin{macrocode} +\cs_new:Nn \fontspec_merge_shape:n + { + \@@_if_merge_shape:nTF {#1} + { \fontshape { \tl_use:c { \@@_shape_merge:nn {\f@shape} {#1} } } \selectfont } + { \fontshape {#1} \selectfont } + } +% \end{macrocode} +% The following is rather specific; it only returns true if the merged shape exists, +% but more importantly also if the merged shape is defined for the current font. +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_if_merge_shape:n {TF} + { + \bool_lazy_and:nnTF + { \tl_if_exist_p:c { \@@_shape_merge:nn {\f@shape} {#1} } } + { + \cs_if_exist_p:c + { + \f@encoding/\f@family/\f@series/ + \tl_use:c { \@@_shape_merge:nn {\f@shape} {#1} } + } + } + \prg_return_true: \prg_return_false: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\itshape} \begin{macro}{\scshape} \begin{macro}{\upshape} \begin{macro}{\slshape} +% The original |\..shape| commands are redefined to use the merge shape macro. +% \begin{macrocode} +\DeclareRobustCommand \itshape + { + \not@math@alphabet\itshape\mathit + \fontspec_merge_shape:n\itdefault + } +\DeclareRobustCommand \slshape + { + \not@math@alphabet\slshape\relax + \fontspec_merge_shape:n\sldefault + } +\DeclareRobustCommand \scshape + { + \not@math@alphabet\scshape\relax + \fontspec_merge_shape:n\scdefault + } +\DeclareRobustCommand \upshape + { + \not@math@alphabet\upshape\relax + \fontspec_merge_shape:n\updefault + } +% \end{macrocode} +% \end{macro} \end{macro} \end{macro} \end{macro} +% +% +% +% \subsection{Emphasis} +% +% \begin{macro}{\emfontdeclare} +% \begin{macrocode} +\cs_new_protected:Npn \emfontdeclare #1 + { + \prop_gclear:N \g_@@_em_prop + \int_zero:N \l_@@_emdef_int + \bool_gset_true:N \g_@@_em_normalise_slant_bool + + \tl_if_in:nnT {#1} {\slshape} + { + \tl_if_in:nnT {#1} {\itshape} + { + \bool_gset_false:N \g_@@_em_normalise_slant_bool + } + } + + \group_begin: + \normalfont + \clist_map_inline:nn {\emreset,#1} + { + ##1 + \prop_gput_if_new:NxV \g_@@_em_prop { \f@shape } { \l_@@_emdef_int } + \prop_gput:Nxn \g_@@_em_prop { switch-\int_use:N \l_@@_emdef_int } { ##1 } + \int_incr:N \l_@@_emdef_int + } + \group_end: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\em} +% \begin{macrocode} +\DeclareRobustCommand \em + { + \@nomath\em + \tl_set:Nx \l_@@_emshape_query_tl { \f@shape } + + \bool_if:NT \g_@@_em_normalise_slant_bool + { + \tl_replace_all:Nnn \l_@@_emshape_query_tl {/sl} {/it} + } + +% \typeout{Emph~ level:~\int_use:N \l_@@_em_int} + \prop_get:NxNT \g_@@_em_prop { \l_@@_emshape_query_tl } \l_@@_em_tmp_tl + { + \int_set:Nn \l_@@_em_int { \l_@@_em_tmp_tl } +% \typeout{Shape~ (\l_@@_emshape_query_tl)~ detected;~ new~ level:~\int_use:N \l_@@_em_int} + } + + \int_incr:N \l_@@_em_int + + \prop_get:NxNTF \g_@@_em_prop { switch-\int_use:N \l_@@_em_int } \l_@@_em_switch_tl + { \l_@@_em_switch_tl } + { + \int_zero:N \l_@@_em_int + \emreset + } + + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\emph} +% \begin{macro}{\emshape} +% \begin{macro}{\eminnershape} +% \begin{macro}{\emreset} +% \begin{macrocode} +\DeclareTextFontCommand{\emph}{\em} +\cs_set:Npn \emreset { \upshape } +\cs_set:Npn \emshape { \itshape } +\cs_set:Npn \eminnershape { \upshape } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \subsection{Strong emphasis} +% +% \begin{macro}{\strongfontdeclare} +% \begin{macrocode} +\cs_new_protected:Npn \strongfontdeclare #1 + { + \prop_gclear:N \g_@@_strong_prop + \int_zero:N \l_@@_strongdef_int + + \group_begin: + \normalfont + \clist_map_inline:nn {\strongreset,#1} + { + ##1 + \prop_gput_if_new:NxV \g_@@_strong_prop { \f@series } { \l_@@_strongdef_int } + \prop_gput:Nxn \g_@@_strong_prop { switch-\int_use:N \l_@@_strongdef_int } { ##1 } + \int_incr:N \l_@@_strongdef_int + } + \group_end: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\strongenv} +% \begin{macrocode} +\DeclareRobustCommand \strongenv + { + \@nomath\strongenv + +% \typeout{Strong~ level:~\int_use:N \l_@@_strong_int} + \prop_get:NxNT \g_@@_strong_prop { \f@series } \l_@@_strong_tmp_tl + { + \int_set:Nn \l_@@_strong_int { \l_@@_strong_tmp_tl } +% \typeout{Series~ (\f@series)~ detected;~ new~ level:~\int_use:N \l_@@_strong_int} + } + + \int_incr:N \l_@@_strong_int + + \prop_get:NxNTF \g_@@_strong_prop { switch-\int_use:N \l_@@_strong_int } \l_@@_strong_switch_tl + { \l_@@_strong_switch_tl } + { + \int_zero:N \l_@@_strong_int + \strongreset + } + + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\strong} +% \begin{macro}{\strongreset} +% \begin{macrocode} +\DeclareTextFontCommand{\strong}{\strongenv} +\cs_set:Npn \strongreset {} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\reset@font} +% Ensure nesting resets when necessary: +% \begin{macrocode} +\cs_set:Npn \reset@font + { + \normalfont + \int_zero:N \l_@@_em_int + \int_zero:N \l_@@_strong_int + } +% \end{macrocode} +% \end{macro} +% +% Programmer's interface for setting nesting levels: +% \begin{macrocode} +\cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l_@@_em_int {#1} } +\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l_@@_strong_int {#1} } +% \end{macrocode} +% +% Defaults: +% \begin{macrocode} +\strongfontdeclare{ \bfseries } +\emfontdeclare{ \emshape, \eminnershape } +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code.ltx b/Master/texmf-dist/source/latex/fontspec/fontspec-code.ltx index b42b8e1b6a2..c164175b5fa 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-code.ltx +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code.ltx @@ -30,7 +30,7 @@ % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-api.tex b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-api.tex index 243282eab42..766b3527a07 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-api.tex +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-api.tex @@ -324,7 +324,7 @@ OpenType language tag |#1|. % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-enc.tex b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-enc.tex index 577c162172a..42a30d41f51 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-enc.tex +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-enc.tex @@ -204,7 +204,7 @@ the process of defining Unicode font range encodings: % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-featset.tex b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-featset.tex index f7c0c724a7a..5e3cf7fee20 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-featset.tex +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-featset.tex @@ -160,8 +160,8 @@ separate font features may be defined to their respective shapes See \exref{itfeat}. \begin{Xexample}{itfeat}{Features for, say, just italics.} -\fontspec{EBGaramond12-Regular.otf}% - [ItalicFont=EBGaramond12-Italic.otf] +\fontspec{EBGaramond-Regular.otf}% + [ItalicFont=EBGaramond-Italic.otf] \itshape Don’t Ask Victoria! \\ \addfontfeature{ItalicFeatures={Style=Swash}} Don’t Ask Victoria! \\ @@ -602,7 +602,7 @@ Also see the OpenType \opt{Uppercase} option of the \feat{Letters} feature (\vre % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-fontsel.tex b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-fontsel.tex index 9cbfb0e56c4..faf7fc3ff05 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-fontsel.tex +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-fontsel.tex @@ -619,7 +619,7 @@ if it were a `naked' control sequence; \eg, `|M. \fontspec{...} N|' and % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-intro.tex b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-intro.tex index 401b3d15195..c8677e4c106 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-intro.tex +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-intro.tex @@ -240,7 +240,7 @@ An example for setting up a font family for use with \cs{strong} is discussed in % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-luatex.tex b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-luatex.tex index c62e84cecc2..f10958b09ef 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-luatex.tex +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-luatex.tex @@ -46,7 +46,7 @@ Please refer to the \LuaTeX/\pkg{luaotfload} documentation for more details. % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-opentype.tex b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-opentype.tex index 1e7e6c712d0..38a449e902b 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-opentype.tex +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-opentype.tex @@ -493,9 +493,10 @@ Japanese typography for annotations. For fonts with multiple |salt| OpenType features, use the fontspec \feat{Alternate} feature instead. -\Exref{style-alt} and \exref{style-hist} both contain glyph -substitutions with similar characteristics. -Note the occasional inconsistency with which font features are labelled; a long-tailed `Q' could turn up anywhere! +\Exref{style-alt} shows an example of a font feature that involves glyph substitution +for particular letters within an alphabet. +Other options in these categories operate in similar ways, with the choice of how +particular substitutions are organised with which feature largely up to the font designer. \begin{Xexample}[firstline=2]{style-alt}{Example of the \opt{Alternate} option of the \feat{Style} feature.} \Large @@ -505,24 +506,10 @@ Note the occasional inconsistency with which font features are labelled; a long- M Q W \end{Xexample} -\begin{Xexample}[firstline=2]{style-hist}{Example of the \opt{Historic} option of the \feat{Style} feature.} - \Large - \fontspec{Adobe Jenson Pro} - M Q Z \\ - \addfontfeature{Style=Historic} - M Q Z -\end{Xexample} - In other features, larger breadths of changes can be seen, covering -the style of an entire alphabet. See \exref{style-titl} and \exref{style-itrub}; in the latter, the \opt{Italic} option affects the Latin text and the \opt{Ruby} option the Japanese. - -\begin{Xexample}[firstline=2]{style-titl}{Example of the \opt{TitlingCaps} option of the \feat{Style} feature.} - \Large - \fontspec{Adobe Garamond Pro} - TITLING CAPS \\ - \addfontfeature{Style=TitlingCaps} - TITLING CAPS -\end{Xexample} +the style of an entire alphabet. +See \exref{style-itrub}; here, the \opt{Italic} option affects the Latin text +and the \opt{Ruby} option the Japanese. \begin{Xexample}[firstline=2]{style-itrub}{Example of the \opt{Italic} and \opt{Ruby} options of the \feat{Style} feature.} \Large \def\kana{ようこそ ワカヨタレソ} @@ -546,6 +533,7 @@ in \exref{style-hvkana}: the horizontal style is slightly wider. \end{Xexample} \subsection{Diacritics} + Specifies how combining diacritics should be placed. These will usually be controlled automatically according to the Script setting. @@ -744,33 +732,17 @@ particular font. These correspond to the OpenType features |cv01| to |cv99|. For each character that can be varied, it is possible to select among possible options for that particular glyph. -For example, in \exref{cv} a variety of glyphs for the character `v' are -selected, in which |5| corresponds to the character `v' for this font feature, +For example, in the example below, variants are chosen for glyphs `4' and `5', and the trailing |:|\meta{n} corresponds to which variety to choose. -Georg Duffner's open source Garamond revival font\footnote{\url{http://www.georgduffner.at/ebgaramond/}} is used in this example. +\begin{Verbatim} + \fontspec{EB Garamond 12 Italic}[CharacterVariant={4,5:2}] \& violet +\end{Verbatim} +The numbering is entirely font-soecific. Glyph `5' might be the character `v', for example. Character variants are specifically designed not to conflict with each -other, so you can enable them individually per character as shown in -\exref{cv2}. (Unlike stylistic alternates, say.) - +other, so you can enable them individually per character. +(Unlike stylistic alternates, say.) Note that the indexing starts from zero. -\begin{Lexample}[firstline=2]{cv}{The \feat{CharacterVariant} feature showing off Georg Duffner's open source Garamond revival font.} - \huge - \fontspec{EB Garamond 12 Italic} very \\ - \fontspec{EB Garamond 12 Italic}[CharacterVariant=5] very \\ - \fontspec{EB Garamond 12 Italic}[CharacterVariant=5:0] very \\ - \fontspec{EB Garamond 12 Italic}[CharacterVariant=5:1] very \\ - \fontspec{EB Garamond 12 Italic}[CharacterVariant=5:2] very \\ - \fontspec{EB Garamond 12 Italic}[CharacterVariant=5:3] very -\end{Lexample} - -\begin{Lexample}[firstline=2]{cv2}{The \feat{CharacterVariant} feature selecting multiple variants simultaneously.} - \huge - \fontspec{EB Garamond 12 Italic} \& violet \\ - \fontspec{EB Garamond 12 Italic}[CharacterVariant={4}] \& violet \\ - \fontspec{EB Garamond 12 Italic}[CharacterVariant={5:2}] \& violet \\ - \fontspec{EB Garamond 12 Italic}[CharacterVariant={4,5:2}] \& violet -\end{Lexample} \subsubsection{Alternates --- \texttt{salt}} @@ -1446,7 +1418,7 @@ Thanks to \name{Jonathan Kew}, \name{Yves Codet} and % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-xetex.tex b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-xetex.tex index 46963cc0b46..8c1d4f1647e 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-doc-xetex.tex +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-doc-xetex.tex @@ -19,12 +19,12 @@ selected by \pkg{fontspec}. The \feat{Mapping} feature enables a \XeTeX\ text-mapping scheme, with an example shown in \exref{mapping}. \begin{Xexample}{mapping}{\XeTeX's \feat{Mapping} feature.} - \fontspec{Cochin}[Mapping=tex-text] + \fontspec{texgyrepagella-regular.otf}[Mapping=tex-text] ``!`A small amount of---text!'' \end{Xexample} Only one mapping can be active at a time and a second call to \feat{Mapping} -will simply override the first. +will override the first. Using the |tex-text| mapping is also equivalent to writing |Ligatures=TeX|. The use of the latter syntax is recommended for better compatibility with \LuaTeX\ documents. @@ -368,7 +368,7 @@ options: \opt{Off}, % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-enc.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-enc.dtx deleted file mode 100644 index 7ba6b562a99..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-enc.dtx +++ /dev/null @@ -1,173 +0,0 @@ -%%^^A%% fontspec-enc.dtx -- part of FONTSPEC - -% \section{Extended font encodings} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% To be removed after the 2017 release of LaTeX2e: -% \begin{macrocode} -\providecommand\UnicodeFontFile[2]{"[#1]:#2"} -\providecommand\UnicodeFontName[2]{"#1:#2"} -%\providecommand\UnicodeFontTeXLigatures{mapping=tex-text;} -%\providecommand\UnicodeFontTeXLigatures{+tlig;} -% \end{macrocode} -% -% \begin{macrocode} -\providecommand\add@unicode@accent[2]{#2\char#1\relax} -\providecommand\DeclareUnicodeAccent[3]{% - \DeclareTextCommand{#1}{#2}{\add@unicode@accent{#3}}% -} -% \end{macrocode} -% -% \begin{macro}{\EncodingCommand} -% \begin{macrocode} -\DeclareDocumentCommand \EncodingCommand {mO{}m} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \EncodingCommand } - \DeclareTextCommand{#1}{\UnicodeEncodingName}[#2]{#3} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\EncodingAccent} -% \begin{macrocode} -\DeclareDocumentCommand \EncodingAccent {mm} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \EncodingAccent } - \DeclareTextCommand{#1}{\UnicodeEncodingName}{\add@unicode@accent{#2}} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\EncodingSymbol} -% \begin{macrocode} -\DeclareDocumentCommand \EncodingSymbol {mm} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \EncodingSymbol } - \DeclareTextSymbol{#1}{\UnicodeEncodingName}{#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\EncodingComposite} -% \begin{macrocode} -\DeclareDocumentCommand \EncodingComposite {mmm} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \EncodingComposite } - \DeclareTextComposite{#1}{\UnicodeEncodingName}{#2}{#3} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\EncodingCompositeCommand} -% \begin{macrocode} -\DeclareDocumentCommand \EncodingCompositeCommand {mmm} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \EncodingCompositeCommand } - \DeclareTextCompositeCommand{#1}{\UnicodeEncodingName}{#2}{#3} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DeclareUnicodeEncoding} -% \begin{macrocode} -\DeclareDocumentCommand \DeclareUnicodeEncoding {mm} - { - \DeclareFontEncoding{#1}{}{} - \DeclareErrorFont{#1}{lmr}{m}{n}{10} - \DeclareFontSubstitution{#1}{lmr}{m}{n} - \DeclareFontFamily{#1}{lmr}{} - - \DeclareFontShape{#1}{lmr}{m}{n} - {<->\UnicodeFontFile{lmroman10-regular}{\UnicodeFontTeXLigatures}}{} - \DeclareFontShape{#1}{lmr}{m}{it} - {<->\UnicodeFontFile{lmroman10-italic}{\UnicodeFontTeXLigatures}}{} - \DeclareFontShape{#1}{lmr}{m}{sc} - {<->\UnicodeFontFile{lmromancaps10-regular}{\UnicodeFontTeXLigatures}}{} - \DeclareFontShape{#1}{lmr}{bx}{n} - {<->\UnicodeFontFile{lmroman10-bold}{\UnicodeFontTeXLigatures}}{} - \DeclareFontShape{#1}{lmr}{bx}{it} - {<->\UnicodeFontFile{lmroman10-bolditalic}{\UnicodeFontTeXLigatures}}{} - - \tl_set_eq:NN \l_@@_prev_unicode_name_tl \UnicodeEncodingName - \tl_set:Nn \UnicodeEncodingName {#1} - \bool_set_true:N \l_@@_defining_encoding_bool - #2 - \bool_set_false:N \l_@@_defining_encoding_bool - \tl_set_eq:NN \UnicodeEncodingName \l_@@_prev_unicode_name_tl - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\UndeclareSymbol} -% \begin{macro}{\UndeclareAccent} -% \begin{macro}{\UndeclareCommand} -% Synonyms for each other but all included for completeness. -% \begin{macrocode} -\DeclareDocumentCommand \UndeclareSymbol {m} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \UndeclareSymbol } - \UndeclareTextCommand {#1} {\UnicodeEncodingName} - } -\DeclareDocumentCommand \UndeclareAccent {m} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \UndeclareAccent } - \UndeclareTextCommand {#1} {\UnicodeEncodingName} - } -\DeclareDocumentCommand \UndeclareCommand {m} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \UndeclareCommand } - \UndeclareTextCommand {#1} {\UnicodeEncodingName} - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\UndeclareComposite} -% \begin{macrocode} -\DeclareDocumentCommand \UndeclareComposite {mm} - { - \bool_if:NF \l_@@_defining_encoding_bool - { \@@_error:nn {only-inside-encdef} \UndeclareComposite } - \cs_undefine:c - { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} } - } -% \end{macrocode} -% \end{macro} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-feat-aat.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-feat-aat.dtx deleted file mode 100644 index 3bb7905cf71..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-feat-aat.dtx +++ /dev/null @@ -1,243 +0,0 @@ -%%^^A%% fontspec-feat-aat.dtx -- part of FONTSPEC - -% \section{AAT feature definitions} -% -% These are only defined for \XeTeX. -% -% \iffalse -% \begin{macrocode} -%<*fontspec&XE> -% \end{macrocode} -% \fi - -% \subsection{Ligatures} -% \begin{macrocode} -\@@_define_aat_feature_group:n {Ligatures} -\@@_define_aat_feature:nnnn {Ligatures} {Required} {1} {0} -\@@_define_aat_feature:nnnn {Ligatures} {NoRequired} {1} {1} -\@@_define_aat_feature:nnnn {Ligatures} {Common} {1} {2} -\@@_define_aat_feature:nnnn {Ligatures} {NoCommon} {1} {3} -\@@_define_aat_feature:nnnn {Ligatures} {Rare} {1} {4} -\@@_define_aat_feature:nnnn {Ligatures} {NoRare} {1} {5} -\@@_define_aat_feature:nnnn {Ligatures} {Discretionary} {1} {4} -\@@_define_aat_feature:nnnn {Ligatures} {NoDiscretionary} {1} {5} -\@@_define_aat_feature:nnnn {Ligatures} {Logos} {1} {6} -\@@_define_aat_feature:nnnn {Ligatures} {NoLogos} {1} {7} -\@@_define_aat_feature:nnnn {Ligatures} {Rebus} {1} {8} -\@@_define_aat_feature:nnnn {Ligatures} {NoRebus} {1} {9} -\@@_define_aat_feature:nnnn {Ligatures} {Diphthong} {1} {10} -\@@_define_aat_feature:nnnn {Ligatures} {NoDiphthong} {1} {11} -\@@_define_aat_feature:nnnn {Ligatures} {Squared} {1} {12} -\@@_define_aat_feature:nnnn {Ligatures} {NoSquared} {1} {13} -\@@_define_aat_feature:nnnn {Ligatures} {AbbrevSquared} {1} {14} -\@@_define_aat_feature:nnnn {Ligatures} {NoAbbrevSquared} {1} {15} -\@@_define_aat_feature:nnnn {Ligatures} {Icelandic} {1} {32} -\@@_define_aat_feature:nnnn {Ligatures} {NoIcelandic} {1} {33} -% \end{macrocode} -% Emulate CM extra ligatures. -% \begin{macrocode} -\keys_define:nn {fontspec-aat} - { - Ligatures / TeX .code:n = - { - \tl_set:Nn \l_@@_mapping_tl { tex-text } - } - } -% \end{macrocode} -% -% \subsection{Letters} -% \begin{macrocode} -\@@_define_aat_feature_group:n {Letters} -\@@_define_aat_feature:nnnn {Letters} {Normal} {3} {0} -\@@_define_aat_feature:nnnn {Letters} {Uppercase} {3} {1} -\@@_define_aat_feature:nnnn {Letters} {Lowercase} {3} {2} -\@@_define_aat_feature:nnnn {Letters} {SmallCaps} {3} {3} -\@@_define_aat_feature:nnnn {Letters} {InitialCaps} {3} {4} -% \end{macrocode} -% -% \subsection{Numbers} -% -% These were originally separated into \feat{NumberCase} and -% \feat{NumberSpacing} following \AAT, but it makes more sense to -% combine them. -% -% Both naming conventions are offered to select the number case. -% -% \begin{macrocode} -\@@_define_aat_feature_group:n {Numbers} -\@@_define_aat_feature:nnnn {Numbers} {Monospaced} {6} {0} -\@@_define_aat_feature:nnnn {Numbers} {Proportional} {6} {1} -\@@_define_aat_feature:nnnn {Numbers} {Lowercase} {21} {0} -\@@_define_aat_feature:nnnn {Numbers} {OldStyle} {21} {0} -\@@_define_aat_feature:nnnn {Numbers} {Uppercase} {21} {1} -\@@_define_aat_feature:nnnn {Numbers} {Lining} {21} {1} -\@@_define_aat_feature:nnnn {Numbers} {SlashedZero} {14} {5} -\@@_define_aat_feature:nnnn {Numbers} {NoSlashedZero} {14} {4} -% \end{macrocode} -% -% \subsection{Contextuals} -% \begin{macrocode} -\@@_define_aat_feature_group:n {Contextuals} -\@@_define_aat_feature:nnnn {Contextuals} {WordInitial} {8} {0} -\@@_define_aat_feature:nnnn {Contextuals} {NoWordInitial} {8} {1} -\@@_define_aat_feature:nnnn {Contextuals} {WordFinal} {8} {2} -\@@_define_aat_feature:nnnn {Contextuals} {NoWordFinal} {8} {3} -\@@_define_aat_feature:nnnn {Contextuals} {LineInitial} {8} {4} -\@@_define_aat_feature:nnnn {Contextuals} {NoLineInitial} {8} {5} -\@@_define_aat_feature:nnnn {Contextuals} {LineFinal} {8} {6} -\@@_define_aat_feature:nnnn {Contextuals} {NoLineFinal} {8} {7} -\@@_define_aat_feature:nnnn {Contextuals} {Inner} {8} {8} -\@@_define_aat_feature:nnnn {Contextuals} {NoInner} {8} {9} -% \end{macrocode} -% -% \subsection{Diacritics} -% \begin{macrocode} -\@@_define_aat_feature_group:n {Diacritics} -\@@_define_aat_feature:nnnn {Diacritics} {Show} {9} {0} -\@@_define_aat_feature:nnnn {Diacritics} {Hide} {9} {1} -\@@_define_aat_feature:nnnn {Diacritics} {Decompose} {9} {2} -% \end{macrocode} -% -% -% \subsection{Vertical position} -% \begin{macrocode} -\@@_define_aat_feature_group:n {VerticalPosition} -\@@_define_aat_feature:nnnn {VerticalPosition} {Normal} {10} {0} -\@@_define_aat_feature:nnnn {VerticalPosition} {Superior} {10} {1} -\@@_define_aat_feature:nnnn {VerticalPosition} {Inferior} {10} {2} -\@@_define_aat_feature:nnnn {VerticalPosition} {Ordinal} {10} {3} -% \end{macrocode} -% -% \subsection{Fractions} -% \begin{macrocode} -\@@_define_aat_feature_group:n {Fractions} -\@@_define_aat_feature:nnnn {Fractions} {On} {11} {1} -\@@_define_aat_feature:nnnn {Fractions} {Off} {11} {0} -\@@_define_aat_feature:nnnn {Fractions} {Diagonal} {11} {2} -% \end{macrocode} -% -% \subsection{Alternate} -% \begin{macrocode} -\@@_define_aat_feature_group:n { Alternate } -\keys_define:nn {fontspec-aat} - { - Alternate .default:n = {0} , - Alternate / unknown .code:n = - { - \clist_map_inline:nn {#1} - { - \@@_make_AAT_feature:nn {17}{##1} - } - } - } -% \end{macrocode} -% -% -% \subsection{Variant / StylisticSet} -% \begin{macrocode} -\@@_define_aat_feature_group:n {Variant} -\keys_define:nn {fontspec-aat} - { - Variant .default:n = {0} , - Variant / unknown .code:n = - { - \clist_map_inline:nn {#1} - { \@@_make_AAT_feature:nn {18}{##1} } - } - } -\aliasfontfeature{Variant}{StylisticSet} -% \end{macrocode} -% -% -% -% \begin{macrocode} -\@@_define_aat_feature_group:n {Vertical} -\keys_define:nn {fontspec-aat} - { - Vertical .choice: , - Vertical / RotatedGlyphs .code:n = - { - \__fontspec_update_featstr:n {vertical} - } - } - -% \end{macrocode} -% -% -% \subsection{Style} -% \begin{macrocode} -\@@_define_aat_feature_group:n {Style} -\@@_define_aat_feature:nnnn {Style} {Italic} {32} {2} -\@@_define_aat_feature:nnnn {Style} {Ruby} {28} {2} -\@@_define_aat_feature:nnnn {Style} {Display} {19} {1} -\@@_define_aat_feature:nnnn {Style} {Engraved} {19} {2} -\@@_define_aat_feature:nnnn {Style} {TitlingCaps} {19} {4} -\@@_define_aat_feature:nnnn {Style} {TallCaps} {19} {5} -% \end{macrocode} -% -% \subsection{CJK shape} -% \begin{macrocode} -\@@_define_aat_feature_group:n {CJKShape} -\@@_define_aat_feature:nnnn {CJKShape} {Traditional} {20} {0} -\@@_define_aat_feature:nnnn {CJKShape} {Simplified} {20} {1} -\@@_define_aat_feature:nnnn {CJKShape} {JIS1978} {20} {2} -\@@_define_aat_feature:nnnn {CJKShape} {JIS1983} {20} {3} -\@@_define_aat_feature:nnnn {CJKShape} {JIS1990} {20} {4} -\@@_define_aat_feature:nnnn {CJKShape} {Expert} {20} {10} -\@@_define_aat_feature:nnnn {CJKShape} {NLC} {20} {13} -% \end{macrocode} -% -% \subsection{Character width} -% \begin{macrocode} -\@@_define_aat_feature_group:n {CharacterWidth} -\@@_define_aat_feature:nnnn {CharacterWidth} {Proportional} {22} {0} -\@@_define_aat_feature:nnnn {CharacterWidth} {Full} {22} {1} -\@@_define_aat_feature:nnnn {CharacterWidth} {Half} {22} {2} -\@@_define_aat_feature:nnnn {CharacterWidth} {Third} {22} {3} -\@@_define_aat_feature:nnnn {CharacterWidth} {Quarter} {22} {4} -\@@_define_aat_feature:nnnn {CharacterWidth} {AlternateProportional} {22} {5} -\@@_define_aat_feature:nnnn {CharacterWidth} {AlternateHalf} {22} {6} -\@@_define_aat_feature:nnnn {CharacterWidth} {Default} {22} {7} -% \end{macrocode} -% -% \subsection{Annotation} -% \begin{macrocode} -\@@_define_aat_feature_group:n {Annotation} -\@@_define_aat_feature:nnnn {Annotation} {Off} {24} {0} -\@@_define_aat_feature:nnnn {Annotation} {Box} {24} {1} -\@@_define_aat_feature:nnnn {Annotation} {RoundedBox} {24} {2} -\@@_define_aat_feature:nnnn {Annotation} {Circle} {24} {3} -\@@_define_aat_feature:nnnn {Annotation} {BlackCircle} {24} {4} -\@@_define_aat_feature:nnnn {Annotation} {Parenthesis} {24} {5} -\@@_define_aat_feature:nnnn {Annotation} {Period} {24} {6} -\@@_define_aat_feature:nnnn {Annotation} {RomanNumerals} {24} {7} -\@@_define_aat_feature:nnnn {Annotation} {Diamond} {24} {8} -\@@_define_aat_feature:nnnn {Annotation} {BlackSquare} {24} {9} -\@@_define_aat_feature:nnnn {Annotation} {BlackRoundSquare} {24} {10} -\@@_define_aat_feature:nnnn {Annotation} {DoubleCircle} {24} {11} -% \end{macrocode} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-feat-opentype.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-feat-opentype.dtx deleted file mode 100644 index a91ee8075ff..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-feat-opentype.dtx +++ /dev/null @@ -1,559 +0,0 @@ -%%^^A%% fontspec-feat-opentype.dtx -- part of FONTSPEC - -% \section{OpenType feature definitions} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% -% \begin{macrocode} -\@@_feat_prop_add:nn {salt} { Alternate\,=\,$N$ } -\@@_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ } -\@@_feat_prop_add:nn {ornm} { Ornament\,=\,$N$ } -\@@_feat_prop_add:nn {cvNN} { CharacterVariant\,=\,$N$:$M$ } -\@@_feat_prop_add:nn {ssNN} { StylisticSet\,=\,$N$ } -% \end{macrocode} -% -% \section{Regular key=val / tag definitions} -% -% \subsection{Ligatures} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Ligatures} -\@@_define_opentype_feature:nnnnn {Ligatures} {ResetAll} {} {} - { - +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig, -% mapping = tex-text -% +tlig,-tlig - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Required} {rlig} {rlig} {} -\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Common} {liga} {liga} {} -\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Rare} {dlig} {dlig} {} -\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {} -\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual} {clig} {clig} {} -\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Historic} {hlig} {hlig} {} -% \end{macrocode} -% Emulate CM extra ligatures. -% \begin{macrocode} -%<*XE> -\keys_define:nn {fontspec-opentype} - { - Ligatures / TeX .code:n = { \tl_set:Nn \l_@@_mapping_tl {tex-text} }, - Ligatures / TeXReset .code:n = { \tl_clear:N \l_@@_mapping_tl }, - } -% -%\@@_define_opentype_onreset:nnnnn {Ligatures} {TeX} {} { +tlig } {} -% \end{macrocode} -% -% \subsection{Letters} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Letters} -\@@_define_opentype_feature:nnnnn {Letters} {ResetAll} {} {} - { - +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand, - -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {+smcp,+pcap,+c2sc,+c2pc,+unic,+rand} -\@@_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic,+rand} -\@@_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic,+rand} -\@@_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic,+rand} -\@@_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic,+rand} -\@@_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {+rand} -\@@_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {+unic} -% \end{macrocode} -% -% \subsection{Numbers} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Numbers} -\@@_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {} - { - +tnum,-tnum, - +pnum,-pnum, - +onum,-onum, - +lnum,-lnum, - +zero,-zero, - +anum,-anum, - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {Numbers} {Monospaced} {tnum} {tnum} {+pnum,-pnum} -\@@_define_opentype_onoffreset:nnnnn {Numbers} {Proportional} {pnum} {pnum} {+tnum,-tnum} -\@@_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase} {onum} {onum} {+lnum,-lnum} -\@@_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase} {lnum} {lnum} {+onum,-onum} -\@@_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero} {zero} {zero} {} -% \end{macrocode} -% -% \begin{macrocode} -\aliasfontfeatureoption {Numbers} {Monospaced} {Tabular} -\aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle} -\aliasfontfeatureoption {Numbers} {Uppercase} {Lining} -% \end{macrocode} -% -% |luaotload| provides a custom |anum| feature for replacing Latin -% (AKA Arabic) numbers with Arabic (AKA Indic-Arabic). The same feature -% maps to Farsi (Persian) numbers if font language is Farsi. -% \begin{macrocode} -% \@@_define_opentype_onoffreset:nnnnn {Numbers} {Arabic} {anum} {anum} {} -% \end{macrocode} -% -% \subsection{Vertical position} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {VerticalPosition} -\@@_define_opentype_feature:nnnnn {VerticalPosition} {ResetAll} {} {} - { - +sups,-sups, - +subs,-subs, - +ordn,-ordn, - +numr,-numr, - +dnom,-dnom, - +sinf,-sinf, - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Superior} {sups} {sups} {+subs,+ordn,+numr,+dnom,+sinf} -\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Inferior} {subs} {subs} {+sups,+ordn,+numr,+dnom,+sinf} -\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Ordinal} {ordn} {ordn} {+sups,+subs,+numr,+dnom,+sinf} -\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Numerator} {numr} {numr} {+sups,+subs,+ordn,+dnom,+sinf} -\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Denominator} {dnom} {dnom} {+sups,+subs,+ordn,+numr,+sinf} -\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {ScientificInferior} {sinf} {sinf} {+sups,+subs,+ordn,+numr,+dnom} -% \end{macrocode} -% -% \subsection{Contextuals} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Contextuals} -\@@_define_opentype_feature:nnnnn {Contextuals} {ResetAll} {} {} - { - +cswh,-cswh, - +calt,-calt, - +init,-init, - +fina,-fina, - +falt,-falt, - +medi,-medi, - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Swash} {cswh} {cswh} {} -\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Alternate} {calt} {calt} {} -\@@_define_opentype_onoffreset:nnnnn {Contextuals} {WordInitial} {init} {init} {} -\@@_define_opentype_onoffreset:nnnnn {Contextuals} {WordFinal} {fina} {fina} {} -\@@_define_opentype_onoffreset:nnnnn {Contextuals} {LineFinal} {falt} {falt} {} -\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Inner} {medi} {medi} {} -% \end{macrocode} -% -% \subsection{Diacritics} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Diacritics} -\@@_define_opentype_feature:nnnnn {Diacritics} {ResetAll} {} {} - { - +mark,-mark, - +mkmk,-mkmk, - +abvm,-abvm, - +blwm,-blwm, - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToBase} {mark} {mark} {} -\@@_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToMark} {mkmk} {mkmk} {} -\@@_define_opentype_onoffreset:nnnnn {Diacritics} {AboveBase} {abvm} {abvm} {} -\@@_define_opentype_onoffreset:nnnnn {Diacritics} {BelowBase} {blwm} {blwm} {} -% \end{macrocode} -% -% \subsection{Kerning} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Kerning} -\@@_define_opentype_feature:nnnnn {Kerning} {ResetAll} {} {} - { - +cpsp,-cpsp, - +kern,-kern, - } -\@@_define_opentype_onoffreset:nnnnn {Kerning} {Uppercase} {cpsp} {cpsp} {} -\@@_define_opentype_feature:nnnnn {Kerning} {On} {kern} {+kern} {-kern} -\@@_define_opentype_feature:nnnnn {Kerning} {Off} {kern} {-kern} {+kern} -\@@_define_opentype_feature:nnnnn {Kerning} {Reset} {} {} {+kern,-kern} -% \end{macrocode} -% -% \subsection{Fractions} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Fractions} -\@@_define_opentype_feature:nnnnn {Fractions} {ResetAll} {} {} - { - +frac,-frac, - +afrc,-afrc, - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_feature:nnnnn {Fractions} {On} {frac} {+frac} {} -\@@_define_opentype_feature:nnnnn {Fractions} {Off} {frac} {-frac} {} -\@@_define_opentype_feature:nnnnn {Fractions} {Reset} {} {} {+frac,-frac} -\@@_define_opentype_onoffreset:nnnnn {Fractions} {Alternate} {afrc} {afrc} {-frac} -% \end{macrocode} -% - -% \subsection{Style} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Style} -\@@_define_opentype_feature:nnnnn {Style} {ResetAll} {} {} - { - +salt,-salt, - +ital,-ital, - +ruby,-ruby, - +swsh,-swsh, - +hist,-hist, - +titl,-titl, - +hkna,-hkna, - +vkna,-vkna, - +ssty=0,-ssty=0, - +ssty=1,-ssty=1, - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {Style} {Alternate} {salt} {salt} {} -\@@_define_opentype_onoffreset:nnnnn {Style} {Italic} {ital} {ital} {} -\@@_define_opentype_onoffreset:nnnnn {Style} {Ruby} {ruby} {ruby} {} -\@@_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {} -\@@_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {} -\@@_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {} -\@@_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} -\@@_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna} -\@@_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna} -\@@_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna} -\@@_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1} -\@@_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0} -% \end{macrocode} -% -% \subsection{CJK shape} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {CJKShape} -\@@_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {} - { - +trad,-trad, - +smpl,-smpl, - +jp78,-jp78, - +jp83,-jp83, - +jp90,-jp90, - +jp04,-jp04, - +expt,-expt, - +nlck,-nlck, - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Traditional} {trad} {trad} {+smpl,+jp78,+jp83,+jp90,+jp04,+expt,+nlck} -\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Simplified} {smpl} {smpl} {+trad,+jp78,+jp83,+jp90,+jp04,+expt,+nlck} -\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1978} {jp78} {jp78} {+trad,+smpl,+jp83,+jp90,+jp04,+expt,+nlck} -\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1983} {jp83} {jp83} {+trad,+smpl,+jp78,+jp90,+jp04,+expt,+nlck} -\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1990} {jp90} {jp90} {+trad,+smpl,+jp78,+jp83,+jp04,+expt,+nlck} -\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS2004} {jp04} {jp04} {+trad,+smpl,+jp78,+jp83,+jp90,+expt,+nlck} -\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Expert} {expt} {expt} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+nlck} -\@@_define_opentype_onoffreset:nnnnn {CJKShape} {NLC} {nlck} {nlck} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+expt} -% \end{macrocode} -% -% \subsection{Character width} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {CharacterWidth} -\@@_define_opentype_feature:nnnnn {CharacterWidth} {ResetAll} {} {} - { - +pwid,-pwid, - +fwid,-fwid, - +hwid,-hwid, - +twid,-twid, - +qwid,-qwid, - +palt,-palt, - +halt,-halt, - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Proportional} {pwid} {pwid} {+fwid,+hwid,+twid,+qwid,+palt,+halt} -\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Full} {fwid} {fwid} {+pwid,+hwid,+twid,+qwid,+palt,+halt} -\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Half} {hwid} {hwid} {+pwid,+fwid,+twid,+qwid,+palt,+halt} -\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Third} {twid} {twid} {+pwid,+fwid,+hwid,+qwid,+palt,+halt} -\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Quarter} {qwid} {qwid} {+pwid,+fwid,+hwid,+twid,+palt,+halt} -\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateProportional} {palt} {palt} {+pwid,+fwid,+hwid,+twid,+qwid,+halt} -\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateHalf} {halt} {halt} {+pwid,+fwid,+hwid,+twid,+qwid,+palt} -% \end{macrocode} -% -% \subsection{Vertical} -% According to spec |vkrn| must also activate |vpal| if available but for simplicity we don't do that here (yet?). -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Vertical} -\@@_define_opentype_onoffreset:nnnnn {Vertical} {RotatedGlyphs} {vrt2} {vrt2} {+vrtr,+vert} -\@@_define_opentype_onoffreset:nnnnn {Vertical} {AlternatesForRotation} {vrtr} {vrtr} {+vrt2} -\@@_define_opentype_onoffreset:nnnnn {Vertical} {Alternates} {vert} {vert} {+vrt2} -\@@_define_opentype_onoffreset:nnnnn {Vertical} {KanaAlternates} {vkna} {vkna} {+hkna} -\@@_define_opentype_onoffreset:nnnnn {Vertical} {Kerning} {vkrn} {vkrn} {} -\@@_define_opentype_onoffreset:nnnnn {Vertical} {AlternateMetrics} {valt} {valt} {+vhal,+vpal,+kern} -\@@_define_opentype_onoffreset:nnnnn {Vertical} {HalfMetrics} {vhal} {vhal} {+valt,+vpal,+kern} -\@@_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal} -% \end{macrocode} -% -% -% -% -% \section{OpenType features that need numbering} -% -% \subsection{Alternate} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Alternate} -\keys_define:nn {fontspec-opentype} - { - Alternate .default:n = {0} , -% Alternate / Random .code:n = -% { \@@_make_OT_feature:nnn {salt}{ +salt = random }{} } , - Alternate / unknown .code:n = - { - \clist_map_inline:nn {#1} - { \@@_make_OT_feature:nnn {salt}{ +salt = ##1 }{} } - } - } -% \end{macrocode} -% -% \begin{macrocode} -\aliasfontfeature{Alternate}{StylisticAlternates} -% \end{macrocode} -% -% -% \subsection{Variant / StylisticSet} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Variant} -\keys_define:nn {fontspec-opentype} - { - Variant .default:n = {0} , - Variant / unknown .code:n = - { - \clist_map_inline:nn {#1} - { - \@@_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {} - } - } - } -% \end{macrocode} -% -% \begin{macrocode} -\aliasfontfeature{Variant}{StylisticSet} -% \end{macrocode} -% -% \subsection{CharacterVariant} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {CharacterVariant} -\use:x - { - \cs_new:Npn \exp_not:N \fontspec_parse_cv:w - ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil - { - \@@_make_OT_feature:xxx - { cv \exp_not:N \two@digits {##1} } { +cv \exp_not:N \two@digits {##1} = ##2 } {} - } - \keys_define:nn {fontspec-opentype} - { - CharacterVariant / unknown .code:n = - { - \clist_map_inline:nn {##1} - { - \exp_not:N \fontspec_parse_cv:w - ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil - } - } - } - } -% \end{macrocode} -% Possibilities: \verb|a:0:\q_nil| or \verb|a:b:0:\q_nil|. -% -% -% \subsection{Annotation} -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Annotation} -\keys_define:nn {fontspec-opentype} - { - Annotation .default:n = {0} , - Annotation / unknown .code:n = - { - \@@_make_OT_feature:nnn {nalt} {+nalt=#1} {} - } - } -% \end{macrocode} -% -% \subsection{Ornament} -% -% \begin{macrocode} -\@@_define_opentype_feature_group:n {Ornament} -\keys_define:nn {fontspec-opentype} - { - Ornament .default:n = {0} , - Ornament / unknown .code:n = - { - \@@_make_OT_feature:nnn {ornm} { +ornm=#1 } {} - } - } -% \end{macrocode} -% -% -% \section{Script and Language} -% -% -% \subsection{Script} -% -% \begin{macrocode} -\keys_define:nn { fontspec-opentype } { Script .choice: } -\cs_new:Nn \fontspec_new_script:nn - { - \keys_define:nn { fontspec-opentype } { Script / #1 .code:n = - \bool_set_false:N \l_@@_script_exist_bool - \clist_map_inline:nn {#2} - { - \@@_check_script:NnTF \l_fontspec_font {####1} - { - \tl_set:Nn \l_fontspec_script_tl {####1} - \int_set:Nn \l_@@_script_int {\l_@@_strnum_int} - \bool_set_true:N \l_@@_script_exist_bool - \tl_gset:Nx \g_@@_single_feat_tl { script=####1 } - \clist_map_break: - } - { } - } - \bool_if:NF \l_@@_script_exist_bool - { - \str_if_eq:nnTF {#1} {Latin} - { - \@@_warning:nx {script-not-exist} {#1} - } - { - \@@_check_script:NnTF \l_fontspec_font {latn} - { - \@@_warning:nx {script-not-exist-latn} {#1} - \tl_set:Nn \l_fontspec_script_tl {latn} - \int_set:Nn \l_@@_script_int {\l_@@_strnum_int} - } - { - \@@_warning:nx {script-not-exist} {#1} - } - } - } - } - } -% \end{macrocode} -% -% -% \subsection{Language} -% -% \begin{macrocode} -\keys_define:nn { fontspec-opentype } { Language .choice: } -\cs_new:Nn \fontspec_new_lang:nn - { - \keys_define:nn { fontspec-opentype } { Language / #1 .code:n = - \@@_check_lang:NnTF \l_fontspec_font {#2} - { - \tl_set:Nn \l_fontspec_lang_tl {#2} - \int_set:Nn \l_@@_language_int {\l_@@_strnum_int} - \tl_gset:Nx \g_@@_single_feat_tl { language=#2 } - } - { - \@@_warning:nx {language-not-exist} {#1} - \keys_set:nn { fontspec-opentype } { Language = Default } - } - } - } -% \end{macrocode} -% -% \paragraph{Default} -% -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-opentype}{ Language / Default } - { - \tl_set:Nn \l_fontspec_lang_tl {DFLT} - \int_zero:N \l_@@_language_int - \tl_gset:Nn \g_@@_single_feat_tl { language=DFLT } - } -% \end{macrocode} -% -% \paragraph{Turkish} Turns out that many fonts use `TUR' as their Turkish language tag rather than the specified `TRK'. So we check for both: -% \begin{macrocode} -\keys_define:nn {fontspec-opentype} - { - Language / Turkish .code:n = - { - \@@_check_lang:NnTF \l_fontspec_font {TRK} - { - \int_set:Nn \l_@@_language_int {\l_@@_strnum_int} - \tl_set:Nn \l_fontspec_lang_tl {TRK} - \tl_gset:Nn \g_@@_single_feat_tl { language=TRK } - } - { - \@@_check_lang:NnTF \l_fontspec_font {TUR} - { - \int_set:Nn \l_@@_language_int {\l_@@_strnum_int} - \tl_set:Nn \l_fontspec_lang_tl {TUR} - \tl_gset:Nn \g_@@_single_feat_tl { language=TUR } - } - { - \@@_warning:nx {language-not-exist} {Turkish} - \keys_set:nn {fontspec-opentype} {Language=Default} - } - } - } - } -% \end{macrocode} -% -% \section{Backwards compatibility} -% Backwards compatibility: -% \begin{macrocode} -\cs_new:Nn \@@_ot_compat:nn - { - \aliasfontfeatureoption {#1} {#2Off} {No#2} - } -\@@_ot_compat:nn {Ligatures} {Rare} -\@@_ot_compat:nn {Ligatures} {Required} -\@@_ot_compat:nn {Ligatures} {Common} -\@@_ot_compat:nn {Ligatures} {Discretionary} -\@@_ot_compat:nn {Ligatures} {Contextual} -\@@_ot_compat:nn {Ligatures} {Historic} -\@@_ot_compat:nn {Numbers} {SlashedZero} -\@@_ot_compat:nn {Contextuals} {Swash} -\@@_ot_compat:nn {Contextuals} {Alternate} -\@@_ot_compat:nn {Contextuals} {WordInitial} -\@@_ot_compat:nn {Contextuals} {WordFinal} -\@@_ot_compat:nn {Contextuals} {LineFinal} -\@@_ot_compat:nn {Contextuals} {Inner} -\@@_ot_compat:nn {Diacritics} {MarkToBase} -\@@_ot_compat:nn {Diacritics} {MarkToMark} -\@@_ot_compat:nn {Diacritics} {AboveBase} -\@@_ot_compat:nn {Diacritics} {BelowBase} -% \end{macrocode} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-fontload.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-fontload.dtx deleted file mode 100644 index 41981f3814d..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-fontload.dtx +++ /dev/null @@ -1,105 +0,0 @@ -%%^^A%% fontspec-fontload.dtx -- part of FONTSPEC - -% \section{expl3 interface for primitive font loading} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% \begin{macro}{\@@_primitive_font_set:Nnn,\@@_primitive_font_gset:Nnn} -% \begin{macrocode} -\cs_set:Npn \@@_primitive_font_set:Nnn #1#2#3 - { - \font #1 = #2 ~at~ #3 \scan_stop: - } -% \end{macrocode} -% \begin{macrocode} -\cs_set:Npn \@@_primitive_font_gset:Nnn #1#2#3 - { - \global \font #1 = #2 ~at~ #3 \scan_stop: - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_font_suppress_not_found_error:} -% \begin{macrocode} -\cs_set:Npn \@@_font_suppress_not_found_error: - { - \int_set_eq:NN \xetex_suppressfontnotfounderror:D \c_one - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}[pTF]{\@@_primitive_font_if_null:N} -% \begin{macrocode} -\prg_set_conditional:Nnn \@@_primitive_font_if_null:N {p,TF,T,F} - { - \ifx #1 \nullfont - \prg_return_true: - \else - \prg_return_false: - \fi - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}[TF]{\@@_primitive_font_if_exist:n} -% \begin{macrocode} -\prg_set_conditional:Nnn \@@_primitive_font_if_exist:n {TF,T,F} - { - \group_begin: - \@@_font_suppress_not_found_error: - \@@_primitive_font_set:Nnn \l_@@_primitive_font {#1} {10pt} - \@@_primitive_font_if_null:NTF \l_@@_primitive_font - { \group_end: \prg_return_false: } - { \group_end: \prg_return_true: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_primitive_font_glyph_if_exist:NnTF} -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_primitive_font_glyph_if_exist:Nn {p,TF,T,F} - { - \etex_iffontchar:D #1 #2 \scan_stop: - \prg_return_true: - \else: - \prg_return_false: - \fi: - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_primitive_font_set_hyphenchar:Nn} -% \begin{macrocode} -\cs_new:Nn \@@_primitive_font_set_hyphenchar:Nn - { - \tex_hyphenchar:D #1 = #2 \scan_stop: - } -% \end{macrocode} -% \end{macro} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-graphite.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-graphite.dtx deleted file mode 100644 index 1ab63f684ac..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-graphite.dtx +++ /dev/null @@ -1,123 +0,0 @@ -%%^^A%% fontspec-graphite.dtx -- part of FONTSPEC - -% \section{Graphite/AAT code} -% -% \iffalse -% \begin{macrocode} -%<*fontspec&XE> -% \end{macrocode} -% \fi -% - - -% \begin{macro}{\@@_define_aat_feature_group:n} -% \begin{macrocode} -\cs_new:Nn \@@_define_aat_feature_group:n - { \keys_define:nn {fontspec-aat} { #1 .multichoice: } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_define_aat_feature:nnnn} -% \begin{macrocode} -\cs_new:Nn \@@_define_aat_feature:nnnn - { - \keys_define:nn {fontspec-aat} - { - #1/#2 .code:n = { \@@_make_AAT_feature:nn {#3}{#4} } - } - } -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\@@_make_AAT_feature:nn} -% \begin{macrocode} -\cs_new:Nn \@@_make_AAT_feature:nn - { - \tl_if_empty:nTF {#1} - { \@@_warning:n {aat-feature-not-exist} } - { - \@@_make_AAT_feature_string:NnnTF \l_fontspec_font {#1}{#2} - { - \@@_update_featstr:n {\l_fontspec_feature_string_tl} - } - { \@@_warning:nx {aat-feature-not-exist-in-font} {#1,#2} } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_make_AAT_feature_string:NnnTF} -% This macro takes the numerical codes for a font feature and -% creates a specified macro containing the string required in the -% font definition to turn that feature on or off. Used primarily in -% [...], but also used to check if small caps -% exists in the requested font (see page~\pageref{mac:makesmallcaps}). -% -% For exclusive selectors, it's easy; just grab the string: -% For \emph{non}-exclusive selectors, it's a little more complex. -% If the selector is even, it corresponds to switching the feature on. -% If the selector is \emph{odd}, it corresponds to switching the feature off. -% But \XeTeX\ doesn't return a selector string for this number, since the -% feature is defined for the `switching on' value. So we need to check the -% selector of the previous number, and then prefix the feature string with |!| -% to denote the switch. -% -% Finally, save out the complete feature string in \cmd\l_fontspec_feature_string_tl. -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_make_AAT_feature_string:Nnn {TF,T,F} - { - \tl_set:Nx \l_@@_tmpa_tl { \XeTeXfeaturename #1 #2 } - \tl_if_empty:NTF \l_@@_tmpa_tl - { \prg_return_false: } - { - \int_compare:nTF { \XeTeXisexclusivefeature #1 #2 > 0 } - { - \tl_set:Nx \l_@@_tmpb_tl {\XeTeXselectorname #1 #2\space #3} - } - { - \int_if_even:nTF {#3} - { - \tl_set:Nx \l_@@_tmpb_tl {\XeTeXselectorname #1 #2\space #3} - } - { - \tl_set:Nx \l_@@_tmpb_tl - { - \XeTeXselectorname #1 #2\space \numexpr#3-1\relax - } - \tl_if_empty:NF \l_@@_tmpb_tl { \tl_put_left:Nn \l_@@_tmpb_tl {!} } - } - } - \tl_if_empty:NTF \l_@@_tmpb_tl - { \prg_return_false: } - { - \tl_set:Nx \l_fontspec_feature_string_tl { \l_@@_tmpa_tl = \l_@@_tmpb_tl } - \prg_return_true: - } - } - } -% \end{macrocode} -% \end{macro} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-interfaces.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-interfaces.dtx deleted file mode 100644 index 10449bf5e3b..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-interfaces.dtx +++ /dev/null @@ -1,246 +0,0 @@ -%%^^A%% fontspec-interfaces.dtx -- part of FONTSPEC - -% \section{User commands}\label{sec:codeuser} -% -% This section contains the definitions of the commands detailed in -% the user documentation. Only the `top level' definitions of the -% commands are contained herein; they all use or define macros which -% are defined or used later on in \vref{sec:codeinternal}. -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% \begin{macrocode} -\NewDocumentCommand \fontspec { O{} m O{} } - { - \@@_main_fontspec:nn {#1,#3} {#2} - \ignorespaces - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \setmainfont { O{} m O{} } - { - \@@_main_setmainfont:nn {#1,#3} {#2} - \ignorespaces - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \setsansfont { O{} m O{} } - { - \@@_main_setsansfont:nn {#1,#3} {#2} - \ignorespaces - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \setmonofont { O{} m O{} } - { - \@@_main_setmonofont:nn {#1,#3} {#2} - \ignorespaces - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \setmathrm { O{} m O{} } - { - \@@_main_setmathrm:nn {#1,#3} {#2} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \setboldmathrm { O{} m O{} } - { - \@@_main_setboldmathrm:nn {#1,#3} {#2} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \setmathsf { O{} m O{} } - { - \@@_main_setmathsf:nn {#1,#3} {#2} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \setmathtt { O{} m O{} } - { - \@@_main_setmathtt:nn {#1,#3} {#2} - } -% \end{macrocode} -% -% \begin{macro}{\setromanfont} -% This is the old name for \cs{setmainfont}, retained \emph{ad infinitum} -% for backwards compatibility. It was deprecated in 2010. -% \begin{macrocode} -\NewDocumentCommand \setromanfont { O{} m O{} } - { - \@@_main_setmainfont:nn {#1,#3} {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\NewDocumentCommand \newfontfamily { m O{} m O{} } - { - \@@_main_newfontfamily:nnnN {#1} {#2,#4} {#3} \NewDocumentCommand - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \renewfontfamily { m O{} m O{} } - { - \@@_main_newfontfamily:nnnN {#1} {#2,#4} {#3} \RenewDocumentCommand - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \setfontfamily { m O{} m O{} } - { - \@@_main_newfontfamily:nnnN {#1} {#2,#4} {#3} \DeclareDocumentCommand - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \newfontface { m O{} m O{} } - { - \@@_main_newfontface:nnn {#1} {#2,#4} {#3} - } -% \end{macrocode} -% -% \begin{macro}{\defaultfontfeatures} -% This macro takes one argument that consists of all of feature -% options that will be applied by default to all subsequent \cs{fontspec} commands. -% \begin{macrocode} -\NewDocumentCommand \defaultfontfeatures { t+ o m } - { - \IfNoValueTF {#2} - { \@@_set_default_features:nn {#1} {#3} } - { \@@_set_font_default_features:nnn {#1} {#2} {#3} } - \ignorespaces - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\NewDocumentCommand \addfontfeatures {m} - { - \@@_main_addfontfeatures:n {#1} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \addfontfeature {m} - { - \@@_main_addfontfeatures:n {#1} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \newfontfeature {mm} - { - \@@_main_newfontfeature:nn {#1} {#2} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \newAATfeature {mmmm} - { - \@@_main_newAATfeature:nnnn {#1} {#2} {#3} {#4} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \newopentypefeature {mmm} - { - \@@_main_newopentypefeature:nnn {#1} {#2} {#3} - } -% \end{macrocode} -% -% \begin{macro}{\newICUfeature} -% Deprecated. -% \begin{macrocode} -\NewDocumentCommand \newICUfeature {mmm} - { - \@@_main_newopentypefeature:nnn {#1} {#2} {#3} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\NewDocumentCommand \aliasfontfeature {mm} - { - \@@_main_aliasfontfeature:nn {#1} {#2} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \aliasfontfeatureoption {mmm} - { - \@@_main_aliasfontfeatureoption:nnn {#1} {#2} {#3} - } -% \end{macrocode} -% -% \begin{macro}{\newfontscript} -% Mostly used internally, but also possibly useful for users, to define new OpenType -% `scripts', mapping logical names to OpenType script tags. -% \begin{macrocode} -\NewDocumentCommand \newfontscript {mm} - { - \fontspec_new_script:nn {#1} {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\newfontlanguage} -% Mostly used internally, but also possibly useful for users, to define new OpenType -% `languages', mapping logical names to OpenType language tags. -% \begin{macrocode} -\NewDocumentCommand \newfontlanguage {mm} - { - \fontspec_new_lang:nn {#1} {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\NewDocumentCommand \DeclareFontExtensions {m} - { - \@@_main_DeclareFontExtensions:n {#1} - } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand \IfFontFeatureActiveTF {mmm} - { - \@@_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3} - } -% \end{macrocode} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-internal.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-internal.dtx deleted file mode 100644 index d115aa648d1..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-internal.dtx +++ /dev/null @@ -1,1098 +0,0 @@ -%%^^A%% fontspec-internal.dtx -- part of FONTSPEC - -% \section{Internals} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% \subsection{The main function for setting fonts} -% -% \begin{macro}{\@@_select_font_family:nn} -% This is the command that defines font families for use, the underlying -% procedure of all \cmd\fontspec-like commands. Given a -% list of font features (|#1|) for a requested font (|#2|), -% it will define an NFSS -% family for that font and put the family name (globally) into \cs{l_fontspec_family_tl}. -% The \TeX\ `\cs{font}' command is (globally) stored in \cs{l_fontspec_font}. -% -% This macro does its processing inside a group to attempt to restrict the scope of its internal processing. -% This works to some degree to insulate the internal commands from having to be manually cleared. -% -% Some often-used variables to know about: -% \begin{itemize} -% \item \cmd{\l_fontspec_fontname_tl} is used as the generic name of the font being defined. -% \item \cmd{\l_@@_fontid_tl} is the unique identifier of the font with all its features. -% \item \cmd{\l_@@_fontname_up_tl} is the font specifically to be used as the upright font. -% \item \cmd{\l_@@_basename_tl} is the (immutable) original argument used for |*|-replacing. -% \item \cmd{\l_fontspec_font} is the plain \TeX{} font of the upright font requested. -% \end{itemize} -% \begin{macrocode} -\cs_new_protected:Nn \@@_select_font_family:nn - { -%\typeout{^^J^^J::::::::::::::::::::::::::::::^^J:: fontspec_select:nn~ {#1}~ {#2} } - \group_begin: - \@@_font_suppress_not_found_error: - \@@_init: - - \@@_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2} - \@@_sanitise_fontname:Nn \l_@@_fontname_up_tl {#2} - \@@_sanitise_fontname:Nn \l_@@_basename_tl {#2} - - \@@_if_detect_external:nT {#2} - { \keys_set:nn {fontspec-preparse-external} {Path} } - - \keys_set_known:nn {fontspec-preparse-cfg} {#1} - - \@@_init_ttc:n {#2} - \@@_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2} - - \@@_extract_all_features:n {#1} - \tl_set:Nx \l_@@_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l_@@_all_features_clist } - -%\typeout{fontid: \l_@@_fontid_tl} - - \@@_preparse_features: - \@@_load_font: - \@@_set_scriptlang: - \@@_get_features:n {} - \bool_set_false:N \l_@@_firsttime_bool - - \@@_save_family_needed:nTF {#2} - { - \@@_save_family:nn {#1} {#2} -% \@@_warning:nxx {defining-font} {#1} {#2} - } - { -% \typeout{Font~ family~ already~ defined.} - } - \group_end: - - \tl_set_eq:NN \l_fontspec_family_tl \g_@@_nfss_family_tl - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_select:nn} -% This old name has been used by 3rd party packages so for compatibility: -% \begin{macrocode} -\cs_set_eq:NN \fontspec_select:nn \@@_select_font_family:nn %% deprecated, for compatibility only -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_sanitise_fontname:Nn} -% Assigns font name |#2| to token list variable |#1| and strips extension(s) from it in the case of an external font. -% We strip spaces for luatex for consistency with luaotfload, although I'm not sure this is necessary any more. -% At one stage this also lowercased the name, but this step has been removed unless someone can remind me why it was necessary. -% \begin{macrocode} -\cs_new:Nn \@@_sanitise_fontname:Nn - { - \tl_set:Nx #1 {#2} -% \tl_remove_all:Nn #1 {~} - \clist_map_inline:Nn \l_@@_extensions_clist - { - \tl_if_in:NnT #1 {##1} - { - \tl_remove_once:Nn #1 {##1} - \tl_set:Nn \l_@@_extension_tl {##1} - \clist_map_break: - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_if_detect_external:nT} -% Check if either the fontname ends with a known font extension. -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_if_detect_external:n {T} - { -% \typeout{:: @@_if_detect_external:n { \exp_not:n {#1} } } - \clist_map_inline:Nn \l_@@_extensions_clist - { - \bool_set_false:N \l_@@_tmpa_bool - \exp_args:Nx % <- this should be handled earlier - \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string} - { \bool_set_true:N \l_@@_tmpa_bool \clist_map_break: } - } - \bool_if:NTF \l_@@_tmpa_bool \prg_return_true: \prg_return_false: - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_init_ttc:n} -% For TTC fonts we assume they will be loading the italic/bold fonts from the same file, -% so prepopulate the fontnames to avoid needing to do it manually. -% \begin{macrocode} -\cs_new:Nn \@@_init_ttc:n - { - \str_if_eq_x:nnT { \str_lower_case:f {\l_@@_extension_tl} } {.ttc} - { - \@@_sanitise_fontname:Nn \l_@@_fontname_it_tl {#1} - \@@_sanitise_fontname:Nn \l_@@_fontname_bf_tl {#1} - \@@_sanitise_fontname:Nn \l_@@_fontname_bfit_tl {#1} - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_external_fontoptions:Nn} -% Load a possible \texttt{.fontspec} font configuration file. -% This file could set font-specific options for the font about to be loaded. -% \begin{macrocode} -\cs_new:Nn \@@_load_external_fontoptions:Nn - { - \bool_if:NT \l_@@_fontcfg_bool - { -% \typeout{:: @@_load_external_fontoptions:Nn \exp_not:N #1 {#2} } - \@@_sanitise_fontname:Nn #1 {#2} - \tl_set:Nx \l_@@_ext_filename_tl {#1.fontspec} - \tl_remove_all:Nn \l_@@_ext_filename_tl {~} - \prop_if_in:NVF \g_@@_fontopts_prop #1 - { - \exp_args:No \file_if_exist:nT { \l_@@_ext_filename_tl } - { \file_input:n { \l_@@_ext_filename_tl } } - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_extract_all_features:} -% \begin{macrocode} -\cs_new:Nn \@@_extract_all_features:n - { -% \typeout{:: @@_extract_all_features:n { \unexpanded {#1} } } - \bool_if:NTF \l_@@_disable_defaults_bool - { - \clist_set:Nx \l_@@_all_features_clist {#1} - } - { - \prop_get:NVNF \g_@@_fontopts_prop \l_fontspec_fontname_tl \l_@@_fontopts_clist - { \clist_clear:N \l_@@_fontopts_clist } - - \prop_get:NVNF \g_@@_fontopts_prop \l_@@_family_label_tl \l_@@_family_fontopts_clist - { \clist_clear:N \l_@@_family_fontopts_clist } - \tl_clear:N \l_@@_family_label_tl - - \clist_set:Nx \l_@@_all_features_clist - { - \g_@@_default_fontopts_clist, - \l_@@_family_fontopts_clist, - \l_@@_fontopts_clist, - #1 - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_preparse_features:} -% \darg{feature options} -% \darg{font name} -% Perform the (multi-step) feature parsing process. -% -% Convert the requested features to font definition -% strings. First the features are parsed for information about font -% loading (whether it's a named font or external font, etc.), and then -% information is extracted for the names of the other shape fonts. -% \begin{macrocode} -\cs_new:Nn \@@_preparse_features: - { -% \typeout{:: @@_preparse_features:} -% \end{macrocode} -% Detect if external fonts are to be used, possibly automatically, and -% parse fontspec features for bold/italic fonts and their features. -% \begin{macrocode} - - \@@_keys_set_known:nxN {fontspec-preparse-external} - { \l_@@_all_features_clist } - \l_@@_keys_leftover_clist - -% \end{macrocode} -% When \cmd{\l_fontspec_fontname_tl} is augmented with a prefix or whatever to create -% the name of the upright font (\cmd{\l_@@_fontname_up_tl}), this latter is the new `general -% font name' to use. -% \begin{macrocode} - \tl_set_eq:NN \l_fontspec_fontname_tl \l_@@_fontname_up_tl - \@@_keys_set_known:nxN {fontspec-renderer} {\l_@@_keys_leftover_clist} - \l_@@_keys_leftover_clist - \@@_keys_set_known:nxN {fontspec-preparse} {\l_@@_keys_leftover_clist} - \l_@@_fontfeat_clist - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_font:} -% \begin{macrocode} -\cs_new:Nn \@@_load_font: - { -%\typeout{:: @@_load_font} -%\typeout{Set~ base~ font~ for~ preliminary~ analysis: \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } - \@@_primitive_font_set:Nnn \l_fontspec_font - { \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } {\f@size pt} - \@@_primitive_font_if_null:NT \l_fontspec_font { \@@_error:nx {font-not-found} {\l_@@_fontname_up_tl} } - \@@_set_font_type:N \l_fontspec_font -%\typeout{Set~ base~ font~ properly: \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } - \@@_primitive_font_gset:Nnn \l_fontspec_font - { \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} } {\f@size pt} - \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_construct_font_call:nn} -% Constructs the complete font invocation. -% \darg{Base name} -% \darg{Extension} -% \darg{TTC Index} -% \darg{Renderer} -% \darg{Optical size} -% \darg{Font features} -% We check if \meta{Font features} are empty and if so don't add in the separator colon. -% \begin{macrocode} -\cs_new:Nn \@@_construct_font_call:nnnnnn - { -% " \@@_fontname_wrap:n { #1 #2 #3 } -% " \@@_fontname_wrap:n { #1 #2 } #3 - #4 #5 - \str_if_eq_x:nnF {#6}{} {:#6} " - } -% \end{macrocode} -% In practice, we don't use the six-argument version, since most arguments are constructed on-the-fly: -% \begin{macrocode} -\cs_new:Nn \@@_construct_font_call:nn - { - \@@_construct_font_call:nnnnnn - {#1} - \l_@@_extension_tl - \l_@@_ttc_index_tl - \l_fontspec_renderer_tl - \l_@@_optical_size_tl - {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_font_is_file:,\@@_font_is_name:} -% The \cs{@@_fontname_wrap:n} command takes the font name and either passes it through unchanged or wraps it in the syntax for loading a font `by filename'. -% \XeTeX's syntax is followed since \pkg{luaotfload} provides compatibility. -% \begin{macrocode} -\cs_new:Nn \@@_font_is_name: - { - \cs_set_eq:NN \@@_fontname_wrap:n \use:n - } -\cs_new:Nn \@@_font_is_file: - { - \cs_set:Npn \@@_fontname_wrap:n ##1 { [ \l_@@_font_path_tl ##1 ] } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_scriptlang:} -% Only necessary for OpenType fonts. -% First check if the font supports scripts, then apply defaults if -% none are explicitly requested. Similarly with the language settings. -% \begin{macrocode} -\cs_new:Nn \@@_set_scriptlang: - { - \bool_if:NT \l_@@_firsttime_bool - { - \tl_if_empty:NTF \l_@@_script_name_tl - { - \@@_check_script:NnTF \l_fontspec_font {latn} - { - \tl_set:Nn \l_@@_script_name_tl {Latin} - \tl_if_empty:NT \l_@@_lang_name_tl - { - \tl_set:Nn \l_@@_lang_name_tl {Default} - } - \keys_set:nx {fontspec-opentype} {Script=\l_@@_script_name_tl} - \keys_set:nx {fontspec-opentype} {Language=\l_@@_lang_name_tl} - } - { - \@@_info:n {no-scripts} - } - } - { - \tl_if_empty:NT \l_@@_lang_name_tl - { - \tl_set:Nn \l_@@_lang_name_tl {Default} - } - \keys_set:nx {fontspec-opentype} {Script=\l_@@_script_name_tl} - \keys_set:nx {fontspec-opentype} {Language=\l_@@_lang_name_tl} - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_get_features:Nn} -% This macro is a wrapper for |\keys_set:nn| which expands and adds a -% default specification to the original passed options. It begins by -% initialising the commands used to hold font-feature specific -% strings. -% Its argument is any additional features to prepend to the default. -% -% Do not set the colour if not explicitly spec'd else \verb|\color| (using -% specials) will not work. -% \begin{macrocode} -\cs_new:Nn \@@_get_features:n - { -% \typeout{:: @@_get_features:Nn { \exp_not:n {#1} } } - \@@_init_fontface: - \@@_keys_set_known:nxN {fontspec-renderer} {\l_@@_fontfeat_clist,#1} - \l_@@_keys_leftover_clist - \@@_keys_set_known:nxN {fontspec} {\l_@@_keys_leftover_clist} \l_@@_keys_leftover_clist -%<*XE> - \bool_if:NTF \l_@@_ot_bool - { -% \typeout{::: Setting~ keys~ for~ OpenType~ font~ features:~"\l_@@_keys_leftover_clist"} - % \tracingall - \keys_set:nV {fontspec-opentype} \l_@@_keys_leftover_clist - % \EROROR - } - { -% \typeout{::: Setting~ keys~ for~ AAT/Graphite~ font~ features:~"\l_@@_keys_leftover_clist"} - \bool_if:nT { \l_@@_atsui_bool || \l_@@_graphite_bool } - { \keys_set:nV {fontspec-aat} \l_@@_keys_leftover_clist } - } -% -%<*LU> -% \typeout{::: Setting~ keys~ for~ OpenType~ font~ features:~"\l_@@_keys_leftover_clist"} - \keys_set:nV {fontspec-opentype} \l_@@_keys_leftover_clist -% - - \tl_if_empty:NF \l_@@_mapping_tl - { \@@_update_featstr:n { mapping = \l_@@_mapping_tl } } - - \str_if_eq_x:nnF { \l_@@_hexcol_tl \l_@@_opacity_tl } - { \c_@@_hexcol_tl \c_@@_opacity_tl } - { \@@_update_featstr:n { color = \l_@@_hexcol_tl\l_@@_opacity_tl } } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_save_family_needed:nTF} -% Check if the family is unique and, if so, save its information. -% (\cs{addfontfeature} and other macros use this data.) -% Then the font family and its shapes are defined in the NFSS. -% -% Now we have a unique (in fact, too unique!) string that contains -% the family name and every option in abbreviated form. This is used -% with a counter to create a simple NFSS family name for the font we're -% selecting. -% -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_save_family_needed:n { TF } - { - -% \typeout{save~ family:~ #1} -% \typeout{== fontid_tl: "\l_@@_fontid_tl".} - - \tl_if_empty:NTF \l_@@_nfss_fam_tl - { - \prop_get:NVNTF \g_@@_fontid_family_prop \l_@@_fontid_tl \l_@@_tmp_tl - { - \tl_gset_eq:NN \g_@@_nfss_family_tl \l_@@_tmp_tl - \prg_return_false: - } - { - \tl_set:Nx \l_@@_tmp_tl {#1} - \tl_remove_all:Nn \l_@@_tmp_tl { ~ } - \@@_save_fontid_family:VV \l_@@_fontid_tl \l_@@_tmp_tl - \prg_return_true: - } - } - { - \tl_gset_eq:NN \g_@@_nfss_family_tl \l_@@_nfss_fam_tl - \cs_undefine:c { g_@@_fontinfo_ \g_@@_nfss_family_tl _prop } - \prg_return_true: - } - } -\cs_new:Nn \@@_save_fontid_family:nn - { - \prop_get:NnNTF \g_@@_family_int_prop {#2} \l_@@_tmp_tl - { - \tl_set:Nx \l_@@_tmp_tl - { \int_eval:n { \l_@@_tmp_tl + 1 } } - } - { \tl_set:Nn \l_@@_tmp_tl { 0 } } - \prop_gput:NnV \g_@@_family_int_prop {#2} \l_@@_tmp_tl - \tl_gset:Nx \g_@@_nfss_family_tl { #2 ( \l_@@_tmp_tl ) } - \prop_gput:NnV \g_@@_fontid_family_prop {#1} \g_@@_nfss_family_tl - } -\cs_generate_variant:Nn \@@_save_fontid_family:nn { VV } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_save_family:nn} -% Saves the relevant font information for future processing. -% \begin{macrocode} -\cs_new:Nn \@@_save_family:nn - { - \@@_save_fontinfo:n {#2} - \@@_find_autofonts: - \DeclareFontFamily{\g_@@_nfss_enc_tl}{\g_@@_nfss_family_tl}{} - \@@_set_faces: - \@@_info:nxx {defining-font} {#1} {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_save_fontinfo:n} -% Saves the relevant font information for future processing. -% \begin{macrocode} -\cs_new:Nn \@@_save_fontinfo:n - { - \prop_new:c {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} - \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {fontname} { #1 } - \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {options} { \l_@@_all_features_clist } - \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {fontdef} - { - \@@_construct_font_call:nn {\l_fontspec_fontname_tl} - { \l_@@_pre_feat_sclist \g_@@_rawfeatures_sclist } - } - \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {script-num} \l_@@_script_int - \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {lang-num} \l_@@_language_int - \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {script-tag} \l_fontspec_script_tl - \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {lang-tag} \l_fontspec_lang_tl - } -% \end{macrocode} -% \end{macro} -% -% \subsection{Setting font shapes in a family} -% -% All NFSS specifications take their default values, so if any of them -% are redefined, the shapes will be selected to fit in with the -% current state. For example, if \cmd\bfdefault\ is redefined to |b|, all -% bold shapes defined by this package will also be assigned to |b|. -% -% The combination shapes are searched first because they use information that may be redefined in the single cases. -% E.g., if no bold font is specified then |set_autofont| will attempt to set it. -% This has subtle/small ramifications on the logic of choosing the bold italic font. -% -% \begin{macro}{\@@_find_autofonts:} -% \begin{macrocode} -\cs_new:Nn \@@_find_autofonts: - { - \bool_if:nF {\l_@@_noit_bool || \l_@@_nobf_bool} - { - \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_@@_fontname_it_tl} {/B} - \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_@@_fontname_bf_tl} {/I} - \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI} - } - - \bool_if:NF \l_@@_nobf_bool - { - \@@_set_autofont:Nnn \l_@@_fontname_bf_tl {\l_fontspec_fontname_tl} {/B} - } - - \bool_if:NF \l_@@_noit_bool - { - \@@_set_autofont:Nnn \l_@@_fontname_it_tl {\l_fontspec_fontname_tl} {/I} - } - - \@@_set_autofont:Nnn \l_@@_fontname_bfsl_tl {\l_@@_fontname_sl_tl} {/B} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_faces:} -% \begin{macrocode} -\cs_new:Nn \@@_set_faces: - { - \@@_add_nfssfont:nnnn \mddefault \updefault \l_fontspec_fontname_tl \l_@@_fontfeat_up_clist - \@@_add_nfssfont:nnnn \bfdefault \updefault \l_@@_fontname_bf_tl \l_@@_fontfeat_bf_clist - \@@_add_nfssfont:nnnn \mddefault \itdefault \l_@@_fontname_it_tl \l_@@_fontfeat_it_clist - \@@_add_nfssfont:nnnn \mddefault \sldefault \l_@@_fontname_sl_tl \l_@@_fontfeat_sl_clist - \@@_add_nfssfont:nnnn \bfdefault \itdefault \l_@@_fontname_bfit_tl \l_@@_fontfeat_bfit_clist - \@@_add_nfssfont:nnnn \bfdefault \sldefault \l_@@_fontname_bfsl_tl \l_@@_fontfeat_bfsl_clist - - \prop_map_inline:Nn \l_@@_nfssfont_prop { \@@_set_faces_aux:nnnnn ##2 } - } -\cs_new:Nn \@@_set_faces_aux:nnnnn - { - \fontspec_complete_fontname:Nn \l_@@_curr_fontname_tl {#3} - \@@_make_font_shapes:Nnnnn \l_@@_curr_fontname_tl {#1} {#2} {#4} {#5} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_complete_fontname:Nn} -% This macro defines |#1| as the input with any |*| tokens of its input -% replaced by the font name. This lets us define supplementary fonts in full -% (``\texttt{Baskerville Semibold}'') or in abbreviation (``\texttt{* Semibold}''). -% \begin{macrocode} -\cs_new:Nn \fontspec_complete_fontname:Nn - { - \tl_set:Nx #1 {#2} - \tl_replace_all:Nnx #1 {*} {\l_@@_basename_tl} -% \tl_remove_all:Nn #1 {~} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_add_nfssfont:nnnn} -% \darg{series} -% \darg{shape} -% \darg{fontname} -% \darg{fontspec features} -% \begin{macrocode} -\cs_new:Nn \@@_add_nfssfont:nnnn - { - \tl_set:Nx \l_@@_this_font_tl {#3} - - \tl_if_empty:xTF {#4} - { \clist_set:Nn \l_@@_sizefeat_clist {Size={-}} } - { \@@_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l_@@_tmp_tl } - - \tl_if_empty:NF \l_@@_this_font_tl - { - \prop_put:Nxx \l_@@_nfssfont_prop {#1/#2} - { {#1}{#2}{\l_@@_this_font_tl}{#4}{\l_@@_sizefeat_clist} } - } - } -% \end{macrocode} -% \end{macro} -% -% -% \subsubsection{Fonts} -% -% \begin{macro}{\@@_set_font_type:N} -% Now check if the font is to be rendered with \ATSUI\ or Harfbuzz. This will either -% be automatic (based on the font type), or specified by the user via a font feature. -% -% This macro sets booleans -% accordingly depending if the font in \cmd\l_fontspec_font\ is an \AAT\ -% font or an OpenType font or a font with feature axes (either \AAT\ or -% Multiple Master), respectively. -% \begin{macrocode} -\cs_new:Nn \@@_set_font_type:N - { -% \typeout{:: @@_set_font_type:} -%<*XE> - \bool_set_false:N \l_@@_tfm_bool - \bool_set_false:N \l_@@_atsui_bool - \bool_set_false:N \l_@@_ot_bool - \bool_set_false:N \l_@@_mm_bool - \bool_set_false:N \l_@@_graphite_bool - \ifcase\XeTeXfonttype #1 - \bool_set_true:N \l_@@_tfm_bool - \or - \bool_set_true:N \l_@@_atsui_bool - \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/AAT} } - \ifnum\XeTeXcountvariations #1 > \c_zero - \bool_set_true:N \l_@@_mm_bool - \fi - \or - \bool_set_true:N \l_@@_ot_bool - \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/OT} } - \or - \bool_set_true:N \l_@@_graphite_bool - \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/GR} } - \fi -% -% \end{macrocode} -% If automatic, the \cmd{\l_fontspec_renderer_tl} token list will still be -% empty (other suffices that could be added will be later in the feature -% processing), and if it is indeed still empty, assign it a value so that the -% other weights of the font are specifically loaded with the same renderer. -% -% LuaTeX only supports one: -% \begin{macrocode} -%<*LU> - \bool_set_true:N \l_@@_ot_bool -% - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_autofont:Nnn} -% \darg{Font name tl} -% \darg{Base font name} -% \darg{Font name modifier} -% -% This function looks for font with \meta{name} and \meta{modifier} |#2#3|, and if found (i.e., different to font with name |#2|) stores it in tl |#1|. A modifier is something like |/B| to look for a bold font, for example. -% -% We can't match external fonts in this way (in \XeTeX\ anyway; todo: test with LuaTeX). -% If \meta{font name tl} is not empty, then it's already been specified by the user so abort. -% If \meta{Base font name} is not given, we also abort for obvious reasons. -% -% If \meta{font name tl} is empty, then proceed. -% If not found, \meta{font name tl} remains empty. -% Otherwise, we have a match. -% \begin{macrocode} -\cs_new:Nn \@@_set_autofont:Nnn - { - \bool_if:NF \l_@@_external_bool - { - \tl_if_empty:xF {#2} - { - \tl_if_empty:NT #1 - { - \@@_if_autofont:nnTF {#2} {#3} - { \tl_set:Nx #1 {#2#3} } - { \@@_info:nx {no-font-shape} {#2#3} } - } - } - } - } - -\prg_new_conditional:Nnn \@@_if_autofont:nn {T,TF} - { - \@@_primitive_font_set:Nnn \l_tmpa_font { \@@_construct_font_call:nn {#1} {} } {\f@size pt} - \@@_primitive_font_set:Nnn \l_tmpb_font { \@@_construct_font_call:nn {#1#2} {} } {\f@size pt} - \str_if_eq_x:nnTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font } - { \prg_return_false: } - { \prg_return_true: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_make_font_shapes:Nnnnn} -% \darg{Font name} -% \darg{Font series} -% \darg{Font shape} -% \darg{Font features} -% \darg{Size features} -% This macro eventually uses \cs{DeclareFontShape} to define the font shape in -% question. -% \begin{macrocode} -\cs_new:Nn \@@_make_font_shapes:Nnnnn - { - \group_begin: - \@@_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l_@@_leftover_clist - \@@_load_fontname:n {#1} - \@@_declare_shape:nnxx {#2} {#3} { \l_@@_fontopts_clist, \l_@@_leftover_clist } {#5} - \group_end: - } - -\cs_new:Nn \@@_load_fontname:n - { -% \typeout{:: @@_load_fontname:n {#1} } - \@@_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#1} - \prop_get:NVNF \g_@@_fontopts_prop \l_fontspec_fontname_tl \l_@@_fontopts_clist - { \clist_clear:N \l_@@_fontopts_clist } - \keys_set_groups:nnV {fontspec/fontname} {getfontname} \l_@@_fontopts_clist - \@@_primitive_font_set:Nnn \l_fontspec_font { \@@_construct_font_call:nn {\l_fontspec_fontname_tl} {} } {\f@size pt} - \@@_primitive_font_if_null:NT \l_fontspec_font { \@@_error:nx {font-not-found} {#1} } - } -% \end{macrocode} -% -% \begin{macrocode} -\keys_define:nn {fontspec/fontname} - { - Font .tl_set:N = \l_fontspec_fontname_tl , - Font .groups:n = {getfontname} , - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_declare_shape:nnnn} -% \darg{Font series} -% \darg{Font shape} -% \darg{Font features} -% \darg{Size features} -% Wrapper for \cmd\DeclareFontShape. -% And finally the actual font shape declaration using \cmd\l_@@_nfss_tl\ defined above. -% \cmd\l_@@_postadjust_tl\ is defined in various places to deal with things like the hyphenation -% character and interword spacing. -% -% The main part is to loop through \feat{SizeFeatures} arguments, which are of the form -% {\par\centering |SizeFeatures={{},{},{}}|.\par} -% \begin{macrocode} -\cs_new:Nn \@@_declare_shape:nnnn - { -%\typeout{=~ declare_shape:~{\l_fontspec_fontname_tl}~{#1}~{#2}} - \tl_clear:N \l_@@_nfss_tl - \tl_clear:N \l_@@_nfss_sc_tl - \tl_set_eq:NN \l_@@_saved_fontname_tl \l_fontspec_fontname_tl - - \exp_args:Nx \clist_map_inline:nn {#4} { \@@_setup_single_size:nn {#3} {##1} } - - \@@_declare_shapes_normal:nn {#1} {#2} - \@@_declare_shapes_smcaps:nn {#1} {#2} - \@@_declare_shape_slanted:nn {#1} {#2} - \@@_declare_shape_loginfo:nn {#1} {#2} - } -\cs_generate_variant:Nn \@@_declare_shape:nnnn {nnxx} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_setup_single_size:nn} -% \begin{macrocode} -\cs_new:Nn \@@_setup_single_size:nn - { - \tl_clear:N \l_@@_size_tl - \tl_set_eq:NN \l_@@_sizedfont_tl \l_@@_saved_fontname_tl % in case not spec'ed - - \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n #2 } - \l_@@_sizing_leftover_clist - \tl_if_empty:NT \l_@@_size_tl { \@@_error:n {no-size-info} } -%\typeout{==~ size:~\l_@@_size_tl} - - % "normal" - \@@_load_fontname:n {\l_@@_sizedfont_tl} - \@@_setup_nfss:Nnnn \l_@@_nfss_tl {#1} {\l_@@_sizing_leftover_clist} {} -% \typeout{===~ sized~ font:~ \l_@@_sizedfont_tl} - - % small caps - \clist_set_eq:NN \l_@@_fontfeat_curr_clist \l_@@_fontfeat_sc_clist - - \bool_if:NF \l_@@_nosc_bool - { - \tl_if_empty:NTF \l_@@_fontname_sc_tl - { - \@@_make_smallcaps:TF - { -%\typeout{====~Small~ caps~ found.} - \clist_put_left:Nn \l_@@_fontfeat_curr_clist {Letters=SmallCaps} - } - { -%\typeout{====~Small~ caps~ not~ found.} - \bool_set_true:N \l_@@_nosc_bool - } - } - { \@@_load_fontname:n {\l_@@_fontname_sc_tl} }% local for each size - } - - \bool_if:NF \l_@@_nosc_bool - { - \@@_setup_nfss:Nnnn \l_@@_nfss_sc_tl - {#1} {\l_@@_sizing_leftover_clist} {\l_@@_fontfeat_curr_clist} - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_setup_nfss:Nnnn} -% \begin{macrocode} -\cs_new:Nn \@@_setup_nfss:Nnnn - { -%\typeout{====~Setup~NFSS~shape:~<\l_@@_size_tl>~\l_fontspec_fontname_tl} - - \@@_get_features:n { #2 , #3 , #4 } -%\typeout{====~Gathered~features:~\g_@@_rawfeatures_sclist} - - \tl_put_right:Nx #1 - { - <\l_@@_size_tl> \l_@@_scale_tl - \@@_construct_font_call:nn { \l_fontspec_fontname_tl } - { \l_@@_pre_feat_sclist \g_@@_rawfeatures_sclist } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_declare_shapes_normal:nn} -% \begin{macrocode} -\cs_new:Nn \@@_declare_shapes_normal:nn - { - \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl} - {#1} {#2} {\l_@@_nfss_tl}{\l_@@_postadjust_tl} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_declare_shapes_smcaps:nn} -% \begin{macrocode} -\cs_new:Nn \@@_declare_shapes_smcaps:nn - { - \tl_if_empty:NF \l_@@_nfss_sc_tl - { - \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl} {#1} - { \@@_combo_sc_shape:n {#2} } {\l_@@_nfss_sc_tl} {\l_@@_postadjust_tl} - } - } - -\cs_new:Nn \@@_combo_sc_shape:n - { - \tl_if_exist:cTF { \@@_shape_merge:nn {#1} {\scdefault} } - { \tl_use:c { \@@_shape_merge:nn {#1} {\scdefault} } } - { \scdefault } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_DeclareFontShape:nnnnnn} -% \begin{macrocode} -\cs_new:Nn \@@_DeclareFontShape:nnnnnn - { -%\typeout{DeclareFontShape:~{#1}{#2}{#3}{#4}...} - \group_begin: - \normalsize - \cs_undefine:c {#1/#2/#3/#4/\f@size} - \group_end: - \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6} - } -\cs_generate_variant:Nn \@@_DeclareFontShape:nnnnnn {xxxxxx} -% \end{macrocode} -% -% \begin{macro}{\@@_declare_shape_slanted:nn} -% This extra stuff for the slanted shape substitution is a little bit awkward. -% We define the slanted shape to be a synonym for it when (a)~we're defining an italic font, but also (b)~when the default slanted shape isn't `it'. -% (Presumably this turned up once in a test and I realised it caused problems. I doubt this would happen much.) -% -% We should test when a slanted font has been specified and not run this code if so, but the \verb|\@@_set_slanted:| code will overwrite this anyway if necessary. -% \begin{macrocode} -\cs_new:Nn \@@_declare_shape_slanted:nn - { - \bool_if:nT - { - \str_if_eq_x_p:nn {#2} {\itdefault} && - !(\str_if_eq_x_p:nn {\itdefault} {\sldefault}) - } - { - \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl}{\g_@@_nfss_family_tl}{#1}{\sldefault} - {<->ssub*\g_@@_nfss_family_tl/#1/\itdefault}{\l_@@_postadjust_tl} - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_declare_shape_loginfo:nn} -% Lastly some informative messaging. -% \begin{macrocode} -\cs_new:Nn \@@_declare_shape_loginfo:nn - { - \tl_gput_right:Nx \g_@@_defined_shapes_tl - { - \exp_not:n { \\ } - -~ \exp_not:N \str_case:nn {#1/#2} - { - {\mddefault/\updefault} {'normal'~} - {\bfdefault/\updefault} {'bold'~} - {\mddefault/\itdefault} {'italic'~} - {\mddefault/\sldefault} {'slanted'~} - {\bfdefault/\itdefault} {'bold~ italic'~} - {\bfdefault/\sldefault} {'bold~ slanted'~} - } (#1/#2)~ - with~ NFSS~ spec.:~ - \l_@@_nfss_tl - \exp_not:n { \\ } - -~ \exp_not:N \str_case:nn { #1 / \@@_combo_sc_shape:n {#2} } - { - {\mddefault/\scdefault} {'small~ caps'~} - {\bfdefault/\scdefault} {'bold~ small~ caps'~} - {\mddefault/\itscdefault} {'italic~ small~ caps'~} - {\bfdefault/\itscdefault} {'bold~ italic~ small~ caps'~} - {\mddefault/\slscdefault} {'slanted~ small~ caps'~} - {\bfdefault/\slscdefault} {'bold~ slanted~ small~ caps'~} - }~( #1 / \@@_combo_sc_shape:n {#2} )~ - with~ NFSS~ spec.:~ - \l_@@_nfss_sc_tl - \tl_if_empty:fF {\l_@@_postadjust_tl} - { - \exp_not:N \\ and~ font~ adjustment~ code: \exp_not:N \\ \l_@@_postadjust_tl - } - } - } -% \end{macrocode} -% Maybe |\str_if_eq_x:nnF| would be better? -% \end{macro} -% -% -% \subsubsection{Features} -% -% \begin{macro}{\l_@@_pre_feat_sclist} -% These are the features always applied to a font selection before other -% features. -% \begin{macrocode} -\tl_set:Nn \l_@@_pre_feat_sclist -%<*XE> - { - \bool_if:NT \l_@@_ot_bool - { - \tl_if_empty:NF \l_fontspec_script_tl - { - script = \l_fontspec_script_tl ; - language = \l_fontspec_lang_tl ; - } - } - } -% -%<*LU> - { - mode = \l_fontspec_mode_tl ; - \tl_if_empty:NF \l_fontspec_script_tl - { - script = \l_fontspec_script_tl ; - language = \l_fontspec_lang_tl ; - } - } -% -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\@@_make_ot_smallcaps:TF} -% \label{mac:makesmallcaps} -% This macro checks if the font contains small caps. -% \begin{macrocode} -%\cs_new:Nn \@@_make_smallcaps:TF -%\cs_new:Nn \@@_make_ot_smallcaps:TF - { - \@@_check_ot_feat:NnTF \l_fontspec_font {smcp} {#1} {#2} - } -%<*XE> -\cs_new:Nn \@@_make_smallcaps:TF - { - \bool_if:NTF \l_@@_ot_bool - { \@@_make_ot_smallcaps:TF {#1} {#2} } - { - \bool_if:NT \l_@@_atsui_bool - { \@@_make_AAT_feature_string:NnnTF \l_fontspec_font {3}{3} {#1} {#2} } - } - } -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_update_featstr:n} -% \cmd{\g_@@_rawfeatures_sclist} is the string used to define the list of specific -% font features. Each time another font feature is requested, this -% macro is used to add that feature to the list. Font features are -% separated by semicolons. -% \begin{macrocode} -\cs_new:Nn \@@_update_featstr:n - { -% \typeout{:::: @@_update_featstr:n {#1}} - \bool_if:NF \l_@@_firsttime_bool - { - \tl_gset:Nx \g_@@_single_feat_tl { #1 } -% \typeout{::::~ Adding~ feature.} - \tl_gput_right:Nx \g_@@_rawfeatures_sclist {#1;} - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_remove_clashing_featstr:n} -% \begin{macrocode} -\cs_new:Nn \@@_remove_clashing_featstr:n - { -% \typeout{:::: @@_remove_clashing_featstr:n {#1}} - \clist_map_inline:nn {#1} - { -% \typeout{::::~ Removing~ feature~ "##1;"} - \tl_gremove_all:Nn \g_@@_rawfeatures_sclist {##1;} - } - } -% \end{macrocode} -% \end{macro} -% -% \subsection{Initialisation} -% -% \begin{macro}{\@@_init:} -% Initialisations that need to occur once per fontspec font invocation. -% (Some of these may be redundant. -% Check whether they're assigned to globally or not.) -% \begin{macrocode} -\cs_set:Npn \@@_init: - { -% \typeout{:: @@_init:} - \bool_set_false:N \l_@@_ot_bool - \bool_set_true:N \l_@@_firsttime_bool - \@@_font_is_name: - \tl_clear:N \l_@@_font_path_tl - \tl_clear:N \l_@@_optical_size_tl - \tl_clear:N \l_@@_ttc_index_tl - \tl_clear:N \l_fontspec_renderer_tl - \tl_gclear:N \g_@@_defined_shapes_tl - \tl_gclear:N \g_@@_curr_series_tl - \tl_gset_eq:NN \g_@@_nfss_enc_tl \g_fontspec_encoding_tl -%<*LU> - \tl_set:Nn \l_fontspec_mode_tl {node} - \int_set:Nn \luatex_prehyphenchar:D { `\- } % fixme - \int_zero:N \luatex_posthyphenchar:D % fixme - \int_zero:N \luatex_preexhyphenchar:D % fixme - \int_zero:N \luatex_postexhyphenchar:D % fixme -% - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_init_fontface:} -% Executed in \cs{@@_get_features:Nn}. -% \begin{macrocode} -\cs_new:Nn \@@_init_fontface: - { - \tl_gclear:N \g_@@_rawfeatures_sclist - \tl_clear:N \l_@@_scale_tl - \tl_set_eq:NN \l_@@_opacity_tl \c_@@_opacity_tl - \tl_set_eq:NN \l_@@_hexcol_tl \c_@@_hexcol_tl - \tl_set_eq:NN \l_@@_postadjust_tl \c_@@_postadjust_tl - \tl_clear:N \l_@@_wordspace_adjust_tl - \tl_clear:N \l_@@_punctspace_adjust_tl - } -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Miscellaneous} -% -% \begin{macro}{\@@_iv_str_to_num:Nn} -% This macro takes a four character string and converts it to the -% numerical representation required for \XeTeX\ OpenType script/language/feature -% purposes. The output is stored in |#1|. -% -% The reason it's ugly is because the input can be of the form of any of these: -% `|abcd|', `|abc|', `|abc |', `|ab|', `|ab |', \etc. -% (It is assumed the first two chars are \emph{always} not spaces.) So this macro -% reads in the string, delimited by a space; this input is padded with \cmd\@empty s -% and anything beyond four chars is snipped. The \cmd\@empty s then are used to reconstruct -% the spaces in the string to number calculation. -% -% For backwards compatibility this code also strips a leading |+| or |-|. -% \begin{macrocode} -\cs_new:Nn \@@_iv_str_to_num:Nn - { - \@@_strip_leading_sign:Nw #1#2 \q_nil - } -\cs_set:Npn \@@_strip_leading_sign:Nw #1#2#3 \q_nil - { - \bool_if:nTF { \str_if_eq_p:nn {#2} {+} || \str_if_eq_p:nn {#2} {-} } - { \@@_iv_str_to_num:w #1 \q_nil #3 \c_empty_tl \c_empty_tl \q_nil } - { \@@_iv_str_to_num:w #1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil } - } -\cs_set:Npn \@@_iv_str_to_num:w #1 \q_nil #2#3#4#5#6 \q_nil - { - \int_set:Nn #1 - { - `#2 * "1000000 - + `#3 * "10000 - + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100 - + \ifx \c_empty_tl #5 32 \else `#5 \fi - } - } -\cs_generate_variant:Nn \@@_iv_str_to_num:Nn {No} -% \end{macrocode} -% \end{macro} -% -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx deleted file mode 100644 index 5ea78c405dc..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx +++ /dev/null @@ -1,864 +0,0 @@ -%%^^A%% fontspec-keyval.dtx -- part of FONTSPEC - -% \section{Font loading (\pkg{keyval}) definitions} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% This package uses a large number of keyval modules which operate sequentially on keyval -% input to ensure priority. -% \begin{macrocode} -\clist_gset:Nn \g_@@_all_keyval_modules_clist - { - fontspec, fontspec-opentype, fontspec-aat, - fontspec-preparse, fontspec-preparse-cfg, fontspec-preparse-external, fontspec-preparse-nested, - fontspec-renderer - } -% \end{macrocode} -% -% Wrapper function to save some characters in the source: -% \begin{macrocode} -\cs_new:Nn \@@_keys_define_code:nnn - { - \keys_define:nn {#1} { #2 .code:n = {#3} } - } -% \end{macrocode} -% -% For catching features that cannot be used in |\addfontfeatures|: -% \begin{macrocode} -\cs_new:Nn \@@_aff_error:n - { - \@@_keys_define_code:nnn {fontspec-addfeatures} {#1} - { \@@_error:nx {not-in-addfontfeatures} {#1} } - } -% \end{macrocode} -% -% \subsection{Pre-pre-parsing stages} -% -% These features are extracted from the font feature list before all others. -% -% \paragraph{Don't load font config file} -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-cfg} {IgnoreFontspecFile} - { - \bool_set_false:N \l_@@_fontcfg_bool - } -\@@_keys_define_code:nnn {fontspec-preparse-external} {IgnoreFontspecFile} - { - \bool_set_false:N \l_@@_fontcfg_bool - } -% \end{macrocode} -% -% \begin{macro}{Path} -% For fonts that aren't installed in the system. If no argument is given, the font is located -% with |kpsewhich|; it's either in the current directory or the \TeX\ tree. Otherwise, the -% argument given defines the file path of the font. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-external} {Path} - { - \bool_set_true:N \l_@@_nobf_bool - \bool_set_true:N \l_@@_noit_bool - \bool_set_true:N \l_@@_external_bool - \tl_set:Nn \l_@@_font_path_tl {#1} - \@@_font_is_file: -%<*XE> - \keys_set:nn {fontspec-renderer} {Renderer=OpenType} -% - } -\aliasfontfeature{Path}{ExternalLocation} -\@@_keys_define_code:nnn {fontspec} {Path} {} -% \end{macrocode} -% \end{macro} -% -% \paragraph{\feat{Extension}} -% For fonts that aren't installed in the system. Specifies the font extension -% to use. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-external} {Extension} - { - \tl_set:Nn \l_@@_extension_tl {#1} - \bool_if:NF \l_@@_external_bool - { - \keys_set:nn {fontspec-preparse-external} {Path} - } - } -\tl_clear:N \l_@@_extension_tl -\@@_keys_define_code:nnn {fontspec} {Extension} {} -% \end{macrocode} -% -% -% \paragraph{\feat{Renderer}} -% This feature must be processed before all others (the other font shape and features options are also pre-parsed for convenience) because the renderer determines the format of the features and even whether certain features are available. -% \begin{macrocode} -\keys_define:nn {fontspec-renderer} - { - Renderer .choices:nn = - {AAT,ICU,OpenType,Graphite,Full,Basic} - { - \int_compare:nTF {\l_keys_choice_int <= 4} { -%<*XE> - \tl_set:Nx \l_fontspec_renderer_tl - { - \int_case:nn \l_keys_choice_int { 1 {/AAT} 2 {/OT} 3 {/OT} 4 {/GR} } - } - \tl_gset:Nx \g_@@_single_feat_tl { \l_fontspec_renderer_tl } -% -%<*LU> - \@@_warning:nx {only-xetex-feature} {Renderer=AAT/OpenType/Graphite} -% - } - { -%<*XE> - \@@_warning:nx {only-luatex-feature} {Renderer=Full/Basic} -% -%<*LU> - \tl_set:Nx \l_fontspec_mode_tl - { - \int_case:nn \l_keys_choice_int { 5 {node} 6 {base} } - } - \tl_gset:Nx \g_@@_single_feat_tl { mode=\l_fontspec_mode_tl } -% - } - } - } -% \end{macrocode} -% -% \subsection{Pre-parsed features} -% -% \paragraph{OpenType script/language} -% See later for the resolutions from \pkg{fontspec} features to OpenType definitions. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse} {Script} - { -% \keys_set:nn {fontspec-renderer} {Renderer=OpenType} - \tl_set:Nn \l_@@_script_name_tl {#1} - } -% \end{macrocode} -% Exactly the same: -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse} {Language} - { -% \keys_set:nn {fontspec-renderer} {Renderer=OpenType} - \tl_set:Nn \l_@@_lang_name_tl {#1} - } -% \end{macrocode} -% -% -% \paragraph{TTC font index} -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse} {FontIndex} - { - \str_if_eq_x:nnF { \str_lower_case:f {\l_@@_extension_tl} } {.ttc} - { \@@_warning:n {font-index-needs-ttc} } -% \tl_set:Nn \l_@@_ttc_index_tl {:#1} -% \tl_set:Nn \l_@@_ttc_index_tl {(#1)} - } -\@@_keys_define_code:nnn {fontspec} {FontIndex} - { -% \tl_set:Nn \l_@@_ttc_index_tl {:#1} -% \tl_set:Nn \l_@@_ttc_index_tl {(#1)} - } -% \end{macrocode} -% -% \subsection{Font faces} -% -% \paragraph{Upright} -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-external} {UprightFont} - { - \fontspec_complete_fontname:Nn \l_@@_fontname_up_tl {#1} - } -% \end{macrocode} -% -% \paragraph{Italic and slanted} -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont} - { - \tl_if_empty:nTF {#1} - { - \bool_set_true:N \l_@@_noit_bool - } - { - \bool_set_false:N \l_@@_noit_bool - \fontspec_complete_fontname:Nn \l_@@_fontname_it_tl {#1} - } - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont} - { - \fontspec_complete_fontname:Nn \l_@@_fontname_sl_tl {#1} - } -% \end{macrocode} -% -% -% \paragraph{Bold (NFSS) Series} -% By default, \pkg{fontspec} uses the default bold series, \cs{bfdefault}. -% We want to be able to make this extensible. This code is not yet functional! -% \begin{macrocode} -%\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldSeries} -% { -% \tl_gset:Nx \g_@@_curr_series_tl { #1 } -% \seq_put_right:Nx \l_@@_bf_series_seq { #1 } -% } -% \end{macrocode} -% -% \paragraph{Bold} -% This contains some stubb code to allow more than one bold font to be loaded. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldFont} - { - \tl_if_empty:nTF {#1} - { - \bool_set_true:N \l_@@_nobf_bool - } - { - \bool_set_false:N \l_@@_nobf_bool - \fontspec_complete_fontname:Nn \l_@@_curr_bfname_tl {#1} - - \seq_if_empty:NT \l_@@_bf_series_seq - { - \tl_gset:Nx \g_@@_curr_series_tl {\bfdefault} - \seq_put_right:Nx \l_@@_bf_series_seq {\bfdefault} - } - - \tl_if_eq:oxT \g_@@_curr_series_tl {\bfdefault} - { - \tl_set_eq:NN \l_@@_fontname_bf_tl \l_@@_curr_bfname_tl - } - - \prop_put:NxV \l_@@_nfss_prop {BoldFont-\g_@@_curr_series_tl} \l_@@_curr_bfname_tl - -%\typeout{Setting~bold~font~"\l_@@_curr_bfname_tl"~with~series~"\g_@@_curr_series_tl"} - - } - } -% \end{macrocode} -% -% \paragraph{Bold italic/slanted} -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont} - { - \fontspec_complete_fontname:Nn \l_@@_fontname_bfit_tl {#1} - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont} - { - \fontspec_complete_fontname:Nn \l_@@_fontname_bfsl_tl {#1} - } -% \end{macrocode} -% -% \paragraph{Small caps} -% Small caps isn't pre-parsed because it can vary with others above: -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {SmallCapsFont} - { - \tl_if_empty:nTF {#1} - { - \bool_set_true:N \l_@@_nosc_bool - } - { - \bool_set_false:N \l_@@_nosc_bool - \fontspec_complete_fontname:Nn \l_@@_fontname_sc_tl {#1} - } - } -% \end{macrocode} -% -% -% \subsubsection{Preparsed font features} -% -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse} {UprightFeatures} - { - \clist_set:Nn \l_@@_fontfeat_up_clist {#1} - } -\@@_keys_define_code:nnn {fontspec-preparse} {BoldFeatures} - { - \clist_set:Nn \l_@@_fontfeat_bf_clist {#1} - -% \prop_put:NxV \l_@@_nfss_prop -% {BoldFont-\g_@@_curr_series_tl} \l_@@_curr_bfname_tl - } -\@@_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures} - { - \clist_set:Nn \l_@@_fontfeat_it_clist {#1} - } -\@@_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures} - { - \clist_set:Nn \l_@@_fontfeat_bfit_clist {#1} - } -\@@_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures} - { - \clist_set:Nn \l_@@_fontfeat_sl_clist {#1} - } -\@@_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures} - { - \clist_set:Nn \l_@@_fontfeat_bfsl_clist {#1} - } -% \end{macrocode} -% Note that small caps features can vary by shape, so these in fact \emph{aren't} pre-parsed. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {SmallCapsFeatures} - { - \bool_if:NF \l_@@_firsttime_bool - { - \clist_set:Nn \l_@@_fontfeat_sc_clist {#1} - } - } -% \end{macrocode} -% -% \paragraph{Features varying by size} -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse} {SizeFeatures} - { - \clist_set:Nn \l_@@_sizefeat_clist {#1} - \clist_put_right:Nn \l_@@_fontfeat_up_clist { SizeFeatures = {#1} } - } -\@@_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures} - { - \clist_set:Nn \l_@@_sizefeat_clist {#1} - \tl_if_empty:NT \l_@@_this_font_tl - { \tl_set:Nn \l_@@_this_font_tl { -- } } % needs to be non-empty as a flag - } -\@@_keys_define_code:nnn {fontspec-preparse-nested} {Font} - { - \tl_set:Nn \l_@@_this_font_tl {#1} - } -\@@_keys_define_code:nnn {fontspec} {SizeFeatures} - { - % dummy - } -\@@_keys_define_code:nnn {fontspec} {Font} - { - % dummy - } -% \end{macrocode} -% -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-sizing} {Size} - { - \tl_set:Nn \l_@@_size_tl {#1} - } -\@@_keys_define_code:nnn {fontspec-sizing} {Font} - { - \fontspec_complete_fontname:Nn \l_@@_sizedfont_tl {#1} - } -% \end{macrocode} -% -% -% -% \subsection{General font-independent features} -% -% These features can be applied to any font. -% -% \paragraph{NFSS encoding} -% For the very brave. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding} - { - \tl_gset:Nx \g_@@_nfss_enc_tl { #1 } - } -% \end{macrocode} -% -% \paragraph{NFSS family} -% Interactions with other packages will sometimes require setting the NFSS family explicitly. -% (By default \pkg{fontspec} auto-generates one based on the font name.) -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-preparse} {NFSSFamily} - { - \tl_set:Nx \l_@@_nfss_fam_tl { #1 } - } -% \end{macrocode} -% -% \paragraph{NFSS series/shape} -% This option looks similar in name but has a very different function. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {FontFace} - { - \tl_clear:N \l_@@_this_font_tl - \clist_set:No \l_@@_arg_clist { \use_iii:nnn #1 } - \clist_set_eq:NN \l_@@_this_feat_clist \l_@@_arg_clist - \int_compare:nT { \clist_count:N \l_@@_arg_clist = 1 } - { -%\typeout{FontFace~ parsing:~ one~ clist~ item} - \tl_if_in:NnF \l_@@_arg_clist {=} - { -%\typeout{FontFace~ parsing:~ no~ equals~ =>~ font~ name~ only} - \tl_set_eq:NN \l_@@_this_font_tl \l_@@_arg_clist - \tl_clear:N \l_@@_this_feat_clist - } - } - - \@@_add_nfssfont:nnnn - {\use_i:nnn #1} {\use_ii:nnn #1} {\l_@@_this_font_tl} {\l_@@_this_feat_clist} - } -% \end{macrocode} -% -% -% -% \paragraph{Scale} -% If the input isn't one of the pre-defined string options, then -% it's gotta be numerical. \cs{fontspec_calc_scale:n} does all the work in -% the auto-scaling cases. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {Scale} - { - \str_case:nnF {#1} - { - {MatchLowercase} { \@@_calc_scale:n {5} } - {MatchUppercase} { \@@_calc_scale:n {8} } - } - { \tl_set:Nx \l_@@_scale_tl {#1} } - \tl_set:Nx \l_@@_scale_tl { s*[\l_@@_scale_tl] } - } -% \end{macrocode} -% -% \begin{macro}{\@@_calc_scale:n} -% This macro calculates the amount of scaling between the default -% roman font and the (default shape of) the font being selected such -% that the font dimension that is input is equal for both. The only -% font dimensions that justify this are 5 (lowercase height) -% and 8 (uppercase height in \XeTeX). -% -% This script is executed for every extra shape, which seems wasteful, -% but allows alternate italic shapes from a separate font, say, to -% be loaded and to be auto-scaled correctly. Even if this would be ugly. -% -% To begin, change to \cs{rmfamily} but use internal commands in case cs{rmfamily} -% has been overwritten. -% (Note that changing \cs{rmfamily} with fontspec resets \cs{encodingdefault} -% appropriately.) -% \begin{macrocode} -\cs_new:Nn \@@_calc_scale:n - { - \group_begin: - - \fontencoding { \encodingdefault } - \fontfamily { \rmdefault } - \selectfont - - \@@_set_font_dimen:NnN \l_@@_tmpa_dim {#1} \font - \@@_set_font_dimen:NnN \l_@@_tmpb_dim {#1} \l_fontspec_font - - \tl_gset:Nx \l_@@_scale_tl - { - \fp_eval:n { \dim_to_fp:n {\l_@@_tmpa_dim} / - \dim_to_fp:n {\l_@@_tmpb_dim} } - } - - \@@_info:n {set-scale} - \group_end: - } -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\@@_set_font_dimen:NnN} -% This function sets the dimension |#1| (for font |#3|) to `fontdimen' |#2| -% for either font dimension 5 (x-height) or 8 (cap-height). If, for some -% reason, these return an incorrect `zero' value (as \cs{fontdimen8} might -% for a \texttt{.tfm} font), then we cheat and measure the height of a glyph. -% We assume in this case that the font contains either an `X' or an `x'. -% \begin{macrocode} -\cs_new:Nn \@@_set_font_dimen:NnN - { - \dim_set:Nn #1 { \fontdimen #2 #3 } - \dim_compare:nNnT #1 = {0pt} - { - \settoheight #1 - { - \str_if_eq:nnTF {#3} {\font} \rmfamily #3 - \int_case:nnF #2 - { - {5} {x} % x-height - {8} {X} % cap-height - } {?} % "else" clause; never reached. - } - } - } -% \end{macrocode} -% \end{macro} -% -% -% \paragraph{Inter-word space} -% These options set the relevant \cmd\fontdimen s for the -% font being loaded. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {WordSpace} - { - \bool_if:NF \l_@@_firsttime_bool - { \_fontspec_parse_wordspace:w #1,,,\q_stop } - } -\@@_aff_error:n {WordSpace} -% \end{macrocode} -% -% \begin{macro}{\_fontspec_parse_wordspace:w} -% This macro determines if the input to \feat{WordSpace} is -% of the form |{X}| or |{X,Y,Z}| and executes the font scaling. -% If the former input, it executes |{X,X,X}|. -% \begin{macrocode} -\cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop - { - \tl_if_empty:nTF {#4} - { - \tl_set:Nn \l_@@_wordspace_adjust_tl - { - \fontdimen 2 \font = #1 \fontdimen 2 \font - \fontdimen 3 \font = #1 \fontdimen 3 \font - \fontdimen 4 \font = #1 \fontdimen 4 \font - } - } - { - \tl_set:Nn \l_@@_wordspace_adjust_tl - { - \fontdimen 2 \font = #1 \fontdimen 2 \font - \fontdimen 3 \font = #2 \fontdimen 3 \font - \fontdimen 4 \font = #3 \fontdimen 4 \font - } - } - } -% \end{macrocode} -% \end{macro} -% -% \paragraph{Punctuation space} -% Scaling factor for the nominal \cmd\fontdimen \#7. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {PunctuationSpace} - { - \str_case_x:nnF {#1} - { - {WordSpace} - { - \tl_set:Nn \l_@@_punctspace_adjust_tl - { \fontdimen 7 \font = 0 \fontdimen 2 \font } - } - {TwiceWordSpace} - { - \tl_set:Nn \l_@@_punctspace_adjust_tl - { \fontdimen 7 \font = 1 \fontdimen 2 \font } - } - } - { - \tl_set:Nn \l_@@_punctspace_adjust_tl - { \fontdimen 7 \font = #1 \fontdimen 7 \font } - } - } -\@@_aff_error:n {PunctuationSpace} -% \end{macrocode} -% -% \paragraph{Secret hook into the font-adjustment code} -% -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {FontAdjustment} - { - \tl_put_right:Nx \l_@@_postadjust_tl {#1} - } -% \end{macrocode} -% -% \paragraph{Letterspacing} -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {LetterSpace} - { - \@@_update_featstr:n {letterspace=#1} - } -% \end{macrocode} -% -% \paragraph{Hyphenation character} -% This feature takes one of three arguments: `\opt{None}', -% \meta{glyph}, or \meta{slot}. If the input isn't the first, -% and it's one character, then it's the second; otherwise, it's -% the third. -% -% LuaTeX decouples hyphenation from font settings, so only \verb|HyphenChar=None| works -% for that engine. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {HyphenChar} - { - \str_if_eq:nnTF {#1} {None} - { - \tl_put_right:Nn \l_@@_postadjust_tl - { \@@_primitive_font_set_hyphenchar:Nn \font {-1} } - } - { - \@@_warning:nx {only-xetex-feature} {HyphenChar} - - \tl_if_single:nTF {#1} - { \tl_set:Nn \l_fontspec_hyphenchar_tl {`#1} } - { \tl_set:Nn \l_fontspec_hyphenchar_tl { #1} } - - \@@_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l_fontspec_hyphenchar_tl} - { - \tl_put_right:Nn \l_@@_postadjust_tl - { \@@_primitive_font_set_hyphenchar:Nn \font { \l_fontspec_hyphenchar_tl } } - } - { \@@_error:nx {no-glyph}{#1} } - - } - } -\@@_aff_error:n {HyphenChar} -% \end{macrocode} -% -% \paragraph{Color} -% Hooks into pkg{xcolor}, which names its colours \texttt{\char`\\color@}. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {Color} - { - \cs_if_exist:cTF { \token_to_str:N \color@ #1 } - { - \convertcolorspec{named}{#1}{HTML}\l_@@_hexcol_tl - } - { - \int_compare:nTF { \tl_count:n {#1} == 6 } - { \tl_set:Nn \l_@@_hexcol_tl {#1} } - { - \int_compare:nTF { \tl_count:n {#1} == 8 } - { \fontspec_parse_colour:viii #1 } - { - \bool_if:NF \l_@@_firsttime_bool - { \@@_warning:nx {bad-colour} {#1} } - } - } - } - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8 - { - \tl_set:Nn \l_@@_hexcol_tl {#1#2#3#4#5#6} - \tl_if_eq:NNF \l_@@_opacity_tl \c_@@_opacity_tl - { - \bool_if:NF \l_@@_firsttime_bool - { \@@_warning:nx {opa-twice-col} {#7#8} } - } - \tl_set:Nn \l_@@_opacity_tl {#7#8} - } -\aliasfontfeature{Color}{Colour} -% \end{macrocode} -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {Opacity} - { - \int_set:Nn \l_@@_tmp_int {255} - \@@_int_mult_truncate:Nn \l_@@_tmp_int { #1 } - \tl_if_eq:NNF \l_@@_opacity_tl \c_@@_opacity_tl - { - \bool_if:NF \l_@@_firsttime_bool - { \@@_warning:nx {opa-twice} {#1} } - } - \tl_set:Nx \l_@@_opacity_tl - { - \int_compare:nT { \l_@@_tmp_int <= "F } {0} % zero pad - \int_to_hex:n { \l_@@_tmp_int } - } - } -% \end{macrocode} -% -% -% \paragraph{Mapping} -% \begin{macrocode} -%<*XE> -\@@_keys_define_code:nnn {fontspec-aat} {Mapping} - { - \tl_set:Nn \l_@@_mapping_tl { #1 } - } -\@@_keys_define_code:nnn {fontspec-opentype} {Mapping} - { - \tl_set:Nn \l_@@_mapping_tl { #1 } - } -% -%<*LU> -\@@_keys_define_code:nnn {fontspec-opentype} {Mapping} - { - \str_if_eq:nnTF {#1} {tex-text} - { - \@@_warning:n {no-mapping-ligtex} - \msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none} - \keys_set:nn {fontspec-opentype} { Ligatures=TeX } - } - { \@@_warning:n {no-mapping} } - } -% -% \end{macrocode} -% -% -% \subsubsection{Continuous font axes} -% -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec} {Weight} - { - \@@_update_featstr:n{weight=#1} - } -\@@_keys_define_code:nnn {fontspec} {Width} - { - \@@_update_featstr:n{width=#1} - } -\@@_keys_define_code:nnn {fontspec} {OpticalSize} -%<*XE> - { - \bool_if:NTF \l_@@_ot_bool - { - \tl_set:Nn \l_@@_optical_size_tl {/ S = #1} - } - { - \bool_if:NT \l_@@_mm_bool - { - \@@_update_featstr:n { optical size = #1 } - } - } - \bool_if:nT { !\l_@@_ot_bool && !\l_@@_mm_bool } - { - \bool_if:NT \l_@@_firsttime_bool - { \@@_warning:n {no-opticals} } - } - } -% -%<*LU> - { - \tl_set:Nn \l_@@_optical_size_tl {/ S = #1} - } -% -% \end{macrocode} -% -% \subsubsection{Font transformations} -% These are to be specified to apply directly to a font shape: -% \begin{macrocode} -\keys_define:nn {fontspec} - { - FakeSlant .code:n = - { - \@@_update_featstr:n{slant=#1} - }, - FakeSlant .default:n = {0.2} -} -\keys_define:nn {fontspec} - { - FakeStretch .code:n = - { - \@@_update_featstr:n{extend=#1} - }, - FakeStretch .default:n = {1.2} -} -%<*XE> -\keys_define:nn {fontspec} - { - FakeBold .code:n = - { - \@@_update_featstr:n {embolden=#1} - }, - FakeBold .default:n = {1.5} - } -% -%<*LU> -\keys_define:nn {fontspec} - { - FakeBold .code:n = { \@@_warning:n {fakebold-only-xetex} } - } -% -% \end{macrocode} -% These are to be given to a shape that has no real bold/italic -% to signal that \pkg{fontspec} should automatically create `fake' shapes. -% -% The behaviour is currently that only if both \opt{AutoFakeSlant} \emph{and} -% \opt{AutoFakeBold} are specified, the bold italic is also faked. -% -% These features presently \emph{override} real shapes found in the font; -% in the future I'd like these features to be ignored in this case, instead. -% (This is just a bit harder to program in the current design of -% \pkg{fontspec}.) -% \begin{macrocode} -\keys_define:nn {fontspec} - { - AutoFakeSlant .code:n = - { - \bool_if:NT \l_@@_firsttime_bool - { - \tl_set:Nn \l_@@_fake_slant_tl {#1} - \clist_put_right:Nn \l_@@_fontfeat_it_clist {FakeSlant=#1} - \tl_set_eq:NN \l_@@_fontname_it_tl \l_fontspec_fontname_tl - \bool_set_false:N \l_@@_noit_bool - - \tl_if_empty:NF \l_@@_fake_embolden_tl - { - \clist_put_right:Nx \l_@@_fontfeat_bfit_clist - {FakeBold=\l_@@_fake_embolden_tl} - \clist_put_right:Nx \l_@@_fontfeat_bfit_clist {FakeSlant=#1} - \tl_set_eq:NN \l_@@_fontname_bfit_tl \l_fontspec_fontname_tl - } - } - }, - AutoFakeSlant .default:n = {0.2} -} -% \end{macrocode} -% Same but reversed: -% \begin{macrocode} -\keys_define:nn {fontspec} - { - AutoFakeBold .code:n = - { - \bool_if:NT \l_@@_firsttime_bool - { - \tl_set:Nn \l_@@_fake_embolden_tl {#1} - \clist_put_right:Nn \l_@@_fontfeat_bf_clist {FakeBold=#1} - \tl_set_eq:NN \l_@@_fontname_bf_tl \l_fontspec_fontname_tl - \bool_set_false:N \l_@@_nobf_bool - - \tl_if_empty:NF \l_@@_fake_slant_tl - { - \clist_put_right:Nx \l_@@_fontfeat_bfit_clist - {FakeSlant=\l_@@_fake_slant_tl} - \clist_put_right:Nx \l_@@_fontfeat_bfit_clist {FakeBold=#1} - \tl_set_eq:NN \l_@@_fontname_bfit_tl \l_fontspec_fontname_tl - } - } - }, - AutoFakeBold .default:n = {1.5} -} -% \end{macrocode} -% -% -% \subsubsection{Raw feature string} -% This allows savvy \XeTeX-ers to input font features manually if they have -% already memorised the OpenType abbreviations and don't mind not having error checking. -% \begin{macrocode} -\@@_keys_define_code:nnn {fontspec-opentype} {RawFeature} - { - \@@_update_featstr:n {#1} - } -\@@_keys_define_code:nnn {fontspec-aat} {RawFeature} - { - \@@_update_featstr:n {#1} - } -% \end{macrocode} -% -% -% -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-lang.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-lang.dtx deleted file mode 100644 index 886fea87b78..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-lang.dtx +++ /dev/null @@ -1,418 +0,0 @@ -%%^^A%% fontspec-lang.dtx -- part of FONTSPEC - -% \section{Font language definitions} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% \begin{macrocode} -\newfontlanguage{Abaza}{ABA} -\newfontlanguage{Abkhazian}{ABK} -\newfontlanguage{Adyghe}{ADY} -\newfontlanguage{Afrikaans}{AFK} -\newfontlanguage{Afar}{AFR} -\newfontlanguage{Agaw}{AGW} -\newfontlanguage{Altai}{ALT} -\newfontlanguage{Amharic}{AMH} -\newfontlanguage{Arabic}{ARA} -\newfontlanguage{Aari}{ARI} -\newfontlanguage{Arakanese}{ARK} -\newfontlanguage{Assamese}{ASM} -\newfontlanguage{Athapaskan}{ATH} -\newfontlanguage{Avar}{AVR} -\newfontlanguage{Awadhi}{AWA} -\newfontlanguage{Aymara}{AYM} -\newfontlanguage{Azeri}{AZE} -\newfontlanguage{Badaga}{BAD} -\newfontlanguage{Baghelkhandi}{BAG} -\newfontlanguage{Balkar}{BAL} -\newfontlanguage{Baule}{BAU} -\newfontlanguage{Berber}{BBR} -\newfontlanguage{Bench}{BCH} -\newfontlanguage{Bible~Cree}{BCR} -\newfontlanguage{Belarussian}{BEL} -\newfontlanguage{Bemba}{BEM} -\newfontlanguage{Bengali}{BEN} -\newfontlanguage{Bulgarian}{BGR} -\newfontlanguage{Bhili}{BHI} -\newfontlanguage{Bhojpuri}{BHO} -\newfontlanguage{Bikol}{BIK} -\newfontlanguage{Bilen}{BIL} -\newfontlanguage{Blackfoot}{BKF} -\newfontlanguage{Balochi}{BLI} -\newfontlanguage{Balante}{BLN} -\newfontlanguage{Balti}{BLT} -\newfontlanguage{Bambara}{BMB} -\newfontlanguage{Bamileke}{BML} -\newfontlanguage{Breton}{BRE} -\newfontlanguage{Brahui}{BRH} -\newfontlanguage{Braj~Bhasha}{BRI} -\newfontlanguage{Burmese}{BRM} -\newfontlanguage{Bashkir}{BSH} -\newfontlanguage{Beti}{BTI} -\newfontlanguage{Catalan}{CAT} -\newfontlanguage{Cebuano}{CEB} -\newfontlanguage{Chechen}{CHE} -\newfontlanguage{Chaha~Gurage}{CHG} -\newfontlanguage{Chattisgarhi}{CHH} -\newfontlanguage{Chichewa}{CHI} -\newfontlanguage{Chukchi}{CHK} -\newfontlanguage{Chipewyan}{CHP} -\newfontlanguage{Cherokee}{CHR} -\newfontlanguage{Chuvash}{CHU} -\newfontlanguage{Comorian}{CMR} -\newfontlanguage{Coptic}{COP} -\newfontlanguage{Cree}{CRE} -\newfontlanguage{Carrier}{CRR} -\newfontlanguage{Crimean~Tatar}{CRT} -\newfontlanguage{Church~Slavonic}{CSL} -\newfontlanguage{Czech}{CSY} -\newfontlanguage{Danish}{DAN} -\newfontlanguage{Dargwa}{DAR} -\newfontlanguage{Woods~Cree}{DCR} -\newfontlanguage{German}{DEU} -\newfontlanguage{Dogri}{DGR} -\newfontlanguage{Divehi}{DIV} -\newfontlanguage{Djerma}{DJR} -\newfontlanguage{Dangme}{DNG} -\newfontlanguage{Dinka}{DNK} -\newfontlanguage{Dungan}{DUN} -\newfontlanguage{Dzongkha}{DZN} -\newfontlanguage{Ebira}{EBI} -\newfontlanguage{Eastern~Cree}{ECR} -\newfontlanguage{Edo}{EDO} -\newfontlanguage{Efik}{EFI} -\newfontlanguage{Greek}{ELL} -\newfontlanguage{English}{ENG} -\newfontlanguage{Erzya}{ERZ} -\newfontlanguage{Spanish}{ESP} -\newfontlanguage{Estonian}{ETI} -\newfontlanguage{Basque}{EUQ} -\newfontlanguage{Evenki}{EVK} -\newfontlanguage{Even}{EVN} -\newfontlanguage{Ewe}{EWE} -\newfontlanguage{French~Antillean}{FAN} -\newfontlanguage{Farsi}{FAR} -\newfontlanguage{Parsi}{FAR} -\newfontlanguage{Persian}{FAR} -\newfontlanguage{Finnish}{FIN} -\newfontlanguage{Fijian}{FJI} -\newfontlanguage{Flemish}{FLE} -\newfontlanguage{Forest~Nenets}{FNE} -\newfontlanguage{Fon}{FON} -\newfontlanguage{Faroese}{FOS} -\newfontlanguage{French}{FRA} -\newfontlanguage{Frisian}{FRI} -\newfontlanguage{Friulian}{FRL} -\newfontlanguage{Futa}{FTA} -\newfontlanguage{Fulani}{FUL} -\newfontlanguage{Ga}{GAD} -\newfontlanguage{Gaelic}{GAE} -\newfontlanguage{Gagauz}{GAG} -\newfontlanguage{Galician}{GAL} -\newfontlanguage{Garshuni}{GAR} -\newfontlanguage{Garhwali}{GAW} -\newfontlanguage{Ge'ez}{GEZ} -\newfontlanguage{Gilyak}{GIL} -\newfontlanguage{Gumuz}{GMZ} -\newfontlanguage{Gondi}{GON} -\newfontlanguage{Greenlandic}{GRN} -\newfontlanguage{Garo}{GRO} -\newfontlanguage{Guarani}{GUA} -\newfontlanguage{Gujarati}{GUJ} -\newfontlanguage{Haitian}{HAI} -\newfontlanguage{Halam}{HAL} -\newfontlanguage{Harauti}{HAR} -\newfontlanguage{Hausa}{HAU} -\newfontlanguage{Hawaiin}{HAW} -\newfontlanguage{Hammer-Banna}{HBN} -\newfontlanguage{Hiligaynon}{HIL} -\newfontlanguage{Hindi}{HIN} -\newfontlanguage{High~Mari}{HMA} -\newfontlanguage{Hindko}{HND} -\newfontlanguage{Ho}{HO} -\newfontlanguage{Harari}{HRI} -\newfontlanguage{Croatian}{HRV} -\newfontlanguage{Hungarian}{HUN} -\newfontlanguage{Armenian}{HYE} -\newfontlanguage{Igbo}{IBO} -\newfontlanguage{Ijo}{IJO} -\newfontlanguage{Ilokano}{ILO} -\newfontlanguage{Indonesian}{IND} -\newfontlanguage{Ingush}{ING} -\newfontlanguage{Inuktitut}{INU} -\newfontlanguage{Irish}{IRI} -\newfontlanguage{Irish~Traditional}{IRT} -\newfontlanguage{Icelandic}{ISL} -\newfontlanguage{Inari~Sami}{ISM} -\newfontlanguage{Italian}{ITA} -\newfontlanguage{Hebrew}{IWR} -\newfontlanguage{Javanese}{JAV} -\newfontlanguage{Yiddish}{JII} -\newfontlanguage{Japanese}{JAN} -\newfontlanguage{Judezmo}{JUD} -\newfontlanguage{Jula}{JUL} -\newfontlanguage{Kabardian}{KAB} -\newfontlanguage{Kachchi}{KAC} -\newfontlanguage{Kalenjin}{KAL} -\newfontlanguage{Kannada}{KAN} -\newfontlanguage{Karachay}{KAR} -\newfontlanguage{Georgian}{KAT} -\newfontlanguage{Kazakh}{KAZ} -\newfontlanguage{Kebena}{KEB} -\newfontlanguage{Khutsuri~Georgian}{KGE} -\newfontlanguage{Khakass}{KHA} -\newfontlanguage{Khanty-Kazim}{KHK} -\newfontlanguage{Khmer}{KHM} -\newfontlanguage{Khanty-Shurishkar}{KHS} -\newfontlanguage{Khanty-Vakhi}{KHV} -\newfontlanguage{Khowar}{KHW} -\newfontlanguage{Kikuyu}{KIK} -\newfontlanguage{Kirghiz}{KIR} -\newfontlanguage{Kisii}{KIS} -\newfontlanguage{Kokni}{KKN} -\newfontlanguage{Kalmyk}{KLM} -\newfontlanguage{Kamba}{KMB} -\newfontlanguage{Kumaoni}{KMN} -\newfontlanguage{Komo}{KMO} -\newfontlanguage{Komso}{KMS} -\newfontlanguage{Kanuri}{KNR} -\newfontlanguage{Kodagu}{KOD} -\newfontlanguage{Korean~Old~Hangul}{KOH} -\newfontlanguage{Konkani}{KOK} -\newfontlanguage{Kikongo}{KON} -\newfontlanguage{Komi-Permyak}{KOP} -\newfontlanguage{Korean}{KOR} -\newfontlanguage{Komi-Zyrian}{KOZ} -\newfontlanguage{Kpelle}{KPL} -\newfontlanguage{Krio}{KRI} -\newfontlanguage{Karakalpak}{KRK} -\newfontlanguage{Karelian}{KRL} -\newfontlanguage{Karaim}{KRM} -\newfontlanguage{Karen}{KRN} -\newfontlanguage{Koorete}{KRT} -\newfontlanguage{Kashmiri}{KSH} -\newfontlanguage{Khasi}{KSI} -\newfontlanguage{Kildin~Sami}{KSM} -\newfontlanguage{Kui}{KUI} -\newfontlanguage{Kulvi}{KUL} -\newfontlanguage{Kumyk}{KUM} -\newfontlanguage{Kurdish}{KUR} -\newfontlanguage{Kurukh}{KUU} -\newfontlanguage{Kuy}{KUY} -\newfontlanguage{Koryak}{KYK} -\newfontlanguage{Ladin}{LAD} -\newfontlanguage{Lahuli}{LAH} -\newfontlanguage{Lak}{LAK} -\newfontlanguage{Lambani}{LAM} -\newfontlanguage{Lao}{LAO} -\newfontlanguage{Latin}{LAT} -\newfontlanguage{Laz}{LAZ} -\newfontlanguage{L-Cree}{LCR} -\newfontlanguage{Ladakhi}{LDK} -\newfontlanguage{Lezgi}{LEZ} -\newfontlanguage{Lingala}{LIN} -\newfontlanguage{Low~Mari}{LMA} -\newfontlanguage{Limbu}{LMB} -\newfontlanguage{Lomwe}{LMW} -\newfontlanguage{Lower~Sorbian}{LSB} -\newfontlanguage{Lule~Sami}{LSM} -\newfontlanguage{Lithuanian}{LTH} -\newfontlanguage{Luba}{LUB} -\newfontlanguage{Luganda}{LUG} -\newfontlanguage{Luhya}{LUH} -\newfontlanguage{Luo}{LUO} -\newfontlanguage{Latvian}{LVI} -\newfontlanguage{Majang}{MAJ} -\newfontlanguage{Makua}{MAK} -\newfontlanguage{Malayalam~Traditional}{MAL} -\newfontlanguage{Mansi}{MAN} -\newfontlanguage{Marathi}{MAR} -\newfontlanguage{Marwari}{MAW} -\newfontlanguage{Mbundu}{MBN} -\newfontlanguage{Manchu}{MCH} -\newfontlanguage{Moose~Cree}{MCR} -\newfontlanguage{Mende}{MDE} -\newfontlanguage{Me'en}{MEN} -\newfontlanguage{Mizo}{MIZ} -\newfontlanguage{Macedonian}{MKD} -\newfontlanguage{Male}{MLE} -\newfontlanguage{Malagasy}{MLG} -\newfontlanguage{Malinke}{MLN} -\newfontlanguage{Malayalam~Reformed}{MLR} -\newfontlanguage{Malay}{MLY} -\newfontlanguage{Mandinka}{MND} -\newfontlanguage{Mongolian}{MNG} -\newfontlanguage{Manipuri}{MNI} -\newfontlanguage{Maninka}{MNK} -\newfontlanguage{Manx~Gaelic}{MNX} -\newfontlanguage{Moksha}{MOK} -\newfontlanguage{Moldavian}{MOL} -\newfontlanguage{Mon}{MON} -\newfontlanguage{Moroccan}{MOR} -\newfontlanguage{Maori}{MRI} -\newfontlanguage{Maithili}{MTH} -\newfontlanguage{Maltese}{MTS} -\newfontlanguage{Mundari}{MUN} -\newfontlanguage{Naga-Assamese}{NAG} -\newfontlanguage{Nanai}{NAN} -\newfontlanguage{Naskapi}{NAS} -\newfontlanguage{N-Cree}{NCR} -\newfontlanguage{Ndebele}{NDB} -\newfontlanguage{Ndonga}{NDG} -\newfontlanguage{Nepali}{NEP} -\newfontlanguage{Newari}{NEW} -\newfontlanguage{Nagari}{NGR} -\newfontlanguage{Norway~House~Cree}{NHC} -\newfontlanguage{Nisi}{NIS} -\newfontlanguage{Niuean}{NIU} -\newfontlanguage{Nkole}{NKL} -\newfontlanguage{N'ko}{NKO} -\newfontlanguage{Dutch}{NLD} -\newfontlanguage{Nogai}{NOG} -\newfontlanguage{Norwegian}{NOR} -\newfontlanguage{Northern~Sami}{NSM} -\newfontlanguage{Northern~Tai}{NTA} -\newfontlanguage{Esperanto}{NTO} -\newfontlanguage{Nynorsk}{NYN} -\newfontlanguage{Oji-Cree}{OCR} -\newfontlanguage{Ojibway}{OJB} -\newfontlanguage{Oriya}{ORI} -\newfontlanguage{Oromo}{ORO} -\newfontlanguage{Ossetian}{OSS} -\newfontlanguage{Palestinian~Aramaic}{PAA} -\newfontlanguage{Pali}{PAL} -\newfontlanguage{Punjabi}{PAN} -\newfontlanguage{Palpa}{PAP} -\newfontlanguage{Pashto}{PAS} -\newfontlanguage{Polytonic~Greek}{PGR} -\newfontlanguage{Pilipino}{PIL} -\newfontlanguage{Palaung}{PLG} -\newfontlanguage{Polish}{PLK} -\newfontlanguage{Provencal}{PRO} -\newfontlanguage{Portuguese}{PTG} -\newfontlanguage{Chin}{QIN} -\newfontlanguage{Rajasthani}{RAJ} -\newfontlanguage{R-Cree}{RCR} -\newfontlanguage{Russian~Buriat}{RBU} -\newfontlanguage{Riang}{RIA} -\newfontlanguage{Rhaeto-Romanic}{RMS} -\newfontlanguage{Romanian}{ROM} -\newfontlanguage{Romany}{ROY} -\newfontlanguage{Rusyn}{RSY} -\newfontlanguage{Ruanda}{RUA} -\newfontlanguage{Russian}{RUS} -\newfontlanguage{Sadri}{SAD} -\newfontlanguage{Sanskrit}{SAN} -\newfontlanguage{Santali}{SAT} -\newfontlanguage{Sayisi}{SAY} -\newfontlanguage{Sekota}{SEK} -\newfontlanguage{Selkup}{SEL} -\newfontlanguage{Sango}{SGO} -\newfontlanguage{Shan}{SHN} -\newfontlanguage{Sibe}{SIB} -\newfontlanguage{Sidamo}{SID} -\newfontlanguage{Silte~Gurage}{SIG} -\newfontlanguage{Skolt~Sami}{SKS} -\newfontlanguage{Slovak}{SKY} -\newfontlanguage{Slavey}{SLA} -\newfontlanguage{Slovenian}{SLV} -\newfontlanguage{Somali}{SML} -\newfontlanguage{Samoan}{SMO} -\newfontlanguage{Sena}{SNA} -\newfontlanguage{Sindhi}{SND} -\newfontlanguage{Sinhalese}{SNH} -\newfontlanguage{Soninke}{SNK} -\newfontlanguage{Sodo~Gurage}{SOG} -\newfontlanguage{Sotho}{SOT} -\newfontlanguage{Albanian}{SQI} -\newfontlanguage{Serbian}{SRB} -\newfontlanguage{Saraiki}{SRK} -\newfontlanguage{Serer}{SRR} -\newfontlanguage{South~Slavey}{SSL} -\newfontlanguage{Southern~Sami}{SSM} -\newfontlanguage{Suri}{SUR} -\newfontlanguage{Svan}{SVA} -\newfontlanguage{Swedish}{SVE} -\newfontlanguage{Swadaya~Aramaic}{SWA} -\newfontlanguage{Swahili}{SWK} -\newfontlanguage{Swazi}{SWZ} -\newfontlanguage{Sutu}{SXT} -\newfontlanguage{Syriac}{SYR} -\newfontlanguage{Tabasaran}{TAB} -\newfontlanguage{Tajiki}{TAJ} -\newfontlanguage{Tamil}{TAM} -\newfontlanguage{Tatar}{TAT} -\newfontlanguage{TH-Cree}{TCR} -\newfontlanguage{Telugu}{TEL} -\newfontlanguage{Tongan}{TGN} -\newfontlanguage{Tigre}{TGR} -\newfontlanguage{Tigrinya}{TGY} -\newfontlanguage{Thai}{THA} -\newfontlanguage{Tahitian}{THT} -\newfontlanguage{Tibetan}{TIB} -\newfontlanguage{Turkmen}{TKM} -\newfontlanguage{Temne}{TMN} -\newfontlanguage{Tswana}{TNA} -\newfontlanguage{Tundra~Nenets}{TNE} -\newfontlanguage{Tonga}{TNG} -\newfontlanguage{Todo}{TOD} -\newfontlanguage{Tsonga}{TSG} -\newfontlanguage{Turoyo~Aramaic}{TUA} -\newfontlanguage{Tulu}{TUL} -\newfontlanguage{Tuvin}{TUV} -\newfontlanguage{Twi}{TWI} -\newfontlanguage{Udmurt}{UDM} -\newfontlanguage{Ukrainian}{UKR} -\newfontlanguage{Urdu}{URD} -\newfontlanguage{Upper~Sorbian}{USB} -\newfontlanguage{Uyghur}{UYG} -\newfontlanguage{Uzbek}{UZB} -\newfontlanguage{Venda}{VEN} -\newfontlanguage{Vietnamese}{VIT} -\newfontlanguage{Wa}{WA} -\newfontlanguage{Wagdi}{WAG} -\newfontlanguage{West-Cree}{WCR} -\newfontlanguage{Welsh}{WEL} -\newfontlanguage{Wolof}{WLF} -\newfontlanguage{Tai~Lue}{XBD} -\newfontlanguage{Xhosa}{XHS} -\newfontlanguage{Yakut}{YAK} -\newfontlanguage{Yoruba}{YBA} -\newfontlanguage{Y-Cree}{YCR} -\newfontlanguage{Yi~Classic}{YIC} -\newfontlanguage{Yi~Modern}{YIM} -\newfontlanguage{Chinese~Hong~Kong}{ZHH} -\newfontlanguage{Chinese~Phonetic}{ZHP} -\newfontlanguage{Chinese~Simplified}{ZHS} -\newfontlanguage{Chinese~Traditional}{ZHT} -\newfontlanguage{Zande}{ZND} -\newfontlanguage{Zulu}{ZUL} -% \end{macrocode} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-lua.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-lua.dtx index 80d55bc0f44..4f04001f1f7 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-lua.dtx +++ b/Master/texmf-dist/source/latex/fontspec/fontspec-lua.dtx @@ -89,7 +89,7 @@ end % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-math.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-math.dtx deleted file mode 100644 index 77eaa1228f9..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-math.dtx +++ /dev/null @@ -1,254 +0,0 @@ -%%^^A%% fontspec-math.dtx -- part of FONTSPEC -% -% \section{Selecting maths fonts} -% Here, the fonts used in math mode are redefined to correspond to the -% default roman, sans serif and typewriter fonts. Unfortunately, you -% can only define maths fonts in the preamble, otherwise I'd run this -% code whenever \cs{setmainfont} and friends was run. -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% \begin{macro}{\fontspec_setup_maths:} -% Everything here is performed \cs{AtBeginDocument} in order to -% overwrite \pkg{euler}'s attempt. This means \pkg{fontspec} must be -% loaded \emph{after} \pkg{euler}. We set up a conditional to return -% an error if this rule is violated. -% -% Since every maths setup is slightly different, we also take -% different paths for defining various math glyphs depending which -% maths font package has been loaded. -% -% \begin{macrocode} -\@ifpackageloaded{euler} - { \bool_gset_true:N \g_@@_pkg_euler_loaded_bool } - { \bool_gset_false:N \g_@@_pkg_euler_loaded_bool } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new:Nn \fontspec_setup_maths: - { - \@ifpackageloaded{euler} - { - \bool_if:NTF \g_@@_pkg_euler_loaded_bool - { \bool_gset_true:N \g_@@_math_euler_bool } - { \@@_error:n {euler-too-late} } - } - {} - \@ifpackageloaded{lucbmath}{ \bool_gset_true:N \g_@@_math_lucida_bool }{} - \@ifpackageloaded{lucidabr}{ \bool_gset_true:N \g_@@_math_lucida_bool }{} - \@ifpackageloaded{lucimatx}{ \bool_gset_true:N \g_@@_math_lucida_bool }{} -% \end{macrocode} -% Knuth's CM fonts fonts are all squashed together, combining letters, -% accents, text symbols and maths symbols all in the one font, -% \texttt{cmr}, plus other things in other fonts. Because we are -% changing the roman font in the document, we need to redefine all of -% the maths glyphs in \LaTeX's \texttt{operators} maths font to still -% go back to the legacy \texttt{cmr} font for all these random glyphs, -% unless a separate maths font package has been loaded instead. -% -% In every case, the maths accents are always taken from the -% \texttt{operators} font, which is generally the main text -% font. (Actually, there is a \cmd\hat\ accent in -% \texttt{EulerFractur}, but it's \emph{ugly}. So I ignore it. Sorry -% if this causes inconvenience.) -% \begin{macrocode} - \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n} - \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n} - \DeclareMathAccent{\acute} {\mathalpha}{legacymaths}{19} - \DeclareMathAccent{\grave} {\mathalpha}{legacymaths}{18} - \DeclareMathAccent{\ddot} {\mathalpha}{legacymaths}{127} - \DeclareMathAccent{\tilde} {\mathalpha}{legacymaths}{126} - \DeclareMathAccent{\bar} {\mathalpha}{legacymaths}{22} - \DeclareMathAccent{\breve} {\mathalpha}{legacymaths}{21} - \DeclareMathAccent{\check} {\mathalpha}{legacymaths}{20} - \DeclareMathAccent{\hat} {\mathalpha}{legacymaths}{94} % too bad, euler - \DeclareMathAccent{\dot} {\mathalpha}{legacymaths}{95} - \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths}{23} -% \end{macrocode} -% \paragraph{\cmd\colon: what's going on?} Okay, so \verb":" and \cmd\colon\ in maths mode are defined in a few places, so I need to work out what does what. Respectively, we have: -% \begin{Verbatim} -% % fontmath.ltx: -% \DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A} -% \DeclareMathSymbol{:}{\mathrel}{operators}{"3A} -% -% % amsmath.sty: -% \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript -% \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} -% -% % euler.sty: -% \DeclareMathSymbol{:}\mathrel {EulerFraktur}{"3A} -% -% % lucbmath.sty: -% \DeclareMathSymbol{\@tempb}{\mathpunct}{operators}{58} -% \ifx\colon\@tempb -% \DeclareMathSymbol{\colon}{\mathpunct}{operators}{58} -% \fi -% \DeclareMathSymbol{:}{\mathrel}{operators}{58} -% \end{Verbatim} -% ($\mathrm{3A_{16}}=\mathrm{58_{10}}$) So I think, based on this summary, that it is fair to tell \pkg{fontspec} to `replace' the operators font with legacymaths for this symbol, except when \pkg{amsmath} is loaded since we want to keep its definition. -% -% -% \begin{macrocode} - \group_begin: - \mathchardef\@tempa="603A \relax - \ifx\colon\@tempa - \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58} - \fi - \group_end: -% \end{macrocode} -% The following symbols are only defined specifically in \pkg{euler}, so skip them -% if that package is loaded. -% \begin{macrocode} - \bool_if:NF \g_@@_math_euler_bool - { - \DeclareMathSymbol{!}{\mathclose}{legacymaths}{33} - \DeclareMathSymbol{:}{\mathrel} {legacymaths}{58} - \DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59} - \DeclareMathSymbol{?}{\mathclose}{legacymaths}{63} -% \end{macrocode} -% And these ones are defined both in \pkg{euler} and \pkg{lucbmath}, -% so we only need to run this code if no extra maths package has been -% loaded. -% \begin{macrocode} - \bool_if:NF \g_@@_math_lucida_bool - { - \DeclareMathSymbol{0}{\mathalpha}{legacymaths}{`0} - \DeclareMathSymbol{1}{\mathalpha}{legacymaths}{`1} - \DeclareMathSymbol{2}{\mathalpha}{legacymaths}{`2} - \DeclareMathSymbol{3}{\mathalpha}{legacymaths}{`3} - \DeclareMathSymbol{4}{\mathalpha}{legacymaths}{`4} - \DeclareMathSymbol{5}{\mathalpha}{legacymaths}{`5} - \DeclareMathSymbol{6}{\mathalpha}{legacymaths}{`6} - \DeclareMathSymbol{7}{\mathalpha}{legacymaths}{`7} - \DeclareMathSymbol{8}{\mathalpha}{legacymaths}{`8} - \DeclareMathSymbol{9}{\mathalpha}{legacymaths}{`9} - \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths}{0} - \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths}{1} - \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths}{2} - \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths}{3} - \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths}{4} - \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths}{5} - \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths}{6} - \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths}{7} - \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths}{8} - \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths}{9} - \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths}{10} - \DeclareMathSymbol{+}{\mathbin}{legacymaths}{43} - \DeclareMathSymbol{=}{\mathrel}{legacymaths}{61} - \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0} - \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1} - \DeclareMathDelimiter{[}{\mathopen} {legacymaths}{91}{largesymbols}{2} - \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3} - \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14} - \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36} - } - } -% \end{macrocode} -% Finally, we change the font definitions for \cmd\mathrm\ and so -% on. These are defined using the \cmd\g_@@_mathrm_tl\ (\dots) macros, -% which default to \cmd\rmdefault\ but may be specified with the -% \cmd\setmathrm\ (\dots) commands in the preamble. -% -% Since \LaTeX\ only generally defines one level of boldness, we omit -% \cmd\mathbf\ in the \textsf{bold} maths series. It can be specified -% as per usual with \cmd\setboldmathrm, which stores the appropriate -% family name in \cmd\g_@@_bfmathrm_tl. -% \begin{macrocode} - \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\updefault - \SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\updefault - \DeclareSymbolFontAlphabet\mathrm{operators} - \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\itdefault - \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\updefault - \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g_@@_mathsf_tl\mddefault\updefault - \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g_@@_mathtt_tl\mddefault\updefault - \SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\updefault - \tl_if_empty:NTF \g_@@_bfmathrm_tl - { - \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\itdefault - } - { - \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\mddefault\updefault - \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\bfdefault\updefault - \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\mddefault\itdefault - } - \SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g_@@_mathsf_tl\bfdefault\updefault - \SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g_@@_mathtt_tl\bfdefault\updefault - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_maybe_setup_maths:} -% We're a little less sophisticated about not executing the maths setup if various other maths font packages are loaded. This list is based on the wonderful `\LaTeX Font Catalogue': \url{http://www.tug.dk/FontCatalogue/mathfonts.html}. I'm sure there are more I've missed. Do the \TeX\ Gyre fonts have maths support yet? -% -% Untested: would |\unless\ifnum\Gamma=28672\relax\bool_set_false:N \g_@@_math_bool\fi| be a better test? -% This needs more cooperation with euler and lucida, I think. -% \begin{macrocode} -\cs_new:Nn \fontspec_maybe_setup_maths: - { - \@ifpackageloaded{anttor} - { - \ifx\define@antt@mathversions a\bool_gset_false:N \g_@@_math_bool\fi - }{} - \@ifpackageloaded{arevmath} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{eulervm} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{mathdesign} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{concmath} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{cmbright} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{mathesf} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{gfsartemisia} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{gfsneohellenic} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{iwona} - { - \ifx\define@iwona@mathversions a\bool_set_false:N \g_@@_math_bool\fi - }{} - \@ifpackageloaded{kpfonts}{\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{kmath} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{kurier} - { - \ifx\define@kurier@mathversions a\bool_set_false:N \g_@@_math_bool\fi - }{} - \@ifpackageloaded{fouriernc} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{fourier} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{lmodern} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{mathpazo} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{mathptmx} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{MinionPro} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{unicode-math} {\bool_gset_false:N \g_@@_math_bool}{} - \@ifpackageloaded{breqn} {\bool_gset_false:N \g_@@_math_bool}{} - \bool_if:NT \g_@@_math_bool - { - \@@_info:n {setup-math} - \fontspec_setup_maths: - } - } -\AtBeginDocument{\fontspec_maybe_setup_maths:} -% \end{macrocode} -% \end{macro} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-msg.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-msg.dtx deleted file mode 100644 index 8358a874d54..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-msg.dtx +++ /dev/null @@ -1,286 +0,0 @@ -%%^^A%% fontspec-msg.dtx -- part of FONTSPEC -% -% \section{Error/warning/info messages} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% Shorthands for messages: -% \begin{macrocode} -\cs_new:Npn \@@_error:n { \msg_error:nn {fontspec} } -\cs_new:Npn \@@_error:nn { \msg_error:nnn {fontspec} } -\cs_new:Npn \@@_error:nx { \msg_error:nnx {fontspec} } -\cs_new:Npn \@@_warning:n { \msg_warning:nn {fontspec} } -\cs_new:Npn \@@_warning:nx { \msg_warning:nnx {fontspec} } -\cs_new:Npn \@@_warning:nxx { \msg_warning:nnxx {fontspec} } -\cs_new:Npn \@@_info:n { \msg_info:nn {fontspec} } -\cs_new:Npn \@@_info:nx { \msg_info:nnx {fontspec} } -\cs_new:Npn \@@_info:nxx { \msg_info:nnxx {fontspec} } -\cs_new:Npn \@@_trace:n { \msg_trace:nn {fontspec} } -% \end{macrocode} -% -% Allow messages to be written with spaces acting as normal: -% \begin{macrocode} -\cs_generate_variant:Nn \msg_new:nnn {nnx} -\cs_generate_variant:Nn \msg_new:nnnn {nnxx} -\cs_new:Nn \@@_msg_new:nnn - { \msg_new:nnx {#1} {#2} { \tl_trim_spaces:n {#3} } } -\cs_new:Nn \@@_msg_new:nnnn - { \msg_new:nnxx {#1} {#2} { \tl_trim_spaces:n {#3} } { \tl_trim_spaces:n {#4} } } -\char_set_catcode_space:n {32} -% \end{macrocode} -% -% \subsection{Errors} -% -% \begin{macrocode} -\@@_msg_new:nnn {fontspec} {only-inside-encdef} - { - \exp_not:N#1can only be used in the second argument - to \string\DeclareUnicodeEncoding. - } -\@@_msg_new:nnn {fontspec} {no-size-info} - { - Size information must be supplied.\\ - For example, SizeFeatures={Size={8-12},...}. - } -\@@_msg_new:nnnn {fontspec} {font-not-found} - { - The font "#1" cannot be found. - } - { - A font might not be found for many reasons.\\ - Check the spelling, where the font is installed etc. etc.\\\\ - When in doubt, ask someone for help! - } -\@@_msg_new:nnnn {fontspec} {rename-feature-not-exist} - { - The feature #1 doesn't appear to be defined. - } - { - It looks like you're trying to rename a feature that doesn't exist. - } -\@@_msg_new:nnn {fontspec} {no-glyph} - { - '\l_fontspec_fontname_tl' does not contain glyph #1. - } -\@@_msg_new:nnnn {fontspec} {euler-too-late} - { - The euler package must be loaded BEFORE fontspec. - } - { - fontspec only overwrites euler's attempt to - define the maths text fonts if fontspec is - loaded after euler. Type to proceed - with incorrect \string\mathit, \string\mathbf, etc. - } -\@@_msg_new:nnnn {fontspec} {no-xcolor} - { - Cannot load named colours without the xcolor package. - } - { - Sorry, I can't do anything to help. Instead of loading - the color package, use xcolor instead. - } -\@@_msg_new:nnnn {fontspec} {unknown-color-model} - { - Error loading colour `#1'; unknown colour model. - } - { - Sorry, I can't do anything to help. Please report this error - to my developer with a minimal example that causes the problem. - } -\@@_msg_new:nnnn {fontspec} {not-in-addfontfeatures} - { - The "#1" font feature cannot be used in \string\addfontfeatures. - } - { - This is due to how TeX loads fonts; such settings - are global so adding them mid-document within a group causes - confusion. You'll need to define multiple font families to achieve - what you want. - } -% \end{macrocode} -% -% \subsection{Warnings} -% -% \begin{macrocode} -\@@_msg_new:nnn {fontspec} {tu-clash} - { - I have found the tuenc.def encoding definition file but the TU encoding is not - defined by the LaTeX2e kernel; attempting to correct but you really should update - to the latest version of LaTeX2e. - } -\@@_msg_new:nnn {fontspec} {tu-missing} - { - The TU encoding seems to be missing; please update to the latest version of LaTeX2e. - } -\@@_msg_new:nnn {fontspec} {addfontfeatures-ignored} - { - \string\addfontfeature (s) ignored \msg_line_context:; - it cannot be used with a font that wasn't selected by a fontspec command.\\ - \\ - The current font is "\use:c{font@name}".\\ - \int_compare:nTF { \clist_count:n {#1} = 1 } - { The requested feature is "#1". } - { The requested features are "#1". } - } -\@@_msg_new:nnn {fontspec} {feature-option-overwrite} - { - Option '#2' of font feature '#1' overwritten. - } -\@@_msg_new:nnn {fontspec} {script-not-exist-latn} - { - Font '\l_fontspec_fontname_tl' does not contain script '#1'.\\ - 'Latin' script used instead. - } -\@@_msg_new:nnn {fontspec} {script-not-exist} - { - Font '\l_fontspec_fontname_tl' does not contain script '#1'. - } -\@@_msg_new:nnn {fontspec} {aat-feature-not-exist} - { - '\l_keys_key_tl=\l_keys_value_tl' feature not supported - for AAT font '\l_fontspec_fontname_tl'. - } -\@@_msg_new:nnn {fontspec} {aat-feature-not-exist-in-font} - { - AAT feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available - in font '\l_fontspec_fontname_tl'. - } -\@@_msg_new:nnn {fontspec} {icu-feature-not-exist} - { - '\l_keys_key_tl=\l_keys_value_tl' feature not supported - for OpenType font '\l_fontspec_fontname_tl' - } -\@@_msg_new:nnn {fontspec} {icu-feature-not-exist-in-font} - { - OpenType feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available - for font '\l_fontspec_fontname_tl' - with script '\l_@@_script_name_tl' and language '\l_@@_lang_name_tl'. - } -\@@_msg_new:nnn {fontspec} {no-opticals} - { - '\l_fontspec_fontname_tl' doesn't appear to have an Optical Size axis. - } -\@@_msg_new:nnn {fontspec} {language-not-exist} - { - Language '#1' not available - for font '\l_fontspec_fontname_tl' - with script '\l_@@_script_name_tl'.\\ - 'Default' language used instead. - } -\@@_msg_new:nnn {fontspec} {only-xetex-feature} - { - Ignored XeTeX only feature: '#1'. - } -\@@_msg_new:nnn {fontspec} {only-luatex-feature} - { - Ignored LuaTeX only feature: '#1'. - } -\@@_msg_new:nnn {fontspec} {no-mapping} - { - Input mapping not (yet?) supported in LuaTeX. - } -\@@_msg_new:nnn {fontspec} {no-mapping-ligtex} - { - Input mapping not (yet?) supported in LuaTeX.\\ - Use "Ligatures=TeX" instead of "Mapping=tex-text". - } -\@@_msg_new:nnn {fontspec} {cm-default-obsolete} - { - The "cm-default" package option is obsolete. - } -\@@_msg_new:nnn {fontspec} {fakebold-only-xetex} - { - The "FakeBold" and "AutoFakeBold" options are only available with XeLaTeX.\\ - Option ignored. - } -\@@_msg_new:nnn {fontspec} {font-index-needs-ttc} - { - The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\ - Feature ignored. - } -\@@_msg_new:nnn {fontspec} {feat-cannot-remove} - { - The "#1" feature cannot be deactivated. Request ignored. - } -% \end{macrocode} -% -% \subsection{Info messages} -% -% \begin{macrocode} -\@@_msg_new:nnn {fontspec} {defining-font} - { - Font family '\g_@@_nfss_family_tl' created for font '#2' - with options [\l_@@_all_features_clist].\\ - \\ - This font family consists of the following NFSS series/shapes:\\ - \g_@@_defined_shapes_tl - } -\@@_msg_new:nnn {fontspec} {no-font-shape} - { - Could not resolve font "#1" (it probably doesn't exist). - } -\@@_msg_new:nnn {fontspec} {set-scale} - { - \l_fontspec_fontname_tl\space scale = \l_@@_scale_tl. - } -\@@_msg_new:nnn {fontspec} {setup-math} - { - Adjusting the maths setup (use [no-math] to avoid this). - } -\@@_msg_new:nnn {fontspec} {no-scripts} - { - Font "\l_fontspec_fontname_tl" does not contain any OpenType `Script' information. - } -\@@_msg_new:nnn {fontspec} {opa-twice} - { - Opacity set twice, in both Colour and Opacity.\\ - Using specification "Opacity=#1". - } -\@@_msg_new:nnn {fontspec} {opa-twice-col} - { - Opacity set twice, in both Opacity and Colour.\\ - Using an opacity specification in hex of "#1/FF". - } -\@@_msg_new:nnn {fontspec} {bad-colour} - { - Bad colour declaration "#1". - Colour must be one of:\\ - * a named xcolor colour\\ - * a six-digit hex colour RRGGBB\\ - * an eight-digit hex colour RRGGBBTT with opacity - } -% \end{macrocode} -% -% Reset `space' behaviour: -% \begin{macrocode} -\char_set_catcode_ignore:n {32} -% \end{macrocode} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-opening.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-opening.dtx deleted file mode 100644 index 323428058bc..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-opening.dtx +++ /dev/null @@ -1,195 +0,0 @@ -%%^^A%% fontspec-opening.dtx -- part of FONTSPEC -% -% \section{Opening code} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% \subsection{Package options} -% -% \begin{macrocode} -\DeclareOption{cm-default} - { - \@@_warning:n {cm-default-obsolete} - } -% \end{macrocode} -% -% \begin{macrocode} -\DeclareOption {math} { \bool_gset_true:N \g_@@_math_bool } -\DeclareOption {no-math} { \bool_gset_false:N \g_@@_math_bool } -\DeclareOption {config} { \bool_gset_true:N \g_@@_cfg_bool } -\DeclareOption {no-config}{ \bool_gset_false:N \g_@@_cfg_bool } -\DeclareOption {euenc} { \bool_gset_true:N \g_@@_euenc_bool } -\DeclareOption {tuenc} { \bool_gset_false:N \g_@@_euenc_bool } -% \end{macrocode} -% -% \begin{macrocode} -\DeclareOption {quiet} - { - \msg_redirect_module:nnn { fontspec } { warning } { info } - \msg_redirect_module:nnn { fontspec } { info } { none } - } -\DeclareOption{silent} - { - \msg_redirect_module:nnn { fontspec } { warning } { none } - \msg_redirect_module:nnn { fontspec } { info } { none } - } -% \end{macrocode} -% -% \begin{macrocode} -\ExecuteOptions{config,math,tuenc} -\ProcessOptions* -% \end{macrocode} -% -% -% -% -% \subsection{Encodings} -% -% Soon to be the default, with a just-in-case check: -% \begin{macrocode} -\bool_if:NF \g_@@_euenc_bool - { - \file_if_exist:nTF {tuenc.def} - { - \cs_if_exist:cF {T@TU} - { - \@@_warning:n {tu-clash} - \DeclareFontEncoding{TU}{}{} - \DeclareFontSubstitution{TU}{lmr}{m}{n} - } - } - { - \@@_warning:n {tu-missing} - \bool_gset_true:N \g_@@_euenc_bool - } - } -\bool_if:NTF \g_@@_euenc_bool - { -% \tl_gset:Nn \g_fontspec_encoding_tl {EU1} -% \tl_gset:Nn \g_fontspec_encoding_tl {EU2} - } - { \tl_gset:Nn \g_fontspec_encoding_tl { TU } } -% \end{macrocode} -% -% \begin{macrocode} -\tl_set:Nn \rmdefault {lmr} -\tl_set:Nn \sfdefault {lmss} -\tl_set:Nn \ttdefault {lmtt} -\RequirePackage[\g_fontspec_encoding_tl]{fontenc} -\tl_set_eq:NN \UTFencname \g_fontspec_encoding_tl % for xunicode if needed -% \end{macrocode} -% To overcome the encoding changing the current font size, but only if a class has been loaded first: -% \begin{macrocode} -\tl_if_in:NnT \@filelist {.cls} { \normalsize } -% \end{macrocode} -% Dealing with a couple of the problems introduced by \pkg{babel}: -% \begin{macrocode} -\tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl -\tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl -\AtBeginDocument - { - \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl - \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl - } -% \end{macrocode} -% That latin encoding definition is repeated to suppress font warnings. -% Something to do with \cmd\select@language\ ending up in the \texttt{.aux} -% file which is read at the beginning of the document. -% -% \begin{macrocode} -\bool_if:NT \g_@@_euenc_bool - { -% \cs_set_eq:NN \fontspec_tmp: \XeTeXpicfile -% \cs_set:Npn \XeTeXpicfile {} - \RequirePackage{xunicode} -% \cs_set_eq:NN \XeTeXpicfile \fontspec_tmp: - } -% \end{macrocode} -% -% -% \subsection{Generic functions} -% -% \begin{macro}{\FontspecSetCheckBoolTrue} -% \begin{macro}{\FontspecSetCheckBoolFalse} -% These strange set functions are to simplify returning code from LuaTeX: -% \begin{macrocode} -\cs_new:Npn \FontspecSetCheckBoolTrue { \bool_set_true:N \l_@@_check_bool } -\cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l_@@_check_bool } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@@_keys_set_known:nnN} -% \begin{macrocode} -\cs_new:Nn \@@_keys_set_known:nnN - { -% \typeout{:::: Keys~set:~{#1}~{#2} } - \keys_set_known:nnN {#1} {#2} #3 -% \typeout{:::: Leftover:~{#3} } - } -\cs_generate_variant:Nn \@@_keys_set_known:nnN {nx} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_int_mult_truncate:Nn} -% Missing in expl3, IMO. -% \begin{macrocode} -\cs_new:Nn \@@_int_mult_truncate:Nn - { - \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: } - } -% \end{macrocode} -% \end{macro} -% -% -% -% \subsection{\pkg{expl3} variants} -% -% \begin{macrocode} -\cs_generate_variant:Nn \int_set:Nn {Nv} -\cs_generate_variant:Nn \keys_set:nn {nx} -\cs_generate_variant:Nn \keys_set_known:nnN {nx} -\cs_generate_variant:Nn \prop_put:Nnn {Nxx} -\cs_generate_variant:Nn \prop_put:Nnn {NxV} -\cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV} -\cs_generate_variant:Nn \prop_gput:Nnn {Nxn} -\cs_generate_variant:Nn \prop_get:NnNT {NxN} -\cs_generate_variant:Nn \prop_get:NnNTF {NxN} -\cs_generate_variant:Nn \str_if_eq:nnTF {nv} -\cs_generate_variant:Nn \tl_if_empty:nTF {x} -\cs_generate_variant:Nn \tl_if_empty:nF {x} -\cs_generate_variant:Nn \tl_if_empty:nF {f} -\cs_generate_variant:Nn \tl_if_eq:nnT {ox} -\cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx} -% \end{macrocode} -% -% -% -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-opentype.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-opentype.dtx deleted file mode 100644 index a808789d8e9..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-opentype.dtx +++ /dev/null @@ -1,438 +0,0 @@ -%%^^A%% fontspec-opentype.dtx -- part of FONTSPEC - -% \section{OpenType definitions code} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% -% -% \begin{macro}{\@@_define_opentype_feature_group:n} -% \begin{macrocode} -\cs_new:Nn \@@_define_opentype_feature_group:n - { - \keys_define:nn {fontspec-opentype} { #1 .multichoice: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_define_opentype_feature:nnnnn} -% \darg{Feature key} -% \darg{Feature option val} -% \darg{Check feature --- leave empty for no check} -% \darg{Exact tag string to activate --- leave empty for disable only} -% \darg{Tags to remove (clist)} -% \begin{macrocode} -\cs_new:Nn \@@_feat_prop_add:nn - { - \tl_if_empty:nF {#1} - { - \prop_if_in:NnF \g_@@_OT_features_prop {#1} - { - \prop_gput:Nnn \g_@@_OT_features_prop {#1} {#2} - } - } - } -\cs_new:Nn \@@_define_opentype_feature:nnnnn - { - \@@_feat_prop_add:nn {#3} {#1\,=\,#2} - \tl_if_empty:nTF {#4} - { - \keys_define:nn {fontspec-opentype} - { - #1/#2 .code:n = - { \@@_remove_clashing_featstr:n {#5} } - } - } - { - \keys_define:nn {fontspec-opentype} - { - #1/#2 .code:n = - { -% \typeout{::::::::fontspec-opentype~#1/#2~=~#3/#4/#5} - \@@_make_OT_feature:nnn {#3} {#4} {#5} - } - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_define_opentype_onoffreset:nnnnn} -% \darg{Feature key} -% \darg{Feature option val} -% \darg{Check feature} -% \darg{Tag prefix to activate: \texttt{+\#4} = on, \texttt{-\#4} = off.} -% \darg{Tags to remove in the on case (clist)} -% \begin{macrocode} -\cs_new:Nn \@@_feat_off:n {#1Off} -\cs_new:Nn \@@_feat_reset:n {#1Reset} -% \end{macrocode} -% -% \begin{macrocode} -\cs_new:Nn \@@_define_opentype_onoffreset:nnnnn - { - \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5} - \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_off:n {#2} } {#3} {-#4} {} - \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_reset:n {#2} } {} {} {+#4,-#4} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_define_opentype_onreset:nnnnn} -% \darg{Feature key} -% \darg{Feature option val} -% \darg{Check feature} -% \darg{Exact tag string to activate} -% \darg{Tags to remove (clist)} -% \begin{macrocode} -\cs_new:Nn \@@_define_opentype_onreset:nnnnn - { - \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5} - \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_reset:n {#2} } {} {} {#4} - } -% \end{macrocode} -% \end{macro} -% -% \subsection{Adding features when loading fonts} -% -% When remove clashing features, -% \begin{enumerate} -% \item remove the feature being added (to avoid duplicates); -% \item remove the inverse of the feature (to avoid cancellation); -% \item finally remove all clashing features. -% \end{enumerate} -% \begin{macrocode} -\cs_new:Nn \@@_make_OT_feature:nnn - { -% \typeout{:: @@_make_OT_feature:nnn \exp_not:n { {#1}{#2}{#3} } } - - \bool_set_true:N \l_@@_proceed_bool - \bool_set_true:N \l_@@_check_feat_bool - - \tl_if_empty:nT {#1} { \bool_set_false:N \l_@@_check_feat_bool } - \bool_if:NT \l_@@_check_feat_bool - { - \@@_check_ot_feat:NnF \l_fontspec_font {#1} - { - \@@_warning:nx {icu-feature-not-exist-in-font} {#1} - \bool_set_false:N \l_@@_proceed_bool - } - } - - \bool_if:NT \l_@@_proceed_bool - { - \exp_args:Nx \@@_remove_clashing_featstr:n - { #2 , \@@_swap_plus_minus:n {#2} , #3 } - - \@@_update_featstr:n {#2} - } - } -\cs_generate_variant:Nn \@@_make_OT_feature:nnn {xxx} -% \end{macrocode} -% -% \begin{macrocode} -\cs_new:Nn \@@_swap_plus_minus:n { \@@_swap_plus_minus_aux:Nq #1 \q_nil } -\cs_new:Npn \@@_swap_plus_minus_aux:Nq #1#2 \q_nil - { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } } -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\@@_check_script:NnTF} -% This macro takes an OpenType script tag and checks if it exists in the current -% font. The output boolean is \cmd\@tempswatrue. \cmd\l_@@_script_int\ is used to store -% the number corresponding to the script tag string. -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_check_script:Nn {TF} - { - \bool_if:NTF \l_@@_never_check_bool - { \prg_return_true: } -%<*XE> - { - \@@_iv_str_to_num:Nn \l_@@_strnum_int {#2} - \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts #1 } - \int_zero:N \l_tmpa_int - \bool_set_false:N \l__fontspec_check_bool - \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } - { - \ifnum \XeTeXOTscripttag #1 \l_tmpa_int = \l_@@_strnum_int - \bool_set_true:N \l__fontspec_check_bool - \int_set:Nn \l_tmpa_int {\l_tmpb_int} - \else - \int_incr:N \l_tmpa_int - \fi - } - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } -% -%<*LU> - { - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} } - \directlua{fontspec.check_ot_script("\l_@@_tmp_tl", "#2")} - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } -% - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_check_lang:NnTF} -% This macro takes an OpenType language tag and checks if it exists in the current -% font/script. The output boolean is \cmd\@tempswatrue. \cmd\l_@@_language_int\ is used to store -% the number corresponding to the language tag string. -% The script used is whatever's held in \cmd\l_@@_script_int. By default, that's the -% number corresponding to `|latn|'. -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_check_lang:Nn {TF} - { - \bool_if:NTF \l_@@_never_check_bool - { \prg_return_true: } -%<*XE> - { - \@@_iv_str_to_num:Nn \l_@@_strnum_int {#2} - \int_set:Nn \l_tmpb_int - { \XeTeXOTcountlanguages #1 \l_@@_script_int } - \int_zero:N \l_tmpa_int - \bool_set_false:N \l__fontspec_check_bool - \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } - { - \ifnum\XeTeXOTlanguagetag #1 \l_@@_script_int \l_tmpa_int = \l_@@_strnum_int - \bool_set_true:N \l__fontspec_check_bool - \int_set:Nn \l_tmpa_int {\l_tmpb_int} - \else - \int_incr:N \l_tmpa_int - \fi - } - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } -% -%<*LU> - { - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} } - \directlua - { - fontspec.check_ot_lang( "\l_@@_tmp_tl", "#2", "\l_fontspec_script_tl" ) - } - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } -% - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_check_ot_feat:NnTF} -% This macro takes an OpenType feature tag and checks if it exists in the current -% font/script/language. -% \cmd\l_@@_strnum_int\ is used to store the number corresponding to the feature tag string. -% The script used is whatever's held in \cmd\l_@@_script_int. By default, that's the -% number corresponding to `|latn|'. The language used is \cmd\l_@@_language_int, -% by default |0|, the `default language'. -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_check_ot_feat:Nn {TF,F} - { - \bool_if:NTF \l_@@_never_check_bool - { \prg_return_true: } -%<*XE> - { -%\typeout{::~ fontspec_check_ot_feat:n~ {#1}} - \int_set:Nn \l_tmpb_int - { - \XeTeXOTcountfeatures #1 - \l_@@_script_int - \l_@@_language_int - } - \@@_iv_str_to_num:Nn \l_@@_strnum_int {#2} - \int_zero:N \l_tmpa_int - \bool_set_false:N \l_@@_check_bool - \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } - { - \ifnum\XeTeXOTfeaturetag #1 \l_@@_script_int \l_@@_language_int - \l_tmpa_int =\l_@@_strnum_int - \bool_set_true:N \l_@@_check_bool - \int_set:Nn \l_tmpa_int {\l_tmpb_int} - \else - \int_incr:N \l_tmpa_int - \fi - } - \bool_if:NTF \l_@@_check_bool \prg_return_true: \prg_return_false: - } -% -%<*LU> - { -%\typeout{::~ fontspec_check_ot_feat:n~ {#1}} - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} } - \directlua - { - fontspec.check_ot_feat( - "\l_@@_tmp_tl", "#2", - "\l_fontspec_lang_tl", "\l_fontspec_script_tl" - ) - } - \bool_if:NTF \l_@@_check_bool \prg_return_true: \prg_return_false: - } -% - } -% \end{macrocode} -% \end{macro} -% -% \subsection{OpenType feature information} -% -% \begin{macrocode} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {aalt}{Access~All~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvf}{Above-base~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvm}{Above-base~Mark~Positioning} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvs}{Above-base~Substitutions} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {afrc}{Alternative~Fractions} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {akhn}{Akhands} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blwf}{Below-base~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blwm}{Below-base~Mark~Positioning} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blws}{Below-base~Substitutions} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {calt}{Contextual~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {case}{Case-Sensitive~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ccmp}{Glyph~Composition~/~Decomposition} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cfar}{Conjunct~Form~After~Ro} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cjct}{Conjunct~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {clig}{Contextual~Ligatures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cpct}{Centered~CJK~Punctuation} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cpsp}{Capital~Spacing} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cswh}{Contextual~Swash} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {curs}{Cursive~Positioning} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cvNN}{Character~Variant~$N$} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {c2pc}{Petite~Capitals~From~Capitals} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {c2sc}{Small~Capitals~From~Capitals} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dist}{Distances} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dlig}{Discretionary~Ligatures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dnom}{Denominators} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dtls}{Dotless~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {expt}{Expert~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {falt}{Final~Glyph~on~Line~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fin2}{Terminal~Forms~\#2} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fin3}{Terminal~Forms~\#3} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fina}{Terminal~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {flac}{Flattened~accent~forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {frac}{Fractions} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fwid}{Full~Widths} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {half}{Half~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {haln}{Halant~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {halt}{Alternate~Half~Widths} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hist}{Historical~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hkna}{Horizontal~Kana~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hlig}{Historical~Ligatures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hngl}{Hangul} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hojo}{Hojo~Kanji~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hwid}{Half~Widths} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {init}{Initial~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {isol}{Isolated~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ital}{Italics} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jalt}{Justification~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp78}{JIS78~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp83}{JIS83~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp90}{JIS90~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp04}{JIS2004~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {kern}{Kerning} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {lfbd}{Left~Bounds} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {liga}{Standard~Ligatures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ljmo}{Leading~Jamo~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {lnum}{Lining~Figures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {locl}{Localized~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ltra}{Left-to-right~alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ltrm}{Left-to-right~mirrored~forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mark}{Mark~Positioning} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {med2}{Medial~Forms~\#2} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {medi}{Medial~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mgrk}{Mathematical~Greek} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mkmk}{Mark~to~Mark~Positioning} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mset}{Mark~Positioning~via~Substitution} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nalt}{Alternate~Annotation~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nlck}{NLC~Kanji~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nukt}{Nukta~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {numr}{Numerators} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {onum}{Oldstyle~Figures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {opbd}{Optical~Bounds} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ordn}{Ordinals} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ornm}{Ornaments} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {palt}{Proportional~Alternate~Widths} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pcap}{Petite~Capitals} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pkna}{Proportional~Kana} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pnum}{Proportional~Figures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pref}{Pre-Base~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pres}{Pre-base~Substitutions} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pstf}{Post-base~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {psts}{Post-base~Substitutions} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pwid}{Proportional~Widths} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {qwid}{Quarter~Widths} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rand}{Randomize} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rclt}{Required~Contextual~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rkrf}{Rakar~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rlig}{Required~Ligatures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rphf}{Reph~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtbd}{Right~Bounds} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtla}{Right-to-left~alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtlm}{Right-to-left~mirrored~forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ruby}{Ruby~Notation~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rvrn}{Required~Variation~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {salt}{Stylistic~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {sinf}{Scientific~Inferiors} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {size}{Optical~size} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {smcp}{Small~Capitals} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {smpl}{Simplified~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ssNN}{Stylistic~Set~$N$} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ssty}{Math~script~style~alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {stch}{Stretching~Glyph~Decomposition} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {subs}{Subscript} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {sups}{Superscript} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {swsh}{Swash} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {titl}{Titling} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tjmo}{Trailing~Jamo~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tnam}{Traditional~Name~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tnum}{Tabular~Figures} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {trad}{Traditional~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {twid}{Third~Widths} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {unic}{Unicase} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {valt}{Alternate~Vertical~Metrics} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vatu}{Vattu~Variants} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vert}{Vertical~Writing} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vhal}{Alternate~Vertical~Half~Metrics} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vjmo}{Vowel~Jamo~Forms} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vkna}{Vertical~Kana~Alternates} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vkrn}{Vertical~Kerning} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vpal}{Proportional~Alternate~Vertical~Metrics} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vrt2}{Vertical~Alternates~and~Rotation} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation} -\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {zero}{Slashed~Zero} -% \end{macrocode} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-patches.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-patches.dtx deleted file mode 100644 index c466d9fd45e..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-patches.dtx +++ /dev/null @@ -1,208 +0,0 @@ -%%^^A%% fontspec-patches.dtx -- part of FONTSPEC - -% \section{Patching code} -% -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% -% \subsection{\cmd\-} -% -% \begin{macro}{\-} -% This macro is courtesy of Frank Mittelbach and the \LaTeXe\ source code. -% \begin{macrocode} -\DeclareRobustCommand{\-} - { - \discretionary - { - \char\ifnum\hyphenchar\font<\z@ - \xlx@defaulthyphenchar - \else - \hyphenchar\font - \fi - }{}{} - } -\def\xlx@defaulthyphenchar{`\-} -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Verbatims} -% -% Many thanks to Apostolos Syropoulos for discovering this problem and writing the redefinion of \LaTeX's |verbatim| environment and \cs{verb*} command. -% -% \begin{macro}{\fontspec_visible_space:} -% Print \unichar{2423}{Open box}, which is used to visibly display a space character. -% \begin{macrocode} -\cs_new:Nn \fontspec_visible_space: - { - \@@_primitive_font_glyph_if_exist:NnTF \font {"2423} - { \char"2423\scan_stop: } - { \fontspec_visible_space_fallback: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_visible_space_fallback:} -% If the current font doesn't have \unichar{2423}{Open box}, use Latin Modern Mono instead. -% \begin{macrocode} -\cs_new:Nn \fontspec_visible_space_fallback: - { - { - \usefont{\g_fontspec_encoding_tl}{lmtt}{\f@series}{\f@shape} - \textvisiblespace - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fontspec_print_visible_spaces:} -% Helper macro to turn spaces (\verb|^^20|) active and print visible space instead. -% \begin{macrocode} -\group_begin: -\char_set_catcode_active:n{"20}% -\cs_gset:Npn\fontspec_print_visible_spaces:{% -\char_set_catcode_active:n{"20}% -\cs_set_eq:NN^^20\fontspec_visible_space:% -}% -\group_end: -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\verb} -% \begin{macro}{\verb*} -% Redefine \cmd\verb\ to use \cmd\fontspec_print_visible_spaces:. -% \begin{macrocode} -\def\verb - { - \relax\ifmmode\hbox\else\leavevmode\null\fi - \bgroup - \verb@eol@error \let\do\@makeother \dospecials - \verbatim@font\@noligs - \@ifstar\@@sverb\@verb - } -\def\@@sverb{\fontspec_print_visible_spaces:\@sverb} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% It's better to put small things into \cmd\AtBeginDocument, so here we go: -% \begin{macrocode} -\AtBeginDocument - { - \fontspec_patch_verbatim: - \fontspec_patch_moreverb: - \fontspec_patch_fancyvrb: - \fontspec_patch_listings: - } -% \end{macrocode} -% -% \begin{environment}{verbatim*} -% With the \pkg{verbatim} package. -% \begin{macrocode} -\cs_set:Npn \fontspec_patch_verbatim: - { - \@ifpackageloaded{verbatim} - { - \cs_set:cpn {verbatim*} - { - \group_begin: \@verbatim \fontspec_print_visible_spaces: \verbatim@start - } - } -% \end{macrocode} -% This is for vanilla \LaTeX. -% \begin{macrocode} - { - \cs_set:cpn {verbatim*} - { - \@verbatim \fontspec_print_visible_spaces: \@sxverbatim - } - } - } -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{listingcont*} -% This is for \pkg{moreverb}. -% The main |listing*| environment inherits this definition. -% \begin{macrocode} -\cs_set:Npn \fontspec_patch_moreverb: - { - \@ifpackageloaded{moreverb}{ - \cs_set:cpn {listingcont*} - { - \cs_set:Npn \verbatim@processline - { - \thelisting@line \global\advance\listing@line\c_one - \the\verbatim@line\par - } - \@verbatim \fontspec_print_visible_spaces: \verbatim@start - } - }{} - } -% \end{macrocode} -% \end{environment} -% -% \pkg{listings} and \pkg{fancvrb} make things nice and easy: -% \begin{macrocode} -\cs_set:Npn \fontspec_patch_fancyvrb: - { - \@ifpackageloaded{fancyvrb} - { - \cs_set_eq:NN \FancyVerbSpace \fontspec_visible_space: - }{} - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_set:Npn \fontspec_patch_listings: - { - \@ifpackageloaded{listings} - { - \cs_set_eq:NN \lst@visiblespace \fontspec_visible_space: - }{} - } -% \end{macrocode} -% -% \subsection{\cs{oldstylenums}} -% -% -% \begin{macro}{\oldstylenums} -% \begin{macro}{\liningnums} -% This command obviously needs a redefinition. -% And we may as well provide the reverse command. -% \begin{macrocode} -\RenewDocumentCommand \oldstylenums {m} - { - { \addfontfeature{Numbers=OldStyle} #1 } - } -\NewDocumentCommand \liningnums {m} - { - { \addfontfeature{Numbers=Lining} #1 } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \begin{macrocode} -% -% \end{macrocode} - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-scripts.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-scripts.dtx deleted file mode 100644 index 480d53e865a..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-scripts.dtx +++ /dev/null @@ -1,183 +0,0 @@ -%%^^A%% fontspec-scripts.dtx -- part of FONTSPEC - -% \section{Font script definitions} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% \begin{macrocode} -\newfontscript{Adlam}{adlm} -\newfontscript{Ahom}{ahom} -\newfontscript{Anatolian~Hieroglyphs}{hluw} -\newfontscript{Arabic}{arab} -\newfontscript{Armenian}{armn} -\newfontscript{Avestan}{avst} -\newfontscript{Balinese}{bali} -\newfontscript{Bamum}{bamu} -\newfontscript{Bassa~Vah}{bass} -\newfontscript{Batak}{batk} -\newfontscript{Bengali}{bng2,beng} -\newfontscript{Bhaiksuki}{bhks} -\newfontscript{Bopomofo}{bopo} -\newfontscript{Brahmi}{brah} -\newfontscript{Braille}{brai} -\newfontscript{Buginese}{bugi} -\newfontscript{Buhid}{buhd} -\newfontscript{Byzantine~Music}{byzm} -\newfontscript{Canadian~Syllabics}{cans} -\newfontscript{Carian}{cari} -\newfontscript{Caucasian~Albanian}{aghb} -\newfontscript{Chakma}{cakm} -\newfontscript{Cham}{cham} -\newfontscript{Cherokee}{cher} -\newfontscript{CJK~Ideographic}{hani} -\newfontscript{Coptic}{copt} -\newfontscript{Cypriot~Syllabary}{cprt} -\newfontscript{Cyrillic}{cyrl} -\newfontscript{Default}{DFLT} -\newfontscript{Deseret}{dsrt} -\newfontscript{Devanagari}{dev2,deva} -\newfontscript{Duployan}{dupl} -\newfontscript{Egyptian~Hieroglyphs}{egyp} -\newfontscript{Elbasan}{elba} -\newfontscript{Ethiopic}{ethi} -\newfontscript{Georgian}{geor} -\newfontscript{Glagolitic}{glag} -\newfontscript{Gothic}{goth} -\newfontscript{Grantha}{gran} -\newfontscript{Greek}{grek} -\newfontscript{Gujarati}{gjr2,gujr} -\newfontscript{Gurmukhi}{gur2,guru} -\newfontscript{Hangul~Jamo}{jamo} -\newfontscript{Hangul}{hang} -\newfontscript{Hanunoo}{hano} -\newfontscript{Hatran}{hatr} -\newfontscript{Hebrew}{hebr} -\newfontscript{Hiragana~and~Katakana}{kana} -\newfontscript{Imperial~Aramaic}{armi} -\newfontscript{Inscriptional~Pahlavi}{phli} -\newfontscript{Inscriptional~Parthian}{prti} -\newfontscript{Javanese}{java} -\newfontscript{Kaithi}{kthi} -\newfontscript{Kannada}{knd2,knda} -\newfontscript{Kayah~Li}{kali} -\newfontscript{Kharosthi}{khar} -\newfontscript{Khmer}{khmr} -\newfontscript{Khojki}{khoj} -\newfontscript{Khudawadi}{sind} -\newfontscript{Lao}{lao~} -\newfontscript{Latin}{latn} -\newfontscript{Lepcha}{lepc} -\newfontscript{Limbu}{limb} -\newfontscript{Linear~A}{lina} -\newfontscript{Linear~B}{linb} -\newfontscript{Lisu}{lisu} -\newfontscript{Lycian}{lyci} -\newfontscript{Lydian}{lydi} -\newfontscript{Mahajani}{mahj} -\newfontscript{Malayalam}{mlm2,mlym} -\newfontscript{Mandaic}{mand} -\newfontscript{Manichaean}{mani} -\newfontscript{Marchen}{marc} -\newfontscript{Math}{math} -\newfontscript{Meitei~Mayek}{mtei} -\newfontscript{Mende~Kikakui}{mend} -\newfontscript{Meroitic~Cursive}{merc} -\newfontscript{Meroitic~Hieroglyphs}{mero} -\newfontscript{Miao}{plrd} -\newfontscript{Modi}{modi} -\newfontscript{Mongolian}{mong} -\newfontscript{Mro}{mroo} -\newfontscript{Multani}{mult} -\newfontscript{Musical~Symbols}{musc} -\newfontscript{Myanmar}{mym2,mymr} -\newfontscript{N'Ko}{nko~} -\newfontscript{Nabataean}{nbat} -\newfontscript{Newa}{newa} -\newfontscript{Odia}{ory2,orya} -\newfontscript{Ogham}{ogam} -\newfontscript{Ol~Chiki}{olck} -\newfontscript{Old~Italic}{ital} -\newfontscript{Old~Hungarian}{hung} -\newfontscript{Old~North~Arabian}{narb} -\newfontscript{Old~Permic}{perm} -\newfontscript{Old~Persian~Cuneiform}{xpeo} -\newfontscript{Old~South~Arabian}{sarb} -\newfontscript{Old~Turkic}{orkh} -\newfontscript{Osage}{osge} -\newfontscript{Osmanya}{osma} -\newfontscript{Pahawh~Hmong}{hmng} -\newfontscript{Palmyrene}{palm} -\newfontscript{Pau~Cin~Hau}{pauc} -\newfontscript{Phags-pa}{phag} -\newfontscript{Phoenician}{phnx} -\newfontscript{Psalter~Pahlavi}{phlp} -\newfontscript{Rejang}{rjng} -\newfontscript{Runic}{runr} -\newfontscript{Samaritan}{samr} -\newfontscript{Saurashtra}{saur} -\newfontscript{Sharada}{shrd} -\newfontscript{Shavian}{shaw} -\newfontscript{Siddham}{sidd} -\newfontscript{Sign~Writing}{sgnw} -\newfontscript{Sinhala}{sinh} -\newfontscript{Sora~Sompeng}{sora} -\newfontscript{Sumero-Akkadian~Cuneiform}{xsux} -\newfontscript{Sundanese}{sund} -\newfontscript{Syloti~Nagri}{sylo} -\newfontscript{Syriac}{syrc} -\newfontscript{Tagalog}{tglg} -\newfontscript{Tagbanwa}{tagb} -\newfontscript{Tai~Le}{tale} -\newfontscript{Tai~Lu}{talu} -\newfontscript{Tai~Tham}{lana} -\newfontscript{Tai~Viet}{tavt} -\newfontscript{Takri}{takr} -\newfontscript{Tamil}{tml2,taml} -\newfontscript{Tangut}{tang} -\newfontscript{Telugu}{tel2,telu} -\newfontscript{Thaana}{thaa} -\newfontscript{Thai}{thai} -\newfontscript{Tibetan}{tibt} -\newfontscript{Tifinagh}{tfng} -\newfontscript{Tirhuta}{tirh} -\newfontscript{Ugaritic~Cuneiform}{ugar} -\newfontscript{Vai}{vai~} -\newfontscript{Warang~Citi}{wara} -\newfontscript{Yi}{yi~~} -% \end{macrocode} -% For convenience or backwards compatibility: -% \begin{macrocode} -\newfontscript{CJK}{hani} -\newfontscript{Kana}{kana} -\newfontscript{Maths}{math} -\newfontscript{N'ko}{nko~} -\newfontscript{Oriya}{ory2,orya} -% \end{macrocode} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-user.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-user.dtx deleted file mode 100644 index 173de1f9c81..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-user.dtx +++ /dev/null @@ -1,509 +0,0 @@ -%%^^A%% fontspec-user.dtx -- part of FONTSPEC - -% \section{User command internals} -% \label{sec:codeinternal} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% -% \subsection{Font selection} -% -% \begin{macro}{\@@_main_fontspec:nn} -% This is the main command of the package that -% selects fonts with various features. It takes two arguments: the -% font name and the optional requested features of that -% font. -% \begin{macrocode} -\cs_new:Nn \@@_main_fontspec:nn - { - \fontspec_set_family:Nnn \f@family {#1} {#2} - \fontencoding { \g_@@_nfss_enc_tl } - \selectfont - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setmainfont} -% The following three macros perform equivalent operations setting -% the default font for a particular family: `roman', sans serif, or typewriter -% (monospaced). -% -% They end with |\normalfont| so that if they're -% used in the document, the change registers immediately. -% \begin{macrocode} -\cs_new:Nn \@@_main_setmainfont:nn - { - \fontspec_set_family:Nnn \l_@@_rmfamily_family_tl {#1} {#2} - \tl_set_eq:NN \rmdefault \l_@@_rmfamily_family_tl - \use:x - { - \exp_not:n { \DeclareRobustCommand \rmfamily } - { - \exp_not:N \fontencoding { \g_@@_nfss_enc_tl } - \exp_not:N \fontfamily { \l_@@_rmfamily_family_tl } - \exp_not:N \selectfont - } - } - \str_if_eq_x:nnT {\familydefault} {\rmdefault} - { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl } - \@@_setmainfont_hook:nn {#1} {#2} - \normalfont - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setsansfont} -% Same as above. -% \begin{macrocode} -\cs_new:Nn \@@_main_setsansfont:nn - { - \fontspec_set_family:Nnn \l_@@_sffamily_family_tl {#1} {#2} - \tl_set_eq:NN \sfdefault \l_@@_sffamily_family_tl - \use:x - { - \exp_not:n { \DeclareRobustCommand \sffamily } - { - \exp_not:N \fontencoding { \g_@@_nfss_enc_tl } - \exp_not:N \fontfamily { \l_@@_sffamily_family_tl } - \exp_not:N \selectfont - } - } - \str_if_eq_x:nnT {\familydefault} {\sfdefault} - { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl } - \@@_setsansfont_hook:nn {#1} {#2} - \normalfont - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setmonofont} -% Same as above. -% \begin{macrocode} -\cs_new:Nn \@@_main_setmonofont:nn - { - \fontspec_set_family:Nnn \l_@@_ttfamily_family_tl {#1} {#2} - \tl_set_eq:NN \ttdefault \l_@@_ttfamily_family_tl - \use:x - { - \exp_not:n { \DeclareRobustCommand \ttfamily } - { - \exp_not:N \fontencoding { \g_@@_nfss_enc_tl } - \exp_not:N \fontfamily { \l_@@_ttfamily_family_tl } - \exp_not:N \selectfont - } - } - \str_if_eq_x:nnT {\familydefault} {\ttdefault} - { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl } - \@@_setmonofont_hook:nn {#1} {#2} - \normalfont - } -% \end{macrocode} -% \end{macro} -% -% -% -% -% \begin{macro}{\setmathrm} -% These commands are analogous to \cmd\setmainfont\ and others, -% but for selecting the font used for \cmd\mathrm, \etc. They -% can only be used in the preamble of the -% document. \cmd\setboldmathrm\ is used for specifying which -% fonts should be used in \cmd\boldmath. -% \begin{macrocode} -\cs_new:Nn \@@_main_setmathrm:nn - { -% \fontspec_set_family:Nnn \g_@@_mathrm_tl {#1} {#2} -% \fontspec_set_family:Nnn \g_@@_mathrm_tl {Renderer=Basic,#1} {#2} - \@@_setmathrm_hook:nn {#1} {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setboldmathrm} -% \begin{macrocode} -\cs_new:Nn \@@_main_setboldmathrm:nn - { -% \fontspec_set_family:Nnn \g_@@_bfmathrm_tl {#1} {#2} -% \fontspec_set_family:Nnn \g_@@_bfmathrm_tl {Renderer=Basic,#1} {#2} - \@@_setboldmathrm_hook:nn {#1} {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setmathsf} -% \begin{macrocode} -\cs_new:Nn \@@_main_setmathsf:nn - { -% \fontspec_set_family:Nnn \g_@@_mathsf_tl {#1} {#2} -% \fontspec_set_family:Nnn \g_@@_mathsf_tl {Renderer=Basic,#1} {#2} - \@@_setmathsf_hook:nn {#1} {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setmathtt} -% \begin{macrocode} -\cs_new:Nn \@@_main_setmathtt:nn - { -% \fontspec_set_family:Nnn \g_@@_mathtt_tl {#1} {#2} -% \fontspec_set_family:Nnn \g_@@_mathtt_tl {Renderer=Basic,#1} {#2} - \@@_setmathtt_hook:nn {#1} {#2} - } -% \end{macrocode} -% \end{macro} -% -% Hooks: -% \begin{macrocode} -\cs_set_eq:NN \@@_setmainfont_hook:nn \use_none:nn -\cs_set_eq:NN \@@_setsansfont_hook:nn \use_none:nn -\cs_set_eq:NN \@@_setmonofont_hook:nn \use_none:nn -\cs_set_eq:NN \@@_setmathrm_hook:nn \use_none:nn -\cs_set_eq:NN \@@_setmathsf_hook:nn \use_none:nn -\cs_set_eq:NN \@@_setmathtt_hook:nn \use_none:nn -\cs_set_eq:NN \@@_setboldmathrm_hook:nn \use_none:nn -% \end{macrocode} -% -% Hmm, this isn't necessary with \pkg{unicode-math}; oh well: -% \begin{macrocode} -\@onlypreamble\setmathrm -\@onlypreamble\setboldmathrm -\@onlypreamble\setmathsf -\@onlypreamble\setmathtt -% \end{macrocode} -% -% If the commands above are not executed, then \cmd\rmdefault\ (\etc) -% will be used. -% \begin{macrocode} -\tl_gset:Nn \g_@@_mathrm_tl {\rmdefault} -\tl_gset:Nn \g_@@_mathsf_tl {\sfdefault} -\tl_gset:Nn \g_@@_mathtt_tl {\ttdefault} -% \end{macrocode} -% -% \begin{macro}{\@@_main_newfontfamily:nnnN} -% The inner fontspec workings define a font family, which is then used in a typical -% NFSS \cmd\fontfamily\ declaration, saved in the macro name specified. -% The fourth argument determines which xparse function to set the macro with (new/renew/etc). -% \begin{macrocode} -\cs_new:Nn \@@_main_newfontfamily:nnnN - { - \fontspec_set_family:cnn { l_@@_ \cs_to_str:N #1 _family_tl } {#2} {#3} - \use:x - { - \exp_not:N #4 \exp_not:N #1 {} - { - \exp_not:N \fontfamily { \use:c { l_@@_ \cs_to_str:N #1 _family_tl } } - \exp_not:N \fontencoding { \g_@@_nfss_enc_tl } - \exp_not:N \selectfont - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_main_newfontface:nnn} -% \cmd\newfontface\ uses the fact that if the argument to \feat{BoldFont}, etc., is empty (\ie, |BoldFont={}|), then no bold font is searched for. -% \begin{macrocode} -\cs_new:Nn \@@_main_newfontface:nnn - { - \newfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2 ] {#3} - } -% \end{macrocode} -% \end{macro} -% -% \subsection{Font feature selection} -% -% \begin{macro}{\@@_set_default_features:nn} -% \begin{macrocode} -\cs_new:Nn \@@_set_default_features:nn - { - \IfBooleanTF {#1} \clist_gput_right:Nn \clist_gset:Nn - \g_@@_default_fontopts_clist {#2} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_font_default_features:nnn} -% The optional argument |#2| specifies font identifier(s). -% Branch for either (a)~single token input such as \verb|\rmdefault|, or (b)~otherwise assume its a fontname. -% In that case, strip spaces and file extensions and lower-case to ensure consistency. -% \begin{macrocode} -\cs_new:Nn \@@_set_font_default_features:nnn - { -% \typeout{\unexpanded{_set_font_default_features:nnn:{#1}{#2}{#3}}} - \clist_map_inline:nn {#2} - { - \tl_if_single:nTF {##1} - { \tl_set:No \l_@@_tmp_tl { \cs:w l_@@_ \cs_to_str:N ##1 _family_tl\cs_end: } } - { \@@_sanitise_fontname:Nn \l_@@_tmp_tl {##1} } - - \IfBooleanTF {#1} - { - \prop_get:NVNF \g_@@_fontopts_prop \l_@@_tmp_tl \l_@@_tmpb_tl - { \tl_clear:N \l_@@_tmpb_tl } - \tl_put_right:Nn \l_@@_tmpb_tl {#3,} - \prop_gput:NVV \g_@@_fontopts_prop \l_@@_tmp_tl \l_@@_tmpb_tl - } - { - \tl_if_empty:nTF {#3} - { \prop_gremove:NV \g_@@_fontopts_prop \l_@@_tmp_tl } - { \prop_gput:NVn \g_@@_fontopts_prop \l_@@_tmp_tl {#3,} } - } - } - } -% \end{macrocode} -% \end{macro} -% -% -% -% \begin{macro}{\addfontfeatures} -% In order to be able to extend the feature selection of -% a given font, two things need to be known: the currently selected -% features, and the currently selected font. Every time a font -% family is created, this information is saved inside a control -% sequence with the name of the font family itself. -% -% This macro extracts this information, then appends the requested -% font features to add to the already existing ones, and calls the -% font again with the top level \cs{fontspec} command. -% -% The default options are \emph{not} applied (which is why -% \cs{g_fontspec_default_fontopts_tl} is emptied inside the group; this is allowed -% as \cmd\l_fontspec_family_tl\ is globally defined in \cmd\@@_select_font_family:nn), so this -% means that the only added features to the font are strictly those -% specified by this command. -% -% \cs{addfontfeature} is defined as an alias, as I found that I -% often typed this instead when adding only a single font feature. -% \begin{macrocode} -\cs_new:Nn \@@_main_addfontfeatures:n - { -% \typeout{^^J::::::::::::::::::::::::::::::::::^^J: addfontfeatures} - \fontspec_if_fontspec_font:TF - { - \group_begin: - \keys_set_known:nnN {fontspec-addfeatures} {#1} \l_@@_tmp_tl - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {options} \l_@@_options_tl - \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {fontname} \l_@@_fontname_tl - \bool_set_true:N \l_@@_disable_defaults_bool -% \typeout{ \@@_select_font_family:nn { \l_@@_options_tl , #1 } {\l_@@_fontname_tl} } - \use:x - { - \@@_select_font_family:nn - { \l_@@_options_tl , #1 } {\l_@@_fontname_tl} - } - \group_end: - \fontfamily \g_@@_nfss_family_tl \selectfont - } - { - \@@_warning:nx {addfontfeatures-ignored} {#1} - } - \ignorespaces - } -% \end{macrocode} -% \end{macro} -% -% \subsection{Defining new font features} -% -% \begin{macro}{\newfontfeature} -% \cs{newfontfeature} takes two arguments: the name of the feature -% tag by which to reference it, and the string that is used to -% select the font feature. -% \begin{macrocode} -\cs_new:Nn \@@_main_newfontfeature:nn - { - \keys_define:nn { fontspec } - { - #1 .code:n = { \@@_update_featstr:n {#2} } - } - } -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\newAATfeature} -% This command assigns a new AAT feature by its code (|#2|,|#3|) to a new name (|#1|). -% Better than \cmd\newfontfeature\ because it checks if the feature exists in the -% font it's being used for. -% \begin{macrocode} -\cs_new:Nn \@@_main_newAATfeature:nnnn - { - \keys_if_exist:nnF { fontspec } {#1} - { \@@_define_aat_feature_group:n {#1} } - - \keys_if_choice_exist:nnnT {fontspec} {#1} {#2} - { \@@_warning:nxx {feature-option-overwrite} {#1} {#2} } - - \@@_define_aat_feature:nnnn {#1}{#2}{#3}{#4} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\newopentypefeature} -% This command assigns a new OpenType feature by its abbreviation (|#2|) to a new name (|#1|). -% Better than \cmd\newfontfeature\ because it checks if the feature exists in the -% font it's being used for. -% \begin{macrocode} -\cs_new:Nn \@@_main_newopentypefeature:nnn - { - \keys_if_exist:nnF { fontspec / options } {#1} - { \@@_define_opentype_feature_group:n {#1} } - - \keys_if_choice_exist:nnnT {fontspec} {#1} {#2} - { \@@_warning:nxx {feature-option-overwrite} {#1} {#2} } - - \exp_args:Nnnx \@@_define_opentype_feature:nnnnn - {#1} {#2} { \@@_strip_plus_minus:n {#3} } {#3} {} - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new:Nn \@@_strip_plus_minus:n { \@@_strip_plus_minus_aux:Nq #1 \q_nil } -\cs_new:Npn \@@_strip_plus_minus_aux:Nq #1#2 \q_nil - { - \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2} - } -% \end{macrocode} -% \end{macro} -% -% -% -% \begin{macro}{\aliasfontfeature} -% User commands for renaming font features and font feature options. -% \begin{macrocode} -\cs_new:Nn \@@_main_aliasfontfeature:nn - { -% \typeout{::::::::::::::::::::^^J:: aliasfontfeature{#1}{#2}} - \bool_set_false:N \l_@@_alias_bool - - \clist_map_inline:Nn \g_@@_all_keyval_modules_clist - { - \keys_if_exist:nnT {##1} {#1} - { -% \typeout{:::: Key~exists~##1~/~#1} - \bool_set_true:N \l_@@_alias_bool - \keys_define:nn {##1} - { #2 .code:n = { \keys_set:nn {##1} { #1 = {####1} } } } - } - } - - \bool_if:NF \l_@@_alias_bool - { \@@_warning:nx {rename-feature-not-exist} {#1} } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\aliasfontfeatureoption} -% \begin{macrocode} -\cs_new:Nn \@@_main_aliasfontfeatureoption:nnn - { - \bool_set_false:N \l_@@_alias_bool - - \clist_map_inline:Nn \g_@@_all_keyval_modules_clist - { - \keys_if_exist:nnT { ##1 / #1 } {#2} - { -% \typeout{:::: Keyval~exists~##1~/~#1~=~#2} - \bool_set_true:N \l_@@_alias_bool - \keys_define:nn { ##1 / #1 } - { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } } - } - - \keys_if_exist:nnT { ##1 / #1 } {#2Reset} - { -% \typeout{:::: Keyval~exists~##1~/~#1~=~#2Reset} - \keys_define:nn { ##1 / #1 } - { #3Reset .code:n = { \keys_set:nn {##1} { #1 = {#2Reset} } } } - } - - \keys_if_exist:nnT { ##1 / #1 } {#2Off} - { -% \typeout{:::: Keyval~exists~##1~/~#1~=~#2Off} - \keys_define:nn { ##1 / #1 } - { #3Off .code:n = { \keys_set:nn {##1} { #1 = {#2Off} } } } - } - } - - \bool_if:NF \l_@@_alias_bool - { \@@_warning:nx {rename-feature-not-exist} {#1/#2} } - } -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\@@_main_DeclareFontExtensions:n} -% \begin{macrocode} -\cs_new:Nn \@@_main_DeclareFontExtensions:n - { - \clist_set:Nn \l_@@_extensions_clist { #1 } - } -% \end{macrocode} -% Defaults: -% \begin{macrocode} -\@@_main_DeclareFontExtensions:n {.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\IfFontFeatureActiveTF} -% \begin{macrocode} -\cs_new:Nn \@@_main_IfFontFeatureActiveTF:nnn - { -% \typeout{^^J:::::::::::::::::::::::::::::::::::::::::::::::} -% \typeout{:IfFontFeatureActiveTF \exp_not:n{{#1}{#2}{#3}}} - \@@_if_font_feature:nTF {#1} {#2} {#3} - } -% \end{macrocode} -% -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_if_font_feature:n {TF} - { - \tl_gclear:N \g_@@_single_feat_tl - \group_begin: - \@@_font_suppress_not_found_error: - \@@_init: - \bool_set_true:N \l_@@_ot_bool - \bool_set_true:N \l_@@_never_check_bool - \bool_set_false:N \l_@@_firsttime_bool - \clist_clear:N \l_@@_fontfeat_clist - \@@_get_features:n {#1} - \group_end: - -% \typeout{:::> \exp_not:N\g_@@_rawfeatures_sclist->~{\g_@@_rawfeatures_sclist}} -% \typeout{:::> \exp_not:N\g_@@_single_feat_tl->~{\g_@@_single_feat_tl}} - - \tl_if_empty:NTF \g_@@_single_feat_tl { \prg_return_false: } - { - \exp_args:NV \fontspec_if_current_feature:nTF \g_@@_single_feat_tl - { \prg_return_true: } { \prg_return_false: } - } - } -% \end{macrocode} -% \end{macro} -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-vars.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-vars.dtx deleted file mode 100644 index 2b928d8ad41..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-vars.dtx +++ /dev/null @@ -1,281 +0,0 @@ -%%^^A%% fontspec-vars.dtx -- part of FONTSPEC -% -% \section{Declaration of variables} -% -% \iffalse -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% \fi -% -% This file consists solely of declaration of variables used by \pkg{fontspec}. -% In some cases these variables are also initialised with default values. -% In time I would like to move these initialisations -% -% \paragraph{Booleans} -% -% \begin{macro}{\l_@@_firsttime_bool} -% As \cs{keys_set:nn} is run multiple times, some of its -% information storing only occurs once while we decide if the font family -% has been defined or not. When the later processing is occuring per-shape -% this no longer needs to happen; this is indicated by the `firsttime' -% conditional. -% \begin{macrocode} -\bool_new:N \l_@@_firsttime_bool -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\bool_new:N \l_@@_nobf_bool -\bool_new:N \l_@@_noit_bool -\bool_new:N \l_@@_nosc_bool -\bool_new:N \l_@@_check_bool -% \end{macrocode} -% -% \begin{macrocode} -\bool_new:N \l_@@_tfm_bool -\bool_new:N \l_@@_atsui_bool -\bool_new:N \l_@@_ot_bool -\bool_new:N \l_@@_mm_bool -\bool_new:N \l_@@_graphite_bool -\bool_new:N \l_@@_fontcfg_bool -\bool_set_true:N \l_@@_fontcfg_bool -% \end{macrocode} -% For dealing with legacy maths: -% \begin{macrocode} -\bool_new:N \g_@@_math_euler_bool -\bool_new:N \g_@@_math_lucida_bool -\bool_new:N \g_@@_pkg_euler_loaded_bool -% \end{macrocode} -% For package options: -% \begin{macrocode} -\bool_new:N \g_@@_cfg_bool -\bool_new:N \g_@@_math_bool -\bool_new:N \g_@@_euenc_bool -% \end{macrocode} -% -% \begin{macrocode} -\bool_new:N \l_@@_tmpa_bool -\bool_new:N \l_@@_disable_defaults_bool -\bool_new:N \l_@@_alias_bool -\bool_new:N \l_@@_external_bool -\bool_new:N \l_@@_never_check_bool -\bool_new:N \l_@@_defining_encoding_bool -\bool_new:N \l_@@_script_exist_bool -\bool_new:N \g_@@_em_normalise_slant_bool -\bool_new:N \l_@@_proceed_bool -\bool_new:N \l_@@_check_feat_bool -% \end{macrocode} -% -% \paragraph{Counters} -% \begin{macrocode} -\int_new:N \l_@@_script_int -\int_new:N \l_@@_language_int -\int_new:N \l_@@_strnum_int -\int_new:N \l_@@_tmp_int -\int_new:N \l_@@_em_int -\int_new:N \l_@@_emdef_int -\int_new:N \l_@@_strong_int -\int_new:N \l_@@_strongdef_int -% \end{macrocode} -% -% \paragraph{Floats} -% \begin{macrocode} -\fp_new:N \l_@@_tmpa_fp -\fp_new:N \l_@@_tmpb_fp -% \end{macrocode} -% -% \paragraph{Dimensions} -% \begin{macrocode} -\dim_new:N \l_@@_tmpa_dim -\dim_new:N \l_@@_tmpb_dim -\dim_new:N \l_@@_tmpc_dim -% \end{macrocode} -% -% \paragraph{Sequences} -% \begin{macrocode} -\seq_new:N \l_@@_bf_series_seq -% \end{macrocode} -% -% \paragraph{Comma-lists} -% \begin{macrocode} -\clist_new:N \g_@@_default_fontopts_clist -\clist_new:N \g_@@_all_keyval_modules_clist -\clist_new:N \l_@@_sizefeat_clist -\clist_set:Nn \l_@@_sizefeat_clist {Size={-}} -\clist_new:N \l_@@_extensions_clist -\clist_new:N \l_@@_fontopts_clist -\clist_new:N \l_@@_family_fontopts_clist -\clist_new:N \l_@@_all_features_clist -\clist_new:N \l_@@_leftover_clist -\clist_new:N \l_@@_keys_leftover_clist -\clist_new:N \l_@@_sizing_leftover_clist -\clist_new:N \l_@@_fontfeat_clist -\clist_new:N \l_@@_fontfeat_curr_clist -\clist_new:N \l_@@_arg_clist -\clist_new:N \l_@@_this_feat_clist -% \end{macrocode} -% -% \begin{macrocode} -\clist_new:N \l_@@_fontfeat_up_clist -\clist_new:N \l_@@_fontfeat_bf_clist -\clist_new:N \l_@@_fontfeat_it_clist -\clist_new:N \l_@@_fontfeat_bfit_clist -\clist_new:N \l_@@_fontfeat_sl_clist -\clist_new:N \l_@@_fontfeat_bfsl_clist -\clist_new:N \l_@@_fontfeat_sc_clist -% \end{macrocode} -% -% \paragraph{Property lists} -% \begin{macrocode} -\prop_new:N \g_@@_fontopts_prop -\prop_new:N \l_@@_nfss_prop -\prop_new:N \l_@@_nfssfont_prop -\prop_new:N \g_@@_OT_features_prop -\prop_new:N \g_@@_all_opentype_feature_names_prop -\prop_new:N \g_@@_em_prop -\prop_new:N \g_@@_strong_prop -\prop_new:N \g_@@_fontid_family_prop -\prop_new:N \g_@@_family_int_prop -% \end{macrocode} -% -% \paragraph{Token lists} -% \begin{macrocode} -\tl_new:N \l_fontspec_family_tl -\tl_new:N \g_fontspec_encoding_tl -\tl_new:N \l_fontspec_renderer_tl -\tl_new:N \l_fontspec_fontname_tl -% \end{macrocode} -% -% \begin{macrocode} -\tl_clear_new:N \UTFencname -\tl_clear_new:N \cyrillicencoding -\tl_clear_new:N \latinencoding -% \end{macrocode} -% -% \begin{macrocode} -\tl_new:N \l_fontspec_mode_tl -\tl_new:N \g_@@_curr_series_tl -\tl_new:N \g_@@_defined_shapes_tl -\tl_new:N \g_@@_nfss_enc_tl -\tl_new:N \g_@@_nfss_family_tl -\tl_new:N \g_@@_single_feat_tl -\tl_new:N \l_@@_basename_tl -\tl_new:N \l_@@_curr_fontname_tl -\tl_new:N \l_@@_curr_bfname_tl -\tl_new:N \l_@@_ext_filename_tl -\tl_new:N \l_@@_extension_tl -\tl_new:N \l_@@_font_path_tl -\tl_new:N \l_@@_fontid_tl -\tl_new:N \l_@@_fontname_tl -\tl_new:N \l_@@_hexcol_tl -\tl_new:N \l_@@_nfss_sc_tl -\tl_new:N \l_@@_nfss_tl -\tl_new:N \l_@@_nfss_fam_tl -\tl_new:N \l_@@_opacity_tl -\tl_new:N \l_@@_optical_size_tl -\tl_new:N \l_@@_options_tl -\tl_new:N \l_@@_saved_fontname_tl -\tl_new:N \l_@@_scale_tl -\tl_new:N \l_@@_size_tl -\tl_new:N \l_@@_sizedfont_tl -\tl_new:N \l_@@_this_font_tl -\tl_new:N \l_@@_tmp_tl -\tl_new:N \l_@@_tmpa_tl -\tl_new:N \l_@@_tmpb_tl -\tl_new:N \l_@@_ttc_index_tl -\tl_new:N \l_@@_emshape_query_tl -\tl_new:N \l_@@_em_switch_tl -\tl_new:N \l_@@_em_tmp_tl -% \end{macrocode} -% -% \begin{macrocode} -\tl_new:N \g_@@_mathrm_tl -\tl_new:N \g_@@_bfmathrm_tl -\tl_new:N \g_@@_mathsf_tl -\tl_new:N \g_@@_mathtt_tl -% \end{macrocode} -% -% Defaults: -% \begin{macrocode} -\tl_gset:Nn \g_@@_mathrm_tl {\rmdefault} -\tl_gset:Nn \g_@@_mathsf_tl {\sfdefault} -\tl_gset:Nn \g_@@_mathtt_tl {\ttdefault} -% \end{macrocode} -% -% \begin{macrocode} -\tl_new:N \l_@@_family_label_tl -\tl_new:N \l_@@_fake_slant_tl -\tl_new:N \l_@@_fake_embolden_tl -% \end{macrocode} -% -% \begin{macrocode} -\tl_new:N \l_@@_fontname_up_tl -\tl_new:N \l_@@_fontname_bf_tl -\tl_new:N \l_@@_fontname_it_tl -\tl_new:N \l_@@_fontname_bfit_tl -\tl_new:N \l_@@_fontname_sl_tl -\tl_new:N \l_@@_fontname_bfsl_tl -\tl_new:N \l_@@_fontname_sc_tl -% \end{macrocode} -% -% \begin{macrocode} -\tl_new:N \l_@@_script_name_tl -\tl_new:N \l_fontspec_script_tl -\tl_new:N \l_@@_lang_name_tl -\tl_new:N \l_fontspec_lang_tl -% \end{macrocode} -% -% \begin{macrocode} -\tl_new:N \l_@@_mapping_tl -\tl_new:N \l_@@_punctspace_adjust_tl -\tl_new:N \l_@@_wordspace_adjust_tl -\tl_new:N \l_@@_postadjust_tl -% \end{macrocode} -% -% \begin{macrocode} -\tl_const:Nn \c_@@_hexcol_tl {000000} -\tl_const:Nn \c_@@_opacity_tl {FF~} -\tl_const:Nn \c_@@_postadjust_tl { \l_@@_wordspace_adjust_tl \l_@@_punctspace_adjust_tl } -% \end{macrocode} -% -% \paragraph{Semi-colon-lists} -% Not a real data structure but sensible to name accordingly. -% \begin{macrocode} -\tl_new:N \g_@@_rawfeatures_sclist -\tl_new:N \l_@@_pre_feat_sclist -% \end{macrocode} -% -% \paragraph{Font families} -% Again not a real data structure, and also probably poorly named. -% \begin{macrocode} -\tl_new:N \l_@@_rmfamily_family_tl -\tl_new:N \l_@@_sffamily_family_tl -\tl_new:N \l_@@_ttfamily_family_tl -% \end{macrocode} -% -% -% -% \iffalse -% \begin{macrocode} -% -% \end{macrocode} -% \fi - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-xfss.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-xfss.dtx deleted file mode 100644 index 9361eb81e5d..00000000000 --- a/Master/texmf-dist/source/latex/fontspec/fontspec-xfss.dtx +++ /dev/null @@ -1,286 +0,0 @@ -%%^^A%% fontspec-xfss.dtx -- part of FONTSPEC - -% \section{Changes to the NFSS} -% -% \begin{macrocode} -%<*fontspec> -% \end{macrocode} -% -% -% \subsection{Italic small caps and so on} \label{sec:sishape} -% -% \begin{macro}{\sishape} -% \begin{macro}{\textsi} -% These commands for actually selecting italic small caps have been defined for many years; I'm inclined to drop them. -% They're probably used very infrequently; I personally prefer just writing -% |\textit{\textsc{...}}| instead. -% -% \begin{macrocode} -\providecommand*\itscdefault{\itdefault\scdefault} -\providecommand*\slscdefault{\sldefault\scdefault} -\DeclareRobustCommand{\sishape} - { - \not@math@alphabet\sishape\relax - \fontshape{\itscdefault}\selectfont - } -\DeclareTextFontCommand{\textsi}{\sishape} -% \end{macrocode} -% \end{macro} \end{macro} -% -% \LaTeX's `shape' font axis needs to be overloaded to support italic small caps and slanted small caps. -% These are the combinations to support: -% \begin{macrocode} -\cs_new:Nn \@@_shape_merge:nn { c_@@_shape_#1_#2_tl } -\tl_const:cn { \@@_shape_merge:nn \itdefault \scdefault } {\itscdefault} -\tl_const:cn { \@@_shape_merge:nn \sldefault \scdefault } {\slscdefault} -\tl_const:cn { \@@_shape_merge:nn \scdefault \itdefault } {\itscdefault} -\tl_const:cn { \@@_shape_merge:nn \scdefault \sldefault } {\slscdefault} -\tl_const:cn { \@@_shape_merge:nn \slscdefault \itdefault } {\itscdefault} -\tl_const:cn { \@@_shape_merge:nn \itscdefault \sldefault } {\slscdefault} -\tl_const:cn { \@@_shape_merge:nn \itscdefault \updefault } {\scdefault} -\tl_const:cn { \@@_shape_merge:nn \slscdefault \updefault } {\scdefault} -% \end{macrocode} -% -% \begin{macro}{\fontspec_merge_shape:n} -% These macros enable the overload on the |\..shape| commands. -% First, a shape `new+current' (prefix) or `current+new' (suffix) is tried. -% If not found, fall back on the `new' shape. -% \begin{macrocode} -\cs_new:Nn \fontspec_merge_shape:n - { - \@@_if_merge_shape:nTF {#1} - { \fontshape { \tl_use:c { \@@_shape_merge:nn {\f@shape} {#1} } } \selectfont } - { \fontshape {#1} \selectfont } - } -% \end{macrocode} -% The following is rather specific; it only returns true if the merged shape exists, -% but more importantly also if the merged shape is defined for the current font. -% \begin{macrocode} -\prg_new_conditional:Nnn \@@_if_merge_shape:n {TF} - { - \bool_lazy_and:nnTF - { \tl_if_exist_p:c { \@@_shape_merge:nn {\f@shape} {#1} } } - { - \cs_if_exist_p:c - { - \f@encoding/\f@family/\f@series/ - \tl_use:c { \@@_shape_merge:nn {\f@shape} {#1} } - } - } - \prg_return_true: \prg_return_false: - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\itshape} \begin{macro}{\scshape} \begin{macro}{\upshape} \begin{macro}{\slshape} -% The original |\..shape| commands are redefined to use the merge shape macro. -% \begin{macrocode} -\DeclareRobustCommand \itshape - { - \not@math@alphabet\itshape\mathit - \fontspec_merge_shape:n\itdefault - } -\DeclareRobustCommand \slshape - { - \not@math@alphabet\slshape\relax - \fontspec_merge_shape:n\sldefault - } -\DeclareRobustCommand \scshape - { - \not@math@alphabet\scshape\relax - \fontspec_merge_shape:n\scdefault - } -\DeclareRobustCommand \upshape - { - \not@math@alphabet\upshape\relax - \fontspec_merge_shape:n\updefault - } -% \end{macrocode} -% \end{macro} \end{macro} \end{macro} \end{macro} -% -% -% -% \subsection{Emphasis} -% -% \begin{macro}{\emfontdeclare} -% \begin{macrocode} -\cs_new_protected:Npn \emfontdeclare #1 - { - \prop_gclear:N \g_@@_em_prop - \int_zero:N \l_@@_emdef_int - \bool_gset_true:N \g_@@_em_normalise_slant_bool - - \tl_if_in:nnT {#1} {\slshape} - { - \tl_if_in:nnT {#1} {\itshape} - { - \bool_gset_false:N \g_@@_em_normalise_slant_bool - } - } - - \group_begin: - \normalfont - \clist_map_inline:nn {\emreset,#1} - { - ##1 - \prop_gput_if_new:NxV \g_@@_em_prop { \f@shape } { \l_@@_emdef_int } - \prop_gput:Nxn \g_@@_em_prop { switch-\int_use:N \l_@@_emdef_int } { ##1 } - \int_incr:N \l_@@_emdef_int - } - \group_end: - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\em} -% \begin{macrocode} -\DeclareRobustCommand \em - { - \@nomath\em - \tl_set:Nx \l_@@_emshape_query_tl { \f@shape } - - \bool_if:NT \g_@@_em_normalise_slant_bool - { - \tl_replace_all:Nnn \l_@@_emshape_query_tl {/sl} {/it} - } - -% \typeout{Emph~ level:~\int_use:N \l_@@_em_int} - \prop_get:NxNT \g_@@_em_prop { \l_@@_emshape_query_tl } \l_@@_em_tmp_tl - { - \int_set:Nn \l_@@_em_int { \l_@@_em_tmp_tl } -% \typeout{Shape~ (\l_@@_emshape_query_tl)~ detected;~ new~ level:~\int_use:N \l_@@_em_int} - } - - \int_incr:N \l_@@_em_int - - \prop_get:NxNTF \g_@@_em_prop { switch-\int_use:N \l_@@_em_int } \l_@@_em_switch_tl - { \l_@@_em_switch_tl } - { - \int_zero:N \l_@@_em_int - \emreset - } - - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\emph} -% \begin{macro}{\emshape} -% \begin{macro}{\eminnershape} -% \begin{macro}{\emreset} -% \begin{macrocode} -\DeclareTextFontCommand{\emph}{\em} -\cs_set:Npn \emreset { \upshape } -\cs_set:Npn \emshape { \itshape } -\cs_set:Npn \eminnershape { \upshape } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% -% \subsection{Strong emphasis} -% -% \begin{macro}{\strongfontdeclare} -% \begin{macrocode} -\cs_new_protected:Npn \strongfontdeclare #1 - { - \prop_gclear:N \g_@@_strong_prop - \int_zero:N \l_@@_strongdef_int - - \group_begin: - \normalfont - \clist_map_inline:nn {\strongreset,#1} - { - ##1 - \prop_gput_if_new:NxV \g_@@_strong_prop { \f@series } { \l_@@_strongdef_int } - \prop_gput:Nxn \g_@@_strong_prop { switch-\int_use:N \l_@@_strongdef_int } { ##1 } - \int_incr:N \l_@@_strongdef_int - } - \group_end: - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\strongenv} -% \begin{macrocode} -\DeclareRobustCommand \strongenv - { - \@nomath\strongenv - -% \typeout{Strong~ level:~\int_use:N \l_@@_strong_int} - \prop_get:NxNT \g_@@_strong_prop { \f@series } \l_@@_strong_tmp_tl - { - \int_set:Nn \l_@@_strong_int { \l_@@_strong_tmp_tl } -% \typeout{Series~ (\f@series)~ detected;~ new~ level:~\int_use:N \l_@@_strong_int} - } - - \int_incr:N \l_@@_strong_int - - \prop_get:NxNTF \g_@@_strong_prop { switch-\int_use:N \l_@@_strong_int } \l_@@_strong_switch_tl - { \l_@@_strong_switch_tl } - { - \int_zero:N \l_@@_strong_int - \strongreset - } - - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\strong} -% \begin{macro}{\strongreset} -% \begin{macrocode} -\DeclareTextFontCommand{\strong}{\strongenv} -\cs_set:Npn \strongreset {} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\reset@font} -% Ensure nesting resets when necessary: -% \begin{macrocode} -\cs_set:Npn \reset@font - { - \normalfont - \int_zero:N \l_@@_em_int - \int_zero:N \l_@@_strong_int - } -% \end{macrocode} -% \end{macro} -% -% Programmer's interface for setting nesting levels: -% \begin{macrocode} -\cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l_@@_em_int {#1} } -\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l_@@_strong_int {#1} } -% \end{macrocode} -% -% Defaults: -% \begin{macrocode} -\strongfontdeclare{ \bfseries } -\emfontdeclare{ \emshape, \eminnershape } -% \end{macrocode} -% -% \begin{macrocode} -% -% \end{macrocode} - - -\endinput - -% /© -% ------------------------------------------------ -% The FONTSPEC package -% ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" -% Copyright 2009-2015 Khaled Hosny -% Copyright 2013 Philipp Gesang -% Copyright 2013-2016 Joseph Wright -% ------------------------------------------------ -% 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): . -% ------------------------------------------------ -% ©/ diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec.dtx index 8a9475e6db5..e3f4907a98c 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec.dtx +++ b/Master/texmf-dist/source/latex/fontspec/fontspec.dtx @@ -10,26 +10,26 @@ \gdef\FONTSPECDTX{ \DTX{fontspec.dtx} \DTX{fontspec-code-load.dtx} - \DTX{fontspec-vars.dtx} - \DTX{fontspec-msg.dtx} - \DTX{fontspec-opening.dtx} - \DTX{fontspec-fontload.dtx} - \DTX{fontspec-interfaces.dtx} - \DTX{fontspec-user.dtx} - \DTX{fontspec-api.dtx} - \DTX{fontspec-internal.dtx} - \DTX{fontspec-opentype.dtx} - \DTX{fontspec-graphite.dtx} - \DTX{fontspec-keyval.dtx} - \DTX{fontspec-feat-opentype.dtx} - \DTX{fontspec-scripts.dtx} - \DTX{fontspec-lang.dtx} - \DTX{fontspec-feat-aat.dtx} - \DTX{fontspec-enc.dtx} - \DTX{fontspec-math.dtx} - \DTX{fontspec-closing.dtx} - \DTX{fontspec-xfss.dtx} - \DTX{fontspec-patches.dtx} + \DTX{fontspec-code-vars.dtx} + \DTX{fontspec-code-msg.dtx} + \DTX{fontspec-code-opening.dtx} + \DTX{fontspec-code-fontload.dtx} + \DTX{fontspec-code-interfaces.dtx} + \DTX{fontspec-code-user.dtx} + \DTX{fontspec-code-api.dtx} + \DTX{fontspec-code-internal.dtx} + \DTX{fontspec-code-opentype.dtx} + \DTX{fontspec-code-graphite.dtx} + \DTX{fontspec-code-keyval.dtx} + \DTX{fontspec-code-feat-opentype.dtx} + \DTX{fontspec-code-scripts.dtx} + \DTX{fontspec-code-lang.dtx} + \DTX{fontspec-code-feat-aat.dtx} + \DTX{fontspec-code-enc.dtx} + \DTX{fontspec-code-math.dtx} + \DTX{fontspec-code-closing.dtx} + \DTX{fontspec-code-xfss.dtx} + \DTX{fontspec-code-patches.dtx} } % % \end{macrocode} @@ -71,7 +71,7 @@ \ProvidesExplFile{fontspec.dtx} % %<*fontspec> - {2018/07/30}{v2.6h}{Font selection for XeLaTeX and LuaLaTeX} + {2019/01/10}{2.6j}{Font selection for XeLaTeX and LuaLaTeX} % % \end{macrocode} % @@ -90,8 +90,8 @@ %local fontspec = fontspec %fontspec.module = { % name = "fontspec", -% version = "v2.6h", -% date = "2018/07/30", +% version = "2.6j", +% date = "2019/01/10", % description = "Font selection for XeLaTeX and LuaLaTeX", % author = "Khaled Hosny, Philipp Gesang, Will Robertson", % copyright = "Khaled Hosny, Philipp Gesang, Will Robertson", @@ -105,7 +105,7 @@ % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec.ins b/Master/texmf-dist/source/latex/fontspec/fontspec.ins index e3164f1944e..bd49db003ba 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec.ins +++ b/Master/texmf-dist/source/latex/fontspec/fontspec.ins @@ -48,7 +48,7 @@ the conditions of the LaTeX Project Public License, version 1.3c or higher % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec.ltx b/Master/texmf-dist/source/latex/fontspec/fontspec.ltx index 74472eedf18..7ee948df547 100644 --- a/Master/texmf-dist/source/latex/fontspec/fontspec.ltx +++ b/Master/texmf-dist/source/latex/fontspec/fontspec.ltx @@ -28,7 +28,7 @@ % ------------------------------------------------ % The FONTSPEC package % ------------------------------------------------ -% Copyright 2004-2018 Will Robertson, LPPL "maintainer" +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" % Copyright 2009-2015 Khaled Hosny % Copyright 2013 Philipp Gesang % Copyright 2013-2016 Joseph Wright diff --git a/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty b/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty index 14cba40dacd..17a012c3d66 100644 --- a/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty +++ b/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty @@ -6,26 +6,26 @@ %% %% fontspec.dtx (with options: `fontspec,LU') %% fontspec-code-load.dtx (with options: `fontspec,LU') -%% fontspec-vars.dtx (with options: `fontspec,LU') -%% fontspec-msg.dtx (with options: `fontspec,LU') -%% fontspec-opening.dtx (with options: `fontspec,LU') -%% fontspec-fontload.dtx (with options: `fontspec,LU') -%% fontspec-interfaces.dtx (with options: `fontspec,LU') -%% fontspec-user.dtx (with options: `fontspec,LU') -%% fontspec-api.dtx (with options: `fontspec,LU') -%% fontspec-internal.dtx (with options: `fontspec,LU') -%% fontspec-opentype.dtx (with options: `fontspec,LU') -%% fontspec-graphite.dtx (with options: `fontspec,LU') -%% fontspec-keyval.dtx (with options: `fontspec,LU') -%% fontspec-feat-opentype.dtx (with options: `fontspec,LU') -%% fontspec-scripts.dtx (with options: `fontspec,LU') -%% fontspec-lang.dtx (with options: `fontspec,LU') -%% fontspec-feat-aat.dtx (with options: `fontspec,LU') -%% fontspec-enc.dtx (with options: `fontspec,LU') -%% fontspec-math.dtx (with options: `fontspec,LU') -%% fontspec-closing.dtx (with options: `fontspec,LU') -%% fontspec-xfss.dtx (with options: `fontspec,LU') -%% fontspec-patches.dtx (with options: `fontspec,LU') +%% fontspec-code-vars.dtx (with options: `fontspec,LU') +%% fontspec-code-msg.dtx (with options: `fontspec,LU') +%% fontspec-code-opening.dtx (with options: `fontspec,LU') +%% fontspec-code-fontload.dtx (with options: `fontspec,LU') +%% fontspec-code-interfaces.dtx (with options: `fontspec,LU') +%% fontspec-code-user.dtx (with options: `fontspec,LU') +%% fontspec-code-api.dtx (with options: `fontspec,LU') +%% fontspec-code-internal.dtx (with options: `fontspec,LU') +%% fontspec-code-opentype.dtx (with options: `fontspec,LU') +%% fontspec-code-graphite.dtx (with options: `fontspec,LU') +%% fontspec-code-keyval.dtx (with options: `fontspec,LU') +%% fontspec-code-feat-opentype.dtx (with options: `fontspec,LU') +%% fontspec-code-scripts.dtx (with options: `fontspec,LU') +%% fontspec-code-lang.dtx (with options: `fontspec,LU') +%% fontspec-code-feat-aat.dtx (with options: `fontspec,LU') +%% fontspec-code-enc.dtx (with options: `fontspec,LU') +%% fontspec-code-math.dtx (with options: `fontspec,LU') +%% fontspec-code-closing.dtx (with options: `fontspec,LU') +%% fontspec-code-xfss.dtx (with options: `fontspec,LU') +%% fontspec-code-patches.dtx (with options: `fontspec,LU') %% ------------------------------------------------ %% The FONTSPEC package %% ------------------------------------------------ @@ -41,10 +41,10 @@ \RequirePackage{xparse} \ProvidesExplPackage{fontspec-luatex}% - {2018/07/30}{v2.6h}{Font selection for XeLaTeX and LuaLaTeX} + {2019/01/10}{2.6j}{Font selection for XeLaTeX and LuaLaTeX} %%^^A%% fontspec-code-load.dtx -- part of FONTSPEC -%%^^A%% fontspec-vars.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC \bool_new:N \l__fontspec_firsttime_bool \bool_new:N \l__fontspec_nobf_bool \bool_new:N \l__fontspec_noit_bool @@ -67,12 +67,12 @@ \bool_new:N \l__fontspec_disable_defaults_bool \bool_new:N \l__fontspec_alias_bool \bool_new:N \l__fontspec_external_bool -\bool_new:N \l__fontspec_never_check_bool \bool_new:N \l__fontspec_defining_encoding_bool \bool_new:N \l__fontspec_script_exist_bool \bool_new:N \g__fontspec_em_normalise_slant_bool \bool_new:N \l__fontspec_proceed_bool \bool_new:N \l__fontspec_check_feat_bool +\bool_new:N \l__fontspec_never_check_bool \int_new:N \l__fontspec_script_int \int_new:N \l__fontspec_language_int \int_new:N \l__fontspec_strnum_int @@ -158,6 +158,10 @@ \tl_new:N \l__fontspec_emshape_query_tl \tl_new:N \l__fontspec_em_switch_tl \tl_new:N \l__fontspec_em_tmp_tl +\tl_new:N \l__fontspec_strong_tmp_tl +\tl_new:N \l__fontspec_strong_switch_tl +\tl_new:N \l__fontspec_hyphenchar_tl +\tl_new:N \l__fontspec_smcp_shape_tl \tl_new:N \g__fontspec_mathrm_tl \tl_new:N \g__fontspec_bfmathrm_tl \tl_new:N \g__fontspec_mathsf_tl @@ -192,7 +196,7 @@ \tl_new:N \l__fontspec_sffamily_family_tl \tl_new:N \l__fontspec_ttfamily_family_tl -%%^^A%% fontspec-msg.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-msg.dtx -- part of FONTSPEC \cs_new:Npn \__fontspec_error:n { \msg_error:nn {fontspec} } \cs_new:Npn \__fontspec_error:nn { \msg_error:nnn {fontspec} } \cs_new:Npn \__fontspec_error:nx { \msg_error:nnx {fontspec} } @@ -300,6 +304,10 @@ { Option '#2' of font feature '#1' overwritten. } +\__fontspec_msg_new:nnn {fontspec} {ot-tag-too-long} + { + OpenType tag '#1' is too long; script, language, and feature tags must be four characters or fewer. + } \__fontspec_msg_new:nnn {fontspec} {script-not-exist-latn} { Font '\l_fontspec_fontname_tl' does not contain script '#1'.\\ @@ -420,7 +428,7 @@ } \char_set_catcode_ignore:n {32} -%%^^A%% fontspec-opening.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-opening.dtx -- part of FONTSPEC \DeclareOption{cm-default} { \__fontspec_warning:n {cm-default-obsolete} @@ -473,10 +481,10 @@ \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl \AtBeginDocument - { - \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl - \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl - } + { + \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl + \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl + } \bool_if:NT \g__fontspec_euenc_bool { \cs_set_eq:NN \fontspec_tmp: \XeTeXpicfile @@ -511,7 +519,7 @@ \cs_generate_variant:Nn \tl_if_eq:nnT {ox} \cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx} -%%^^A%% fontspec-fontload.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-fontload.dtx -- part of FONTSPEC \cs_set:Npn \__fontspec_primitive_font_set:Nnn #1#2#3 { @@ -523,7 +531,7 @@ } \cs_set:Npn \__fontspec_font_suppress_not_found_error: { - \int_set_eq:NN \xetex_suppressfontnotfounderror:D \c_one + \int_set:Nn \suppressfontnotfounderror {1} } \prg_set_conditional:Nnn \__fontspec_primitive_font_if_null:N {p,TF,T,F} { @@ -544,7 +552,7 @@ } \prg_new_conditional:Nnn \__fontspec_primitive_font_glyph_if_exist:Nn {p,TF,T,F} { - \etex_iffontchar:D #1 #2 \scan_stop: + \tex_iffontchar:D #1 #2 \scan_stop: \prg_return_true: \else: \prg_return_false: @@ -555,7 +563,7 @@ \tex_hyphenchar:D #1 = #2 \scan_stop: } -%%^^A%% fontspec-interfaces.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-interfaces.dtx -- part of FONTSPEC \NewDocumentCommand \fontspec { O{} m O{} } { @@ -669,7 +677,7 @@ \__fontspec_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3} } -%%^^A%% fontspec-user.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-user.dtx -- part of FONTSPEC \cs_new:Nn \__fontspec_main_fontspec:nn { @@ -690,7 +698,7 @@ \exp_not:N \selectfont } } - \str_if_eq_x:nnT {\familydefault} {\rmdefault} + \str_if_eq:eeT {\familydefault} {\rmdefault} { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } \__fontspec_setmainfont_hook:nn {#1} {#2} \normalfont @@ -708,7 +716,7 @@ \exp_not:N \selectfont } } - \str_if_eq_x:nnT {\familydefault} {\sfdefault} + \str_if_eq:eeT {\familydefault} {\sfdefault} { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } \__fontspec_setsansfont_hook:nn {#1} {#2} \normalfont @@ -726,7 +734,7 @@ \exp_not:N \selectfont } } - \str_if_eq_x:nnT {\familydefault} {\ttdefault} + \str_if_eq:eeT {\familydefault} {\ttdefault} { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } \__fontspec_setmonofont_hook:nn {#1} {#2} \normalfont @@ -940,7 +948,7 @@ } } -%%^^A%% fontspec-api.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-api.dtx -- part of FONTSPEC \prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F} { @@ -1002,99 +1010,96 @@ } } \prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \__fontspec_iv_str_to_num:Nn \l__fontspec_script_int {#1} - \__fontspec_iv_str_to_num:Nn \l__fontspec_language_int {#2} - \__fontspec_check_ot_feat:NnTF \font {#3} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \__fontspec_check_ot_feat:NnnnTF \font {#3} {#2} {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \__fontspec_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \__fontspec_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-num} \l__fontspec_tmp_tl - \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl} - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l_fontspec_script_tl + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-num} \l__fontspec_tmp_tl + \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl} + \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l_fontspec_script_tl - \__fontspec_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } + \__fontspec_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \tl_set:Nn \l_fontspec_script_tl {#1} - \__fontspec_iv_str_to_num:Nn \l__fontspec_script_int {#1} - \__fontspec_check_lang:NnTF \font {#2} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \__fontspec_check_lang:NnnTF \font {#2} {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_tmp_tl - \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl - {\prg_return_true:} {\prg_return_false:} - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_tmp_tl + \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl + {\prg_return_true:} {\prg_return_false:} + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-tag} \l__fontspec_tmp_tl - \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl - {\prg_return_true:} {\prg_return_false:} - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-tag} \l__fontspec_tmp_tl + \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl + {\prg_return_true:} {\prg_return_false:} + } + { \prg_return_false: } + } + { \prg_return_false: } + } \cs_new:Nn \fontspec_set_family:Nnn { \tl_set:Nn \l__fontspec_family_label_tl {#1} \__fontspec_select_font_family:nn {#2} {#3} + \tl_clear_new:N #1 \tl_set_eq:NN #1 \l_fontspec_family_tl } \cs_generate_variant:Nn \fontspec_set_family:Nnn {c} @@ -1143,81 +1148,81 @@ { \prg_return_false: } } -%%^^A%% fontspec-internal.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-internal.dtx -- part of FONTSPEC \cs_new_protected:Nn \__fontspec_select_font_family:nn - { - \group_begin: - \__fontspec_font_suppress_not_found_error: - \__fontspec_init: + { + \group_begin: + \__fontspec_font_suppress_not_found_error: + \__fontspec_init: - \__fontspec_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_up_tl {#2} - \__fontspec_sanitise_fontname:Nn \l__fontspec_basename_tl {#2} + \__fontspec_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2} + \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_up_tl {#2} + \__fontspec_sanitise_fontname:Nn \l__fontspec_basename_tl {#2} - \__fontspec_if_detect_external:nT {#2} - { \keys_set:nn {fontspec-preparse-external} {Path} } + \__fontspec_if_detect_external:nT {#2} + { \keys_set:nn {fontspec-preparse-external} {Path} } - \keys_set_known:nn {fontspec-preparse-cfg} {#1} + \keys_set_known:nn {fontspec-preparse-cfg} {#1} - \__fontspec_init_ttc:n {#2} - \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2} + \__fontspec_init_ttc:n {#2} + \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2} - \__fontspec_extract_all_features:n {#1} - \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist } + \__fontspec_extract_all_features:n {#1} + \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist } - \__fontspec_preparse_features: - \__fontspec_load_font: - \__fontspec_set_scriptlang: - \__fontspec_get_features:n {} - \bool_set_false:N \l__fontspec_firsttime_bool + \__fontspec_preparse_features: + \__fontspec_load_font: + \__fontspec_set_scriptlang: + \__fontspec_get_features:n {} + \bool_set_false:N \l__fontspec_firsttime_bool - \__fontspec_save_family_needed:nTF {#2} - { - \__fontspec_save_family:nn {#1} {#2} - } - { - } - \group_end: + \__fontspec_save_family_needed:nTF {#2} + { + \__fontspec_save_family:nn {#1} {#2} + } + { + } + \group_end: - \tl_set_eq:NN \l_fontspec_family_tl \g__fontspec_nfss_family_tl - } + \tl_set_eq:NN \l_fontspec_family_tl \g__fontspec_nfss_family_tl + } \cs_set_eq:NN \fontspec_select:nn \__fontspec_select_font_family:nn %% deprecated, for compatibility only \cs_new:Nn \__fontspec_sanitise_fontname:Nn - { - \tl_set:Nx #1 {#2} + { + \tl_set:Nx #1 {#2} \tl_remove_all:Nn #1 {~} - \clist_map_inline:Nn \l__fontspec_extensions_clist - { - \tl_if_in:NnT #1 {##1} - { - \tl_remove_once:Nn #1 {##1} - \tl_set:Nn \l__fontspec_extension_tl {##1} - \clist_map_break: - } - } - } + \clist_map_inline:Nn \l__fontspec_extensions_clist + { + \tl_if_in:NnT #1 {##1} + { + \tl_remove_once:Nn #1 {##1} + \tl_set:Nn \l__fontspec_extension_tl {##1} + \clist_map_break: + } + } + } \prg_new_conditional:Nnn \__fontspec_if_detect_external:n {T} - { - \clist_map_inline:Nn \l__fontspec_extensions_clist - { - \bool_set_false:N \l__fontspec_tmpa_bool - \exp_args:Nx % <- this should be handled earlier - \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string} - { \bool_set_true:N \l__fontspec_tmpa_bool \clist_map_break: } - } - \bool_if:NTF \l__fontspec_tmpa_bool \prg_return_true: \prg_return_false: - } + { + \clist_map_inline:Nn \l__fontspec_extensions_clist + { + \bool_set_false:N \l__fontspec_tmpa_bool + \exp_args:Nx % <- this should be handled earlier + \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string} + { \bool_set_true:N \l__fontspec_tmpa_bool \clist_map_break: } + } + \bool_if:NTF \l__fontspec_tmpa_bool \prg_return_true: \prg_return_false: + } \cs_new:Nn \__fontspec_init_ttc:n - { - \str_if_eq_x:nnT { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} - { - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bfit_tl {#1} - } - } + { + \str_if_eq:eeT { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} + { + \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1} + \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1} + \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bfit_tl {#1} + } + } \cs_new:Nn \__fontspec_load_external_fontoptions:Nn { \bool_if:NT \l__fontspec_fontcfg_bool @@ -1233,67 +1238,67 @@ } } \cs_new:Nn \__fontspec_extract_all_features:n - { - \bool_if:NTF \l__fontspec_disable_defaults_bool - { - \clist_set:Nx \l__fontspec_all_features_clist {#1} - } - { - \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist - { \clist_clear:N \l__fontspec_fontopts_clist } + { + \bool_if:NTF \l__fontspec_disable_defaults_bool + { + \clist_set:Nx \l__fontspec_all_features_clist {#1} + } + { + \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist + { \clist_clear:N \l__fontspec_fontopts_clist } - \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist - { \clist_clear:N \l__fontspec_family_fontopts_clist } - \tl_clear:N \l__fontspec_family_label_tl + \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist + { \clist_clear:N \l__fontspec_family_fontopts_clist } + \tl_clear:N \l__fontspec_family_label_tl - \clist_set:Nx \l__fontspec_all_features_clist - { - \g__fontspec_default_fontopts_clist, - \l__fontspec_family_fontopts_clist, - \l__fontspec_fontopts_clist, - #1 - } - } - } + \clist_set:Nx \l__fontspec_all_features_clist + { + \g__fontspec_default_fontopts_clist, + \l__fontspec_family_fontopts_clist, + \l__fontspec_fontopts_clist, + #1 + } + } + } \cs_new:Nn \__fontspec_preparse_features: - { + { - \__fontspec_keys_set_known:nxN {fontspec-preparse-external} - { \l__fontspec_all_features_clist } - \l__fontspec_keys_leftover_clist + \__fontspec_keys_set_known:nxN {fontspec-preparse-external} + { \l__fontspec_all_features_clist } + \l__fontspec_keys_leftover_clist - \tl_set_eq:NN \l_fontspec_fontname_tl \l__fontspec_fontname_up_tl - \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_keys_leftover_clist} - \l__fontspec_keys_leftover_clist - \__fontspec_keys_set_known:nxN {fontspec-preparse} {\l__fontspec_keys_leftover_clist} - \l__fontspec_fontfeat_clist - } + \tl_set_eq:NN \l_fontspec_fontname_tl \l__fontspec_fontname_up_tl + \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_keys_leftover_clist} + \l__fontspec_keys_leftover_clist + \__fontspec_keys_set_known:nxN {fontspec-preparse} {\l__fontspec_keys_leftover_clist} + \l__fontspec_fontfeat_clist + } \cs_new:Nn \__fontspec_load_font: - { - \__fontspec_primitive_font_set:Nnn \l_fontspec_font - { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} - \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} } - \__fontspec_set_font_type:N \l_fontspec_font - \__fontspec_primitive_font_gset:Nnn \l_fontspec_font - { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} - \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly - } + { + \__fontspec_primitive_font_set:Nnn \l_fontspec_font + { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} + \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} } + \__fontspec_set_font_type:N \l_fontspec_font + \__fontspec_primitive_font_gset:Nnn \l_fontspec_font + { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} + \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly + } \cs_new:Nn \__fontspec_construct_font_call:nnnnnn - { + { " \__fontspec_fontname_wrap:n { #1 #2 } #3 #4 #5 - \str_if_eq_x:nnF {#6}{} {:#6} " - } + \str_if_eq:eeF {#6}{} {:#6} " + } \cs_new:Nn \__fontspec_construct_font_call:nn - { - \__fontspec_construct_font_call:nnnnnn - {#1} - \l__fontspec_extension_tl - \l__fontspec_ttc_index_tl - \l_fontspec_renderer_tl - \l__fontspec_optical_size_tl - {#2} - } + { + \__fontspec_construct_font_call:nnnnnn + {#1} + \l__fontspec_extension_tl + \l__fontspec_ttc_index_tl + \l_fontspec_renderer_tl + \l__fontspec_optical_size_tl + {#2} + } \cs_new:Nn \__fontspec_font_is_name: { \cs_set_eq:NN \__fontspec_fontname_wrap:n \use:n @@ -1303,50 +1308,51 @@ \cs_set:Npn \__fontspec_fontname_wrap:n ##1 { [ \l__fontspec_font_path_tl ##1 ] } } \cs_new:Nn \__fontspec_set_scriptlang: - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_if_empty:NTF \l__fontspec_script_name_tl - { - \__fontspec_check_script:NnTF \l_fontspec_font {latn} - { - \tl_set:Nn \l__fontspec_script_name_tl {Latin} - \tl_if_empty:NT \l__fontspec_lang_name_tl - { - \tl_set:Nn \l__fontspec_lang_name_tl {Default} - } - \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} - \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} - } - { - \__fontspec_info:n {no-scripts} - } - } - { - \tl_if_empty:NT \l__fontspec_lang_name_tl - { - \tl_set:Nn \l__fontspec_lang_name_tl {Default} - } - \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} - \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} - } - } - } + { + \bool_if:NT \l__fontspec_firsttime_bool + { + \tl_if_empty:NTF \l__fontspec_script_name_tl + { + \__fontspec_check_script:NnTF \l_fontspec_font {latn} + { + \tl_set:Nn \l__fontspec_script_name_tl {Latin} + \tl_if_empty:NT \l__fontspec_lang_name_tl + { + \tl_set:Nn \l__fontspec_lang_name_tl {Default} + } + \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} + \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} + } + { + \__fontspec_info:n {no-scripts} + \bool_set_true:N \l__fontspec_never_check_bool + } + } + { + \tl_if_empty:NT \l__fontspec_lang_name_tl + { + \tl_set:Nn \l__fontspec_lang_name_tl {Default} + } + \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} + \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} + } + } + } \cs_new:Nn \__fontspec_get_features:n - { - \__fontspec_init_fontface: - \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#1} - \l__fontspec_keys_leftover_clist - \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist - \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist - - \tl_if_empty:NF \l__fontspec_mapping_tl - { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } } - - \str_if_eq_x:nnF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl } - { \c__fontspec_hexcol_tl \c__fontspec_opacity_tl } - { \__fontspec_update_featstr:n { color = \l__fontspec_hexcol_tl\l__fontspec_opacity_tl } } - } + { + \__fontspec_init_fontface: + \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#1} + \l__fontspec_keys_leftover_clist + \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist + \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist + + \tl_if_empty:NF \l__fontspec_mapping_tl + { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } } + + \str_if_eq:eeF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl } + { \c__fontspec_hexcol_tl \c__fontspec_opacity_tl } + { \__fontspec_update_featstr:n { color = \l__fontspec_hexcol_tl\l__fontspec_opacity_tl } } + } \prg_new_conditional:Nnn \__fontspec_save_family_needed:n { TF } { @@ -1393,141 +1399,139 @@ \__fontspec_info:nxx {defining-font} {#1} {#2} } \cs_new:Nn \__fontspec_save_fontinfo:n - { - \prop_new:c {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontname} { #1 } - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {options} { \l__fontspec_all_features_clist } - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontdef} - { - \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} - { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } - } - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-num} \l__fontspec_script_int - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-num} \l__fontspec_language_int - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-tag} \l_fontspec_script_tl - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-tag} \l_fontspec_lang_tl - } + { + \prop_new:c {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} + \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontname} { #1 } + \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {options} { \l__fontspec_all_features_clist } + \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontdef} + { + \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} + { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } + } + \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-num} \l__fontspec_script_int + \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-num} \l__fontspec_language_int + \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-tag} \l_fontspec_script_tl + \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-tag} \l_fontspec_lang_tl + } \cs_new:Nn \__fontspec_find_autofonts: - { - \bool_if:nF {\l__fontspec_noit_bool || \l__fontspec_nobf_bool} - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B} - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I} - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI} - } + { + \bool_if:nF {\l__fontspec_noit_bool || \l__fontspec_nobf_bool} + { + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B} + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I} + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI} + } - \bool_if:NF \l__fontspec_nobf_bool - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B} - } + \bool_if:NF \l__fontspec_nobf_bool + { + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B} + } - \bool_if:NF \l__fontspec_noit_bool - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I} - } + \bool_if:NF \l__fontspec_noit_bool + { + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I} + } - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B} - } + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B} + } \cs_new:Nn \__fontspec_set_faces: - { - \__fontspec_add_nfssfont:nnnn \mddefault \updefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \updefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist - \__fontspec_add_nfssfont:nnnn \mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist - \__fontspec_add_nfssfont:nnnn \mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist - - \prop_map_inline:Nn \l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn ##2 } - } + { + \__fontspec_add_nfssfont:nnnn \mddefault \updefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist + \__fontspec_add_nfssfont:nnnn \bfdefault \updefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist + \__fontspec_add_nfssfont:nnnn \mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist + \__fontspec_add_nfssfont:nnnn \mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist + \__fontspec_add_nfssfont:nnnn \bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist + \__fontspec_add_nfssfont:nnnn \bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist + + \prop_map_inline:Nn \l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn ##2 } + } \cs_new:Nn \__fontspec_set_faces_aux:nnnnn - { - \fontspec_complete_fontname:Nn \l__fontspec_curr_fontname_tl {#3} - \__fontspec_make_font_shapes:Nnnnn \l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5} - } + { + \fontspec_complete_fontname:Nn \l__fontspec_curr_fontname_tl {#3} + \__fontspec_make_font_shapes:Nnnnn \l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5} + } \cs_new:Nn \fontspec_complete_fontname:Nn - { - \tl_set:Nx #1 {#2} - \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl} + { + \tl_set:Nx #1 {#2} + \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl} \tl_remove_all:Nn #1 {~} - } + } \cs_new:Nn \__fontspec_add_nfssfont:nnnn - { - \tl_set:Nx \l__fontspec_this_font_tl {#3} + { + \tl_set:Nx \l__fontspec_this_font_tl {#3} - \tl_if_empty:xTF {#4} - { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} } - { \__fontspec_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l__fontspec_tmp_tl } + \tl_if_empty:xTF {#4} + { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} } + { \__fontspec_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l__fontspec_tmp_tl } - \tl_if_empty:NF \l__fontspec_this_font_tl - { - \prop_put:Nxx \l__fontspec_nfssfont_prop {#1/#2} - { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} } - } - } -\cs_new:Nn \__fontspec_set_font_type:N - { - \bool_set_true:N \l__fontspec_ot_bool - } + \tl_if_empty:NF \l__fontspec_this_font_tl + { + \prop_put:Nxx \l__fontspec_nfssfont_prop {#1/#2} + { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} } + } + } +\cs_new:Nn \__fontspec_set_font_type:N + { + \bool_set_true:N \l__fontspec_ot_bool + } \cs_new:Nn \__fontspec_set_autofont:Nnn - { - \bool_if:NF \l__fontspec_external_bool - { - \tl_if_empty:xF {#2} - { - \tl_if_empty:NT #1 - { - \__fontspec_if_autofont:nnTF {#2} {#3} - { \tl_set:Nx #1 {#2#3} } - { \__fontspec_info:nx {no-font-shape} {#2#3} } - } - } - } - } - + { + \bool_if:NF \l__fontspec_external_bool + { + \tl_if_empty:xF {#2} + { + \tl_if_empty:NT #1 + { + \__fontspec_if_autofont:nnTF {#2} {#3} + { \tl_set:Nx #1 {#2#3} } + { \__fontspec_info:nx {no-font-shape} {#2#3} } + } + } + } + } \prg_new_conditional:Nnn \__fontspec_if_autofont:nn {T,TF} - { - \__fontspec_primitive_font_set:Nnn \l_tmpa_font { \__fontspec_construct_font_call:nn {#1} {} } {\f@size pt} - \__fontspec_primitive_font_set:Nnn \l_tmpb_font { \__fontspec_construct_font_call:nn {#1#2} {} } {\f@size pt} - \str_if_eq_x:nnTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font } - { \prg_return_false: } - { \prg_return_true: } - } + { + \__fontspec_primitive_font_set:Nnn \l_tmpa_font { \__fontspec_construct_font_call:nn {#1} {} } {\f@size pt} + \__fontspec_primitive_font_set:Nnn \l_tmpb_font { \__fontspec_construct_font_call:nn {#1#2} {} } {\f@size pt} + \str_if_eq:eeTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font } + { \prg_return_false: } + { \prg_return_true: } + } \cs_new:Nn \__fontspec_make_font_shapes:Nnnnn - { - \group_begin: - \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l__fontspec_leftover_clist - \__fontspec_load_fontname:n {#1} - \__fontspec_declare_shape:nnxx {#2} {#3} { \l__fontspec_fontopts_clist, \l__fontspec_leftover_clist } {#5} - \group_end: - } - + { + \group_begin: + \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l__fontspec_leftover_clist + \__fontspec_load_fontname:n {#1} + \__fontspec_declare_shape:nnxx {#2} {#3} { \l__fontspec_fontopts_clist, \l__fontspec_leftover_clist } {#5} + \group_end: + } \cs_new:Nn \__fontspec_load_fontname:n - { + { \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#1} \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist - { \clist_clear:N \l__fontspec_fontopts_clist } + { \clist_clear:N \l__fontspec_fontopts_clist } \keys_set_groups:nnV {fontspec/fontname} {getfontname} \l__fontspec_fontopts_clist \__fontspec_primitive_font_set:Nnn \l_fontspec_font { \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} {} } {\f@size pt} \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {#1} } - } + } \keys_define:nn {fontspec/fontname} { Font .tl_set:N = \l_fontspec_fontname_tl , Font .groups:n = {getfontname} , } \cs_new:Nn \__fontspec_declare_shape:nnnn - { - \tl_clear:N \l__fontspec_nfss_tl - \tl_clear:N \l__fontspec_nfss_sc_tl - \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl + { + \tl_clear:N \l__fontspec_nfss_tl + \tl_clear:N \l__fontspec_nfss_sc_tl + \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl - \exp_args:Nx \clist_map_inline:nn {#4} { \__fontspec_setup_single_size:nn {#3} {##1} } + \exp_args:Nx \clist_map_inline:nn {#4} { \__fontspec_setup_single_size:nn {#3} {##1} } - \__fontspec_declare_shapes_normal:nn {#1} {#2} - \__fontspec_declare_shapes_smcaps:nn {#1} {#2} - \__fontspec_declare_shape_slanted:nn {#1} {#2} - \__fontspec_declare_shape_loginfo:nn {#1} {#2} - } + \__fontspec_declare_shapes_normal:nn {#1} {#2} + \__fontspec_declare_shapes_smcaps:nn {#1} {#2} + \__fontspec_declare_shape_slanted:nn {#1} {#2} + \__fontspec_declare_shape_loginfo:nn {#1} {#2} + } \cs_generate_variant:Nn \__fontspec_declare_shape:nnnn {nnxx} \cs_new:Nn \__fontspec_setup_single_size:nn { @@ -1546,38 +1550,38 @@ \clist_set_eq:NN \l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist \bool_if:NF \l__fontspec_nosc_bool - { - \tl_if_empty:NTF \l__fontspec_fontname_sc_tl - { - \__fontspec_make_smallcaps:TF - { - \clist_put_left:Nn \l__fontspec_fontfeat_curr_clist {Letters=SmallCaps} - } - { - \bool_set_true:N \l__fontspec_nosc_bool - } - } - { \__fontspec_load_fontname:n {\l__fontspec_fontname_sc_tl} }% local for each size - } + { + \tl_if_empty:NTF \l__fontspec_fontname_sc_tl + { + \__fontspec_make_smallcaps:TF + { + \clist_put_left:Nn \l__fontspec_fontfeat_curr_clist {Letters=SmallCaps} + } + { + \bool_set_true:N \l__fontspec_nosc_bool + } + } + { \__fontspec_load_fontname:n {\l__fontspec_fontname_sc_tl} }% local for each size + } \bool_if:NF \l__fontspec_nosc_bool - { - \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl - {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist} - } + { + \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl + {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist} + } } \cs_new:Nn \__fontspec_setup_nfss:Nnnn - { + { - \__fontspec_get_features:n { #2 , #3 , #4 } + \__fontspec_get_features:n { #2 , #3 , #4 } - \tl_put_right:Nx #1 - { - <\l__fontspec_size_tl> \l__fontspec_scale_tl - \__fontspec_construct_font_call:nn { \l_fontspec_fontname_tl } - { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } - } - } + \tl_put_right:Nx #1 + { + <\l__fontspec_size_tl> \l__fontspec_scale_tl + \__fontspec_construct_font_call:nn { \l_fontspec_fontname_tl } + { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } + } + } \cs_new:Nn \__fontspec_declare_shapes_normal:nn { \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} @@ -1591,7 +1595,6 @@ { \__fontspec_combo_sc_shape:n {#2} } {\l__fontspec_nfss_sc_tl} {\l__fontspec_postadjust_tl} } } - \cs_new:Nn \__fontspec_combo_sc_shape:n { \tl_if_exist:cTF { \__fontspec_shape_merge:nn {#1} {\scdefault} } @@ -1599,73 +1602,74 @@ { \scdefault } } \cs_new:Nn \__fontspec_DeclareFontShape:nnnnnn - { - \group_begin: - \normalsize - \cs_undefine:c {#1/#2/#3/#4/\f@size} - \group_end: - \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6} - } + { +\group_begin: +\normalsize +\cs_undefine:c {#1/#2/#3/#4/\f@size} +\group_end: +\DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6} + } \cs_generate_variant:Nn \__fontspec_DeclareFontShape:nnnnnn {xxxxxx} \cs_new:Nn \__fontspec_declare_shape_slanted:nn - { - \bool_if:nT - { - \str_if_eq_x_p:nn {#2} {\itdefault} && - !(\str_if_eq_x_p:nn {\itdefault} {\sldefault}) - } - { - \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{#1}{\sldefault} - {<->ssub*\g__fontspec_nfss_family_tl/#1/\itdefault}{\l__fontspec_postadjust_tl} - } - } + { + \bool_if:nT + { + \str_if_eq_p:ee {#2} {\itdefault} && + !(\str_if_eq_p:ee {\itdefault} {\sldefault}) + } + { + \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{#1}{\sldefault} + {<->ssub*\g__fontspec_nfss_family_tl/#1/\itdefault}{\l__fontspec_postadjust_tl} + } + } \cs_new:Nn \__fontspec_declare_shape_loginfo:nn - { - \tl_gput_right:Nx \g__fontspec_defined_shapes_tl - { - \exp_not:n { \\ } - -~ \exp_not:N \str_case:nn {#1/#2} - { - {\mddefault/\updefault} {'normal'~} - {\bfdefault/\updefault} {'bold'~} - {\mddefault/\itdefault} {'italic'~} - {\mddefault/\sldefault} {'slanted'~} - {\bfdefault/\itdefault} {'bold~ italic'~} - {\bfdefault/\sldefault} {'bold~ slanted'~} - } (#1/#2)~ - with~ NFSS~ spec.:~ - \l__fontspec_nfss_tl - \exp_not:n { \\ } - -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} } - { - {\mddefault/\scdefault} {'small~ caps'~} - {\bfdefault/\scdefault} {'bold~ small~ caps'~} - {\mddefault/\itscdefault} {'italic~ small~ caps'~} - {\bfdefault/\itscdefault} {'bold~ italic~ small~ caps'~} - {\mddefault/\slscdefault} {'slanted~ small~ caps'~} - {\bfdefault/\slscdefault} {'bold~ slanted~ small~ caps'~} - }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~ - with~ NFSS~ spec.:~ - \l__fontspec_nfss_sc_tl - \tl_if_empty:fF {\l__fontspec_postadjust_tl} - { - \exp_not:N \\ and~ font~ adjustment~ code: \exp_not:N \\ \l__fontspec_postadjust_tl - } - } - } + { + \tl_gput_right:Nx \g__fontspec_defined_shapes_tl + { + \exp_not:n { \\ } + -~ \exp_not:N \str_case:nn {#1/#2} + { + {\mddefault/\updefault} {'normal'~} + {\bfdefault/\updefault} {'bold'~} + {\mddefault/\itdefault} {'italic'~} + {\mddefault/\sldefault} {'slanted'~} + {\bfdefault/\itdefault} {'bold~ italic'~} + {\bfdefault/\sldefault} {'bold~ slanted'~} + } (#1/#2)~ + with~ NFSS~ spec.:~ + \l__fontspec_nfss_tl + \exp_not:n { \\ } + -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} } + { + {\mddefault/\scdefault} {'small~ caps'~} + {\bfdefault/\scdefault} {'bold~ small~ caps'~} + {\mddefault/\itscdefault} {'italic~ small~ caps'~} + {\bfdefault/\itscdefault} {'bold~ italic~ small~ caps'~} + {\mddefault/\slscdefault} {'slanted~ small~ caps'~} + {\bfdefault/\slscdefault} {'bold~ slanted~ small~ caps'~} + }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~ + with~ NFSS~ spec.:~ + \l__fontspec_nfss_sc_tl + \tl_if_empty:fF {\l__fontspec_postadjust_tl} + { + \exp_not:N \\ and~ font~ adjustment~ code: + \exp_not:N \\ \l__fontspec_postadjust_tl + } + } + } \tl_set:Nn \l__fontspec_pre_feat_sclist - { - mode = \l_fontspec_mode_tl ; - \tl_if_empty:NF \l_fontspec_script_tl - { - script = \l_fontspec_script_tl ; - language = \l_fontspec_lang_tl ; - } - } + { + mode = \l_fontspec_mode_tl ; + \tl_if_empty:NF \l_fontspec_script_tl + { + script = \l_fontspec_script_tl ; + language = \l_fontspec_lang_tl ; + } + } \cs_new:Nn \__fontspec_make_smallcaps:TF - { - \__fontspec_check_ot_feat:NnTF \l_fontspec_font {smcp} {#1} {#2} - } + { + \__fontspec_check_ot_feat:NnTF \l_fontspec_font {smcp} {#1} {#2} + } \cs_new:Nn \__fontspec_update_featstr:n { \bool_if:NF \l__fontspec_firsttime_bool @@ -1682,23 +1686,23 @@ } } \cs_set:Npn \__fontspec_init: - { - \bool_set_false:N \l__fontspec_ot_bool - \bool_set_true:N \l__fontspec_firsttime_bool - \__fontspec_font_is_name: - \tl_clear:N \l__fontspec_font_path_tl - \tl_clear:N \l__fontspec_optical_size_tl - \tl_clear:N \l__fontspec_ttc_index_tl - \tl_clear:N \l_fontspec_renderer_tl - \tl_gclear:N \g__fontspec_defined_shapes_tl - \tl_gclear:N \g__fontspec_curr_series_tl - \tl_gset_eq:NN \g__fontspec_nfss_enc_tl \g_fontspec_encoding_tl - \tl_set:Nn \l_fontspec_mode_tl {node} - \int_set:Nn \luatex_prehyphenchar:D { `\- } % fixme - \int_zero:N \luatex_posthyphenchar:D % fixme - \int_zero:N \luatex_preexhyphenchar:D % fixme - \int_zero:N \luatex_postexhyphenchar:D % fixme - } + { + \bool_set_false:N \l__fontspec_ot_bool + \bool_set_true:N \l__fontspec_firsttime_bool + \__fontspec_font_is_name: + \tl_clear:N \l__fontspec_font_path_tl + \tl_clear:N \l__fontspec_optical_size_tl + \tl_clear:N \l__fontspec_ttc_index_tl + \tl_clear:N \l_fontspec_renderer_tl + \tl_gclear:N \g__fontspec_defined_shapes_tl + \tl_gclear:N \g__fontspec_curr_series_tl + \tl_gset_eq:NN \g__fontspec_nfss_enc_tl \g_fontspec_encoding_tl + \tl_set:Nn \l_fontspec_mode_tl {node} + \int_set:Nn \prehyphenchar { `\- } % fixme + \int_zero:N \posthyphenchar % fixme + \int_zero:N \preexhyphenchar % fixme + \int_zero:N \postexhyphenchar % fixme + } \cs_new:Nn \__fontspec_init_fontface: { \tl_gclear:N \g__fontspec_rawfeatures_sclist @@ -1709,29 +1713,24 @@ \tl_clear:N \l__fontspec_wordspace_adjust_tl \tl_clear:N \l__fontspec_punctspace_adjust_tl } -\cs_new:Nn \__fontspec_iv_str_to_num:Nn +\cs_new_protected:Nn \__fontspec_ot_validate_tag:n { - \__fontspec_strip_leading_sign:Nw #1#2 \q_nil + \__fontspec_ot_validate_tag:w #1 \q_nil } -\cs_set:Npn \__fontspec_strip_leading_sign:Nw #1#2#3 \q_nil +\cs_generate_variant:Nn \__fontspec_ot_validate_tag:n {x} +\cs_set:Npn \__fontspec_ot_validate_tag:w #1 #2 \q_nil { - \bool_if:nTF { \str_if_eq_p:nn {#2} {+} || \str_if_eq_p:nn {#2} {-} } - { \__fontspec_iv_str_to_num:w #1 \q_nil #3 \c_empty_tl \c_empty_tl \q_nil } - { \__fontspec_iv_str_to_num:w #1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil } + \bool_if:nTF { \str_if_eq_p:nn {#1} {+} || \str_if_eq_p:nn {#1} {-} } + { \__fontspec_ot_validate_tag_aux:w #2 \c_empty_tl \c_empty_tl \q_nil } + { \__fontspec_ot_validate_tag_aux:w #1#2 \c_empty_tl \c_empty_tl \q_nil } + } +\cs_set:Npn \__fontspec_ot_validate_tag_aux:w #1#2#3#4#5 \q_nil + { + \int_compare:nT { \tl_count:n {#5} > 2 } + { \__fontspec_error:nx {ot-tag-too-long} {#1#2#3#4#5} } } -\cs_set:Npn \__fontspec_iv_str_to_num:w #1 \q_nil #2#3#4#5#6 \q_nil - { - \int_set:Nn #1 - { - `#2 * "1000000 - + `#3 * "10000 - + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100 - + \ifx \c_empty_tl #5 32 \else `#5 \fi - } - } -\cs_generate_variant:Nn \__fontspec_iv_str_to_num:Nn {No} -%%^^A%% fontspec-opentype.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-opentype.dtx -- part of FONTSPEC \cs_new:Nn \__fontspec_define_opentype_feature_group:n { @@ -1771,16 +1770,16 @@ \cs_new:Nn \__fontspec_feat_off:n {#1Off} \cs_new:Nn \__fontspec_feat_reset:n {#1Reset} \cs_new:Nn \__fontspec_define_opentype_onoffreset:nnnnn - { - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_off:n {#2} } {#3} {-#4} {} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {+#4,-#4} - } + { + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5} + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_off:n {#2} } {#3} {-#4} {} + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {+#4,-#4} + } \cs_new:Nn \__fontspec_define_opentype_onreset:nnnnn - { - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {#4} - } + { + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5} + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {#4} + } \cs_new:Nn \__fontspec_make_OT_feature:nnn { @@ -1813,46 +1812,58 @@ { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } - { - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } - \directlua{fontspec.check_ot_script("\l__fontspec_tmp_tl", "#2")} - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + { + \__fontspec_ot_validate_tag:x {#2} + \cs_if_eq:NNTF #1 \font + { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } + { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } + \directlua{fontspec.check_ot_script("\l__fontspec_tmp_tl", "#2")} + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + } } - } \prg_new_conditional:Nnn \__fontspec_check_lang:Nn {TF} + { + \__fontspec_check_lang:NnnTF #1 {#2} {\l_fontspec_script_tl} {\prg_return_true:} {\prg_return_false:} + } +\prg_new_conditional:Nnn \__fontspec_check_lang:Nnn {TF} { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } - { - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } - \directlua { - fontspec.check_ot_lang( "\l__fontspec_tmp_tl", "#2", "\l_fontspec_script_tl" ) + \__fontspec_ot_validate_tag:x {#2} + \__fontspec_ot_validate_tag:x {#3} + \cs_if_eq:NNTF #1 \font + { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } + { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } + \directlua + { + fontspec.check_ot_lang( "\l__fontspec_tmp_tl", "#2", "#3" ) + } + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: } - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } } \prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nn {TF,F} + { + \__fontspec_check_ot_feat:NnnnTF #1 {#2} {\l_fontspec_lang_tl} {\l_fontspec_script_tl} + {\prg_return_true:} {\prg_return_false:} + } +\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,F} { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } - { - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } - \directlua { - fontspec.check_ot_feat( - "\l__fontspec_tmp_tl", "#2", - "\l_fontspec_lang_tl", "\l_fontspec_script_tl" - ) + \__fontspec_ot_validate_tag:x {#2} + \__fontspec_ot_validate_tag:x {#3} + \__fontspec_ot_validate_tag:x {#4} + \cs_if_eq:NNTF #1 \font + { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } + { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } + \directlua + { + fontspec.check_ot_feat("\l__fontspec_tmp_tl", "#2", "#3", "#4") + } + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: } - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } } \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {aalt}{Access~All~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvf}{Above-base~Forms} @@ -1977,10 +1988,10 @@ \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {zero}{Slashed~Zero} -%%^^A%% fontspec-graphite.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-graphite.dtx -- part of FONTSPEC -%%^^A%% fontspec-keyval.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-keyval.dtx -- part of FONTSPEC \clist_gset:Nn \g__fontspec_all_keyval_modules_clist { @@ -2006,60 +2017,61 @@ \bool_set_false:N \l__fontspec_fontcfg_bool } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Path} - { - \bool_set_true:N \l__fontspec_nobf_bool - \bool_set_true:N \l__fontspec_noit_bool - \bool_set_true:N \l__fontspec_external_bool - \tl_set:Nn \l__fontspec_font_path_tl {#1} - \__fontspec_font_is_file: - } + { + \bool_set_true:N \l__fontspec_nobf_bool + \bool_set_true:N \l__fontspec_noit_bool + \bool_set_true:N \l__fontspec_external_bool + \tl_set:Nn \l__fontspec_font_path_tl {#1} + \__fontspec_font_is_file: + } \aliasfontfeature{Path}{ExternalLocation} \__fontspec_keys_define_code:nnn {fontspec} {Path} {} \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Extension} - { - \tl_set:Nn \l__fontspec_extension_tl {#1} - \bool_if:NF \l__fontspec_external_bool - { - \keys_set:nn {fontspec-preparse-external} {Path} - } - } + { + \tl_set:Nn \l__fontspec_extension_tl {#1} + \bool_if:NF \l__fontspec_external_bool + { + \keys_set:nn {fontspec-preparse-external} {Path} + } + } \tl_clear:N \l__fontspec_extension_tl \__fontspec_keys_define_code:nnn {fontspec} {Extension} {} \keys_define:nn {fontspec-renderer} - { - Renderer .choices:nn = - {AAT,ICU,OpenType,Graphite,Full,Basic} - { - \int_compare:nTF {\l_keys_choice_int <= 4} { - \__fontspec_warning:nx {only-xetex-feature} {Renderer=AAT/OpenType/Graphite} - } - { - \tl_set:Nx \l_fontspec_mode_tl - { - \int_case:nn \l_keys_choice_int { 5 {node} 6 {base} } - } - \tl_gset:Nx \g__fontspec_single_feat_tl { mode=\l_fontspec_mode_tl } - } - } - } + { + Renderer .choices:nn = + {AAT,ICU,OpenType,Graphite,Full,Basic} + { + \int_compare:nTF {\l_keys_choice_int <= 4} + { + \__fontspec_warning:nx {only-xetex-feature} {Renderer=AAT/OpenType/Graphite} + } + { + \tl_set:Nx \l_fontspec_mode_tl + { + \int_case:nn \l_keys_choice_int { 5 {node} 6 {base} } + } + \tl_gset:Nx \g__fontspec_single_feat_tl { mode=\l_fontspec_mode_tl } + } + } + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {Script} - { - \tl_set:Nn \l__fontspec_script_name_tl {#1} - } + { + \tl_set:Nn \l__fontspec_script_name_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {Language} - { - \tl_set:Nn \l__fontspec_lang_name_tl {#1} - } + { + \tl_set:Nn \l__fontspec_lang_name_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex} - { - \str_if_eq_x:nnF { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} - { \__fontspec_warning:n {font-index-needs-ttc} } + { + \str_if_eq:eeF { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} + { \__fontspec_warning:n {font-index-needs-ttc} } \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)} - } + } \__fontspec_keys_define_code:nnn {fontspec} {FontIndex} - { + { \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)} - } + } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont} { \fontspec_complete_fontname:Nn \l__fontspec_fontname_up_tl {#1} @@ -2125,76 +2137,76 @@ } } \__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_up_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_up_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_bf_clist {#1} + { + \clist_set:Nn \l__fontspec_fontfeat_bf_clist {#1} - } + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_it_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_it_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_bfit_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_bfit_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_sl_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_sl_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_bfsl_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_bfsl_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures} - { - \bool_if:NF \l__fontspec_firsttime_bool - { - \clist_set:Nn \l__fontspec_fontfeat_sc_clist {#1} - } - } + { + \bool_if:NF \l__fontspec_firsttime_bool + { + \clist_set:Nn \l__fontspec_fontfeat_sc_clist {#1} + } + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures} - { - \clist_set:Nn \l__fontspec_sizefeat_clist {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_up_clist { SizeFeatures = {#1} } - } + { + \clist_set:Nn \l__fontspec_sizefeat_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_up_clist { SizeFeatures = {#1} } + } \__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures} - { - \clist_set:Nn \l__fontspec_sizefeat_clist {#1} - \tl_if_empty:NT \l__fontspec_this_font_tl - { \tl_set:Nn \l__fontspec_this_font_tl { -- } } % needs to be non-empty as a flag - } + { + \clist_set:Nn \l__fontspec_sizefeat_clist {#1} + \tl_if_empty:NT \l__fontspec_this_font_tl + { \tl_set:Nn \l__fontspec_this_font_tl { -- } } % needs to be non-empty as a flag + } \__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {Font} - { - \tl_set:Nn \l__fontspec_this_font_tl {#1} - } + { + \tl_set:Nn \l__fontspec_this_font_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec} {SizeFeatures} - { - % dummy - } + { + % dummy + } \__fontspec_keys_define_code:nnn {fontspec} {Font} - { - % dummy - } + { + % dummy + } \__fontspec_keys_define_code:nnn {fontspec-sizing} {Size} - { - \tl_set:Nn \l__fontspec_size_tl {#1} - } + { + \tl_set:Nn \l__fontspec_size_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec-sizing} {Font} - { - \fontspec_complete_fontname:Nn \l__fontspec_sizedfont_tl {#1} - } + { + \fontspec_complete_fontname:Nn \l__fontspec_sizedfont_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding} - { - \tl_gset:Nx \g__fontspec_nfss_enc_tl { #1 } - } + { + \tl_gset:Nx \g__fontspec_nfss_enc_tl { #1 } + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSFamily} - { - \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 } - } + { + \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 } + } \__fontspec_keys_define_code:nnn {fontspec} {FontFace} { \tl_clear:N \l__fontspec_this_font_tl @@ -2213,271 +2225,273 @@ {\use_i:nnn #1} {\use_ii:nnn #1} {\l__fontspec_this_font_tl} {\l__fontspec_this_feat_clist} } \__fontspec_keys_define_code:nnn {fontspec} {Scale} - { - \str_case:nnF {#1} - { - {MatchLowercase} { \__fontspec_calc_scale:n {5} } - {MatchUppercase} { \__fontspec_calc_scale:n {8} } - } - { \tl_set:Nx \l__fontspec_scale_tl {#1} } - \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] } - } + { + \str_case:nnF {#1} + { + {MatchLowercase} { \__fontspec_calc_scale:n {5} } + {MatchUppercase} { \__fontspec_calc_scale:n {8} } + } + { \tl_set:Nx \l__fontspec_scale_tl {#1} } + \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] } + } \cs_new:Nn \__fontspec_calc_scale:n - { - \group_begin: + { + \group_begin: - \fontencoding { \encodingdefault } - \fontfamily { \rmdefault } - \selectfont + \fontencoding { \encodingdefault } + \fontfamily { \rmdefault } + \selectfont - \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font - \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l_fontspec_font + \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font + \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l_fontspec_font - \tl_gset:Nx \l__fontspec_scale_tl - { - \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} / - \dim_to_fp:n {\l__fontspec_tmpb_dim} } - } + \tl_set:Nx \l__fontspec_scale_tl + { + \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} / + \dim_to_fp:n {\l__fontspec_tmpb_dim} } + } - \__fontspec_info:n {set-scale} - \group_end: - } + \__fontspec_info:n {set-scale} + \exp_args:NNNx + \group_end: + \tl_set:Nx \l__fontspec_scale_tl { \l__fontspec_scale_tl } + } \cs_new:Nn \__fontspec_set_font_dimen:NnN - { - \dim_set:Nn #1 { \fontdimen #2 #3 } - \dim_compare:nNnT #1 = {0pt} - { - \settoheight #1 - { - \str_if_eq:nnTF {#3} {\font} \rmfamily #3 - \int_case:nnF #2 - { - {5} {x} % x-height - {8} {X} % cap-height - } {?} % "else" clause; never reached. - } - } - } + { + \dim_set:Nn #1 { \fontdimen #2 #3 } + \dim_compare:nNnT #1 = {0pt} + { + \settoheight #1 + { + \str_if_eq:nnTF {#3} {\font} \rmfamily #3 + \int_case:nnF #2 + { + {5} {x} % x-height + {8} {X} % cap-height + } {?} % "else" clause; never reached. + } + } + } \__fontspec_keys_define_code:nnn {fontspec} {WordSpace} - { - \bool_if:NF \l__fontspec_firsttime_bool - { \_fontspec_parse_wordspace:w #1,,,\q_stop } - } + { + \bool_if:NF \l__fontspec_firsttime_bool + { \_fontspec_parse_wordspace:w #1,,,\q_stop } + } \__fontspec_aff_error:n {WordSpace} \cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop - { - \tl_if_empty:nTF {#4} - { - \tl_set:Nn \l__fontspec_wordspace_adjust_tl - { - \fontdimen 2 \font = #1 \fontdimen 2 \font - \fontdimen 3 \font = #1 \fontdimen 3 \font - \fontdimen 4 \font = #1 \fontdimen 4 \font - } - } - { - \tl_set:Nn \l__fontspec_wordspace_adjust_tl - { - \fontdimen 2 \font = #1 \fontdimen 2 \font - \fontdimen 3 \font = #2 \fontdimen 3 \font - \fontdimen 4 \font = #3 \fontdimen 4 \font - } - } - } + { + \tl_if_empty:nTF {#4} + { + \tl_set:Nn \l__fontspec_wordspace_adjust_tl + { + \fontdimen 2 \font = #1 \fontdimen 2 \font + \fontdimen 3 \font = #1 \fontdimen 3 \font + \fontdimen 4 \font = #1 \fontdimen 4 \font + } + } + { + \tl_set:Nn \l__fontspec_wordspace_adjust_tl + { + \fontdimen 2 \font = #1 \fontdimen 2 \font + \fontdimen 3 \font = #2 \fontdimen 3 \font + \fontdimen 4 \font = #3 \fontdimen 4 \font + } + } + } \__fontspec_keys_define_code:nnn {fontspec} {PunctuationSpace} - { - \str_case_x:nnF {#1} - { - {WordSpace} - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = 0 \fontdimen 2 \font } - } - {TwiceWordSpace} - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = 1 \fontdimen 2 \font } - } - } - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = #1 \fontdimen 7 \font } - } - } + { + \str_case_e:nnF {#1} + { + {WordSpace} + { + \tl_set:Nn \l__fontspec_punctspace_adjust_tl + { \fontdimen 7 \font = 0 \fontdimen 2 \font } + } + {TwiceWordSpace} + { + \tl_set:Nn \l__fontspec_punctspace_adjust_tl + { \fontdimen 7 \font = 1 \fontdimen 2 \font } + } + } + { + \tl_set:Nn \l__fontspec_punctspace_adjust_tl + { \fontdimen 7 \font = #1 \fontdimen 7 \font } + } + } \__fontspec_aff_error:n {PunctuationSpace} \__fontspec_keys_define_code:nnn {fontspec} {FontAdjustment} - { - \tl_put_right:Nx \l__fontspec_postadjust_tl {#1} - } + { + \tl_put_right:Nx \l__fontspec_postadjust_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec} {LetterSpace} - { - \__fontspec_update_featstr:n {letterspace=#1} - } + { + \__fontspec_update_featstr:n {letterspace=#1} + } \__fontspec_keys_define_code:nnn {fontspec} {HyphenChar} - { - \str_if_eq:nnTF {#1} {None} - { - \tl_put_right:Nn \l__fontspec_postadjust_tl - { \__fontspec_primitive_font_set_hyphenchar:Nn \font {-1} } - } - { - \__fontspec_warning:nx {only-xetex-feature} {HyphenChar} + { + \str_if_eq:nnTF {#1} {None} + { + \tl_put_right:Nn \l__fontspec_postadjust_tl + { \__fontspec_primitive_font_set_hyphenchar:Nn \font {-1} } + } + { + \__fontspec_warning:nx {only-xetex-feature} {HyphenChar} - \tl_if_single:nTF {#1} - { \tl_set:Nn \l_fontspec_hyphenchar_tl {`#1} } - { \tl_set:Nn \l_fontspec_hyphenchar_tl { #1} } + \tl_if_single:nTF {#1} + { \tl_set:Nn \l__fontspec_hyphenchar_tl {`#1} } + { \tl_set:Nn \l__fontspec_hyphenchar_tl { #1} } - \__fontspec_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l_fontspec_hyphenchar_tl} - { - \tl_put_right:Nn \l__fontspec_postadjust_tl - { \__fontspec_primitive_font_set_hyphenchar:Nn \font { \l_fontspec_hyphenchar_tl } } - } - { \__fontspec_error:nx {no-glyph}{#1} } + \__fontspec_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l__fontspec_hyphenchar_tl} + { + \tl_put_right:Nn \l__fontspec_postadjust_tl + { \__fontspec_primitive_font_set_hyphenchar:Nn \font { \l__fontspec_hyphenchar_tl } } + } + { \__fontspec_error:nx {no-glyph}{#1} } - } - } + } + } \__fontspec_aff_error:n {HyphenChar} \__fontspec_keys_define_code:nnn {fontspec} {Color} - { - \cs_if_exist:cTF { \token_to_str:N \color@ #1 } - { - \convertcolorspec{named}{#1}{HTML}\l__fontspec_hexcol_tl - } - { - \int_compare:nTF { \tl_count:n {#1} == 6 } - { \tl_set:Nn \l__fontspec_hexcol_tl {#1} } - { - \int_compare:nTF { \tl_count:n {#1} == 8 } - { \fontspec_parse_colour:viii #1 } - { - \bool_if:NF \l__fontspec_firsttime_bool - { \__fontspec_warning:nx {bad-colour} {#1} } - } - } - } - } + { + \cs_if_exist:cTF { \token_to_str:N \color@ #1 } + { + \convertcolorspec{named}{#1}{HTML}\l__fontspec_hexcol_tl + } + { + \int_compare:nTF { \tl_count:n {#1} == 6 } + { \tl_set:Nn \l__fontspec_hexcol_tl {#1} } + { + \int_compare:nTF { \tl_count:n {#1} == 8 } + { \fontspec_parse_colour:viii #1 } + { + \bool_if:NF \l__fontspec_firsttime_bool + { \__fontspec_warning:nx {bad-colour} {#1} } + } + } + } + } \cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8 - { - \tl_set:Nn \l__fontspec_hexcol_tl {#1#2#3#4#5#6} - \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl - { - \bool_if:NF \l__fontspec_firsttime_bool - { \__fontspec_warning:nx {opa-twice-col} {#7#8} } - } - \tl_set:Nn \l__fontspec_opacity_tl {#7#8} - } + { + \tl_set:Nn \l__fontspec_hexcol_tl {#1#2#3#4#5#6} + \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl + { + \bool_if:NF \l__fontspec_firsttime_bool + { \__fontspec_warning:nx {opa-twice-col} {#7#8} } + } + \tl_set:Nn \l__fontspec_opacity_tl {#7#8} + } \aliasfontfeature{Color}{Colour} \__fontspec_keys_define_code:nnn {fontspec} {Opacity} - { - \int_set:Nn \l__fontspec_tmp_int {255} - \__fontspec_int_mult_truncate:Nn \l__fontspec_tmp_int { #1 } - \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl - { - \bool_if:NF \l__fontspec_firsttime_bool - { \__fontspec_warning:nx {opa-twice} {#1} } - } - \tl_set:Nx \l__fontspec_opacity_tl - { - \int_compare:nT { \l__fontspec_tmp_int <= "F } {0} % zero pad - \int_to_hex:n { \l__fontspec_tmp_int } - } - } + { + \int_set:Nn \l__fontspec_tmp_int {255} + \__fontspec_int_mult_truncate:Nn \l__fontspec_tmp_int { #1 } + \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl + { + \bool_if:NF \l__fontspec_firsttime_bool + { \__fontspec_warning:nx {opa-twice} {#1} } + } + \tl_set:Nx \l__fontspec_opacity_tl + { + \int_compare:nT { \l__fontspec_tmp_int <= "F } {0} % zero pad + \int_to_hex:n { \l__fontspec_tmp_int } + } + } \__fontspec_keys_define_code:nnn {fontspec-opentype} {Mapping} - { - \str_if_eq:nnTF {#1} {tex-text} - { - \__fontspec_warning:n {no-mapping-ligtex} - \msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none} - \keys_set:nn {fontspec-opentype} { Ligatures=TeX } - } - { \__fontspec_warning:n {no-mapping} } - } + { + \str_if_eq:nnTF {#1} {tex-text} + { + \__fontspec_warning:n {no-mapping-ligtex} + \msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none} + \keys_set:nn {fontspec-opentype} { Ligatures=TeX } + } + { \__fontspec_warning:n {no-mapping} } + } \__fontspec_keys_define_code:nnn {fontspec} {Weight} - { - \__fontspec_update_featstr:n{weight=#1} - } + { + \__fontspec_update_featstr:n{weight=#1} + } \__fontspec_keys_define_code:nnn {fontspec} {Width} - { - \__fontspec_update_featstr:n{width=#1} - } + { + \__fontspec_update_featstr:n{width=#1} + } \__fontspec_keys_define_code:nnn {fontspec} {OpticalSize} - { - \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1} + { + \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1} + } +\keys_define:nn {fontspec} + { + FakeSlant .code:n = + { + \__fontspec_update_featstr:n {slant=#1} + }, + FakeSlant .default:n = {0.2} } \keys_define:nn {fontspec} - { - FakeSlant .code:n = - { - \__fontspec_update_featstr:n{slant=#1} - }, - FakeSlant .default:n = {0.2} -} -\keys_define:nn {fontspec} - { - FakeStretch .code:n = - { - \__fontspec_update_featstr:n{extend=#1} - }, - FakeStretch .default:n = {1.2} -} + { + FakeStretch .code:n = + { + \__fontspec_update_featstr:n {extend=#1} + }, + FakeStretch .default:n = {1.2} + } \keys_define:nn {fontspec} - { - FakeBold .code:n = { \__fontspec_warning:n {fakebold-only-xetex} } - } + { + FakeBold .code:n = { \__fontspec_warning:n {fakebold-only-xetex} } + } \keys_define:nn {fontspec} - { - AutoFakeSlant .code:n = - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_set:Nn \l__fontspec_fake_slant_tl {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {FakeSlant=#1} - \tl_set_eq:NN \l__fontspec_fontname_it_tl \l_fontspec_fontname_tl - \bool_set_false:N \l__fontspec_noit_bool - - \tl_if_empty:NF \l__fontspec_fake_embolden_tl - { - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist - {FakeBold=\l__fontspec_fake_embolden_tl} - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=#1} - \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl - } - } - }, - AutoFakeSlant .default:n = {0.2} -} + { + AutoFakeSlant .code:n = + { + \bool_if:NT \l__fontspec_firsttime_bool + { + \tl_set:Nn \l__fontspec_fake_slant_tl {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {FakeSlant=#1} + \tl_set_eq:NN \l__fontspec_fontname_it_tl \l_fontspec_fontname_tl + \bool_set_false:N \l__fontspec_noit_bool + + \tl_if_empty:NF \l__fontspec_fake_embolden_tl + { + \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist + {FakeBold=\l__fontspec_fake_embolden_tl} + \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=#1} + \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl + } + } + }, + AutoFakeSlant .default:n = {0.2} + } \keys_define:nn {fontspec} - { - AutoFakeBold .code:n = - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_set:Nn \l__fontspec_fake_embolden_tl {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {FakeBold=#1} - \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl - \bool_set_false:N \l__fontspec_nobf_bool - - \tl_if_empty:NF \l__fontspec_fake_slant_tl - { - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist - {FakeSlant=\l__fontspec_fake_slant_tl} - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=#1} - \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl - } - } - }, - AutoFakeBold .default:n = {1.5} -} + { + AutoFakeBold .code:n = + { + \bool_if:NT \l__fontspec_firsttime_bool + { + \tl_set:Nn \l__fontspec_fake_embolden_tl {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {FakeBold=#1} + \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl + \bool_set_false:N \l__fontspec_nobf_bool + + \tl_if_empty:NF \l__fontspec_fake_slant_tl + { + \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist + {FakeSlant=\l__fontspec_fake_slant_tl} + \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=#1} + \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl + } + } + }, + AutoFakeBold .default:n = {1.5} + } \__fontspec_keys_define_code:nnn {fontspec-opentype} {RawFeature} - { - \__fontspec_update_featstr:n {#1} - } + { + \__fontspec_update_featstr:n {#1} + } \__fontspec_keys_define_code:nnn {fontspec-aat} {RawFeature} - { - \__fontspec_update_featstr:n {#1} - } + { + \__fontspec_update_featstr:n {#1} + } -%%^^A%% fontspec-feat-opentype.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-feat-opentype.dtx -- part of FONTSPEC \__fontspec_feat_prop_add:nn {salt} { Alternate\,=\,$N$ } \__fontspec_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ } @@ -2669,152 +2683,156 @@ \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal} \__fontspec_define_opentype_feature_group:n {Alternate} \keys_define:nn {fontspec-opentype} - { - Alternate .default:n = {0} , - Alternate / Random .code:n = - { \__fontspec_make_OT_feature:nnn {salt}{ +salt = random }{} } , - Alternate / unknown .code:n = - { - \clist_map_inline:nn {#1} - { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} } - } - } + { + Alternate .default:n = {0} , + Alternate / unknown .code:n = + { + \clist_map_inline:nn {#1} + { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} } + } + } +\keys_define:nn {fontspec-opentype} + { + Alternate / Random .code:n = + { \__fontspec_make_OT_feature:nnn {salt}{ +salt = random }{} } , + } \aliasfontfeature{Alternate}{StylisticAlternates} \__fontspec_define_opentype_feature_group:n {Variant} \keys_define:nn {fontspec-opentype} - { - Variant .default:n = {0} , - Variant / unknown .code:n = - { - \clist_map_inline:nn {#1} + { + Variant .default:n = {0} , + Variant / unknown .code:n = { - \__fontspec_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {} + \clist_map_inline:nn {#1} + { + \__fontspec_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {} + } } - } - } + } \aliasfontfeature{Variant}{StylisticSet} \__fontspec_define_opentype_feature_group:n {CharacterVariant} \use:x - { - \cs_new:Npn \exp_not:N \fontspec_parse_cv:w - ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil - { - \__fontspec_make_OT_feature:xxx - { cv \exp_not:N \two@digits {##1} } { +cv \exp_not:N \two@digits {##1} = ##2 } {} - } - \keys_define:nn {fontspec-opentype} - { - CharacterVariant / unknown .code:n = - { - \clist_map_inline:nn {##1} - { - \exp_not:N \fontspec_parse_cv:w - ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil - } - } - } - } + { + \cs_new:Npn \exp_not:N \fontspec_parse_cv:w + ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil + { + \__fontspec_make_OT_feature:xxx + { cv \exp_not:N \two@digits {##1} } + { +cv \exp_not:N \two@digits {##1} = ##2 } {} + } + \keys_define:nn {fontspec-opentype} + { + CharacterVariant / unknown .code:n = + { + \clist_map_inline:nn {##1} + { + \exp_not:N \fontspec_parse_cv:w + ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil + } + } + } + } \__fontspec_define_opentype_feature_group:n {Annotation} \keys_define:nn {fontspec-opentype} - { - Annotation .default:n = {0} , - Annotation / unknown .code:n = - { - \__fontspec_make_OT_feature:nnn {nalt} {+nalt=#1} {} - } - } + { + Annotation .default:n = {0} , + Annotation / unknown .code:n = + { + \__fontspec_make_OT_feature:nnn {nalt} {+nalt=#1} {} + } + } \__fontspec_define_opentype_feature_group:n {Ornament} \keys_define:nn {fontspec-opentype} - { - Ornament .default:n = {0} , - Ornament / unknown .code:n = - { - \__fontspec_make_OT_feature:nnn {ornm} { +ornm=#1 } {} - } - } + { + Ornament .default:n = {0} , + Ornament / unknown .code:n = + { + \__fontspec_make_OT_feature:nnn {ornm} { +ornm=#1 } {} + } + } \keys_define:nn { fontspec-opentype } { Script .choice: } \cs_new:Nn \fontspec_new_script:nn - { - \keys_define:nn { fontspec-opentype } { Script / #1 .code:n = - \bool_set_false:N \l__fontspec_script_exist_bool - \clist_map_inline:nn {#2} - { - \__fontspec_check_script:NnTF \l_fontspec_font {####1} - { - \tl_set:Nn \l_fontspec_script_tl {####1} - \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} - \bool_set_true:N \l__fontspec_script_exist_bool - \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 } - \clist_map_break: - } - { } - } - \bool_if:NF \l__fontspec_script_exist_bool - { - \str_if_eq:nnTF {#1} {Latin} - { - \__fontspec_warning:nx {script-not-exist} {#1} - } - { - \__fontspec_check_script:NnTF \l_fontspec_font {latn} - { - \__fontspec_warning:nx {script-not-exist-latn} {#1} - \tl_set:Nn \l_fontspec_script_tl {latn} - \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} - } - { - \__fontspec_warning:nx {script-not-exist} {#1} - } - } - } - } - } + { + \keys_define:nn { fontspec-opentype } { Script / #1 .code:n = + \bool_set_false:N \l__fontspec_script_exist_bool + \clist_map_inline:nn {#2} + { + \__fontspec_check_script:NnTF \l_fontspec_font {####1} + { + \tl_set:Nn \l_fontspec_script_tl {####1} + \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} + \bool_set_true:N \l__fontspec_script_exist_bool + \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 } + \clist_map_break: + } + { } + } + \bool_if:NF \l__fontspec_script_exist_bool + { + \str_if_eq:nnTF {#1} {Latin} + { + \__fontspec_warning:nx {script-not-exist} {#1} + } + { + \__fontspec_check_script:NnTF \l_fontspec_font {latn} + { + \__fontspec_warning:nx {script-not-exist-latn} {#1} + \tl_set:Nn \l_fontspec_script_tl {latn} + \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} + } + { + \__fontspec_warning:nx {script-not-exist} {#1} + } + } + } + } + } \keys_define:nn { fontspec-opentype } { Language .choice: } \cs_new:Nn \fontspec_new_lang:nn - { - \keys_define:nn { fontspec-opentype } { Language / #1 .code:n = - \__fontspec_check_lang:NnTF \l_fontspec_font {#2} - { - \tl_set:Nn \l_fontspec_lang_tl {#2} - \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} - \tl_gset:Nx \g__fontspec_single_feat_tl { language=#2 } - } - { - \__fontspec_warning:nx {language-not-exist} {#1} - \keys_set:nn { fontspec-opentype } { Language = Default } - } + { + \keys_define:nn { fontspec-opentype } { Language / #1 .code:n = + \__fontspec_check_lang:NnTF \l_fontspec_font {#2} + { + \tl_set:Nn \l_fontspec_lang_tl {#2} + \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} + \tl_gset:Nx \g__fontspec_single_feat_tl { language=#2 } + } + { + \__fontspec_warning:nx {language-not-exist} {#1} + \keys_set:nn { fontspec-opentype } { Language = Default } + } + } } - } \__fontspec_keys_define_code:nnn {fontspec-opentype}{ Language / Default } - { - \tl_set:Nn \l_fontspec_lang_tl {DFLT} - \int_zero:N \l__fontspec_language_int - \tl_gset:Nn \g__fontspec_single_feat_tl { language=DFLT } - } + { + \tl_set:Nn \l_fontspec_lang_tl {DFLT} + \int_zero:N \l__fontspec_language_int + \tl_gset:Nn \g__fontspec_single_feat_tl { language=DFLT } + } \keys_define:nn {fontspec-opentype} - { - Language / Turkish .code:n = - { - \__fontspec_check_lang:NnTF \l_fontspec_font {TRK} - { - \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} - \tl_set:Nn \l_fontspec_lang_tl {TRK} - \tl_gset:Nn \g__fontspec_single_feat_tl { language=TRK } - } - { - \__fontspec_check_lang:NnTF \l_fontspec_font {TUR} - { - \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} - \tl_set:Nn \l_fontspec_lang_tl {TUR} - \tl_gset:Nn \g__fontspec_single_feat_tl { language=TUR } - } - { - \__fontspec_warning:nx {language-not-exist} {Turkish} - \keys_set:nn {fontspec-opentype} {Language=Default} - } - } - } - } + { + Language / Turkish .code:n = + { + \__fontspec_check_lang:NnTF \l_fontspec_font {TRK} + { + \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} + \tl_set:Nn \l_fontspec_lang_tl {TRK} + \tl_gset:Nn \g__fontspec_single_feat_tl { language=TRK } + } + { + \__fontspec_check_lang:NnTF \l_fontspec_font {TUR} + { + \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} + \tl_set:Nn \l_fontspec_lang_tl {TUR} + \tl_gset:Nn \g__fontspec_single_feat_tl { language=TUR } + } + { + \__fontspec_warning:nx {language-not-exist} {Turkish} + \keys_set:nn {fontspec-opentype} {Language=Default} + } + } + } + } \cs_new:Nn \__fontspec_ot_compat:nn { \aliasfontfeatureoption {#1} {#2Off} {No#2} @@ -2837,7 +2855,7 @@ \__fontspec_ot_compat:nn {Diacritics} {AboveBase} \__fontspec_ot_compat:nn {Diacritics} {BelowBase} -%%^^A%% fontspec-scripts.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-scripts.dtx -- part of FONTSPEC \newfontscript{Adlam}{adlm} \newfontscript{Ahom}{ahom} @@ -2984,7 +3002,7 @@ \newfontscript{N'ko}{nko~} \newfontscript{Oriya}{ory2,orya} -%%^^A%% fontspec-lang.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-lang.dtx -- part of FONTSPEC \newfontlanguage{Abaza}{ABA} \newfontlanguage{Abkhazian}{ABK} @@ -3369,10 +3387,10 @@ \newfontlanguage{Zande}{ZND} \newfontlanguage{Zulu}{ZUL} -%%^^A%% fontspec-feat-aat.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-feat-aat.dtx -- part of FONTSPEC -%%^^A%% fontspec-enc.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-enc.dtx -- part of FONTSPEC \providecommand\UnicodeFontFile[2]{"[#1]:#2"} \providecommand\UnicodeFontName[2]{"#1:#2"} @@ -3462,7 +3480,7 @@ { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} } } -%%^^A%% fontspec-math.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-math.dtx -- part of FONTSPEC \@ifpackageloaded{euler} { \bool_gset_true:N \g__fontspec_pkg_euler_loaded_bool } { \bool_gset_false:N \g__fontspec_pkg_euler_loaded_bool } @@ -3533,6 +3551,7 @@ \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3} \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14} \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36} + \renewcommand{\hbar}{{\mathchar"AF\mkern-9mu h}}% TODO: test with other fonts } } \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\updefault @@ -3595,23 +3614,23 @@ } \AtBeginDocument{\fontspec_maybe_setup_maths:} -%%^^A%% fontspec-closing.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-closing.dtx -- part of FONTSPEC \bool_if:NT \g__fontspec_cfg_bool - { - \InputIfFileExists{fontspec.cfg} - {} - {\typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.}} - } + { + \InputIfFileExists{fontspec.cfg} + {} + { \typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.} } + } -%%^^A%% fontspec-xfss.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-xfss.dtx -- part of FONTSPEC \providecommand*\itscdefault{\itdefault\scdefault} \providecommand*\slscdefault{\sldefault\scdefault} \DeclareRobustCommand{\sishape} - { - \not@math@alphabet\sishape\relax - \fontshape{\itscdefault}\selectfont - } + { + \not@math@alphabet\sishape\relax + \fontshape{\itscdefault}\selectfont + } \DeclareTextFontCommand{\textsi}{\sishape} \cs_new:Nn \__fontspec_shape_merge:nn { c__fontspec_shape_#1_#2_tl } \tl_const:cn { \__fontspec_shape_merge:nn \itdefault \scdefault } {\itscdefault} @@ -3642,25 +3661,25 @@ \prg_return_true: \prg_return_false: } \DeclareRobustCommand \itshape - { - \not@math@alphabet\itshape\mathit - \fontspec_merge_shape:n\itdefault - } + { + \not@math@alphabet\itshape\mathit + \fontspec_merge_shape:n\itdefault + } \DeclareRobustCommand \slshape - { - \not@math@alphabet\slshape\relax - \fontspec_merge_shape:n\sldefault - } + { + \not@math@alphabet\slshape\relax + \fontspec_merge_shape:n\sldefault + } \DeclareRobustCommand \scshape - { - \not@math@alphabet\scshape\relax - \fontspec_merge_shape:n\scdefault - } + { + \not@math@alphabet\scshape\relax + \fontspec_merge_shape:n\scdefault + } \DeclareRobustCommand \upshape - { - \not@math@alphabet\upshape\relax - \fontspec_merge_shape:n\updefault - } + { + \not@math@alphabet\upshape\relax + \fontspec_merge_shape:n\updefault + } \cs_new_protected:Npn \emfontdeclare #1 { \prop_gclear:N \g__fontspec_em_prop @@ -3763,33 +3782,33 @@ \strongfontdeclare{ \bfseries } \emfontdeclare{ \emshape, \eminnershape } -%%^^A%% fontspec-patches.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-patches.dtx -- part of FONTSPEC \DeclareRobustCommand{\-} - { - \discretionary - { - \char\ifnum\hyphenchar\font<\z@ - \xlx@defaulthyphenchar - \else - \hyphenchar\font - \fi - }{}{} - } + { + \discretionary + { + \char\ifnum\hyphenchar\font<\z@ + \xlx@defaulthyphenchar + \else + \hyphenchar\font + \fi + }{}{} + } \def\xlx@defaulthyphenchar{`\-} \cs_new:Nn \fontspec_visible_space: - { - \__fontspec_primitive_font_glyph_if_exist:NnTF \font {"2423} - { \char"2423\scan_stop: } - { \fontspec_visible_space_fallback: } - } + { + \__fontspec_primitive_font_glyph_if_exist:NnTF \font {"2423} + { \char"2423\scan_stop: } + { \fontspec_visible_space_fallback: } + } \cs_new:Nn \fontspec_visible_space_fallback: - { { - \usefont{\g_fontspec_encoding_tl}{lmtt}{\f@series}{\f@shape} - \textvisiblespace + { + \usefont{\g_fontspec_encoding_tl}{lmtt}{\f@series}{\f@shape} + \textvisiblespace + } } - } \group_begin: \char_set_catcode_active:n{"20}% \cs_gset:Npn\fontspec_print_visible_spaces:{% @@ -3798,71 +3817,72 @@ }% \group_end: \def\verb - { - \relax\ifmmode\hbox\else\leavevmode\null\fi - \bgroup - \verb@eol@error \let\do\@makeother \dospecials - \verbatim@font\@noligs - \@ifstar\__fontspecsverb\@verb - } + { + \relax\ifmmode\hbox\else\leavevmode\null\fi + \bgroup + \verb@eol@error \let\do\@makeother \dospecials + \verbatim@font\@noligs + \@ifstar\__fontspecsverb\@verb + } \def\__fontspecsverb{\fontspec_print_visible_spaces:\@sverb} \AtBeginDocument - { - \fontspec_patch_verbatim: - \fontspec_patch_moreverb: - \fontspec_patch_fancyvrb: - \fontspec_patch_listings: - } + { + \fontspec_patch_verbatim: + \fontspec_patch_moreverb: + \fontspec_patch_fancyvrb: + \fontspec_patch_listings: + } \cs_set:Npn \fontspec_patch_verbatim: - { - \@ifpackageloaded{verbatim} - { - \cs_set:cpn {verbatim*} - { - \group_begin: \@verbatim \fontspec_print_visible_spaces: \verbatim@start - } - } - { - \cs_set:cpn {verbatim*} - { - \@verbatim \fontspec_print_visible_spaces: \@sxverbatim - } - } + { + \@ifpackageloaded{verbatim} + { + \cs_set:cpn {verbatim*} + { + \group_begin: \@verbatim \fontspec_print_visible_spaces: \verbatim@start + } + } + { + \cs_set:cpn {verbatim*} + { + \@verbatim \fontspec_print_visible_spaces: \@sxverbatim + } + } } \cs_set:Npn \fontspec_patch_moreverb: - { - \@ifpackageloaded{moreverb}{ - \cs_set:cpn {listingcont*} - { - \cs_set:Npn \verbatim@processline - { - \thelisting@line \global\advance\listing@line\c_one - \the\verbatim@line\par - } - \@verbatim \fontspec_print_visible_spaces: \verbatim@start - } - }{} - } + { + \@ifpackageloaded{moreverb} + { + \cs_set:cpn {listingcont*} + { + \cs_set:Npn \verbatim@processline + { + \thelisting@line \global\advance\listing@line1\relax + \the\verbatim@line\par + } + \@verbatim \fontspec_print_visible_spaces: \verbatim@start + } + }{} + } \cs_set:Npn \fontspec_patch_fancyvrb: - { - \@ifpackageloaded{fancyvrb} - { - \cs_set_eq:NN \FancyVerbSpace \fontspec_visible_space: - }{} - } + { + \@ifpackageloaded{fancyvrb} + { + \cs_set_eq:NN \FancyVerbSpace \fontspec_visible_space: + }{} + } \cs_set:Npn \fontspec_patch_listings: - { - \@ifpackageloaded{listings} - { - \cs_set_eq:NN \lst@visiblespace \fontspec_visible_space: - }{} - } + { + \@ifpackageloaded{listings} + { + \cs_set_eq:NN \lst@visiblespace \fontspec_visible_space: + }{} + } \RenewDocumentCommand \oldstylenums {m} - { - { \addfontfeature{Numbers=OldStyle} #1 } - } + { + { \addfontfeature{Numbers=OldStyle} #1 } + } \NewDocumentCommand \liningnums {m} - { - { \addfontfeature{Numbers=Lining} #1 } - } + { + { \addfontfeature{Numbers=Lining} #1 } + } diff --git a/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty b/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty index e9ba96a3392..2620e3def8f 100644 --- a/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty +++ b/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty @@ -6,26 +6,26 @@ %% %% fontspec.dtx (with options: `fontspec,XE') %% fontspec-code-load.dtx (with options: `fontspec,XE') -%% fontspec-vars.dtx (with options: `fontspec,XE') -%% fontspec-msg.dtx (with options: `fontspec,XE') -%% fontspec-opening.dtx (with options: `fontspec,XE') -%% fontspec-fontload.dtx (with options: `fontspec,XE') -%% fontspec-interfaces.dtx (with options: `fontspec,XE') -%% fontspec-user.dtx (with options: `fontspec,XE') -%% fontspec-api.dtx (with options: `fontspec,XE') -%% fontspec-internal.dtx (with options: `fontspec,XE') -%% fontspec-opentype.dtx (with options: `fontspec,XE') -%% fontspec-graphite.dtx (with options: `fontspec,XE') -%% fontspec-keyval.dtx (with options: `fontspec,XE') -%% fontspec-feat-opentype.dtx (with options: `fontspec,XE') -%% fontspec-scripts.dtx (with options: `fontspec,XE') -%% fontspec-lang.dtx (with options: `fontspec,XE') -%% fontspec-feat-aat.dtx (with options: `fontspec,XE') -%% fontspec-enc.dtx (with options: `fontspec,XE') -%% fontspec-math.dtx (with options: `fontspec,XE') -%% fontspec-closing.dtx (with options: `fontspec,XE') -%% fontspec-xfss.dtx (with options: `fontspec,XE') -%% fontspec-patches.dtx (with options: `fontspec,XE') +%% fontspec-code-vars.dtx (with options: `fontspec,XE') +%% fontspec-code-msg.dtx (with options: `fontspec,XE') +%% fontspec-code-opening.dtx (with options: `fontspec,XE') +%% fontspec-code-fontload.dtx (with options: `fontspec,XE') +%% fontspec-code-interfaces.dtx (with options: `fontspec,XE') +%% fontspec-code-user.dtx (with options: `fontspec,XE') +%% fontspec-code-api.dtx (with options: `fontspec,XE') +%% fontspec-code-internal.dtx (with options: `fontspec,XE') +%% fontspec-code-opentype.dtx (with options: `fontspec,XE') +%% fontspec-code-graphite.dtx (with options: `fontspec,XE') +%% fontspec-code-keyval.dtx (with options: `fontspec,XE') +%% fontspec-code-feat-opentype.dtx (with options: `fontspec,XE') +%% fontspec-code-scripts.dtx (with options: `fontspec,XE') +%% fontspec-code-lang.dtx (with options: `fontspec,XE') +%% fontspec-code-feat-aat.dtx (with options: `fontspec,XE') +%% fontspec-code-enc.dtx (with options: `fontspec,XE') +%% fontspec-code-math.dtx (with options: `fontspec,XE') +%% fontspec-code-closing.dtx (with options: `fontspec,XE') +%% fontspec-code-xfss.dtx (with options: `fontspec,XE') +%% fontspec-code-patches.dtx (with options: `fontspec,XE') %% ------------------------------------------------ %% The FONTSPEC package %% ------------------------------------------------ @@ -41,10 +41,10 @@ \RequirePackage{xparse} \ProvidesExplPackage{fontspec-xetex}% - {2018/07/30}{v2.6h}{Font selection for XeLaTeX and LuaLaTeX} + {2019/01/10}{2.6j}{Font selection for XeLaTeX and LuaLaTeX} %%^^A%% fontspec-code-load.dtx -- part of FONTSPEC -%%^^A%% fontspec-vars.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC \bool_new:N \l__fontspec_firsttime_bool \bool_new:N \l__fontspec_nobf_bool \bool_new:N \l__fontspec_noit_bool @@ -67,12 +67,12 @@ \bool_new:N \l__fontspec_disable_defaults_bool \bool_new:N \l__fontspec_alias_bool \bool_new:N \l__fontspec_external_bool -\bool_new:N \l__fontspec_never_check_bool \bool_new:N \l__fontspec_defining_encoding_bool \bool_new:N \l__fontspec_script_exist_bool \bool_new:N \g__fontspec_em_normalise_slant_bool \bool_new:N \l__fontspec_proceed_bool \bool_new:N \l__fontspec_check_feat_bool +\bool_new:N \l__fontspec_never_check_bool \int_new:N \l__fontspec_script_int \int_new:N \l__fontspec_language_int \int_new:N \l__fontspec_strnum_int @@ -158,6 +158,10 @@ \tl_new:N \l__fontspec_emshape_query_tl \tl_new:N \l__fontspec_em_switch_tl \tl_new:N \l__fontspec_em_tmp_tl +\tl_new:N \l__fontspec_strong_tmp_tl +\tl_new:N \l__fontspec_strong_switch_tl +\tl_new:N \l__fontspec_hyphenchar_tl +\tl_new:N \l__fontspec_smcp_shape_tl \tl_new:N \g__fontspec_mathrm_tl \tl_new:N \g__fontspec_bfmathrm_tl \tl_new:N \g__fontspec_mathsf_tl @@ -192,7 +196,7 @@ \tl_new:N \l__fontspec_sffamily_family_tl \tl_new:N \l__fontspec_ttfamily_family_tl -%%^^A%% fontspec-msg.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-msg.dtx -- part of FONTSPEC \cs_new:Npn \__fontspec_error:n { \msg_error:nn {fontspec} } \cs_new:Npn \__fontspec_error:nn { \msg_error:nnn {fontspec} } \cs_new:Npn \__fontspec_error:nx { \msg_error:nnx {fontspec} } @@ -300,6 +304,10 @@ { Option '#2' of font feature '#1' overwritten. } +\__fontspec_msg_new:nnn {fontspec} {ot-tag-too-long} + { + OpenType tag '#1' is too long; script, language, and feature tags must be four characters or fewer. + } \__fontspec_msg_new:nnn {fontspec} {script-not-exist-latn} { Font '\l_fontspec_fontname_tl' does not contain script '#1'.\\ @@ -420,7 +428,7 @@ } \char_set_catcode_ignore:n {32} -%%^^A%% fontspec-opening.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-opening.dtx -- part of FONTSPEC \DeclareOption{cm-default} { \__fontspec_warning:n {cm-default-obsolete} @@ -473,10 +481,10 @@ \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl \AtBeginDocument - { - \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl - \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl - } + { + \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl + \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl + } \bool_if:NT \g__fontspec_euenc_bool { \RequirePackage{xunicode} @@ -508,7 +516,7 @@ \cs_generate_variant:Nn \tl_if_eq:nnT {ox} \cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx} -%%^^A%% fontspec-fontload.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-fontload.dtx -- part of FONTSPEC \cs_set:Npn \__fontspec_primitive_font_set:Nnn #1#2#3 { @@ -520,7 +528,7 @@ } \cs_set:Npn \__fontspec_font_suppress_not_found_error: { - \int_set_eq:NN \xetex_suppressfontnotfounderror:D \c_one + \int_set:Nn \suppressfontnotfounderror {1} } \prg_set_conditional:Nnn \__fontspec_primitive_font_if_null:N {p,TF,T,F} { @@ -541,7 +549,7 @@ } \prg_new_conditional:Nnn \__fontspec_primitive_font_glyph_if_exist:Nn {p,TF,T,F} { - \etex_iffontchar:D #1 #2 \scan_stop: + \tex_iffontchar:D #1 #2 \scan_stop: \prg_return_true: \else: \prg_return_false: @@ -552,7 +560,7 @@ \tex_hyphenchar:D #1 = #2 \scan_stop: } -%%^^A%% fontspec-interfaces.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-interfaces.dtx -- part of FONTSPEC \NewDocumentCommand \fontspec { O{} m O{} } { @@ -666,7 +674,7 @@ \__fontspec_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3} } -%%^^A%% fontspec-user.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-user.dtx -- part of FONTSPEC \cs_new:Nn \__fontspec_main_fontspec:nn { @@ -687,7 +695,7 @@ \exp_not:N \selectfont } } - \str_if_eq_x:nnT {\familydefault} {\rmdefault} + \str_if_eq:eeT {\familydefault} {\rmdefault} { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } \__fontspec_setmainfont_hook:nn {#1} {#2} \normalfont @@ -705,7 +713,7 @@ \exp_not:N \selectfont } } - \str_if_eq_x:nnT {\familydefault} {\sfdefault} + \str_if_eq:eeT {\familydefault} {\sfdefault} { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } \__fontspec_setsansfont_hook:nn {#1} {#2} \normalfont @@ -723,7 +731,7 @@ \exp_not:N \selectfont } } - \str_if_eq_x:nnT {\familydefault} {\ttdefault} + \str_if_eq:eeT {\familydefault} {\ttdefault} { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } \__fontspec_setmonofont_hook:nn {#1} {#2} \normalfont @@ -937,7 +945,7 @@ } } -%%^^A%% fontspec-api.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-api.dtx -- part of FONTSPEC \prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F} { @@ -999,99 +1007,96 @@ } } \prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \__fontspec_iv_str_to_num:Nn \l__fontspec_script_int {#1} - \__fontspec_iv_str_to_num:Nn \l__fontspec_language_int {#2} - \__fontspec_check_ot_feat:NnTF \font {#3} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \__fontspec_check_ot_feat:NnnnTF \font {#3} {#2} {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \__fontspec_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \__fontspec_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-num} \l__fontspec_tmp_tl - \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl} - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l_fontspec_script_tl + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-num} \l__fontspec_tmp_tl + \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl} + \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l_fontspec_script_tl - \__fontspec_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } + \__fontspec_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \tl_set:Nn \l_fontspec_script_tl {#1} - \__fontspec_iv_str_to_num:Nn \l__fontspec_script_int {#1} - \__fontspec_check_lang:NnTF \font {#2} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \__fontspec_check_lang:NnnTF \font {#2} {#1} \prg_return_true: \prg_return_false: + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_tmp_tl - \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl - {\prg_return_true:} {\prg_return_false:} - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_tmp_tl + \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl + {\prg_return_true:} {\prg_return_false:} + } + { \prg_return_false: } + } + { \prg_return_false: } + } \prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-tag} \l__fontspec_tmp_tl - \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl - {\prg_return_true:} {\prg_return_false:} - } - { \prg_return_false: } - } - { \prg_return_false: } - } + { + \fontspec_if_fontspec_font:TF + { + \__fontspec_set_font_type:N \font + \bool_if:NTF \l__fontspec_ot_bool + { + \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-tag} \l__fontspec_tmp_tl + \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl + {\prg_return_true:} {\prg_return_false:} + } + { \prg_return_false: } + } + { \prg_return_false: } + } \cs_new:Nn \fontspec_set_family:Nnn { \tl_set:Nn \l__fontspec_family_label_tl {#1} \__fontspec_select_font_family:nn {#2} {#3} + \tl_clear_new:N #1 \tl_set_eq:NN #1 \l_fontspec_family_tl } \cs_generate_variant:Nn \fontspec_set_family:Nnn {c} @@ -1140,80 +1145,80 @@ { \prg_return_false: } } -%%^^A%% fontspec-internal.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-internal.dtx -- part of FONTSPEC \cs_new_protected:Nn \__fontspec_select_font_family:nn - { - \group_begin: - \__fontspec_font_suppress_not_found_error: - \__fontspec_init: + { + \group_begin: + \__fontspec_font_suppress_not_found_error: + \__fontspec_init: - \__fontspec_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_up_tl {#2} - \__fontspec_sanitise_fontname:Nn \l__fontspec_basename_tl {#2} + \__fontspec_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2} + \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_up_tl {#2} + \__fontspec_sanitise_fontname:Nn \l__fontspec_basename_tl {#2} - \__fontspec_if_detect_external:nT {#2} - { \keys_set:nn {fontspec-preparse-external} {Path} } + \__fontspec_if_detect_external:nT {#2} + { \keys_set:nn {fontspec-preparse-external} {Path} } - \keys_set_known:nn {fontspec-preparse-cfg} {#1} + \keys_set_known:nn {fontspec-preparse-cfg} {#1} - \__fontspec_init_ttc:n {#2} - \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2} + \__fontspec_init_ttc:n {#2} + \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2} - \__fontspec_extract_all_features:n {#1} - \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist } + \__fontspec_extract_all_features:n {#1} + \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist } - \__fontspec_preparse_features: - \__fontspec_load_font: - \__fontspec_set_scriptlang: - \__fontspec_get_features:n {} - \bool_set_false:N \l__fontspec_firsttime_bool + \__fontspec_preparse_features: + \__fontspec_load_font: + \__fontspec_set_scriptlang: + \__fontspec_get_features:n {} + \bool_set_false:N \l__fontspec_firsttime_bool - \__fontspec_save_family_needed:nTF {#2} - { - \__fontspec_save_family:nn {#1} {#2} - } - { - } - \group_end: + \__fontspec_save_family_needed:nTF {#2} + { + \__fontspec_save_family:nn {#1} {#2} + } + { + } + \group_end: - \tl_set_eq:NN \l_fontspec_family_tl \g__fontspec_nfss_family_tl - } + \tl_set_eq:NN \l_fontspec_family_tl \g__fontspec_nfss_family_tl + } \cs_set_eq:NN \fontspec_select:nn \__fontspec_select_font_family:nn %% deprecated, for compatibility only \cs_new:Nn \__fontspec_sanitise_fontname:Nn - { - \tl_set:Nx #1 {#2} - \clist_map_inline:Nn \l__fontspec_extensions_clist - { - \tl_if_in:NnT #1 {##1} - { - \tl_remove_once:Nn #1 {##1} - \tl_set:Nn \l__fontspec_extension_tl {##1} - \clist_map_break: - } - } - } + { + \tl_set:Nx #1 {#2} + \clist_map_inline:Nn \l__fontspec_extensions_clist + { + \tl_if_in:NnT #1 {##1} + { + \tl_remove_once:Nn #1 {##1} + \tl_set:Nn \l__fontspec_extension_tl {##1} + \clist_map_break: + } + } + } \prg_new_conditional:Nnn \__fontspec_if_detect_external:n {T} - { - \clist_map_inline:Nn \l__fontspec_extensions_clist - { - \bool_set_false:N \l__fontspec_tmpa_bool - \exp_args:Nx % <- this should be handled earlier - \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string} - { \bool_set_true:N \l__fontspec_tmpa_bool \clist_map_break: } - } - \bool_if:NTF \l__fontspec_tmpa_bool \prg_return_true: \prg_return_false: - } + { + \clist_map_inline:Nn \l__fontspec_extensions_clist + { + \bool_set_false:N \l__fontspec_tmpa_bool + \exp_args:Nx % <- this should be handled earlier + \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string} + { \bool_set_true:N \l__fontspec_tmpa_bool \clist_map_break: } + } + \bool_if:NTF \l__fontspec_tmpa_bool \prg_return_true: \prg_return_false: + } \cs_new:Nn \__fontspec_init_ttc:n - { - \str_if_eq_x:nnT { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} - { - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bfit_tl {#1} - } - } + { + \str_if_eq:eeT { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} + { + \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1} + \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1} + \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bfit_tl {#1} + } + } \cs_new:Nn \__fontspec_load_external_fontoptions:Nn { \bool_if:NT \l__fontspec_fontcfg_bool @@ -1229,67 +1234,67 @@ } } \cs_new:Nn \__fontspec_extract_all_features:n - { - \bool_if:NTF \l__fontspec_disable_defaults_bool - { - \clist_set:Nx \l__fontspec_all_features_clist {#1} - } - { - \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist - { \clist_clear:N \l__fontspec_fontopts_clist } + { + \bool_if:NTF \l__fontspec_disable_defaults_bool + { + \clist_set:Nx \l__fontspec_all_features_clist {#1} + } + { + \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist + { \clist_clear:N \l__fontspec_fontopts_clist } - \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist - { \clist_clear:N \l__fontspec_family_fontopts_clist } - \tl_clear:N \l__fontspec_family_label_tl + \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist + { \clist_clear:N \l__fontspec_family_fontopts_clist } + \tl_clear:N \l__fontspec_family_label_tl - \clist_set:Nx \l__fontspec_all_features_clist - { - \g__fontspec_default_fontopts_clist, - \l__fontspec_family_fontopts_clist, - \l__fontspec_fontopts_clist, - #1 - } - } - } + \clist_set:Nx \l__fontspec_all_features_clist + { + \g__fontspec_default_fontopts_clist, + \l__fontspec_family_fontopts_clist, + \l__fontspec_fontopts_clist, + #1 + } + } + } \cs_new:Nn \__fontspec_preparse_features: - { + { - \__fontspec_keys_set_known:nxN {fontspec-preparse-external} - { \l__fontspec_all_features_clist } - \l__fontspec_keys_leftover_clist + \__fontspec_keys_set_known:nxN {fontspec-preparse-external} + { \l__fontspec_all_features_clist } + \l__fontspec_keys_leftover_clist - \tl_set_eq:NN \l_fontspec_fontname_tl \l__fontspec_fontname_up_tl - \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_keys_leftover_clist} - \l__fontspec_keys_leftover_clist - \__fontspec_keys_set_known:nxN {fontspec-preparse} {\l__fontspec_keys_leftover_clist} - \l__fontspec_fontfeat_clist - } + \tl_set_eq:NN \l_fontspec_fontname_tl \l__fontspec_fontname_up_tl + \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_keys_leftover_clist} + \l__fontspec_keys_leftover_clist + \__fontspec_keys_set_known:nxN {fontspec-preparse} {\l__fontspec_keys_leftover_clist} + \l__fontspec_fontfeat_clist + } \cs_new:Nn \__fontspec_load_font: - { - \__fontspec_primitive_font_set:Nnn \l_fontspec_font - { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} - \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} } - \__fontspec_set_font_type:N \l_fontspec_font - \__fontspec_primitive_font_gset:Nnn \l_fontspec_font - { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} - \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly - } + { + \__fontspec_primitive_font_set:Nnn \l_fontspec_font + { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} + \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} } + \__fontspec_set_font_type:N \l_fontspec_font + \__fontspec_primitive_font_gset:Nnn \l_fontspec_font + { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} + \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly + } \cs_new:Nn \__fontspec_construct_font_call:nnnnnn - { + { " \__fontspec_fontname_wrap:n { #1 #2 #3 } #4 #5 - \str_if_eq_x:nnF {#6}{} {:#6} " - } + \str_if_eq:eeF {#6}{} {:#6} " + } \cs_new:Nn \__fontspec_construct_font_call:nn - { - \__fontspec_construct_font_call:nnnnnn - {#1} - \l__fontspec_extension_tl - \l__fontspec_ttc_index_tl - \l_fontspec_renderer_tl - \l__fontspec_optical_size_tl - {#2} - } + { + \__fontspec_construct_font_call:nnnnnn + {#1} + \l__fontspec_extension_tl + \l__fontspec_ttc_index_tl + \l_fontspec_renderer_tl + \l__fontspec_optical_size_tl + {#2} + } \cs_new:Nn \__fontspec_font_is_name: { \cs_set_eq:NN \__fontspec_fontname_wrap:n \use:n @@ -1299,59 +1304,58 @@ \cs_set:Npn \__fontspec_fontname_wrap:n ##1 { [ \l__fontspec_font_path_tl ##1 ] } } \cs_new:Nn \__fontspec_set_scriptlang: - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_if_empty:NTF \l__fontspec_script_name_tl - { - \__fontspec_check_script:NnTF \l_fontspec_font {latn} - { - \tl_set:Nn \l__fontspec_script_name_tl {Latin} - \tl_if_empty:NT \l__fontspec_lang_name_tl - { - \tl_set:Nn \l__fontspec_lang_name_tl {Default} - } - \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} - \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} - } - { - \__fontspec_info:n {no-scripts} - } - } - { - \tl_if_empty:NT \l__fontspec_lang_name_tl - { - \tl_set:Nn \l__fontspec_lang_name_tl {Default} - } - \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} - \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} - } - } - } + { + \bool_if:NT \l__fontspec_firsttime_bool + { + \tl_if_empty:NTF \l__fontspec_script_name_tl + { + \__fontspec_check_script:NnTF \l_fontspec_font {latn} + { + \tl_set:Nn \l__fontspec_script_name_tl {Latin} + \tl_if_empty:NT \l__fontspec_lang_name_tl + { + \tl_set:Nn \l__fontspec_lang_name_tl {Default} + } + \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} + \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} + } + { + \__fontspec_info:n {no-scripts} + \bool_set_true:N \l__fontspec_never_check_bool + } + } + { + \tl_if_empty:NT \l__fontspec_lang_name_tl + { + \tl_set:Nn \l__fontspec_lang_name_tl {Default} + } + \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} + \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} + } + } + } \cs_new:Nn \__fontspec_get_features:n - { - \__fontspec_init_fontface: - \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#1} - \l__fontspec_keys_leftover_clist - \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist - \bool_if:NTF \l__fontspec_ot_bool - { - % \tracingall - \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist - % \EROROR - } - { - \bool_if:nT { \l__fontspec_atsui_bool || \l__fontspec_graphite_bool } - { \keys_set:nV {fontspec-aat} \l__fontspec_keys_leftover_clist } - } + { + \__fontspec_init_fontface: + \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#1} + \l__fontspec_keys_leftover_clist + \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist + \bool_if:NTF \l__fontspec_ot_bool + { + \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist + } + { + \bool_if:nT { \l__fontspec_atsui_bool || \l__fontspec_graphite_bool } + { \keys_set:nV {fontspec-aat} \l__fontspec_keys_leftover_clist } + } - \tl_if_empty:NF \l__fontspec_mapping_tl - { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } } + \tl_if_empty:NF \l__fontspec_mapping_tl + { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } } - \str_if_eq_x:nnF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl } - { \c__fontspec_hexcol_tl \c__fontspec_opacity_tl } - { \__fontspec_update_featstr:n { color = \l__fontspec_hexcol_tl\l__fontspec_opacity_tl } } - } + \str_if_eq:eeF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl } + { \c__fontspec_hexcol_tl \c__fontspec_opacity_tl } + { \__fontspec_update_featstr:n { color = \l__fontspec_hexcol_tl\l__fontspec_opacity_tl } } + } \prg_new_conditional:Nnn \__fontspec_save_family_needed:n { TF } { @@ -1398,159 +1402,157 @@ \__fontspec_info:nxx {defining-font} {#1} {#2} } \cs_new:Nn \__fontspec_save_fontinfo:n - { - \prop_new:c {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontname} { #1 } - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {options} { \l__fontspec_all_features_clist } - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontdef} - { - \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} - { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } - } - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-num} \l__fontspec_script_int - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-num} \l__fontspec_language_int - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-tag} \l_fontspec_script_tl - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-tag} \l_fontspec_lang_tl - } + { + \prop_new:c {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} + \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontname} { #1 } + \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {options} { \l__fontspec_all_features_clist } + \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontdef} + { + \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} + { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } + } + \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-num} \l__fontspec_script_int + \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-num} \l__fontspec_language_int + \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-tag} \l_fontspec_script_tl + \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-tag} \l_fontspec_lang_tl + } \cs_new:Nn \__fontspec_find_autofonts: - { - \bool_if:nF {\l__fontspec_noit_bool || \l__fontspec_nobf_bool} - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B} - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I} - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI} - } + { + \bool_if:nF {\l__fontspec_noit_bool || \l__fontspec_nobf_bool} + { + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B} + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I} + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI} + } - \bool_if:NF \l__fontspec_nobf_bool - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B} - } + \bool_if:NF \l__fontspec_nobf_bool + { + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B} + } - \bool_if:NF \l__fontspec_noit_bool - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I} - } + \bool_if:NF \l__fontspec_noit_bool + { + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I} + } - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B} - } + \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B} + } \cs_new:Nn \__fontspec_set_faces: - { - \__fontspec_add_nfssfont:nnnn \mddefault \updefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \updefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist - \__fontspec_add_nfssfont:nnnn \mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist - \__fontspec_add_nfssfont:nnnn \mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist - - \prop_map_inline:Nn \l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn ##2 } - } + { + \__fontspec_add_nfssfont:nnnn \mddefault \updefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist + \__fontspec_add_nfssfont:nnnn \bfdefault \updefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist + \__fontspec_add_nfssfont:nnnn \mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist + \__fontspec_add_nfssfont:nnnn \mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist + \__fontspec_add_nfssfont:nnnn \bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist + \__fontspec_add_nfssfont:nnnn \bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist + + \prop_map_inline:Nn \l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn ##2 } + } \cs_new:Nn \__fontspec_set_faces_aux:nnnnn - { - \fontspec_complete_fontname:Nn \l__fontspec_curr_fontname_tl {#3} - \__fontspec_make_font_shapes:Nnnnn \l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5} - } + { + \fontspec_complete_fontname:Nn \l__fontspec_curr_fontname_tl {#3} + \__fontspec_make_font_shapes:Nnnnn \l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5} + } \cs_new:Nn \fontspec_complete_fontname:Nn - { - \tl_set:Nx #1 {#2} - \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl} - } + { + \tl_set:Nx #1 {#2} + \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl} + } \cs_new:Nn \__fontspec_add_nfssfont:nnnn - { - \tl_set:Nx \l__fontspec_this_font_tl {#3} + { + \tl_set:Nx \l__fontspec_this_font_tl {#3} - \tl_if_empty:xTF {#4} - { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} } - { \__fontspec_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l__fontspec_tmp_tl } + \tl_if_empty:xTF {#4} + { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} } + { \__fontspec_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l__fontspec_tmp_tl } - \tl_if_empty:NF \l__fontspec_this_font_tl - { - \prop_put:Nxx \l__fontspec_nfssfont_prop {#1/#2} - { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} } - } - } + \tl_if_empty:NF \l__fontspec_this_font_tl + { + \prop_put:Nxx \l__fontspec_nfssfont_prop {#1/#2} + { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} } + } + } \cs_new:Nn \__fontspec_set_font_type:N - { - \bool_set_false:N \l__fontspec_tfm_bool - \bool_set_false:N \l__fontspec_atsui_bool - \bool_set_false:N \l__fontspec_ot_bool - \bool_set_false:N \l__fontspec_mm_bool - \bool_set_false:N \l__fontspec_graphite_bool - \ifcase\XeTeXfonttype #1 - \bool_set_true:N \l__fontspec_tfm_bool - \or - \bool_set_true:N \l__fontspec_atsui_bool - \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/AAT} } - \ifnum\XeTeXcountvariations #1 > \c_zero - \bool_set_true:N \l__fontspec_mm_bool - \fi - \or - \bool_set_true:N \l__fontspec_ot_bool - \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/OT} } - \or - \bool_set_true:N \l__fontspec_graphite_bool - \tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/GR} } - \fi - } + { +\bool_set_false:N \l__fontspec_tfm_bool +\bool_set_false:N \l__fontspec_atsui_bool +\bool_set_false:N \l__fontspec_ot_bool +\bool_set_false:N \l__fontspec_mm_bool +\bool_set_false:N \l__fontspec_graphite_bool +\ifcase\XeTeXfonttype #1 +\bool_set_true:N \l__fontspec_tfm_bool +\or +\bool_set_true:N \l__fontspec_atsui_bool +\tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/AAT} } +\ifnum\XeTeXcountvariations #1 > 0\relax +\bool_set_true:N \l__fontspec_mm_bool +\fi +\or +\bool_set_true:N \l__fontspec_ot_bool +\tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/OT} } +\or +\bool_set_true:N \l__fontspec_graphite_bool +\tl_if_empty:NT \l_fontspec_renderer_tl { \tl_set:Nn \l_fontspec_renderer_tl {/GR} } +\fi + } \cs_new:Nn \__fontspec_set_autofont:Nnn - { - \bool_if:NF \l__fontspec_external_bool - { - \tl_if_empty:xF {#2} - { - \tl_if_empty:NT #1 - { - \__fontspec_if_autofont:nnTF {#2} {#3} - { \tl_set:Nx #1 {#2#3} } - { \__fontspec_info:nx {no-font-shape} {#2#3} } - } - } - } - } - + { + \bool_if:NF \l__fontspec_external_bool + { + \tl_if_empty:xF {#2} + { + \tl_if_empty:NT #1 + { + \__fontspec_if_autofont:nnTF {#2} {#3} + { \tl_set:Nx #1 {#2#3} } + { \__fontspec_info:nx {no-font-shape} {#2#3} } + } + } + } + } \prg_new_conditional:Nnn \__fontspec_if_autofont:nn {T,TF} - { - \__fontspec_primitive_font_set:Nnn \l_tmpa_font { \__fontspec_construct_font_call:nn {#1} {} } {\f@size pt} - \__fontspec_primitive_font_set:Nnn \l_tmpb_font { \__fontspec_construct_font_call:nn {#1#2} {} } {\f@size pt} - \str_if_eq_x:nnTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font } - { \prg_return_false: } - { \prg_return_true: } - } + { + \__fontspec_primitive_font_set:Nnn \l_tmpa_font { \__fontspec_construct_font_call:nn {#1} {} } {\f@size pt} + \__fontspec_primitive_font_set:Nnn \l_tmpb_font { \__fontspec_construct_font_call:nn {#1#2} {} } {\f@size pt} + \str_if_eq:eeTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font } + { \prg_return_false: } + { \prg_return_true: } + } \cs_new:Nn \__fontspec_make_font_shapes:Nnnnn - { - \group_begin: - \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l__fontspec_leftover_clist - \__fontspec_load_fontname:n {#1} - \__fontspec_declare_shape:nnxx {#2} {#3} { \l__fontspec_fontopts_clist, \l__fontspec_leftover_clist } {#5} - \group_end: - } - + { + \group_begin: + \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l__fontspec_leftover_clist + \__fontspec_load_fontname:n {#1} + \__fontspec_declare_shape:nnxx {#2} {#3} { \l__fontspec_fontopts_clist, \l__fontspec_leftover_clist } {#5} + \group_end: + } \cs_new:Nn \__fontspec_load_fontname:n - { + { \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#1} \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist - { \clist_clear:N \l__fontspec_fontopts_clist } + { \clist_clear:N \l__fontspec_fontopts_clist } \keys_set_groups:nnV {fontspec/fontname} {getfontname} \l__fontspec_fontopts_clist \__fontspec_primitive_font_set:Nnn \l_fontspec_font { \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} {} } {\f@size pt} \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {#1} } - } + } \keys_define:nn {fontspec/fontname} { Font .tl_set:N = \l_fontspec_fontname_tl , Font .groups:n = {getfontname} , } \cs_new:Nn \__fontspec_declare_shape:nnnn - { - \tl_clear:N \l__fontspec_nfss_tl - \tl_clear:N \l__fontspec_nfss_sc_tl - \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl + { + \tl_clear:N \l__fontspec_nfss_tl + \tl_clear:N \l__fontspec_nfss_sc_tl + \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl - \exp_args:Nx \clist_map_inline:nn {#4} { \__fontspec_setup_single_size:nn {#3} {##1} } + \exp_args:Nx \clist_map_inline:nn {#4} { \__fontspec_setup_single_size:nn {#3} {##1} } - \__fontspec_declare_shapes_normal:nn {#1} {#2} - \__fontspec_declare_shapes_smcaps:nn {#1} {#2} - \__fontspec_declare_shape_slanted:nn {#1} {#2} - \__fontspec_declare_shape_loginfo:nn {#1} {#2} - } + \__fontspec_declare_shapes_normal:nn {#1} {#2} + \__fontspec_declare_shapes_smcaps:nn {#1} {#2} + \__fontspec_declare_shape_slanted:nn {#1} {#2} + \__fontspec_declare_shape_loginfo:nn {#1} {#2} + } \cs_generate_variant:Nn \__fontspec_declare_shape:nnnn {nnxx} \cs_new:Nn \__fontspec_setup_single_size:nn { @@ -1569,38 +1571,38 @@ \clist_set_eq:NN \l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist \bool_if:NF \l__fontspec_nosc_bool - { - \tl_if_empty:NTF \l__fontspec_fontname_sc_tl - { - \__fontspec_make_smallcaps:TF - { - \clist_put_left:Nn \l__fontspec_fontfeat_curr_clist {Letters=SmallCaps} - } - { - \bool_set_true:N \l__fontspec_nosc_bool - } - } - { \__fontspec_load_fontname:n {\l__fontspec_fontname_sc_tl} }% local for each size - } + { + \tl_if_empty:NTF \l__fontspec_fontname_sc_tl + { + \__fontspec_make_smallcaps:TF + { + \clist_put_left:Nn \l__fontspec_fontfeat_curr_clist {Letters=SmallCaps} + } + { + \bool_set_true:N \l__fontspec_nosc_bool + } + } + { \__fontspec_load_fontname:n {\l__fontspec_fontname_sc_tl} }% local for each size + } \bool_if:NF \l__fontspec_nosc_bool - { - \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl - {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist} - } + { + \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl + {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist} + } } \cs_new:Nn \__fontspec_setup_nfss:Nnnn - { + { - \__fontspec_get_features:n { #2 , #3 , #4 } + \__fontspec_get_features:n { #2 , #3 , #4 } - \tl_put_right:Nx #1 - { - <\l__fontspec_size_tl> \l__fontspec_scale_tl - \__fontspec_construct_font_call:nn { \l_fontspec_fontname_tl } - { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } - } - } + \tl_put_right:Nx #1 + { + <\l__fontspec_size_tl> \l__fontspec_scale_tl + \__fontspec_construct_font_call:nn { \l_fontspec_fontname_tl } + { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } + } + } \cs_new:Nn \__fontspec_declare_shapes_normal:nn { \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} @@ -1614,7 +1616,6 @@ { \__fontspec_combo_sc_shape:n {#2} } {\l__fontspec_nfss_sc_tl} {\l__fontspec_postadjust_tl} } } - \cs_new:Nn \__fontspec_combo_sc_shape:n { \tl_if_exist:cTF { \__fontspec_shape_merge:nn {#1} {\scdefault} } @@ -1622,84 +1623,85 @@ { \scdefault } } \cs_new:Nn \__fontspec_DeclareFontShape:nnnnnn - { - \group_begin: - \normalsize - \cs_undefine:c {#1/#2/#3/#4/\f@size} - \group_end: - \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6} - } + { +\group_begin: +\normalsize +\cs_undefine:c {#1/#2/#3/#4/\f@size} +\group_end: +\DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6} + } \cs_generate_variant:Nn \__fontspec_DeclareFontShape:nnnnnn {xxxxxx} \cs_new:Nn \__fontspec_declare_shape_slanted:nn - { - \bool_if:nT - { - \str_if_eq_x_p:nn {#2} {\itdefault} && - !(\str_if_eq_x_p:nn {\itdefault} {\sldefault}) - } - { - \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{#1}{\sldefault} - {<->ssub*\g__fontspec_nfss_family_tl/#1/\itdefault}{\l__fontspec_postadjust_tl} - } - } + { + \bool_if:nT + { + \str_if_eq_p:ee {#2} {\itdefault} && + !(\str_if_eq_p:ee {\itdefault} {\sldefault}) + } + { + \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{#1}{\sldefault} + {<->ssub*\g__fontspec_nfss_family_tl/#1/\itdefault}{\l__fontspec_postadjust_tl} + } + } \cs_new:Nn \__fontspec_declare_shape_loginfo:nn - { - \tl_gput_right:Nx \g__fontspec_defined_shapes_tl - { - \exp_not:n { \\ } - -~ \exp_not:N \str_case:nn {#1/#2} - { - {\mddefault/\updefault} {'normal'~} - {\bfdefault/\updefault} {'bold'~} - {\mddefault/\itdefault} {'italic'~} - {\mddefault/\sldefault} {'slanted'~} - {\bfdefault/\itdefault} {'bold~ italic'~} - {\bfdefault/\sldefault} {'bold~ slanted'~} - } (#1/#2)~ - with~ NFSS~ spec.:~ - \l__fontspec_nfss_tl - \exp_not:n { \\ } - -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} } - { - {\mddefault/\scdefault} {'small~ caps'~} - {\bfdefault/\scdefault} {'bold~ small~ caps'~} - {\mddefault/\itscdefault} {'italic~ small~ caps'~} - {\bfdefault/\itscdefault} {'bold~ italic~ small~ caps'~} - {\mddefault/\slscdefault} {'slanted~ small~ caps'~} - {\bfdefault/\slscdefault} {'bold~ slanted~ small~ caps'~} - }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~ - with~ NFSS~ spec.:~ - \l__fontspec_nfss_sc_tl - \tl_if_empty:fF {\l__fontspec_postadjust_tl} - { - \exp_not:N \\ and~ font~ adjustment~ code: \exp_not:N \\ \l__fontspec_postadjust_tl - } - } - } + { + \tl_gput_right:Nx \g__fontspec_defined_shapes_tl + { + \exp_not:n { \\ } + -~ \exp_not:N \str_case:nn {#1/#2} + { + {\mddefault/\updefault} {'normal'~} + {\bfdefault/\updefault} {'bold'~} + {\mddefault/\itdefault} {'italic'~} + {\mddefault/\sldefault} {'slanted'~} + {\bfdefault/\itdefault} {'bold~ italic'~} + {\bfdefault/\sldefault} {'bold~ slanted'~} + } (#1/#2)~ + with~ NFSS~ spec.:~ + \l__fontspec_nfss_tl + \exp_not:n { \\ } + -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} } + { + {\mddefault/\scdefault} {'small~ caps'~} + {\bfdefault/\scdefault} {'bold~ small~ caps'~} + {\mddefault/\itscdefault} {'italic~ small~ caps'~} + {\bfdefault/\itscdefault} {'bold~ italic~ small~ caps'~} + {\mddefault/\slscdefault} {'slanted~ small~ caps'~} + {\bfdefault/\slscdefault} {'bold~ slanted~ small~ caps'~} + }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~ + with~ NFSS~ spec.:~ + \l__fontspec_nfss_sc_tl + \tl_if_empty:fF {\l__fontspec_postadjust_tl} + { + \exp_not:N \\ and~ font~ adjustment~ code: + \exp_not:N \\ \l__fontspec_postadjust_tl + } + } + } \tl_set:Nn \l__fontspec_pre_feat_sclist - { - \bool_if:NT \l__fontspec_ot_bool - { - \tl_if_empty:NF \l_fontspec_script_tl - { - script = \l_fontspec_script_tl ; - language = \l_fontspec_lang_tl ; - } - } - } + { + \bool_if:NT \l__fontspec_ot_bool + { + \tl_if_empty:NF \l_fontspec_script_tl + { + script = \l_fontspec_script_tl ; + language = \l_fontspec_lang_tl ; + } + } + } \cs_new:Nn \__fontspec_make_ot_smallcaps:TF - { - \__fontspec_check_ot_feat:NnTF \l_fontspec_font {smcp} {#1} {#2} - } + { + \__fontspec_check_ot_feat:NnTF \l_fontspec_font {smcp} {#1} {#2} + } \cs_new:Nn \__fontspec_make_smallcaps:TF - { - \bool_if:NTF \l__fontspec_ot_bool - { \__fontspec_make_ot_smallcaps:TF {#1} {#2} } - { - \bool_if:NT \l__fontspec_atsui_bool - { \__fontspec_make_AAT_feature_string:NnnTF \l_fontspec_font {3}{3} {#1} {#2} } - } - } + { + \bool_if:NTF \l__fontspec_ot_bool + { \__fontspec_make_ot_smallcaps:TF {#1} {#2} } + { + \bool_if:NT \l__fontspec_atsui_bool + { \__fontspec_make_AAT_feature_string:NnnTF \l_fontspec_font {3}{3} {#1} {#2} } + } + } \cs_new:Nn \__fontspec_update_featstr:n { \bool_if:NF \l__fontspec_firsttime_bool @@ -1716,18 +1718,18 @@ } } \cs_set:Npn \__fontspec_init: - { - \bool_set_false:N \l__fontspec_ot_bool - \bool_set_true:N \l__fontspec_firsttime_bool - \__fontspec_font_is_name: - \tl_clear:N \l__fontspec_font_path_tl - \tl_clear:N \l__fontspec_optical_size_tl - \tl_clear:N \l__fontspec_ttc_index_tl - \tl_clear:N \l_fontspec_renderer_tl - \tl_gclear:N \g__fontspec_defined_shapes_tl - \tl_gclear:N \g__fontspec_curr_series_tl - \tl_gset_eq:NN \g__fontspec_nfss_enc_tl \g_fontspec_encoding_tl - } + { + \bool_set_false:N \l__fontspec_ot_bool + \bool_set_true:N \l__fontspec_firsttime_bool + \__fontspec_font_is_name: + \tl_clear:N \l__fontspec_font_path_tl + \tl_clear:N \l__fontspec_optical_size_tl + \tl_clear:N \l__fontspec_ttc_index_tl + \tl_clear:N \l_fontspec_renderer_tl + \tl_gclear:N \g__fontspec_defined_shapes_tl + \tl_gclear:N \g__fontspec_curr_series_tl + \tl_gset_eq:NN \g__fontspec_nfss_enc_tl \g_fontspec_encoding_tl + } \cs_new:Nn \__fontspec_init_fontface: { \tl_gclear:N \g__fontspec_rawfeatures_sclist @@ -1742,6 +1744,7 @@ { \__fontspec_strip_leading_sign:Nw #1#2 \q_nil } +\cs_generate_variant:Nn \__fontspec_iv_str_to_num:Nn {Nx} \cs_set:Npn \__fontspec_strip_leading_sign:Nw #1#2#3 \q_nil { \bool_if:nTF { \str_if_eq_p:nn {#2} {+} || \str_if_eq_p:nn {#2} {-} } @@ -1749,18 +1752,28 @@ { \__fontspec_iv_str_to_num:w #1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil } } \cs_set:Npn \__fontspec_iv_str_to_num:w #1 \q_nil #2#3#4#5#6 \q_nil - { - \int_set:Nn #1 - { - `#2 * "1000000 - + `#3 * "10000 - + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100 - + \ifx \c_empty_tl #5 32 \else `#5 \fi - } - } + { + \int_compare:nT { \tl_count:n {#6} > 2 } + { \__fontspec_error:nx {ot-tag-too-long} {#2#3#4#5#6} } + + \str_if_eq:eeTF {#2#3#4#5#6} {DFLT} + { + \int_set:Nn #1 {0} + } + { + + \int_set:Nn #1 + { + `#2 * "1000000 + + `#3 * "10000 + + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100 + + \ifx \c_empty_tl #5 32 \else `#5 \fi + } + } + } \cs_generate_variant:Nn \__fontspec_iv_str_to_num:Nn {No} -%%^^A%% fontspec-opentype.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-opentype.dtx -- part of FONTSPEC \cs_new:Nn \__fontspec_define_opentype_feature_group:n { @@ -1800,16 +1813,16 @@ \cs_new:Nn \__fontspec_feat_off:n {#1Off} \cs_new:Nn \__fontspec_feat_reset:n {#1Reset} \cs_new:Nn \__fontspec_define_opentype_onoffreset:nnnnn - { - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_off:n {#2} } {#3} {-#4} {} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {+#4,-#4} - } + { + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5} + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_off:n {#2} } {#3} {-#4} {} + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {+#4,-#4} + } \cs_new:Nn \__fontspec_define_opentype_onreset:nnnnn - { - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {#4} - } + { + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5} + \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {#4} + } \cs_new:Nn \__fontspec_make_OT_feature:nnn { @@ -1842,71 +1855,83 @@ { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } - { - \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#2} - \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts #1 } - \int_zero:N \l_tmpa_int - \bool_set_false:N \l__fontspec_check_bool - \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } - { - \ifnum \XeTeXOTscripttag #1 \l_tmpa_int = \l__fontspec_strnum_int - \bool_set_true:N \l__fontspec_check_bool - \int_set:Nn \l_tmpa_int {\l_tmpb_int} - \else - \int_incr:N \l_tmpa_int - \fi - } - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } - } + { + \__fontspec_iv_str_to_num:Nx \l__fontspec_strnum_int {#2} + \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts #1 } + \int_zero:N \l_tmpa_int + \bool_set_false:N \l__fontspec_check_bool + \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } + { + \ifnum \XeTeXOTscripttag #1 \l_tmpa_int = \l__fontspec_strnum_int + \bool_set_true:N \l__fontspec_check_bool + \int_set:Nn \l_tmpa_int {\l_tmpb_int} + \else + \int_incr:N \l_tmpa_int + \fi + } + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + } + } \prg_new_conditional:Nnn \__fontspec_check_lang:Nn {TF} + { + \__fontspec_check_lang:NnnTF #1 {#2} {\l_fontspec_script_tl} {\prg_return_true:} {\prg_return_false:} + } +\prg_new_conditional:Nnn \__fontspec_check_lang:Nnn {TF} { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } - { - \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#2} - \int_set:Nn \l_tmpb_int - { \XeTeXOTcountlanguages #1 \l__fontspec_script_int } - \int_zero:N \l_tmpa_int - \bool_set_false:N \l__fontspec_check_bool - \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } - { - \ifnum\XeTeXOTlanguagetag #1 \l__fontspec_script_int \l_tmpa_int = \l__fontspec_strnum_int - \bool_set_true:N \l__fontspec_check_bool - \int_set:Nn \l_tmpa_int {\l_tmpb_int} - \else - \int_incr:N \l_tmpa_int - \fi - } - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } + { + \__fontspec_iv_str_to_num:Nx \l__fontspec_strnum_int {#2} + \__fontspec_iv_str_to_num:Nx \l__fontspec_script_int {#3} + \int_set:Nn \l_tmpb_int + { \XeTeXOTcountlanguages #1 \l__fontspec_script_int } + \int_zero:N \l_tmpa_int + \bool_set_false:N \l__fontspec_check_bool + \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } + { + \ifnum\XeTeXOTlanguagetag #1 \l__fontspec_script_int \l_tmpa_int = \l__fontspec_strnum_int + \bool_set_true:N \l__fontspec_check_bool + \int_set:Nn \l_tmpa_int {\l_tmpb_int} + \else + \int_incr:N \l_tmpa_int + \fi + } + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + } } \prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nn {TF,F} + { + \__fontspec_check_ot_feat:NnnnTF #1 {#2} {\l_fontspec_lang_tl} {\l_fontspec_script_tl} + {\prg_return_true:} {\prg_return_false:} + } +\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,F} { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } - { - \int_set:Nn \l_tmpb_int - { - \XeTeXOTcountfeatures #1 - \l__fontspec_script_int - \l__fontspec_language_int - } - \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#2} - \int_zero:N \l_tmpa_int - \bool_set_false:N \l__fontspec_check_bool - \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } - { - \ifnum\XeTeXOTfeaturetag #1 \l__fontspec_script_int \l__fontspec_language_int - \l_tmpa_int =\l__fontspec_strnum_int - \bool_set_true:N \l__fontspec_check_bool - \int_set:Nn \l_tmpa_int {\l_tmpb_int} - \else - \int_incr:N \l_tmpa_int - \fi - } - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } + { + \__fontspec_iv_str_to_num:Nx \l__fontspec_strnum_int {#2} + \__fontspec_iv_str_to_num:Nx \l__fontspec_language_int {#3} + \__fontspec_iv_str_to_num:Nx \l__fontspec_script_int {#4} + \int_set:Nn \l_tmpb_int + { + \XeTeXOTcountfeatures #1 + \l__fontspec_script_int + \l__fontspec_language_int + } + \int_zero:N \l_tmpa_int + \bool_set_false:N \l__fontspec_check_bool + \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } + { + \ifnum\XeTeXOTfeaturetag #1 \l__fontspec_script_int \l__fontspec_language_int + \l_tmpa_int =\l__fontspec_strnum_int + \bool_set_true:N \l__fontspec_check_bool + \int_set:Nn \l_tmpa_int {\l_tmpb_int} + \else + \int_incr:N \l_tmpa_int + \fi + } + \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: + } } \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {aalt}{Access~All~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvf}{Above-base~Forms} @@ -2031,64 +2056,69 @@ \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {zero}{Slashed~Zero} -%%^^A%% fontspec-graphite.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-graphite.dtx -- part of FONTSPEC \cs_new:Nn \__fontspec_define_aat_feature_group:n - { \keys_define:nn {fontspec-aat} { #1 .multichoice: } } + { + \keys_define:nn {fontspec-aat} { #1 .multichoice: } + } \cs_new:Nn \__fontspec_define_aat_feature:nnnn - { - \keys_define:nn {fontspec-aat} - { - #1/#2 .code:n = { \__fontspec_make_AAT_feature:nn {#3}{#4} } - } - } + { + \keys_define:nn {fontspec-aat} + { + #1/#2 .code:n = { \__fontspec_make_AAT_feature:nn {#3}{#4} } + } + } \cs_new:Nn \__fontspec_make_AAT_feature:nn - { - \tl_if_empty:nTF {#1} - { \__fontspec_warning:n {aat-feature-not-exist} } - { - \__fontspec_make_AAT_feature_string:NnnTF \l_fontspec_font {#1}{#2} + { + \tl_if_empty:nTF {#1} + { \__fontspec_warning:n {aat-feature-not-exist} } { - \__fontspec_update_featstr:n {\l_fontspec_feature_string_tl} - } - { \__fontspec_warning:nx {aat-feature-not-exist-in-font} {#1,#2} } - } - } + \__fontspec_make_AAT_feature_string:NnnTF \l_fontspec_font {#1}{#2} + { + \__fontspec_update_featstr:n {\l_fontspec_feature_string_tl} + } + { + \__fontspec_warning:nx {aat-feature-not-exist-in-font} {#1,#2} + } + } + } \prg_new_conditional:Nnn \__fontspec_make_AAT_feature_string:Nnn {TF,T,F} - { - \tl_set:Nx \l__fontspec_tmpa_tl { \XeTeXfeaturename #1 #2 } - \tl_if_empty:NTF \l__fontspec_tmpa_tl - { \prg_return_false: } - { - \int_compare:nTF { \XeTeXisexclusivefeature #1 #2 > 0 } - { - \tl_set:Nx \l__fontspec_tmpb_tl {\XeTeXselectorname #1 #2\space #3} - } - { - \int_if_even:nTF {#3} - { - \tl_set:Nx \l__fontspec_tmpb_tl {\XeTeXselectorname #1 #2\space #3} - } - { - \tl_set:Nx \l__fontspec_tmpb_tl - { - \XeTeXselectorname #1 #2\space \numexpr#3-1\relax - } - \tl_if_empty:NF \l__fontspec_tmpb_tl { \tl_put_left:Nn \l__fontspec_tmpb_tl {!} } - } - } - \tl_if_empty:NTF \l__fontspec_tmpb_tl - { \prg_return_false: } - { - \tl_set:Nx \l_fontspec_feature_string_tl { \l__fontspec_tmpa_tl = \l__fontspec_tmpb_tl } - \prg_return_true: + { + \tl_set:Nx \l__fontspec_tmpa_tl { \XeTeXfeaturename #1 #2 } + \tl_if_empty:NTF \l__fontspec_tmpa_tl + { \prg_return_false: } + { + \int_compare:nTF { \XeTeXisexclusivefeature #1 #2 > 0 } + { + \tl_set:Nx \l__fontspec_tmpb_tl {\XeTeXselectorname #1 #2\space #3} + } + { + \int_if_even:nTF {#3} + { + \tl_set:Nx \l__fontspec_tmpb_tl {\XeTeXselectorname #1 #2\space #3} + } + { + \tl_set:Nx \l__fontspec_tmpb_tl + { + \XeTeXselectorname #1 #2\space \numexpr#3-1\relax + } + \tl_if_empty:NF \l__fontspec_tmpb_tl { \tl_put_left:Nn \l__fontspec_tmpb_tl {!} } + } + } + + \tl_if_empty:NTF \l__fontspec_tmpb_tl + { \prg_return_false: } + { + \tl_set:Nx \l_fontspec_feature_string_tl { \l__fontspec_tmpa_tl = \l__fontspec_tmpb_tl } + \prg_return_true: + } } - } - } + } -%%^^A%% fontspec-keyval.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-keyval.dtx -- part of FONTSPEC \clist_gset:Nn \g__fontspec_all_keyval_modules_clist { @@ -2114,63 +2144,64 @@ \bool_set_false:N \l__fontspec_fontcfg_bool } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Path} - { - \bool_set_true:N \l__fontspec_nobf_bool - \bool_set_true:N \l__fontspec_noit_bool - \bool_set_true:N \l__fontspec_external_bool - \tl_set:Nn \l__fontspec_font_path_tl {#1} - \__fontspec_font_is_file: - \keys_set:nn {fontspec-renderer} {Renderer=OpenType} - } + { + \bool_set_true:N \l__fontspec_nobf_bool + \bool_set_true:N \l__fontspec_noit_bool + \bool_set_true:N \l__fontspec_external_bool + \tl_set:Nn \l__fontspec_font_path_tl {#1} + \__fontspec_font_is_file: + \keys_set:nn {fontspec-renderer} {Renderer=OpenType} + } \aliasfontfeature{Path}{ExternalLocation} \__fontspec_keys_define_code:nnn {fontspec} {Path} {} \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Extension} - { - \tl_set:Nn \l__fontspec_extension_tl {#1} - \bool_if:NF \l__fontspec_external_bool - { - \keys_set:nn {fontspec-preparse-external} {Path} - } - } + { + \tl_set:Nn \l__fontspec_extension_tl {#1} + \bool_if:NF \l__fontspec_external_bool + { + \keys_set:nn {fontspec-preparse-external} {Path} + } + } \tl_clear:N \l__fontspec_extension_tl \__fontspec_keys_define_code:nnn {fontspec} {Extension} {} \keys_define:nn {fontspec-renderer} - { - Renderer .choices:nn = - {AAT,ICU,OpenType,Graphite,Full,Basic} - { - \int_compare:nTF {\l_keys_choice_int <= 4} { - \tl_set:Nx \l_fontspec_renderer_tl - { - \int_case:nn \l_keys_choice_int { 1 {/AAT} 2 {/OT} 3 {/OT} 4 {/GR} } - } - \tl_gset:Nx \g__fontspec_single_feat_tl { \l_fontspec_renderer_tl } - } - { - \__fontspec_warning:nx {only-luatex-feature} {Renderer=Full/Basic} - } - } - } + { + Renderer .choices:nn = + {AAT,ICU,OpenType,Graphite,Full,Basic} + { + \int_compare:nTF {\l_keys_choice_int <= 4} + { + \tl_set:Nx \l_fontspec_renderer_tl + { + \int_case:nn \l_keys_choice_int { 1 {/AAT} 2 {/OT} 3 {/OT} 4 {/GR} } + } + \tl_gset:Nx \g__fontspec_single_feat_tl { \l_fontspec_renderer_tl } + } + { + \__fontspec_warning:nx {only-luatex-feature} {Renderer=Full/Basic} + } + } + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {Script} - { + { \keys_set:nn {fontspec-renderer} {Renderer=OpenType} - \tl_set:Nn \l__fontspec_script_name_tl {#1} - } + \tl_set:Nn \l__fontspec_script_name_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {Language} - { + { \keys_set:nn {fontspec-renderer} {Renderer=OpenType} - \tl_set:Nn \l__fontspec_lang_name_tl {#1} - } + \tl_set:Nn \l__fontspec_lang_name_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex} - { - \str_if_eq_x:nnF { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} - { \__fontspec_warning:n {font-index-needs-ttc} } + { + \str_if_eq:eeF { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} + { \__fontspec_warning:n {font-index-needs-ttc} } \tl_set:Nn \l__fontspec_ttc_index_tl {:#1} - } + } \__fontspec_keys_define_code:nnn {fontspec} {FontIndex} - { + { \tl_set:Nn \l__fontspec_ttc_index_tl {:#1} - } + } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont} { \fontspec_complete_fontname:Nn \l__fontspec_fontname_up_tl {#1} @@ -2236,76 +2267,76 @@ } } \__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_up_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_up_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_bf_clist {#1} + { + \clist_set:Nn \l__fontspec_fontfeat_bf_clist {#1} - } + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_it_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_it_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_bfit_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_bfit_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_sl_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_sl_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures} - { - \clist_set:Nn \l__fontspec_fontfeat_bfsl_clist {#1} - } + { + \clist_set:Nn \l__fontspec_fontfeat_bfsl_clist {#1} + } \__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures} - { - \bool_if:NF \l__fontspec_firsttime_bool - { - \clist_set:Nn \l__fontspec_fontfeat_sc_clist {#1} - } - } + { + \bool_if:NF \l__fontspec_firsttime_bool + { + \clist_set:Nn \l__fontspec_fontfeat_sc_clist {#1} + } + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures} - { - \clist_set:Nn \l__fontspec_sizefeat_clist {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_up_clist { SizeFeatures = {#1} } - } + { + \clist_set:Nn \l__fontspec_sizefeat_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_up_clist { SizeFeatures = {#1} } + } \__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures} - { - \clist_set:Nn \l__fontspec_sizefeat_clist {#1} - \tl_if_empty:NT \l__fontspec_this_font_tl - { \tl_set:Nn \l__fontspec_this_font_tl { -- } } % needs to be non-empty as a flag - } + { + \clist_set:Nn \l__fontspec_sizefeat_clist {#1} + \tl_if_empty:NT \l__fontspec_this_font_tl + { \tl_set:Nn \l__fontspec_this_font_tl { -- } } % needs to be non-empty as a flag + } \__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {Font} - { - \tl_set:Nn \l__fontspec_this_font_tl {#1} - } + { + \tl_set:Nn \l__fontspec_this_font_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec} {SizeFeatures} - { - % dummy - } + { + % dummy + } \__fontspec_keys_define_code:nnn {fontspec} {Font} - { - % dummy - } + { + % dummy + } \__fontspec_keys_define_code:nnn {fontspec-sizing} {Size} - { - \tl_set:Nn \l__fontspec_size_tl {#1} - } + { + \tl_set:Nn \l__fontspec_size_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec-sizing} {Font} - { - \fontspec_complete_fontname:Nn \l__fontspec_sizedfont_tl {#1} - } + { + \fontspec_complete_fontname:Nn \l__fontspec_sizedfont_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding} - { - \tl_gset:Nx \g__fontspec_nfss_enc_tl { #1 } - } + { + \tl_gset:Nx \g__fontspec_nfss_enc_tl { #1 } + } \__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSFamily} - { - \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 } - } + { + \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 } + } \__fontspec_keys_define_code:nnn {fontspec} {FontFace} { \tl_clear:N \l__fontspec_this_font_tl @@ -2324,175 +2355,177 @@ {\use_i:nnn #1} {\use_ii:nnn #1} {\l__fontspec_this_font_tl} {\l__fontspec_this_feat_clist} } \__fontspec_keys_define_code:nnn {fontspec} {Scale} - { - \str_case:nnF {#1} - { - {MatchLowercase} { \__fontspec_calc_scale:n {5} } - {MatchUppercase} { \__fontspec_calc_scale:n {8} } - } - { \tl_set:Nx \l__fontspec_scale_tl {#1} } - \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] } - } + { + \str_case:nnF {#1} + { + {MatchLowercase} { \__fontspec_calc_scale:n {5} } + {MatchUppercase} { \__fontspec_calc_scale:n {8} } + } + { \tl_set:Nx \l__fontspec_scale_tl {#1} } + \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] } + } \cs_new:Nn \__fontspec_calc_scale:n - { - \group_begin: + { + \group_begin: - \fontencoding { \encodingdefault } - \fontfamily { \rmdefault } - \selectfont + \fontencoding { \encodingdefault } + \fontfamily { \rmdefault } + \selectfont - \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font - \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l_fontspec_font + \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font + \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l_fontspec_font - \tl_gset:Nx \l__fontspec_scale_tl - { - \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} / - \dim_to_fp:n {\l__fontspec_tmpb_dim} } - } + \tl_set:Nx \l__fontspec_scale_tl + { + \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} / + \dim_to_fp:n {\l__fontspec_tmpb_dim} } + } - \__fontspec_info:n {set-scale} - \group_end: - } + \__fontspec_info:n {set-scale} + \exp_args:NNNx + \group_end: + \tl_set:Nx \l__fontspec_scale_tl { \l__fontspec_scale_tl } + } \cs_new:Nn \__fontspec_set_font_dimen:NnN - { - \dim_set:Nn #1 { \fontdimen #2 #3 } - \dim_compare:nNnT #1 = {0pt} - { - \settoheight #1 - { - \str_if_eq:nnTF {#3} {\font} \rmfamily #3 - \int_case:nnF #2 - { - {5} {x} % x-height - {8} {X} % cap-height - } {?} % "else" clause; never reached. - } - } - } + { + \dim_set:Nn #1 { \fontdimen #2 #3 } + \dim_compare:nNnT #1 = {0pt} + { + \settoheight #1 + { + \str_if_eq:nnTF {#3} {\font} \rmfamily #3 + \int_case:nnF #2 + { + {5} {x} % x-height + {8} {X} % cap-height + } {?} % "else" clause; never reached. + } + } + } \__fontspec_keys_define_code:nnn {fontspec} {WordSpace} - { - \bool_if:NF \l__fontspec_firsttime_bool - { \_fontspec_parse_wordspace:w #1,,,\q_stop } - } + { + \bool_if:NF \l__fontspec_firsttime_bool + { \_fontspec_parse_wordspace:w #1,,,\q_stop } + } \__fontspec_aff_error:n {WordSpace} \cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop - { - \tl_if_empty:nTF {#4} - { - \tl_set:Nn \l__fontspec_wordspace_adjust_tl - { - \fontdimen 2 \font = #1 \fontdimen 2 \font - \fontdimen 3 \font = #1 \fontdimen 3 \font - \fontdimen 4 \font = #1 \fontdimen 4 \font - } - } - { - \tl_set:Nn \l__fontspec_wordspace_adjust_tl - { - \fontdimen 2 \font = #1 \fontdimen 2 \font - \fontdimen 3 \font = #2 \fontdimen 3 \font - \fontdimen 4 \font = #3 \fontdimen 4 \font - } - } - } + { + \tl_if_empty:nTF {#4} + { + \tl_set:Nn \l__fontspec_wordspace_adjust_tl + { + \fontdimen 2 \font = #1 \fontdimen 2 \font + \fontdimen 3 \font = #1 \fontdimen 3 \font + \fontdimen 4 \font = #1 \fontdimen 4 \font + } + } + { + \tl_set:Nn \l__fontspec_wordspace_adjust_tl + { + \fontdimen 2 \font = #1 \fontdimen 2 \font + \fontdimen 3 \font = #2 \fontdimen 3 \font + \fontdimen 4 \font = #3 \fontdimen 4 \font + } + } + } \__fontspec_keys_define_code:nnn {fontspec} {PunctuationSpace} - { - \str_case_x:nnF {#1} - { - {WordSpace} - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = 0 \fontdimen 2 \font } - } - {TwiceWordSpace} - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = 1 \fontdimen 2 \font } - } - } - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = #1 \fontdimen 7 \font } - } - } + { + \str_case_e:nnF {#1} + { + {WordSpace} + { + \tl_set:Nn \l__fontspec_punctspace_adjust_tl + { \fontdimen 7 \font = 0 \fontdimen 2 \font } + } + {TwiceWordSpace} + { + \tl_set:Nn \l__fontspec_punctspace_adjust_tl + { \fontdimen 7 \font = 1 \fontdimen 2 \font } + } + } + { + \tl_set:Nn \l__fontspec_punctspace_adjust_tl + { \fontdimen 7 \font = #1 \fontdimen 7 \font } + } + } \__fontspec_aff_error:n {PunctuationSpace} \__fontspec_keys_define_code:nnn {fontspec} {FontAdjustment} - { - \tl_put_right:Nx \l__fontspec_postadjust_tl {#1} - } + { + \tl_put_right:Nx \l__fontspec_postadjust_tl {#1} + } \__fontspec_keys_define_code:nnn {fontspec} {LetterSpace} - { - \__fontspec_update_featstr:n {letterspace=#1} - } + { + \__fontspec_update_featstr:n {letterspace=#1} + } \__fontspec_keys_define_code:nnn {fontspec} {HyphenChar} - { - \str_if_eq:nnTF {#1} {None} - { - \tl_put_right:Nn \l__fontspec_postadjust_tl - { \__fontspec_primitive_font_set_hyphenchar:Nn \font {-1} } - } - { - \__fontspec_warning:nx {only-xetex-feature} {HyphenChar} + { + \str_if_eq:nnTF {#1} {None} + { + \tl_put_right:Nn \l__fontspec_postadjust_tl + { \__fontspec_primitive_font_set_hyphenchar:Nn \font {-1} } + } + { + \__fontspec_warning:nx {only-xetex-feature} {HyphenChar} - \tl_if_single:nTF {#1} - { \tl_set:Nn \l_fontspec_hyphenchar_tl {`#1} } - { \tl_set:Nn \l_fontspec_hyphenchar_tl { #1} } + \tl_if_single:nTF {#1} + { \tl_set:Nn \l__fontspec_hyphenchar_tl {`#1} } + { \tl_set:Nn \l__fontspec_hyphenchar_tl { #1} } - \__fontspec_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l_fontspec_hyphenchar_tl} - { - \tl_put_right:Nn \l__fontspec_postadjust_tl - { \__fontspec_primitive_font_set_hyphenchar:Nn \font { \l_fontspec_hyphenchar_tl } } - } - { \__fontspec_error:nx {no-glyph}{#1} } + \__fontspec_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l__fontspec_hyphenchar_tl} + { + \tl_put_right:Nn \l__fontspec_postadjust_tl + { \__fontspec_primitive_font_set_hyphenchar:Nn \font { \l__fontspec_hyphenchar_tl } } + } + { \__fontspec_error:nx {no-glyph}{#1} } - } - } + } + } \__fontspec_aff_error:n {HyphenChar} \__fontspec_keys_define_code:nnn {fontspec} {Color} - { - \cs_if_exist:cTF { \token_to_str:N \color@ #1 } - { - \convertcolorspec{named}{#1}{HTML}\l__fontspec_hexcol_tl - } - { - \int_compare:nTF { \tl_count:n {#1} == 6 } - { \tl_set:Nn \l__fontspec_hexcol_tl {#1} } - { - \int_compare:nTF { \tl_count:n {#1} == 8 } - { \fontspec_parse_colour:viii #1 } - { - \bool_if:NF \l__fontspec_firsttime_bool - { \__fontspec_warning:nx {bad-colour} {#1} } - } - } - } - } + { + \cs_if_exist:cTF { \token_to_str:N \color@ #1 } + { + \convertcolorspec{named}{#1}{HTML}\l__fontspec_hexcol_tl + } + { + \int_compare:nTF { \tl_count:n {#1} == 6 } + { \tl_set:Nn \l__fontspec_hexcol_tl {#1} } + { + \int_compare:nTF { \tl_count:n {#1} == 8 } + { \fontspec_parse_colour:viii #1 } + { + \bool_if:NF \l__fontspec_firsttime_bool + { \__fontspec_warning:nx {bad-colour} {#1} } + } + } + } + } \cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8 - { - \tl_set:Nn \l__fontspec_hexcol_tl {#1#2#3#4#5#6} - \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl - { - \bool_if:NF \l__fontspec_firsttime_bool - { \__fontspec_warning:nx {opa-twice-col} {#7#8} } - } - \tl_set:Nn \l__fontspec_opacity_tl {#7#8} - } + { + \tl_set:Nn \l__fontspec_hexcol_tl {#1#2#3#4#5#6} + \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl + { + \bool_if:NF \l__fontspec_firsttime_bool + { \__fontspec_warning:nx {opa-twice-col} {#7#8} } + } + \tl_set:Nn \l__fontspec_opacity_tl {#7#8} + } \aliasfontfeature{Color}{Colour} \__fontspec_keys_define_code:nnn {fontspec} {Opacity} - { - \int_set:Nn \l__fontspec_tmp_int {255} - \__fontspec_int_mult_truncate:Nn \l__fontspec_tmp_int { #1 } - \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl - { - \bool_if:NF \l__fontspec_firsttime_bool - { \__fontspec_warning:nx {opa-twice} {#1} } - } - \tl_set:Nx \l__fontspec_opacity_tl - { - \int_compare:nT { \l__fontspec_tmp_int <= "F } {0} % zero pad - \int_to_hex:n { \l__fontspec_tmp_int } - } - } + { + \int_set:Nn \l__fontspec_tmp_int {255} + \__fontspec_int_mult_truncate:Nn \l__fontspec_tmp_int { #1 } + \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl + { + \bool_if:NF \l__fontspec_firsttime_bool + { \__fontspec_warning:nx {opa-twice} {#1} } + } + \tl_set:Nx \l__fontspec_opacity_tl + { + \int_compare:nT { \l__fontspec_tmp_int <= "F } {0} % zero pad + \int_to_hex:n { \l__fontspec_tmp_int } + } + } \__fontspec_keys_define_code:nnn {fontspec-aat} {Mapping} { \tl_set:Nn \l__fontspec_mapping_tl { #1 } @@ -2502,109 +2535,109 @@ \tl_set:Nn \l__fontspec_mapping_tl { #1 } } \__fontspec_keys_define_code:nnn {fontspec} {Weight} - { - \__fontspec_update_featstr:n{weight=#1} - } + { + \__fontspec_update_featstr:n{weight=#1} + } \__fontspec_keys_define_code:nnn {fontspec} {Width} - { - \__fontspec_update_featstr:n{width=#1} - } + { + \__fontspec_update_featstr:n{width=#1} + } \__fontspec_keys_define_code:nnn {fontspec} {OpticalSize} - { - \bool_if:NTF \l__fontspec_ot_bool - { - \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1} - } - { - \bool_if:NT \l__fontspec_mm_bool - { - \__fontspec_update_featstr:n { optical size = #1 } - } - } - \bool_if:nT { !\l__fontspec_ot_bool && !\l__fontspec_mm_bool } - { - \bool_if:NT \l__fontspec_firsttime_bool - { \__fontspec_warning:n {no-opticals} } - } - } + { + \bool_if:NTF \l__fontspec_ot_bool + { + \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1} + } + { + \bool_if:NT \l__fontspec_mm_bool + { + \__fontspec_update_featstr:n { optical size = #1 } + } + } + \bool_if:nT { !\l__fontspec_ot_bool && !\l__fontspec_mm_bool } + { + \bool_if:NT \l__fontspec_firsttime_bool + { \__fontspec_warning:n {no-opticals} } + } + } \keys_define:nn {fontspec} - { - FakeSlant .code:n = - { - \__fontspec_update_featstr:n{slant=#1} - }, - FakeSlant .default:n = {0.2} -} + { + FakeSlant .code:n = + { + \__fontspec_update_featstr:n {slant=#1} + }, + FakeSlant .default:n = {0.2} + } \keys_define:nn {fontspec} - { - FakeStretch .code:n = - { - \__fontspec_update_featstr:n{extend=#1} - }, - FakeStretch .default:n = {1.2} -} + { + FakeStretch .code:n = + { + \__fontspec_update_featstr:n {extend=#1} + }, + FakeStretch .default:n = {1.2} + } \keys_define:nn {fontspec} - { - FakeBold .code:n = - { - \__fontspec_update_featstr:n {embolden=#1} - }, - FakeBold .default:n = {1.5} - } + { + FakeBold .code:n = + { + \__fontspec_update_featstr:n {embolden=#1} + }, + FakeBold .default:n = {1.5} + } \keys_define:nn {fontspec} - { - AutoFakeSlant .code:n = - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_set:Nn \l__fontspec_fake_slant_tl {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {FakeSlant=#1} - \tl_set_eq:NN \l__fontspec_fontname_it_tl \l_fontspec_fontname_tl - \bool_set_false:N \l__fontspec_noit_bool - - \tl_if_empty:NF \l__fontspec_fake_embolden_tl - { - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist - {FakeBold=\l__fontspec_fake_embolden_tl} - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=#1} - \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl - } - } - }, - AutoFakeSlant .default:n = {0.2} -} + { + AutoFakeSlant .code:n = + { + \bool_if:NT \l__fontspec_firsttime_bool + { + \tl_set:Nn \l__fontspec_fake_slant_tl {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {FakeSlant=#1} + \tl_set_eq:NN \l__fontspec_fontname_it_tl \l_fontspec_fontname_tl + \bool_set_false:N \l__fontspec_noit_bool + + \tl_if_empty:NF \l__fontspec_fake_embolden_tl + { + \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist + {FakeBold=\l__fontspec_fake_embolden_tl} + \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=#1} + \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl + } + } + }, + AutoFakeSlant .default:n = {0.2} + } \keys_define:nn {fontspec} - { - AutoFakeBold .code:n = - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_set:Nn \l__fontspec_fake_embolden_tl {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {FakeBold=#1} - \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl - \bool_set_false:N \l__fontspec_nobf_bool - - \tl_if_empty:NF \l__fontspec_fake_slant_tl - { - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist - {FakeSlant=\l__fontspec_fake_slant_tl} - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=#1} - \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl - } - } - }, - AutoFakeBold .default:n = {1.5} -} + { + AutoFakeBold .code:n = + { + \bool_if:NT \l__fontspec_firsttime_bool + { + \tl_set:Nn \l__fontspec_fake_embolden_tl {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {FakeBold=#1} + \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl + \bool_set_false:N \l__fontspec_nobf_bool + + \tl_if_empty:NF \l__fontspec_fake_slant_tl + { + \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist + {FakeSlant=\l__fontspec_fake_slant_tl} + \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=#1} + \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl + } + } + }, + AutoFakeBold .default:n = {1.5} + } \__fontspec_keys_define_code:nnn {fontspec-opentype} {RawFeature} - { - \__fontspec_update_featstr:n {#1} - } + { + \__fontspec_update_featstr:n {#1} + } \__fontspec_keys_define_code:nnn {fontspec-aat} {RawFeature} - { - \__fontspec_update_featstr:n {#1} - } + { + \__fontspec_update_featstr:n {#1} + } -%%^^A%% fontspec-feat-opentype.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-feat-opentype.dtx -- part of FONTSPEC \__fontspec_feat_prop_add:nn {salt} { Alternate\,=\,$N$ } \__fontspec_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ } @@ -2799,150 +2832,151 @@ \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal} \__fontspec_define_opentype_feature_group:n {Alternate} \keys_define:nn {fontspec-opentype} - { - Alternate .default:n = {0} , - Alternate / unknown .code:n = - { - \clist_map_inline:nn {#1} - { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} } - } - } + { + Alternate .default:n = {0} , + Alternate / unknown .code:n = + { + \clist_map_inline:nn {#1} + { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} } + } + } \aliasfontfeature{Alternate}{StylisticAlternates} \__fontspec_define_opentype_feature_group:n {Variant} \keys_define:nn {fontspec-opentype} - { - Variant .default:n = {0} , - Variant / unknown .code:n = - { - \clist_map_inline:nn {#1} + { + Variant .default:n = {0} , + Variant / unknown .code:n = { - \__fontspec_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {} + \clist_map_inline:nn {#1} + { + \__fontspec_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {} + } } - } - } + } \aliasfontfeature{Variant}{StylisticSet} \__fontspec_define_opentype_feature_group:n {CharacterVariant} \use:x - { - \cs_new:Npn \exp_not:N \fontspec_parse_cv:w - ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil - { - \__fontspec_make_OT_feature:xxx - { cv \exp_not:N \two@digits {##1} } { +cv \exp_not:N \two@digits {##1} = ##2 } {} - } - \keys_define:nn {fontspec-opentype} - { - CharacterVariant / unknown .code:n = - { - \clist_map_inline:nn {##1} - { - \exp_not:N \fontspec_parse_cv:w - ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil - } - } - } - } + { + \cs_new:Npn \exp_not:N \fontspec_parse_cv:w + ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil + { + \__fontspec_make_OT_feature:xxx + { cv \exp_not:N \two@digits {##1} } + { +cv \exp_not:N \two@digits {##1} = ##2 } {} + } + \keys_define:nn {fontspec-opentype} + { + CharacterVariant / unknown .code:n = + { + \clist_map_inline:nn {##1} + { + \exp_not:N \fontspec_parse_cv:w + ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil + } + } + } + } \__fontspec_define_opentype_feature_group:n {Annotation} \keys_define:nn {fontspec-opentype} - { - Annotation .default:n = {0} , - Annotation / unknown .code:n = - { - \__fontspec_make_OT_feature:nnn {nalt} {+nalt=#1} {} - } - } + { + Annotation .default:n = {0} , + Annotation / unknown .code:n = + { + \__fontspec_make_OT_feature:nnn {nalt} {+nalt=#1} {} + } + } \__fontspec_define_opentype_feature_group:n {Ornament} \keys_define:nn {fontspec-opentype} - { - Ornament .default:n = {0} , - Ornament / unknown .code:n = - { - \__fontspec_make_OT_feature:nnn {ornm} { +ornm=#1 } {} - } - } + { + Ornament .default:n = {0} , + Ornament / unknown .code:n = + { + \__fontspec_make_OT_feature:nnn {ornm} { +ornm=#1 } {} + } + } \keys_define:nn { fontspec-opentype } { Script .choice: } \cs_new:Nn \fontspec_new_script:nn - { - \keys_define:nn { fontspec-opentype } { Script / #1 .code:n = - \bool_set_false:N \l__fontspec_script_exist_bool - \clist_map_inline:nn {#2} - { - \__fontspec_check_script:NnTF \l_fontspec_font {####1} - { - \tl_set:Nn \l_fontspec_script_tl {####1} - \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} - \bool_set_true:N \l__fontspec_script_exist_bool - \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 } - \clist_map_break: - } - { } - } - \bool_if:NF \l__fontspec_script_exist_bool - { - \str_if_eq:nnTF {#1} {Latin} - { - \__fontspec_warning:nx {script-not-exist} {#1} - } - { - \__fontspec_check_script:NnTF \l_fontspec_font {latn} - { - \__fontspec_warning:nx {script-not-exist-latn} {#1} - \tl_set:Nn \l_fontspec_script_tl {latn} - \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} - } - { - \__fontspec_warning:nx {script-not-exist} {#1} - } - } - } - } - } + { + \keys_define:nn { fontspec-opentype } { Script / #1 .code:n = + \bool_set_false:N \l__fontspec_script_exist_bool + \clist_map_inline:nn {#2} + { + \__fontspec_check_script:NnTF \l_fontspec_font {####1} + { + \tl_set:Nn \l_fontspec_script_tl {####1} + \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} + \bool_set_true:N \l__fontspec_script_exist_bool + \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 } + \clist_map_break: + } + { } + } + \bool_if:NF \l__fontspec_script_exist_bool + { + \str_if_eq:nnTF {#1} {Latin} + { + \__fontspec_warning:nx {script-not-exist} {#1} + } + { + \__fontspec_check_script:NnTF \l_fontspec_font {latn} + { + \__fontspec_warning:nx {script-not-exist-latn} {#1} + \tl_set:Nn \l_fontspec_script_tl {latn} + \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} + } + { + \__fontspec_warning:nx {script-not-exist} {#1} + } + } + } + } + } \keys_define:nn { fontspec-opentype } { Language .choice: } \cs_new:Nn \fontspec_new_lang:nn - { - \keys_define:nn { fontspec-opentype } { Language / #1 .code:n = - \__fontspec_check_lang:NnTF \l_fontspec_font {#2} - { - \tl_set:Nn \l_fontspec_lang_tl {#2} - \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} - \tl_gset:Nx \g__fontspec_single_feat_tl { language=#2 } - } - { - \__fontspec_warning:nx {language-not-exist} {#1} - \keys_set:nn { fontspec-opentype } { Language = Default } - } + { + \keys_define:nn { fontspec-opentype } { Language / #1 .code:n = + \__fontspec_check_lang:NnTF \l_fontspec_font {#2} + { + \tl_set:Nn \l_fontspec_lang_tl {#2} + \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} + \tl_gset:Nx \g__fontspec_single_feat_tl { language=#2 } + } + { + \__fontspec_warning:nx {language-not-exist} {#1} + \keys_set:nn { fontspec-opentype } { Language = Default } + } + } } - } \__fontspec_keys_define_code:nnn {fontspec-opentype}{ Language / Default } - { - \tl_set:Nn \l_fontspec_lang_tl {DFLT} - \int_zero:N \l__fontspec_language_int - \tl_gset:Nn \g__fontspec_single_feat_tl { language=DFLT } - } + { + \tl_set:Nn \l_fontspec_lang_tl {DFLT} + \int_zero:N \l__fontspec_language_int + \tl_gset:Nn \g__fontspec_single_feat_tl { language=DFLT } + } \keys_define:nn {fontspec-opentype} - { - Language / Turkish .code:n = - { - \__fontspec_check_lang:NnTF \l_fontspec_font {TRK} - { - \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} - \tl_set:Nn \l_fontspec_lang_tl {TRK} - \tl_gset:Nn \g__fontspec_single_feat_tl { language=TRK } - } - { - \__fontspec_check_lang:NnTF \l_fontspec_font {TUR} - { - \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} - \tl_set:Nn \l_fontspec_lang_tl {TUR} - \tl_gset:Nn \g__fontspec_single_feat_tl { language=TUR } - } - { - \__fontspec_warning:nx {language-not-exist} {Turkish} - \keys_set:nn {fontspec-opentype} {Language=Default} - } - } - } - } + { + Language / Turkish .code:n = + { + \__fontspec_check_lang:NnTF \l_fontspec_font {TRK} + { + \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} + \tl_set:Nn \l_fontspec_lang_tl {TRK} + \tl_gset:Nn \g__fontspec_single_feat_tl { language=TRK } + } + { + \__fontspec_check_lang:NnTF \l_fontspec_font {TUR} + { + \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} + \tl_set:Nn \l_fontspec_lang_tl {TUR} + \tl_gset:Nn \g__fontspec_single_feat_tl { language=TUR } + } + { + \__fontspec_warning:nx {language-not-exist} {Turkish} + \keys_set:nn {fontspec-opentype} {Language=Default} + } + } + } + } \cs_new:Nn \__fontspec_ot_compat:nn { \aliasfontfeatureoption {#1} {#2Off} {No#2} @@ -2965,7 +2999,7 @@ \__fontspec_ot_compat:nn {Diacritics} {AboveBase} \__fontspec_ot_compat:nn {Diacritics} {BelowBase} -%%^^A%% fontspec-scripts.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-scripts.dtx -- part of FONTSPEC \newfontscript{Adlam}{adlm} \newfontscript{Ahom}{ahom} @@ -3112,7 +3146,7 @@ \newfontscript{N'ko}{nko~} \newfontscript{Oriya}{ory2,orya} -%%^^A%% fontspec-lang.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-lang.dtx -- part of FONTSPEC \newfontlanguage{Abaza}{ABA} \newfontlanguage{Abkhazian}{ABK} @@ -3497,7 +3531,7 @@ \newfontlanguage{Zande}{ZND} \newfontlanguage{Zulu}{ZUL} -%%^^A%% fontspec-feat-aat.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-feat-aat.dtx -- part of FONTSPEC \__fontspec_define_aat_feature_group:n {Ligatures} @@ -3569,37 +3603,36 @@ \__fontspec_define_aat_feature:nnnn {Fractions} {Diagonal} {11} {2} \__fontspec_define_aat_feature_group:n { Alternate } \keys_define:nn {fontspec-aat} - { - Alternate .default:n = {0} , - Alternate / unknown .code:n = - { - \clist_map_inline:nn {#1} + { + Alternate .default:n = {0} , + Alternate / unknown .code:n = { - \__fontspec_make_AAT_feature:nn {17}{##1} + \clist_map_inline:nn {#1} + { + \__fontspec_make_AAT_feature:nn {17}{##1} + } } - } - } + } \__fontspec_define_aat_feature_group:n {Variant} \keys_define:nn {fontspec-aat} - { - Variant .default:n = {0} , - Variant / unknown .code:n = - { - \clist_map_inline:nn {#1} - { \__fontspec_make_AAT_feature:nn {18}{##1} } - } - } + { + Variant .default:n = {0} , + Variant / unknown .code:n = + { + \clist_map_inline:nn {#1} + { \__fontspec_make_AAT_feature:nn {18}{##1} } + } + } \aliasfontfeature{Variant}{StylisticSet} \__fontspec_define_aat_feature_group:n {Vertical} \keys_define:nn {fontspec-aat} - { - Vertical .choice: , - Vertical / RotatedGlyphs .code:n = - { - \__fontspec_update_featstr:n {vertical} - } - } - + { + Vertical .choice: , + Vertical / RotatedGlyphs .code:n = + { + \__fontspec_update_featstr:n {vertical} + } + } \__fontspec_define_aat_feature_group:n {Style} \__fontspec_define_aat_feature:nnnn {Style} {Italic} {32} {2} \__fontspec_define_aat_feature:nnnn {Style} {Ruby} {28} {2} @@ -3638,7 +3671,7 @@ \__fontspec_define_aat_feature:nnnn {Annotation} {BlackRoundSquare} {24} {10} \__fontspec_define_aat_feature:nnnn {Annotation} {DoubleCircle} {24} {11} -%%^^A%% fontspec-enc.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-enc.dtx -- part of FONTSPEC \providecommand\UnicodeFontFile[2]{"[#1]:#2"} \providecommand\UnicodeFontName[2]{"#1:#2"} @@ -3728,7 +3761,7 @@ { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} } } -%%^^A%% fontspec-math.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-math.dtx -- part of FONTSPEC \@ifpackageloaded{euler} { \bool_gset_true:N \g__fontspec_pkg_euler_loaded_bool } { \bool_gset_false:N \g__fontspec_pkg_euler_loaded_bool } @@ -3799,6 +3832,7 @@ \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3} \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14} \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36} + \renewcommand{\hbar}{{\mathchar"AF\mkern-9mu h}}% TODO: test with other fonts } } \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\updefault @@ -3861,23 +3895,23 @@ } \AtBeginDocument{\fontspec_maybe_setup_maths:} -%%^^A%% fontspec-closing.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-closing.dtx -- part of FONTSPEC \bool_if:NT \g__fontspec_cfg_bool - { - \InputIfFileExists{fontspec.cfg} - {} - {\typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.}} - } + { + \InputIfFileExists{fontspec.cfg} + {} + { \typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.} } + } -%%^^A%% fontspec-xfss.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-xfss.dtx -- part of FONTSPEC \providecommand*\itscdefault{\itdefault\scdefault} \providecommand*\slscdefault{\sldefault\scdefault} \DeclareRobustCommand{\sishape} - { - \not@math@alphabet\sishape\relax - \fontshape{\itscdefault}\selectfont - } + { + \not@math@alphabet\sishape\relax + \fontshape{\itscdefault}\selectfont + } \DeclareTextFontCommand{\textsi}{\sishape} \cs_new:Nn \__fontspec_shape_merge:nn { c__fontspec_shape_#1_#2_tl } \tl_const:cn { \__fontspec_shape_merge:nn \itdefault \scdefault } {\itscdefault} @@ -3908,25 +3942,25 @@ \prg_return_true: \prg_return_false: } \DeclareRobustCommand \itshape - { - \not@math@alphabet\itshape\mathit - \fontspec_merge_shape:n\itdefault - } + { + \not@math@alphabet\itshape\mathit + \fontspec_merge_shape:n\itdefault + } \DeclareRobustCommand \slshape - { - \not@math@alphabet\slshape\relax - \fontspec_merge_shape:n\sldefault - } + { + \not@math@alphabet\slshape\relax + \fontspec_merge_shape:n\sldefault + } \DeclareRobustCommand \scshape - { - \not@math@alphabet\scshape\relax - \fontspec_merge_shape:n\scdefault - } + { + \not@math@alphabet\scshape\relax + \fontspec_merge_shape:n\scdefault + } \DeclareRobustCommand \upshape - { - \not@math@alphabet\upshape\relax - \fontspec_merge_shape:n\updefault - } + { + \not@math@alphabet\upshape\relax + \fontspec_merge_shape:n\updefault + } \cs_new_protected:Npn \emfontdeclare #1 { \prop_gclear:N \g__fontspec_em_prop @@ -4029,33 +4063,33 @@ \strongfontdeclare{ \bfseries } \emfontdeclare{ \emshape, \eminnershape } -%%^^A%% fontspec-patches.dtx -- part of FONTSPEC +%%^^A%% fontspec-code-patches.dtx -- part of FONTSPEC \DeclareRobustCommand{\-} - { - \discretionary - { - \char\ifnum\hyphenchar\font<\z@ - \xlx@defaulthyphenchar - \else - \hyphenchar\font - \fi - }{}{} - } + { + \discretionary + { + \char\ifnum\hyphenchar\font<\z@ + \xlx@defaulthyphenchar + \else + \hyphenchar\font + \fi + }{}{} + } \def\xlx@defaulthyphenchar{`\-} \cs_new:Nn \fontspec_visible_space: - { - \__fontspec_primitive_font_glyph_if_exist:NnTF \font {"2423} - { \char"2423\scan_stop: } - { \fontspec_visible_space_fallback: } - } + { + \__fontspec_primitive_font_glyph_if_exist:NnTF \font {"2423} + { \char"2423\scan_stop: } + { \fontspec_visible_space_fallback: } + } \cs_new:Nn \fontspec_visible_space_fallback: - { { - \usefont{\g_fontspec_encoding_tl}{lmtt}{\f@series}{\f@shape} - \textvisiblespace + { + \usefont{\g_fontspec_encoding_tl}{lmtt}{\f@series}{\f@shape} + \textvisiblespace + } } - } \group_begin: \char_set_catcode_active:n{"20}% \cs_gset:Npn\fontspec_print_visible_spaces:{% @@ -4064,71 +4098,72 @@ }% \group_end: \def\verb - { - \relax\ifmmode\hbox\else\leavevmode\null\fi - \bgroup - \verb@eol@error \let\do\@makeother \dospecials - \verbatim@font\@noligs - \@ifstar\__fontspecsverb\@verb - } + { + \relax\ifmmode\hbox\else\leavevmode\null\fi + \bgroup + \verb@eol@error \let\do\@makeother \dospecials + \verbatim@font\@noligs + \@ifstar\__fontspecsverb\@verb + } \def\__fontspecsverb{\fontspec_print_visible_spaces:\@sverb} \AtBeginDocument - { - \fontspec_patch_verbatim: - \fontspec_patch_moreverb: - \fontspec_patch_fancyvrb: - \fontspec_patch_listings: - } + { + \fontspec_patch_verbatim: + \fontspec_patch_moreverb: + \fontspec_patch_fancyvrb: + \fontspec_patch_listings: + } \cs_set:Npn \fontspec_patch_verbatim: - { - \@ifpackageloaded{verbatim} - { - \cs_set:cpn {verbatim*} - { - \group_begin: \@verbatim \fontspec_print_visible_spaces: \verbatim@start - } - } - { - \cs_set:cpn {verbatim*} - { - \@verbatim \fontspec_print_visible_spaces: \@sxverbatim - } - } + { + \@ifpackageloaded{verbatim} + { + \cs_set:cpn {verbatim*} + { + \group_begin: \@verbatim \fontspec_print_visible_spaces: \verbatim@start + } + } + { + \cs_set:cpn {verbatim*} + { + \@verbatim \fontspec_print_visible_spaces: \@sxverbatim + } + } } \cs_set:Npn \fontspec_patch_moreverb: - { - \@ifpackageloaded{moreverb}{ - \cs_set:cpn {listingcont*} - { - \cs_set:Npn \verbatim@processline - { - \thelisting@line \global\advance\listing@line\c_one - \the\verbatim@line\par - } - \@verbatim \fontspec_print_visible_spaces: \verbatim@start - } - }{} - } + { + \@ifpackageloaded{moreverb} + { + \cs_set:cpn {listingcont*} + { + \cs_set:Npn \verbatim@processline + { + \thelisting@line \global\advance\listing@line1\relax + \the\verbatim@line\par + } + \@verbatim \fontspec_print_visible_spaces: \verbatim@start + } + }{} + } \cs_set:Npn \fontspec_patch_fancyvrb: - { - \@ifpackageloaded{fancyvrb} - { - \cs_set_eq:NN \FancyVerbSpace \fontspec_visible_space: - }{} - } + { + \@ifpackageloaded{fancyvrb} + { + \cs_set_eq:NN \FancyVerbSpace \fontspec_visible_space: + }{} + } \cs_set:Npn \fontspec_patch_listings: - { - \@ifpackageloaded{listings} - { - \cs_set_eq:NN \lst@visiblespace \fontspec_visible_space: - }{} - } + { + \@ifpackageloaded{listings} + { + \cs_set_eq:NN \lst@visiblespace \fontspec_visible_space: + }{} + } \RenewDocumentCommand \oldstylenums {m} - { - { \addfontfeature{Numbers=OldStyle} #1 } - } + { + { \addfontfeature{Numbers=OldStyle} #1 } + } \NewDocumentCommand \liningnums {m} - { - { \addfontfeature{Numbers=Lining} #1 } - } + { + { \addfontfeature{Numbers=Lining} #1 } + } diff --git a/Master/texmf-dist/tex/latex/fontspec/fontspec.lua b/Master/texmf-dist/tex/latex/fontspec/fontspec.lua index f72f7b381d0..61da037b2bc 100644 --- a/Master/texmf-dist/tex/latex/fontspec/fontspec.lua +++ b/Master/texmf-dist/tex/latex/fontspec/fontspec.lua @@ -23,8 +23,8 @@ fontspec = fontspec or {} local fontspec = fontspec fontspec.module = { name = "fontspec", - version = "v2.6h", - date = "2018/07/30", + version = "2.6j", + date = "2019/01/10", description = "Font selection for XeLaTeX and LuaLaTeX", author = "Khaled Hosny, Philipp Gesang, Will Robertson", copyright = "Khaled Hosny, Philipp Gesang, Will Robertson", diff --git a/Master/texmf-dist/tex/latex/fontspec/fontspec.sty b/Master/texmf-dist/tex/latex/fontspec/fontspec.sty index c191cb3b6ac..cbea552a1f3 100644 --- a/Master/texmf-dist/tex/latex/fontspec/fontspec.sty +++ b/Master/texmf-dist/tex/latex/fontspec/fontspec.sty @@ -21,7 +21,7 @@ \RequirePackage{xparse} \ProvidesExplPackage{fontspec}% - {2018/07/30}{v2.6h}{Font selection for XeLaTeX and LuaLaTeX} + {2019/01/10}{2.6j}{Font selection for XeLaTeX and LuaLaTeX} %%^^A%% fontspec-code-load.dtx -- part of FONTSPEC \sys_if_engine_luatex:T -- cgit v1.2.3