%PDF- %PDF-
| Direktori : /proc/self/root/data/old/usr/share/texlive/texmf-dist/tex/latex/fontspec/ |
| Current File : //proc/self/root/data/old/usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty |
%%
%% This is file `fontspec-luatex.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fontspec.dtx (with options: `fontspec,luatex')
%%
%% _________________________________________
%% The fontspec package for XeLaTeX/LuaLaTeX
%% (C) 2004--2013 Will Robertson and Khaled Hosny
%%
%% License information appended.
%%
%%
\ProvidesPackage{fontspec-luatex}
[2013/03/16 v2.3a Font selection for XeLaTeX and LuaLaTeX]
\ExplSyntaxOn
\tl_set:Nn \g_fontspec_encoding_tl {EU2}
\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
\tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl
\tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl
\tl_put_right:Nn \document
{
\tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl
\tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl
}
\cs_set_eq:NN \fontspec_tmp: \XeTeXpicfile
\cs_set:Npn \XeTeXpicfile {}
\RequirePackage{xunicode}
\cs_set_eq:NN \XeTeXpicfile \fontspec_tmp:
\DeclareDocumentCommand \fontspec { O{} m }
{
\fontencoding {\g_fontspec_encoding_tl}
\fontspec_set_family:Nnn \f@family {#1}{#2}
\selectfont
\ignorespaces
}
\DeclareDocumentCommand \setmainfont { O{} m }
{
\fontspec_set_family:Nnn \rmdefault {#1}{#2}
\normalfont
}
\DeclareDocumentCommand \setsansfont { O{} m }
{
\fontspec_set_family:Nnn \sfdefault {#1}{#2}
\normalfont
}
\DeclareDocumentCommand \setmonofont { O{} m }
{
\fontspec_set_family:Nnn \ttdefault {#1}{#2}
\normalfont
}
\cs_set_eq:NN \setromanfont \setmainfont
\tl_new:N \g_fontspec_mathrm_tl
\tl_new:N \g_fontspec_bfmathrm_tl
\tl_new:N \g_fontspec_mathsf_tl
\tl_new:N \g_fontspec_mathtt_tl
\DeclareDocumentCommand \setmathrm { O{} m }
{
\fontspec_set_family:Nnn \g_fontspec_mathrm_tl {#1}{#2}
}
\DeclareDocumentCommand \setboldmathrm { O{} m }
{
\fontspec_set_family:Nnn \g_fontspec_bfmathrm_tl {#1}{#2}
}
\DeclareDocumentCommand \setmathsf { O{} m }
{
\fontspec_set_family:Nnn \g_fontspec_mathsf_tl {#1}{#2}
}
\DeclareDocumentCommand \setmathtt { O{} m }
{
\fontspec_set_family:Nnn \g_fontspec_mathtt_tl {#1}{#2}
}
\@onlypreamble\setmathrm
\@onlypreamble\setboldmathrm
\@onlypreamble\setmathsf
\@onlypreamble\setmathtt
\tl_set:Nn \g_fontspec_mathrm_tl {\rmdefault}
\tl_set:Nn \g_fontspec_mathsf_tl {\sfdefault}
\tl_set:Nn \g_fontspec_mathtt_tl {\ttdefault}
\DeclareDocumentCommand \newfontfamily { m O{} m }
{
\fontspec_select:nn{#2}{#3}
\use:x
{
\exp_not:N \DeclareRobustCommand \exp_not:N #1
{
\exp_not:N \fontencoding {\g_fontspec_encoding_tl}
\exp_not:N \fontfamily {\l_fontspec_family_tl} \exp_not:N \selectfont
}
}
}
\DeclareDocumentCommand \newfontface { m O{} m }
{
\newfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2 ] {#3}
}
\tl_new:N \g_fontspec_default_fontopts_tl
\prop_new:N \g__fontspec_fontopts_prop
\DeclareDocumentCommand \defaultfontfeatures { o m }
{
\IfNoValueTF {#1}
{ \__fontspec_set_default_features:n {#2} }
{ \__fontspec_set_font_default_features:nn {#1} {#2} }
}
\cs_new:Nn \__fontspec_set_default_features:n
{
\tl_set:Nn \g_fontspec_default_fontopts_tl {#1,}
}
\cs_new:Nn \__fontspec_set_font_default_features:nn
{
\__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {#1}
\tl_if_empty:nTF {#2}
{ \prop_gremove:NV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl }
{ \prop_gput:NVn \g__fontspec_fontopts_prop \l__fontspec_tmp_tl {#2} }
}
\cs_new:Nn \__fontspec_sanitise_fontname:Nn
{
\use:x { \tl_to_lowercase:n { \tl_set:Nx \exp_not:N #1 {#2} } }
\tl_remove_all:Nn #1 {~}
\clist_map_inline:Nn \l_fontspec_extensions_clist
{ \tl_remove_once:Nn #1 {##1} }
}
\DeclareDocumentCommand \addfontfeatures {m}
{
\ifcsname zf@family@fontdef\f@family\endcsname
\group_begin:
\tl_clear:N \g_fontspec_default_fontopts_tl
\use:x
{
\exp_not:N\fontspec_select:nn
{\csname zf@family@options\f@family\endcsname,#1}
{\csname zf@family@fontname\f@family\endcsname}
}
\group_end:
\fontfamily\l_fontspec_family_tl\selectfont
\else
\fontspec_warning:n {addfontfeatures-ignored}
\fi
\ignorespaces
}
\cs_set_eq:NN \addfontfeature \addfontfeatures
\DeclareDocumentCommand \newfontfeature {mm}
{
\keys_define:nn { fontspec }
{
#1 .code:n =
{
\fontspec_update_fontid:n {+zf-#1}
\fontspec_update_featstr:n {#2}
}
}
}
\DeclareDocumentCommand \newAATfeature {mmmm}
{
\keys_if_exist:nnF { fontspec } {#1}
{ \fontspec_define_font_feature:n {#1} }
\keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
{ \fontspec_warning:nxx {feature-option-overwrite}{#1}{#2} }
\fontspec_define_feature_option:nnnnn{#1}{#2}{#3}{#4}{}
}
\DeclareDocumentCommand \newICUfeature {mmm}
{
\keys_if_exist:nnF { fontspec / options } {#1}
{ \fontspec_define_font_feature:n{#1} }
\keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
{ \fontspec_warning:nxx {feature-option-overwrite}{#1}{#2} }
\fontspec_define_feature_option:nnnnn{#1}{#2}{}{}{#3}
}
\cs_set_eq:NN \newopentypefeature \newICUfeature
\DeclareDocumentCommand \aliasfontfeature {mm}
{
\keys_if_exist:nnTF {fontspec} {#1}
{
\keys_define:nn {fontspec}
{ #2 .code:n = { \keys_set:nn {fontspec} { #1 = {##1} } } }
}
{
\keys_if_exist:nnTF {fontspec-preparse} {#1}
{
\keys_define:nn {fontspec-preparse}
{ #2 .code:n = { \keys_set:nn {fontspec-preparse} { #1 = {##1} } } }
}
{
\keys_if_exist:nnTF {fontspec-preparse-external} {#1}
{
\keys_define:nn {fontspec-preparse-external}
{
#2 .code:n =
{ \keys_set:nn {fontspec-preparse-external} { #1 = {##1} } }
}
}
{
\fontspec_warning:nx {rename-feature-not-exist} {#1}
}
}
}
}
\DeclareDocumentCommand \aliasfontfeatureoption {mmm}
{ \keys_define:nn { fontspec / #1 } { #3 .meta:n = {#2} } }
\DeclareDocumentCommand \newfontscript {mm}
{
\fontspec_new_script:nn {#1} {#2}
\fontspec_new_script:nn {#2} {#2}
}
\keys_define:nn { fontspec } { Script .choice: }
\cs_new:Nn \fontspec_new_script:nn
{
\keys_define:nn { fontspec } { Script / #1 .code:n =
\fontspec_check_script:nTF {#2}
{
\fontspec_update_fontid:n {+script=#1}
\tl_set:Nn \l_fontspec_script_tl {#2}
\int_set:Nn \l_fontspec_script_int {\l_fontspec_strnum_int}
}
{
\fontspec_check_script:nTF {latn}
{
\fontspec_warning:nx {script-not-exist-latn} {#1}
\keys_set:nn {fontspec} {Script=Latin}
}
{
\fontspec_warning:nx {script-not-exist} {#1}
}
}
}
}
\DeclareDocumentCommand \newfontlanguage {mm}
{
\fontspec_new_lang:nn {#1} {#2}
\fontspec_new_lang:nn {#2} {#2}
}
\keys_define:nn { fontspec } { Language .choice: }
\cs_new:Nn \fontspec_new_lang:nn
{
\keys_define:nn { fontspec } { Language / #1 .code:n =
\fontspec_check_lang:nTF {#2}
{
\fontspec_update_fontid:n {+lang=#1}
\tl_set:Nn \l_fontspec_lang_tl {#2}
\int_set:Nn \l_fontspec_language_int {\l_fontspec_strnum_int}
}
{
\fontspec_warning:nx {language-not-exist} {#1}
\keys_set:nn { fontspec } { Language = Default }
}
}
}
\DeclareDocumentCommand \DeclareFontsExtensions {m}
{
\tl_set:Nn \l_fontspec_extensions_clist { #1 }
\tl_remove_all:Nn \l_fontspec_extensions_clist {~}
}
\DeclareFontsExtensions{.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont}
\prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F}
{
\cs_if_exist:cTF {g_fontspec_ \f@family _prop} \prg_return_true: \prg_return_false:
}
\prg_new_conditional:Nnn \fontspec_if_aat_feature:nn {TF,T,F}
{
\fontspec_if_fontspec_font:TF
{
\fontspec_font_set:Nnn \l_fontspec_font {\use:c{zf@family@fontdef\f@family}} {\f@size pt}
\bool_if:NTF \l_fontspec_atsui_bool
{
\fontspec_make_AAT_feature_string:nnTF {#1}{#2}
\prg_return_true: \prg_return_false:
}
{
\prg_return_false:
}
}
{
\prg_return_false:
}
}
\prg_new_conditional:Nnn \fontspec_if_opentype: {TF,T,F}
{
\fontspec_if_fontspec_font:TF
{
\fontspec_font_set:Nnn \l_fontspec_font {\csname zf@family@fontdef\f@family\endcsname} {\f@size pt}
\fontspec_set_font_type:
\bool_if:NTF \l_fontspec_icu_bool \prg_return_true: \prg_return_false:
}
{
\prg_return_false:
}
}
\prg_new_conditional:Nnn \fontspec_if_feature:n {TF,T,F}
{
\fontspec_if_fontspec_font:TF
{
\fontspec_font_set:Nnn \l_fontspec_font {\csname zf@family@fontdef\f@family\endcsname} {\f@size pt}
\fontspec_set_font_type:
\bool_if:NTF \l_fontspec_icu_bool
{
\int_set:Nv \l_fontspec_script_int {g_fontspec_script_num_(\f@family)_tl}
\int_set:Nv \l_fontspec_language_int {g_fontspec_lang_num_(\f@family)_tl}
\tl_set:Nv \l_fontspec_script_tl {g_fontspec_script_(\f@family)_tl}
\tl_set:Nv \l_fontspec_lang_tl {g_fontspec_lang_(\f@family)_tl}
\fontspec_check_ot_feat:nTF {#1} {\prg_return_true:} {\prg_return_false:}
}
{
\prg_return_false:
}
}
{
\prg_return_false:
}
}
\prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F}
{
\fontspec_if_fontspec_font:TF
{
\fontspec_font_set:Nnn \l_fontspec_font {\csname zf@family@fontdef\f@family\endcsname} {\f@size pt}
\fontspec_set_font_type:
\bool_if:NTF \l_fontspec_icu_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:nTF {#3} \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_font_set:Nnn \l_fontspec_font {\csname zf@family@fontdef\f@family\endcsname} {\f@size pt}
\fontspec_set_font_type:
\bool_if:NTF \l_fontspec_icu_bool
{
\fontspec_check_script:nTF {#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_font_set:Nnn \l_fontspec_font {\csname zf@family@fontdef\f@family\endcsname} {\f@size pt}
\fontspec_set_font_type:
\bool_if:NTF \l_fontspec_icu_bool
{
\tl_set:Nv \l_fontspec_script_tl {g_fontspec_script_(\f@family)_tl}
\int_set:Nv \l_fontspec_script_int {g_fontspec_script_num_(\f@family)_tl}
\fontspec_check_lang:nTF {#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_font_set:Nnn \l_fontspec_font {\csname zf@family@fontdef\f@family\endcsname} {\f@size pt}
\fontspec_set_font_type:
\bool_if:NTF \l_fontspec_icu_bool
{
\tl_set:Nn \l_fontspec_script_tl {#1}
\fontspec_iv_str_to_num:Nn \l_fontspec_script_int {#1}
\fontspec_check_lang:nTF {#2} \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_font_set:Nnn \l_fontspec_font {\csname zf@family@fontdef\f@family\endcsname} {\f@size pt}
\fontspec_set_font_type:
\bool_if:NTF \l_fontspec_icu_bool
{
\str_if_eq:nvTF {#1} {g_fontspec_script_(\f@family)_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_font_set:Nnn \l_fontspec_font {\csname zf@family@fontdef\f@family\endcsname} {\f@size pt}
\fontspec_set_font_type:
\bool_if:NTF \l_fontspec_icu_bool
{
\str_if_eq:nvTF {#1} {g_fontspec_lang_(\f@family)_tl}
{\prg_return_true:} {\prg_return_false:}
}
{ \prg_return_false: }
}
{ \prg_return_false: }
}
\cs_new:Nn \fontspec_set_family:Nnn
{
\fontspec_select:nn {#2}{#3}
\tl_set_eq:NN #1 \l_fontspec_family_tl
}
\cs_new:Nn \fontspec_set_fontface:NNnn
{
\fontspec_select:nn {#3}{#4}
\tl_set_eq:NN #1 \l_fontspec_font
\tl_set_eq:NN #2 \l_fontspec_family_tl
}
\cs_set:Nn \fontspec_fontwrap:n { "#1" }
\cs_if_free:NT \font_set_eq:NN
{
\cs_set_eq:NN \font_set_eq:NN \tex_let:D
\cs_set:Npn \font_set:Nnn #1#2#3
{
\font #1 = #2 ~at~ #3\scan_stop:
}
\cs_set:Npn \font_gset:Nnn #1#2#3
{
\global \font #1 = #2 ~at~ #3 \scan_stop:
}
\cs_set:Npn \font_suppress_not_found_error:
{\luatexsuppressfontnotfounderror=1}
\prg_set_conditional:Nnn \font_if_null:N {p,TF,T,F}
{
\ifx #1 \nullfont
\prg_return_true:
\else
\prg_return_false:
\fi
}
}
\cs_new:Nn \fontspec_font_set:Nnn
{
\font_set:Nnn #1 {\fontspec_fontwrap:n {#2}} {#3}
}
\cs_new:Nn \fontspec_font_gset:Nnn
{
\font_gset:Nnn #1 {\fontspec_fontwrap:n {#2}} {#3}
}
\prg_new_conditional:Nnn \font_glyph_if_exist:Nn {p,TF,T,F}
{
\etex_iffontchar:D #1 #2 \scan_stop:
\prg_return_true:
\else:
\prg_return_false:
\fi:
}
\cs_set:Nn \fontspec_select:nn
{
\group_begin:
\font_suppress_not_found_error:
\fontspec_init:
\tl_set:Nx \l_fontspec_fontname_tl {#2}
\tl_remove_all:Nn \l_fontspec_fontname_tl {~}
\tl_set_eq:NN \l_fontspec_fontid_tl \l_fontspec_fontname_tl
\tl_set_eq:NN \l_fontspec_fontname_up_tl \l_fontspec_fontname_tl
\__fontspec_load_external_fontoptions:N \l_fontspec_fontname_tl
\fontspec_preparse_features:nN {#1} \l_fontspec_fontname_tl
\fontspec_font_set:Nnn \l_fontspec_font {\fontspec_fullname:n {\l_fontspec_fontname_up_tl}} {\f@size pt}
\font_if_null:NT \l_fontspec_font { \fontspec_error:nx {font-not-found} {\l_fontspec_fontname_up_tl} }
\fontspec_set_font_type:
\fontspec_font_gset:Nnn \l_fontspec_font {\fontspec_fullname:n {\l_fontspec_fontname_up_tl}} {\f@size pt}
\l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly
\fontspec_set_scriptlang:
\fontspec_get_features:n {}
\bool_set_false:N \l_fontspec_firsttime_bool
\fontspec_save_family:nT {#2}
{
\fontspec_save_fontinfo:nn {#1} {#2}
\DeclareFontFamily{\g_fontspec_encoding_tl}{\l_fontspec_family_tl}{}
\fontspec_set_upright:
\fontspec_set_bold:
\fontspec_set_italic:
\fontspec_set_slanted:
\fontspec_set_bold_italic:
\fontspec_set_bold_slanted:
}
\fontspec_info:nxx {defining-font} {#1} {#2}
\group_end:
}
\cs_new:Nn \__fontspec_load_external_fontoptions:N
{
\__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {#1}
\prop_if_in:NVF \g__fontspec_fontopts_prop {\l__fontspec_tmp_tl}
{
\exp_args:No \file_if_exist:nT {\l__fontspec_tmp_tl.fontspec}
{ \file_input:n {\l__fontspec_tmp_tl.fontspec} }
}
}
\cs_new:Nn \fontspec_preparse_features:nN
{
\exp_args:NV \fontspec_if_detect_external:nT #2
{ \keys_set:nn {fontspec-preparse-external} {ExternalLocation} }
\__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {\l_fontspec_fontname_tl}
\prop_get:NVN \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_fontopts_clist
\keys_set_known:nxN {fontspec-preparse-external}
{
\g_fontspec_default_fontopts_tl
\quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,}
#1
}
\l_fontspec_keys_leftover_clist
\tl_set_eq:NN \l_fontspec_fontname_tl \l_fontspec_fontname_up_tl
\keys_set_known:nxN {fontspec-renderer} {\l_fontspec_keys_leftover_clist}
\l_fontspec_keys_leftover_clist
\keys_set_known:nxN {fontspec-preparse} {\l_fontspec_keys_leftover_clist}
\l_fontspec_fontfeat_clist
}
\prg_new_conditional:Nnn \fontspec_if_detect_external:n {T}
{
\clist_map_inline:Nn \l_fontspec_extensions_clist
{
\bool_set_false:N \l_tmpa_bool
\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:
}
\cs_set:Nn \fontspec_fullname:n
{
\fontspec_namewrap:n { #1 \l_fontspec_extension_tl }
\l_fontspec_renderer_tl
\l_fontspec_optical_size_tl
}
%% Now we have a unique (in fact, too unique!) string that contains
\prg_new_conditional:Nnn \fontspec_save_family:n {T}
{
\cs_if_exist:cF {g_fontspec_UID_\l_fontspec_fontid_tl}
{
\cs_if_exist:cTF {g_fontspec_family_#1_int}
{ \int_gincr:c {g_fontspec_family_#1_int} }
{ \int_new:c {g_fontspec_family_#1_int} }
\tl_set:Nx \l_fontspec_tmp_tl {#1}
\tl_remove_all:Nn \l_fontspec_tmp_tl {~}
\tl_gset:cx {g_fontspec_UID_\l_fontspec_fontid_tl}
{
\l_fontspec_tmp_tl ( \int_use:c {g_fontspec_family_#1_int} )
}
}
\tl_gset:Nv \l_fontspec_family_tl {g_fontspec_UID_\l_fontspec_fontid_tl}
\cs_if_exist:cTF {g_fontspec_ \l_fontspec_family_tl _prop}
\prg_return_false: \prg_return_true:
}
\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:nTF {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} {Script=\l_fontspec_script_name_tl}
\keys_set:nx {fontspec} {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} {Script=\l_fontspec_script_name_tl}
\keys_set:nx {fontspec} {Language=\l_fontspec_lang_name_tl}
}
}
}
\cs_generate_variant:Nn \prop_gput:Nnn {cnV}
\cs_generate_variant:Nn \prop_gput:Nnn {cnx}
\cs_new:Nn \fontspec_save_fontinfo:nn
{
\prop_new:c {g_fontspec_ \l_fontspec_family_tl _prop}
\prop_gput:cnx {g_fontspec_ \l_fontspec_family_tl _prop} {fontname} {#2}
\prop_gput:cnx {g_fontspec_ \l_fontspec_family_tl _prop} {options} {\g_fontspec_default_fontopts_tl #1}
\prop_gput:cnx {g_fontspec_ \l_fontspec_family_tl _prop} {fontdef}
{
\fontspec_fullname:n {\l_fontspec_fontname_tl} :
\l_fontspec_pre_feat_sclist \l_fontspec_rawfeatures_sclist
}
\prop_gput:cnV {g_fontspec_ \l_fontspec_family_tl _prop} {script-num} \l_fontspec_script_int
\prop_gput:cnV {g_fontspec_ \l_fontspec_family_tl _prop} {lang-num} \l_fontspec_language_int
\prop_gput:cnV {g_fontspec_ \l_fontspec_family_tl _prop} {script-tag} \l_fontspec_script_tl
\prop_gput:cnV {g_fontspec_ \l_fontspec_family_tl _prop} {lang-tag} \l_fontspec_lang_tl
\tl_gset:cx {zf@family@fontname\l_fontspec_family_tl} {#2}
\tl_gset:cx {zf@family@options\l_fontspec_family_tl} {\g_fontspec_default_fontopts_tl #1}
\tl_gset:cx {zf@family@fontdef\l_fontspec_family_tl}
{
\fontspec_fullname:n {\l_fontspec_fontname_tl} :
\l_fontspec_pre_feat_sclist \l_fontspec_rawfeatures_sclist
}
\tl_gset:cV {g_fontspec_script_num_(\l_fontspec_family_tl)_tl} \l_fontspec_script_int
\tl_gset:cV {g_fontspec_lang_num_(\l_fontspec_family_tl)_tl} \l_fontspec_language_int
\tl_gset_eq:cN {g_fontspec_script_(\l_fontspec_family_tl)_tl} \l_fontspec_script_tl
\tl_gset_eq:cN {g_fontspec_lang_(\l_fontspec_family_tl)_tl} \l_fontspec_lang_tl
}
\cs_new:Nn \fontspec_set_upright:
{
\fontspec_make_font_shapes:nnnn \l_fontspec_fontname_tl
\mddefault \updefault \l_fontspec_fontfeat_up_clist
}
\cs_new:Nn \fontspec_set_bold:
{
\bool_if:NF \l_fontspec_nobf_bool
{
\tl_if_empty:NTF \l_fontspec_fontname_bf_tl
{
\fontspec_make_auto_font_shapes:nnnnn \l_fontspec_fontname_tl {/B}
\bfdefault \updefault \l_fontspec_fontfeat_bf_clist
}
{
\fontspec_make_font_shapes:nnnn \l_fontspec_fontname_bf_tl
\bfdefault \updefault \l_fontspec_fontfeat_bf_clist
}
}
}
\cs_new:Nn \fontspec_set_italic:
{
\bool_if:NF \l_fontspec_noit_bool
{
\tl_if_empty:NTF \l_fontspec_fontname_it_tl
{ \fontspec_make_auto_font_shapes:nnnnn \l_fontspec_fontname_tl {/I} }
{ \fontspec_make_font_shapes:nnnn \l_fontspec_fontname_it_tl }
\mddefault \itdefault \l_fontspec_fontfeat_it_clist
}
}
\cs_new:Nn \fontspec_set_slanted:
{
\tl_if_empty:NF \l_fontspec_fontname_sl_tl
{
\fontspec_make_font_shapes:nnnn
\l_fontspec_fontname_sl_tl \mddefault \sldefault
\l_fontspec_fontfeat_sl_clist
}
}
\cs_new:Nn \fontspec_set_bold_italic:
{
\bool_if:nF {\l_fontspec_noit_bool || \l_fontspec_nobf_bool}
{
\tl_if_empty:NTF \l_fontspec_fontname_bfit_tl
{
\tl_if_empty:NTF \l_fontspec_fontname_bf_tl
{
\tl_if_empty:NTF \l_fontspec_fontname_it_tl
{
\fontspec_make_auto_font_shapes:nnnnn \l_fontspec_fontname_tl {/BI}
}
{
\fontspec_make_auto_font_shapes:nnnnn \l_fontspec_fontname_it_tl {/B}
}
}
{
\fontspec_make_auto_font_shapes:nnnnn \l_fontspec_fontname_bf_tl {/I}
}
}
{
\fontspec_make_font_shapes:nnnn \l_fontspec_fontname_bfit_tl
}
\bfdefault \itdefault \l_fontspec_fontfeat_bfit_clist
}
}
\cs_new:Nn \fontspec_set_bold_slanted:
{
\tl_if_empty:NTF \l_fontspec_fontname_bfsl_tl
{
\tl_if_empty:NF \l_fontspec_fontname_sl_tl
{
\fontspec_make_auto_font_shapes:nnnnn \l_fontspec_fontname_sl_tl {/B}
\bfdefault \sldefault \l_fontspec_fontfeat_bfsl_clist
}
}
{
\fontspec_make_font_shapes:nnnn \l_fontspec_fontname_bfsl_tl
\bfdefault \sldefault \l_fontspec_fontfeat_bfsl_clist
}
}
\cs_new:Nn \fontspec_set_font_type:
{
\bool_set_true:N \l_fontspec_icu_bool
}
\cs_new:Nn \fontspec_make_auto_font_shapes:nnnnn
{
\bool_if:NF \l_fontspec_external_bool
{
\fontspec_font_set:Nnn \l_tmpa_font
{ \fontspec_fullname:n {#1} } {\f@size pt}
\fontspec_font_set:Nnn \l_tmpb_font
{ \fontspec_fullname:n {#1#2} } {\f@size pt}
\str_if_eq_x:nnTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font }
{ \fontspec_info:nx {no-font-shape} {#1#2} }
{ \fontspec_make_font_shapes:nnnn {#1#2}{#3}{#4}{#5} }
}
}
\cs_new:Nn \fontspec_make_font_shapes:nnnn {
\group_begin:
\__fontspec_load_fontname:n {#1}
\fontspec_declare_shape:nnn {#2}{#3}
{ \quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,} #4 }
\tl_if_empty:NTF \l_fontspec_fontname_sc_tl
{
\bool_if:NF \l_fontspec_nosc_bool
{
\fontspec_make_smallcaps:T
{
\fontspec_declare_shape:nnn {#2}
{ \tl_if_eq:NNTF #3 \itdefault \sidefault \scdefault }
{
\quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,}
#4 , Letters=SmallCaps , \l_fontspec_fontfeat_sc_clist
}
}
}
}
{
\__fontspec_load_fontname:n {\l_fontspec_fontname_sc_tl}
\fontspec_declare_shape:nnn {#2}
{ \tl_if_eq:NNTF #3 \itdefault \sidefault \scdefault }
{
\quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,}
#4 , \l_fontspec_fontfeat_sc_clist
}
}
\group_end:
}
\cs_new:Nn \__fontspec_load_fontname:n
{
\tl_set:Nx \l_fontspec_fontname_tl {#1}
\__fontspec_load_external_fontoptions:N \l_fontspec_fontname_tl
\__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {\l_fontspec_fontname_tl}
\prop_get:NVN \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_fontopts_clist
\fontspec_font_set:Nnn \l_fontspec_font {\fontspec_fullname:n {\l_fontspec_fontname_tl}} {\f@size pt}
\font_if_null:NT \l_fontspec_font { \fontspec_error:nx {font-not-found} {#1} }
}
\cs_new:Nn \fontspec_declare_shape:nnn
{
\clist_if_empty:NTF \l_fontspec_sizefeat_clist
{ \__fontspec_declare_shape_nosizing:n {#3} }
{ \__fontspec_declare_shape_withsizing:n {#3} }
\use:x
{
\exp_not:N \DeclareFontShape {\g_fontspec_encoding_tl} {\l_fontspec_family_tl}
{#1} {#2} {\l_fontspec_nfss_tl}{\l_fontspec_postadjust_tl}
}
\__fontspec_declare_shape_slanted:nn {#1} {#2}
\__fontspec_declare_shape_loginfo:nnn {#1} {#2} {#3}
}
\cs_new:Nn \__fontspec_declare_shape_nosizing:n
{
\fontspec_get_features:n {#1}
\tl_set:Nx \l_fontspec_nfss_tl
{
<-> \l_fontspec_scale_tl
\fontspec_fontwrap:n
{
\fontspec_fullname:n {\l_fontspec_fontname_tl} :
\l_fontspec_pre_feat_sclist \l_fontspec_rawfeatures_sclist
}
}
}
\cs_new:Nn \__fontspec_declare_shape_withsizing:n
{
\tl_clear:N \l_fontspec_nfss_tl
\clist_map_inline:Nn \l_fontspec_sizefeat_clist
{
\tl_clear:N \l_fontspec_size_tl
\tl_set_eq:NN \l_fontspec_sizedfont_tl \l_fontspec_fontname_tl
\keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n ##1 }
\l_fontspec_keys_leftover_clist
\tl_if_empty:NT \l_fontspec_size_tl { \fontspec_error:n {no-size-info} }
\fontspec_get_features:n { #1 , \l_fontspec_keys_leftover_clist }
\tl_put_right:Nx \l_fontspec_nfss_tl
{
<\l_fontspec_size_tl> \l_fontspec_scale_tl
\fontspec_fontwrap:n
{
\fontspec_fullname:n { \l_fontspec_sizedfont_tl }
: \l_fontspec_pre_feat_sclist \l_fontspec_rawfeatures_sclist
}
}
}
}
\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})
}
{
\use:x
{
\exp_not:N \DeclareFontShape {\g_fontspec_encoding_tl}{\l_fontspec_family_tl}{#1}{\sldefault}
{<->ssub*\l_fontspec_family_tl/#1/\itdefault}{\l_fontspec_postadjust_tl}
}
}
}
\cs_new:Nn \__fontspec_declare_shape_loginfo:nnn
{
\tl_gput_right:Nx \l_fontspec_defined_shapes_tl
{
\exp_not:n { \\ \\ }
*~ '\exp_not:N \str_case:nnn {#1/#2}
{
{\mddefault/\updefault} {normal}
{\mddefault/\scdefault} {small~ caps}
{\bfdefault/\updefault} {bold}
{\bfdefault/\scdefault} {bold~ small~ caps}
{\mddefault/\itdefault} {italic}
{\mddefault/\sidefault} {italic~ small~ caps}
{\bfdefault/\itdefault} {bold~ italic}
{\bfdefault/\sidefault} {bold~ italic~ small~ caps}
} {#2/#3}'~
with~ NFSS~ spec.: \exp_not:N \\
\l_fontspec_nfss_tl
\tl_if_empty:NF \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 ;
}
}
\cs_new:Nn \fontspec_update_fontid:n
{
\bool_if:NT \l_fontspec_firsttime_bool
{
\tl_gput_right:Nx \l_fontspec_fontid_tl {#1}
}
}
\cs_set:Nn \fontspec_get_features:n
{
\sclist_clear:N \l_fontspec_rawfeatures_sclist
\tl_clear:N \l_fontspec_scale_tl
\tl_set_eq:NN \l_fontspec_opacity_tl \g_fontspec_opacity_tl
\tl_set_eq:NN \l_fontspec_hexcol_tl \g_fontspec_hexcol_tl
\tl_clear:N \l_fontspec_postadjust_tl
\keys_set_known:nxN {fontspec-renderer} {\l_fontspec_fontfeat_clist,#1}
\l_fontspec_keys_leftover_clist
\keys_set:nx {fontspec} {\l_fontspec_keys_leftover_clist}
\str_if_eq_x:nnF { \l_fontspec_hexcol_tl \l_fontspec_opacity_tl }
{ \g_fontspec_hexcol_tl \g_fontspec_opacity_tl }
{
\fontspec_update_featstr:n{color=\l_fontspec_hexcol_tl\l_fontspec_opacity_tl}
}
}
\tl_clear:N \l_fontspec_fontname_bf_tl
\tl_clear:N \l_fontspec_fontname_it_tl
\tl_clear:N \l_fontspec_fake_slant_tl
\tl_clear:N \l_fontspec_fake_embolden_tl
\tl_clear:N \l_fontspec_fontname_bfit_tl
\tl_clear:N \l_fontspec_fontname_sl_tl
\tl_clear:N \l_fontspec_fontname_bfsl_tl
\tl_clear:N \l_fontspec_fontname_sc_tl
\tl_clear:N \l_fontspec_fontfeat_up_clist
\tl_clear:N \l_fontspec_fontfeat_bf_clist
\tl_clear:N \l_fontspec_fontfeat_it_clist
\tl_clear:N \l_fontspec_fontfeat_bfit_clist
\tl_clear:N \l_fontspec_fontfeat_sl_clist
\tl_clear:N \l_fontspec_fontfeat_bfsl_clist
\tl_clear:N \l_fontspec_fontfeat_sc_clist
\tl_clear:N \l_fontspec_script_name_tl
\tl_clear:N \l_fontspec_script_tl
\tl_clear:N \l_fontspec_lang_name_tl
\tl_clear:N \l_fontspec_lang_tl
\clist_clear:N \l_fontspec_sizefeat_clist
\tl_new:N \g_fontspec_hexcol_tl
\tl_new:N \g_fontspec_opacity_tl
\tl_set:Nn \g_fontspec_hexcol_tl {000000}
\tl_set:Nn \g_fontspec_opacity_tl {FF~}
\cs_set:Npn \fontspec_init:
{
\bool_set_false:N \l_fontspec_icu_bool
\bool_set_true:N \l_fontspec_firsttime_bool
\cs_set:Npn \fontspec_namewrap:n ##1
{ name:##1 }
\tl_clear:N \l_fontspec_optical_size_tl
\tl_clear:N \l_fontspec_renderer_tl
\tl_clear:N \l_fontspec_defined_shapes_tl
\tl_set:Nn \l_fontspec_mode_tl {node}
\luatexprehyphenchar =`\- % fixme
\luatexposthyphenchar = 0 % fixme
\luatexpreexhyphenchar = 0 % fixme
\luatexpostexhyphenchar= 0 % fixme
}
\cs_set:Nn \fontspec_make_ot_smallcaps:T
{
\fontspec_check_ot_feat:nT {+smcp} { #1 }
}
\cs_set_eq:NN \fontspec_make_smallcaps:T \fontspec_make_ot_smallcaps:T
\cs_set_eq:NN \sclist_clear:N \tl_clear:N
\cs_new:Nn \sclist_gput_right:Nn
{ \tl_gput_right:Nn #1 {#2;} }
\cs_generate_variant:Nn \sclist_gput_right:Nn {Nx}
\cs_new:Nn \fontspec_update_featstr:n
{
\bool_if:NF \l_fontspec_firsttime_bool
{
\sclist_gput_right:Nx \l_fontspec_rawfeatures_sclist {#1}
}
}
\cs_new:Nn \fontspec_make_feature:nnn
{ \fontspec_make_ICU_feature:n {#3} }
\cs_generate_variant:Nn \fontspec_make_feature:nnn {nnx}
\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:nnTF {#1}{#2}
{
\fontspec_update_fontid:n {+#1,#2}
\fontspec_update_featstr:n {\l_fontspec_feature_string_tl}
}
{ \fontspec_warning:nx {aat-feature-not-exist-in-font} {#1,#2} }
}
}
\cs_new:Nn \fontspec_make_ICU_feature:n
{
\tl_if_empty:nTF {#1}
{ \fontspec_warning:n {icu-feature-not-exist} }
{
\fontspec_check_ot_feat:nTF {#1}
{
\fontspec_update_fontid:n {#1}
\fontspec_update_featstr:n{#1}
}
{ \fontspec_warning:nx {icu-feature-not-exist-in-font} {#1} }
}
}
\cs_new_protected:Nn \fontspec_make_numbered_feature:nn
{
\fontspec_check_ot_feat:nTF {#1}
{
\fontspec_update_fontid:n {#1=#2}
\fontspec_update_featstr:n { #1 = \int_eval:n {#2+1} }
}
{ \fontspec_warning:nx {icu-feature-not-exist-in-font} {#1} }
}
\cs_generate_variant:Nn \fontspec_make_numbered_feature:nn {xn}
\cs_new:Nn \fontspec_define_font_feature:n
{
\keys_define:nn {fontspec} { #1 .multichoice: }
}
\cs_new:Nn \fontspec_define_feature_option:nnnnn
{
\keys_define:nn {fontspec}
{
#1/#2 .code:n = { \fontspec_make_feature:nnn{#3}{#4}{#5} }
}
}
\cs_new:Nn \fontspec_define_numbered_feat:nnnn
{
\keys_define:nn {fontspec}
{
#1/#2 .code:n =
{ \fontspec_make_numbered_feature:nn {#3}{#4} }
}
}
\prg_new_conditional:Nnn \fontspec_make_AAT_feature_string:nn {TF,T,F}
{
\tl_set:Nx \l_tmpa_tl { \XeTeXfeaturename \l_fontspec_font #1 }
\tl_if_empty:NTF \l_tmpa_tl
{ \prg_return_false: }
{
\int_compare:nTF { \XeTeXisexclusivefeature\l_fontspec_font #1 > 0 }
{
\tl_set:Nx \l_tmpb_tl {\XeTeXselectorname\l_fontspec_font #1\space #2}
}
{
\int_if_even:nTF {#2}
{
\tl_set:Nx \l_tmpb_tl {\XeTeXselectorname\l_fontspec_font #1\space #2}
}
{
\tl_set:Nx \l_tmpb_tl
{
\XeTeXselectorname\l_fontspec_font #1\space \numexpr#2-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:
}
}
}
\cs_set:Nn \fontspec_iv_str_to_num:Nn
{
\fontspec_iv_str_to_num:w #1 \q_nil #2 \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
}
}
\cs_generate_variant:Nn \fontspec_iv_str_to_num:Nn {No}
\cs_set:Nn \fontspec_v_str_to_num:Nn
{
\bool_if:nTF
{
\tl_if_head_eq_charcode_p:nN {#2} {+} ||
\tl_if_head_eq_charcode_p:nN {#2} {-}
}
{ \fontspec_iv_str_to_num:No #1 { \use_none:n #2 } }
{ \fontspec_iv_str_to_num:Nn #1 {#2} }
}
\prg_new_conditional:Nnn \fontspec_check_script:n {TF}
{
\directlua{fontspec.check_ot_script("l_fontspec_font", "#1")}
\if@tempswa \prg_return_true: \else: \prg_return_false: \fi:
}
\prg_new_conditional:Nnn \fontspec_check_lang:n {TF}
{
\directlua
{
fontspec.check_ot_lang( "l_fontspec_font", "#1", "\l_fontspec_script_tl" )
}
\if@tempswa \prg_return_true: \else: \prg_return_false: \fi:
}
\prg_new_conditional:Nnn \fontspec_check_ot_feat:n {TF,T}
{
\directlua
{
fontspec.check_ot_feat(
"l_fontspec_font", "#1",
"\l_fontspec_lang_tl", "\l_fontspec_script_tl"
)
}
\if@tempswa \prg_return_true: \else: \prg_return_false: \fi:
}
\cs_new:Nn \__fontspec_keys_define_code:nnn
{
\keys_define:nn {#1} { #2 .code:n = {#3} }
}
\bool_new:N \l_fontspec_external_bool
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {ExternalLocation}
{
\bool_set_true:N \l_fontspec_nobf_bool
\bool_set_true:N \l_fontspec_noit_bool
\bool_set_true:N \l_fontspec_external_bool
\cs_gset:Npn \fontspec_namewrap:n ##1
{ file: #1 ##1 }
}
\aliasfontfeature{ExternalLocation}{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} {ExternalLocation}
}
}
\tl_clear:N \l_fontspec_extension_tl
\keys_define:nn {fontspec-renderer}
{
Renderer .choice_code:n =
{
\fontspec_update_fontid:n {+rend:\l_keys_choice_tl}
\int_compare:nTF {\l_keys_choice_int <= 3} {
\fontspec_warning:nx {only-xetex-feature} {Renderer=AAT/ICU/Graphite}
}
{
\tl_set:Nv \l_fontspec_mode_tl
{ g_fontspec_mode_tag_ \l_keys_choice_tl }
}
}
,
Renderer .generate_choices:n = {AAT,ICU,Graphite,Full,Basic}
}
\tl_set:cn {g_fontspec_renderer_tag_AAT} {/AAT}
\tl_set:cn {g_fontspec_renderer_tag_ICU} {/ICU}
\tl_set:cn {g_fontspec_renderer_tag_Graphite} {/GR}
\tl_set:cn {g_fontspec_mode_tag_Full} {node}
\tl_set:cn {g_fontspec_mode_tag_Basic} {base}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {Script}
{
\tl_set:Nn \l_fontspec_script_name_tl {#1}
\fontspec_update_fontid:n {+script:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {Language}
{
\tl_set:Nn \l_fontspec_lang_name_tl {#1}
\fontspec_update_fontid:n {+language:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont}
{
\fontspec_complete_fontname:Nn \l_fontspec_fontname_up_tl {#1}
\fontspec_update_fontid:n {up:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldFont}
{
\tl_if_empty:nTF {#1}
{
\bool_set_true:N \l_fontspec_nobf_bool
\fontspec_update_fontid:n {nobf}
}
{
\bool_set_false:N \l_fontspec_nobf_bool
\fontspec_complete_fontname:Nn \l_fontspec_fontname_bf_tl {#1}
\fontspec_update_fontid:n {bf:#1}
}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont}
{
\tl_if_empty:nTF {#1}
{
\bool_set_true:N \l_fontspec_noit_bool
\fontspec_update_fontid:n {noit}
}
{
\bool_set_false:N \l_fontspec_noit_bool
\fontspec_complete_fontname:Nn \l_fontspec_fontname_it_tl {#1}
\fontspec_update_fontid:n {it:#1}
}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont}
{
\fontspec_complete_fontname:Nn \l_fontspec_fontname_bfit_tl {#1}
\fontspec_update_fontid:n {bfit:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont}
{
\fontspec_complete_fontname:Nn \l_fontspec_fontname_sl_tl {#1}
\fontspec_update_fontid:n {sl:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont}
{
\fontspec_complete_fontname:Nn \l_fontspec_fontname_bfsl_tl {#1}
\fontspec_update_fontid:n {bfsl:#1}
}
\__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFont}
{
\tl_if_empty:nTF {#1}
{
\bool_set_true:N \l_fontspec_nosc_bool
\fontspec_update_fontid:n {nosc}
}
{
\bool_set_true:N \l_fontspec_nosc_bool
\fontspec_complete_fontname:Nn \l_fontspec_fontname_sc_tl {#1}
\fontspec_update_fontid:n {sc:#1}
}
}
\cs_set:Nn \fontspec_complete_fontname:Nn
{
\tl_set:Nn #1 {#2}
\tl_replace_all:Nnx #1 {*} {\l_fontspec_fontname_tl}
\tl_remove_all:Nn #1 {~}
}
\cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures}
{
\tl_set:Nn \l_fontspec_fontfeat_up_clist { , #1}
\fontspec_update_fontid:n {rmfeat:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures}
{
\tl_set:Nn \l_fontspec_fontfeat_bf_clist {, #1}
\fontspec_update_fontid:n {bffeat:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures}
{
\tl_set:Nn \l_fontspec_fontfeat_it_clist {, #1}
\fontspec_update_fontid:n {itfeat:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures}
{
\tl_set:Nn \l_fontspec_fontfeat_bfit_clist {, #1}
\fontspec_update_fontid:n {bfitfeat:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures}
{
\tl_set:Nn \l_fontspec_fontfeat_sl_clist {, #1}
\fontspec_update_fontid:n {slfeat:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures}
{
\tl_set:Nn \l_fontspec_fontfeat_bfsl_clist {, #1}
\fontspec_update_fontid:n {bfslfeat:#1}
}
\__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures}
{
\bool_if:NF \l_fontspec_firsttime_bool
{
\tl_set:Nn \l_fontspec_fontfeat_sc_clist {, #1}
}
\fontspec_update_fontid:n {scfeat:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures}
{
\tl_set:Nn \l_fontspec_sizefeat_clist {#1}
\fontspec_update_fontid:n {sizefeat:#1}
}
\__fontspec_keys_define_code:nnn {fontspec-sizing} {Size}
{
\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_keys_define_code:nnn {fontspec} {Scale}
{
\str_case:nnn {#1}
{
{MatchLowercase} { \fontspec_calc_scale:n {5} }
{MatchUppercase} { \fontspec_calc_scale:n {8} }
}
{ \tl_set:Nx \l_fontspec_scale_tl {#1} }
\fontspec_update_fontid:n {+scale:\l_fontspec_scale_tl}
\tl_set:Nx \l_fontspec_scale_tl { s*[\l_fontspec_scale_tl] }
}
\cs_new:Nn \fontspec_calc_scale:n
{
\group_begin:
\rmfamily
\fontspec_set_font_dimen:NnN \l_fontspec_tmpa_dim {#1} \font
\fontspec_set_font_dimen:NnN \l_fontspec_tmpb_dim {#1} \l_fontspec_font
\fp_set_from_dim:Nn \l_fontspec_tmpa_fp { \l_fontspec_tmpa_dim }
\fp_set_from_dim:Nn \l_fontspec_tmpb_fp { \l_fontspec_tmpb_dim }
\fp_div:Nn \l_fontspec_tmpa_fp { \l_fontspec_tmpb_fp }
\tl_gset:Nx \l_fontspec_scale_tl { \fp_use:N \l_fontspec_tmpa_fp }
\fontspec_info:n {set-scale}
\group_end:
}
\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:nnn #2
{
{5} {x} % x-height
{8} {X} % cap-height
} {?} % "else" clause; never reached.
}
}
}
\__fontspec_keys_define_code:nnn {fontspec} {WordSpace}
{
\fontspec_update_fontid:n {+wordspace:#1}
\bool_if:NF \l_fontspec_firsttime_bool
{ \_fontspec_parse_wordspace:w #1,,,\q_stop }
}
\cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop
{
\tl_if_empty:nTF {#4}
{
\tl_put_right:Nn \l_fontspec_postadjust_tl
{
\fontdimen 2 \font = #1 \fontdimen 2 \font
\fontdimen 3 \font = #1 \fontdimen 3 \font
\fontdimen 4 \font = #1 \fontdimen 4 \font
}
}
{
\tl_put_right:Nn \l_fontspec_postadjust_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}
{
\fontspec_update_fontid:n {+punctspace:#1}
\tl_put_right:Nx \l_fontspec_postadjust_tl
{ \fontdimen 7 \font = #1 \fontdimen 7 \font }
}
\__fontspec_keys_define_code:nnn {fontspec} {FontAdjustment}
{
\fontspec_update_fontid:n {+fontadjust:\detokenize{#1}}
\tl_put_right:Nx \l_fontspec_postadjust_tl {#1}
}
\__fontspec_keys_define_code:nnn {fontspec} {LetterSpace}
{
\fontspec_update_fontid:n {+tracking:#1}
\fontspec_update_featstr:n{letterspace=#1}
}
\__fontspec_keys_define_code:nnn {fontspec} {HyphenChar}
{
\fontspec_update_fontid:n {+hyphenchar:#1}
\str_if_eq:nnTF {#1} {None}
{
\tl_put_right:Nn \l_fontspec_postadjust_tl
{ \hyphenchar \font = \c_minus_one }
}
{
\tl_if_single:nTF {#1}
{ \tl_set:Nn \l_fontspec_hyphenchar_tl {`#1} }
{ \tl_set:Nn \l_fontspec_hyphenchar_tl { #1} }
\font_glyph_if_exist:NnTF \l_fontspec_font {\l_fontspec_hyphenchar_tl}
{
\tl_put_right:Nn \l_fontspec_postadjust_tl
{
\hyphenchar \font = \c_zero
\luatexprehyphenchar = \l_fontspec_hyphenchar_tl \scan_stop:
}
}
{ \fontspec_error:nx {no-glyph}{#1} }
}
}
\__fontspec_keys_define_code:nnn {fontspec} {Color}
{
\fontspec_update_fontid:n {+col:#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 \g_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}
\int_new:N \l_fontspec_tmp_int
\__fontspec_keys_define_code:nnn {fontspec} {Opacity}
{
\fontspec_update_fontid:n {+opac:#1}
\int_set:Nn \l_fontspec_tmp_int {255}
\_int_mult_truncate:Nn \l_fontspec_tmp_int { #1 }
\tl_if_eq:NNF \l_fontspec_opacity_tl \g_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_hexadecimal:n { \l_fontspec_tmp_int }
}
}
\__fontspec_keys_define_code:nnn {fontspec} {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} { Ligatures=TeX }
}
{ \fontspec_warning:n {no-mapping} }
}
\__fontspec_keys_define_code:nnn {fontspec} {FeatureFile}
{
\fontspec_update_fontid:n {+fea:#1}
\fontspec_update_featstr:n{featurefile=#1}
}
\__fontspec_keys_define_code:nnn {fontspec} {Weight}
{
\fontspec_update_fontid:n {+weight:#1}
\fontspec_update_featstr:n{weight=#1}
}
\__fontspec_keys_define_code:nnn {fontspec} {Width}
{
\fontspec_update_fontid: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}
\fontspec_update_fontid:n {+size:#1}
}
\keys_define:nn {fontspec}
{
FakeSlant .code:n =
{
\fontspec_update_fontid:n {+slant:#1}
\fontspec_update_featstr:n{slant=#1}
},
FakeSlant .default:n = {0.2}
}
\keys_define:nn {fontspec}
{
FakeStretch .code:n =
{
\fontspec_update_fontid:n {+extend:#1}
\fontspec_update_featstr:n{extend=#1}
},
FakeStretch .default:n = {1.2}
}
\keys_define:nn {fontspec}
{
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
\fontspec_update_fontid:n {fakeit:#1}
\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
\fontspec_update_fontid:n {fakebf:#1}
\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_define_font_feature:n{Ligatures}
\fontspec_define_feature_option:nnnnn{Ligatures}{Required} {1}{0}{+rlig}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoRequired} {1}{1}{-rlig}
\fontspec_define_feature_option:nnnnn{Ligatures}{Common} {1}{2}{+liga}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoCommon} {1}{3}{-liga}
\fontspec_define_feature_option:nnnnn{Ligatures}{Rare} {1}{4}{+dlig}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoRare} {1}{5}{-dlig}
\fontspec_define_feature_option:nnnnn{Ligatures}{Discretionary} {1}{4}{+dlig}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoDiscretionary}{1}{5}{-dlig}
\fontspec_define_feature_option:nnnnn{Ligatures}{Contextual} {}{} {+clig}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoContextual} {}{} {-clig}
\fontspec_define_feature_option:nnnnn{Ligatures}{Historic} {}{} {+hlig}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoHistoric} {}{} {-hlig}
\fontspec_define_feature_option:nnnnn{Ligatures}{Logos} {1}{6} {}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoLogos} {1}{7} {}
\fontspec_define_feature_option:nnnnn{Ligatures}{Rebus} {1}{8} {}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoRebus} {1}{9} {}
\fontspec_define_feature_option:nnnnn{Ligatures}{Diphthong} {1}{10}{}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoDiphthong} {1}{11}{}
\fontspec_define_feature_option:nnnnn{Ligatures}{Squared} {1}{12}{}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoSquared} {1}{13}{}
\fontspec_define_feature_option:nnnnn{Ligatures}{AbbrevSquared} {1}{14}{}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoAbbrevSquared}{1}{15}{}
\fontspec_define_feature_option:nnnnn{Ligatures}{Icelandic} {1}{32}{}
\fontspec_define_feature_option:nnnnn{Ligatures}{NoIcelandic} {1}{33}{}
\keys_define:nn {fontspec}
{
Ligatures / TeX .code:n =
{
\fontspec_update_fontid:n {+tlig+trep}
\fontspec_update_featstr:n{+tlig;+trep}
}
}
\fontspec_define_font_feature:n{Letters}
\fontspec_define_feature_option:nnnnn{Letters}{Normal} {3}{0}{}
\fontspec_define_feature_option:nnnnn{Letters}{Uppercase} {3}{1}{+case}
\fontspec_define_feature_option:nnnnn{Letters}{Lowercase} {3}{2}{}
\fontspec_define_feature_option:nnnnn{Letters}{SmallCaps} {3}{3}{+smcp}
\fontspec_define_feature_option:nnnnn{Letters}{PetiteCaps} {} {} {+pcap}
\fontspec_define_feature_option:nnnnn{Letters}{UppercaseSmallCaps} {} {} {+c2sc}
\fontspec_define_feature_option:nnnnn{Letters}{UppercasePetiteCaps}{} {} {+c2pc}
\fontspec_define_feature_option:nnnnn{Letters}{InitialCaps} {3}{4}{}
\fontspec_define_feature_option:nnnnn{Letters}{Unicase} {} {} {+unic}
\fontspec_define_feature_option:nnnnn{Letters}{Random} {} {} {+rand}
\fontspec_define_font_feature:n{Numbers}
\fontspec_define_feature_option:nnnnn{Numbers}{Monospaced} {6} {0}{+tnum}
\fontspec_define_feature_option:nnnnn{Numbers}{Proportional} {6} {1}{+pnum}
\fontspec_define_feature_option:nnnnn{Numbers}{Lowercase} {21}{0}{+onum}
\fontspec_define_feature_option:nnnnn{Numbers}{OldStyle} {21}{0}{+onum}
\fontspec_define_feature_option:nnnnn{Numbers}{Uppercase} {21}{1}{+lnum}
\fontspec_define_feature_option:nnnnn{Numbers}{Lining} {21}{1}{+lnum}
\fontspec_define_feature_option:nnnnn{Numbers}{SlashedZero} {14}{5}{+zero}
\fontspec_define_feature_option:nnnnn{Numbers}{NoSlashedZero}{14}{4}{-zero}
\luatex_if_engine:T
{
\fontspec_define_feature_option:nnnnn{Numbers}{Arabic}{}{}{+anum}
}
\fontspec_define_font_feature:n {Contextuals}
\fontspec_define_feature_option:nnnnn{Contextuals}{Swash} {} {} {+cswh}
\fontspec_define_feature_option:nnnnn{Contextuals}{NoSwash} {} {} {-cswh}
\fontspec_define_feature_option:nnnnn{Contextuals}{Alternate} {} {} {+calt}
\fontspec_define_feature_option:nnnnn{Contextuals}{NoAlternate} {} {} {-calt}
\fontspec_define_feature_option:nnnnn{Contextuals}{WordInitial} {8}{0}{+init}
\fontspec_define_feature_option:nnnnn{Contextuals}{NoWordInitial}{8}{1}{-init}
\fontspec_define_feature_option:nnnnn{Contextuals}{WordFinal} {8}{2}{+fina}
\fontspec_define_feature_option:nnnnn{Contextuals}{NoWordFinal} {8}{3}{-fina}
\fontspec_define_feature_option:nnnnn{Contextuals}{LineInitial} {8}{4}{}
\fontspec_define_feature_option:nnnnn{Contextuals}{NoLineInitial}{8}{5}{}
\fontspec_define_feature_option:nnnnn{Contextuals}{LineFinal} {8}{6}{+falt}
\fontspec_define_feature_option:nnnnn{Contextuals}{NoLineFinal} {8}{7}{-falt}
\fontspec_define_feature_option:nnnnn{Contextuals}{Inner} {8}{8}{+medi}
\fontspec_define_feature_option:nnnnn{Contextuals}{NoInner} {8}{9}{-medi}
\fontspec_define_font_feature:n{Diacritics}
\fontspec_define_feature_option:nnnnn{Diacritics}{Show} {9}{0}{}
\fontspec_define_feature_option:nnnnn{Diacritics}{Hide} {9}{1}{}
\fontspec_define_feature_option:nnnnn{Diacritics}{Decompose} {9}{2}{}
\fontspec_define_feature_option:nnnnn{Diacritics}{MarkToBase} {}{}{+mark}
\fontspec_define_feature_option:nnnnn{Diacritics}{NoMarkToBase}{}{}{-mark}
\fontspec_define_feature_option:nnnnn{Diacritics}{MarkToMark} {}{}{+mkmk}
\fontspec_define_feature_option:nnnnn{Diacritics}{NoMarkToMark}{}{}{-mkmk}
\fontspec_define_feature_option:nnnnn{Diacritics}{AboveBase} {}{}{+abvm}
\fontspec_define_feature_option:nnnnn{Diacritics}{NoAboveBase} {}{}{-abvm}
\fontspec_define_feature_option:nnnnn{Diacritics}{BelowBase} {}{}{+blwm}
\fontspec_define_feature_option:nnnnn{Diacritics}{NoBelowBase} {}{}{-blwm}
\fontspec_define_font_feature:n{Kerning}
\fontspec_define_feature_option:nnnnn{Kerning}{Uppercase}{}{}{+cpsp}
\fontspec_define_feature_option:nnnnn{Kerning}{On} {}{}{+kern}
\fontspec_define_feature_option:nnnnn{Kerning}{Off} {}{}{-kern}
\fontspec_define_font_feature:n{VerticalPosition}
\fontspec_define_feature_option:nnnnn{VerticalPosition}{Normal} {10}{0}{}
\fontspec_define_feature_option:nnnnn{VerticalPosition}{Superior} {10}{1}{+sups}
\fontspec_define_feature_option:nnnnn{VerticalPosition}{Inferior} {10}{2}{+subs}
\fontspec_define_feature_option:nnnnn{VerticalPosition}{Ordinal} {10}{3}{+ordn}
\fontspec_define_feature_option:nnnnn{VerticalPosition}{Numerator} {} {} {+numr}
\fontspec_define_feature_option:nnnnn{VerticalPosition}{Denominator}{} {} {+dnom}
\fontspec_define_feature_option:nnnnn{VerticalPosition}{ScientificInferior}{}{}{+sinf}
\fontspec_define_font_feature:n{Fractions}
\fontspec_define_feature_option:nnnnn{Fractions}{On} {11}{1}{+frac}
\fontspec_define_feature_option:nnnnn{Fractions}{Off} {11}{0}{-frac}
\fontspec_define_feature_option:nnnnn{Fractions}{Diagonal} {11}{2}{}
\fontspec_define_feature_option:nnnnn{Fractions}{Alternate}{} {} {+afrc}
\fontspec_define_font_feature:n { Alternate }
\keys_define:nn {fontspec}
{
Alternate .default:n = {0} ,
Alternate / unknown .code:n =
{
\clist_map_inline:nn {#1}
{ \fontspec_make_feature:nnx {17}{##1} { \fontspec_salt:n {##1} } }
}
}
\cs_set:Nn \fontspec_salt:n
{ +salt = \int_eval:n {#1+1} }
\fontspec_define_font_feature:n {Variant}
\keys_define:nn {fontspec}
{
Variant .default:n = {0} ,
Variant / unknown .code:n =
{
\clist_map_inline:nn {#1}
{ \fontspec_make_feature:nnx {18}{##1} { +ss \two@digits {##1} } }
}
}
\aliasfontfeature{Variant}{StylisticSet}
\fontspec_define_font_feature: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_numbered_feature:xn
{ +cv \exp_not:N \two@digits {##1} } {##2}
}
\keys_define:nn {fontspec}
{
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
}
}
}
}
\keys_define:nn {fontspec}
{
ScriptStyle .code:n =
{
\fontspec_update_fontid:n {+ssty=1}
\fontspec_update_featstr:n{+sstyle}
},
ScriptScriptStyle .code:n =
{
\fontspec_update_fontid:n {+ssty=2}
\fontspec_update_featstr:n{+ssstyle}
}
}
\fontspec_define_font_feature:n{Style}
\fontspec_define_feature_option:nnnnn{Style}{Alternate} {} {} {+salt}
\fontspec_define_feature_option:nnnnn{Style}{Italic} {32}{2}{+ital}
\fontspec_define_feature_option:nnnnn{Style}{Ruby} {28}{2}{+ruby}
\fontspec_define_feature_option:nnnnn{Style}{Swash} {} {} {+swsh}
\fontspec_define_feature_option:nnnnn{Style}{Historic} {} {} {+hist}
\fontspec_define_feature_option:nnnnn{Style}{Display} {19}{1}{}
\fontspec_define_feature_option:nnnnn{Style}{Engraved} {19}{2}{}
\fontspec_define_feature_option:nnnnn{Style}{TitlingCaps} {19}{4}{+titl}
\fontspec_define_feature_option:nnnnn{Style}{TallCaps} {19}{5}{}
\fontspec_define_feature_option:nnnnn{Style}{HorizontalKana}{} {} {+hkna}
\fontspec_define_feature_option:nnnnn{Style}{VerticalKana} {} {} {+vkna}
\fontspec_define_numbered_feat:nnnn {Style} {MathScript} {+ssty} {0}
\fontspec_define_numbered_feat:nnnn {Style} {MathScriptScript} {+ssty} {1}
\fontspec_define_font_feature:n{CJKShape}
\fontspec_define_feature_option:nnnnn{CJKShape}{Traditional}{20}{0} {+trad}
\fontspec_define_feature_option:nnnnn{CJKShape}{Simplified} {20}{1} {+smpl}
\fontspec_define_feature_option:nnnnn{CJKShape}{JIS1978} {20}{2} {+jp78}
\fontspec_define_feature_option:nnnnn{CJKShape}{JIS1983} {20}{3} {+jp83}
\fontspec_define_feature_option:nnnnn{CJKShape}{JIS1990} {20}{4} {+jp90}
\fontspec_define_feature_option:nnnnn{CJKShape}{Expert} {20}{10}{+expt}
\fontspec_define_feature_option:nnnnn{CJKShape}{NLC} {20}{13}{+nlck}
\fontspec_define_font_feature:n{CharacterWidth}
\fontspec_define_feature_option:nnnnn{CharacterWidth}{Proportional}{22}{0}{+pwid}
\fontspec_define_feature_option:nnnnn{CharacterWidth}{Full}{22}{1}{+fwid}
\fontspec_define_feature_option:nnnnn{CharacterWidth}{Half}{22}{2}{+hwid}
\fontspec_define_feature_option:nnnnn{CharacterWidth}{Third}{22}{3}{+twid}
\fontspec_define_feature_option:nnnnn{CharacterWidth}{Quarter}{22}{4}{+qwid}
\fontspec_define_feature_option:nnnnn{CharacterWidth}{AlternateProportional}{22}{5}{+palt}
\fontspec_define_feature_option:nnnnn{CharacterWidth}{AlternateHalf}{22}{6}{+halt}
\fontspec_define_feature_option:nnnnn{CharacterWidth}{Default}{22}{7}{}
\fontspec_define_feature_option:nnnnn{Annotation}{Off}{24}{0}{}
\fontspec_define_feature_option:nnnnn{Annotation}{Box}{24}{1}{}
\fontspec_define_feature_option:nnnnn{Annotation}{RoundedBox}{24}{2}{}
\fontspec_define_feature_option:nnnnn{Annotation}{Circle}{24}{3}{}
\fontspec_define_feature_option:nnnnn{Annotation}{BlackCircle}{24}{4}{}
\fontspec_define_feature_option:nnnnn{Annotation}{Parenthesis}{24}{5}{}
\fontspec_define_feature_option:nnnnn{Annotation}{Period}{24}{6}{}
\fontspec_define_feature_option:nnnnn{Annotation}{RomanNumerals}{24}{7}{}
\fontspec_define_feature_option:nnnnn{Annotation}{Diamond}{24}{8}{}
\fontspec_define_feature_option:nnnnn{Annotation}{BlackSquare}{24}{9}{}
\fontspec_define_feature_option:nnnnn{Annotation}{BlackRoundSquare}{24}{10}{}
\fontspec_define_feature_option:nnnnn{Annotation}{DoubleCircle}{24}{11}{}
\fontspec_define_font_feature:n { Annotation }
\keys_define:nn {fontspec}
{
Annotation .default:n = {0} ,
Annotation / unknown .code:n =
{
\fontspec_make_feature:nnx {}{}
{ +nalt= \int_eval:n {#1+1} }
}
}
\keys_define:nn {fontspec}
{
Vertical .choice: ,
Vertical / RotatedGlyphs .code:n =
{
\bool_if:NTF \l_fontspec_icu_bool
{
\fontspec_make_feature:nnn{}{}{+vrt2}
\fontspec_update_fontid:n {+vert}
\fontspec_update_featstr:n{vertical}
}
{
\fontspec_update_fontid:n {+vert}
\fontspec_update_featstr:n{vertical}
}
}
}
\newfontscript{Arabic}{arab} \newfontscript{Armenian}{armn}
\newfontscript{Balinese}{bali} \newfontscript{Bengali}{beng}
\newfontscript{Bopomofo}{bopo} \newfontscript{Braille}{brai}
\newfontscript{Buginese}{bugi} \newfontscript{Buhid}{buhd}
\newfontscript{Byzantine~Music}{byzm}
\newfontscript{Canadian~Syllabics}{cans}
\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}{deva} \newfontscript{Ethiopic}{ethi}
\newfontscript{Georgian}{geor} \newfontscript{Glagolitic}{glag}
\newfontscript{Gothic}{goth} \newfontscript{Greek}{grek}
\newfontscript{Gujarati}{gujr} \newfontscript{Gurmukhi}{guru}
\newfontscript{Hangul~Jamo}{jamo} \newfontscript{Hangul}{hang}
\newfontscript{Hanunoo}{hano} \newfontscript{Hebrew}{hebr}
\newfontscript{Hiragana~and~Katakana}{kana}
\newfontscript{Javanese}{java} \newfontscript{Kannada}{knda}
\newfontscript{Kharosthi}{khar} \newfontscript{Khmer}{khmr}
\newfontscript{Lao}{lao~} \newfontscript{Latin}{latn}
\newfontscript{Limbu}{limb} \newfontscript{Linear~B}{linb}
\newfontscript{Malayalam}{mlym} \newfontscript{Math}{math}
\newfontscript{Mongolian}{mong}
\newfontscript{Musical~Symbols}{musc} \newfontscript{Myanmar}{mymr}
\newfontscript{N'ko}{nko~} \newfontscript{Ogham}{ogam}
\newfontscript{Old~Italic}{ital}
\newfontscript{Old~Persian~Cuneiform}{xpeo}
\newfontscript{Oriya}{orya} \newfontscript{Osmanya}{osma}
\newfontscript{Phags-pa}{phag} \newfontscript{Phoenician}{phnx}
\newfontscript{Runic}{runr} \newfontscript{Shavian}{shaw}
\newfontscript{Sinhala}{sinh}
\newfontscript{Sumero-Akkadian~Cuneiform}{xsux}
\newfontscript{Syloti~Nagri}{sylo} \newfontscript{Syriac}{syrc}
\newfontscript{Tagalog}{tglg} \newfontscript{Tagbanwa}{tagb}
\newfontscript{Tai~Le}{tale} \newfontscript{Tai~Lu}{talu}
\newfontscript{Tamil}{taml} \newfontscript{Telugu}{telu}
\newfontscript{Thaana}{thaa} \newfontscript{Thai}{thai}
\newfontscript{Tibetan}{tibt} \newfontscript{Tifinagh}{tfng}
\newfontscript{Ugaritic~Cuneiform}{ugar}\newfontscript{Yi}{yi~~}
\newfontscript{Kana}{kana}
\newfontscript{Maths}{math}
\newfontscript{CJK}{hani}
\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}
\keys_define:nn {fontspec}
{
Language / Turkish .code:n =
{
\fontspec_check_lang:nTF {TRK}
{
\int_set:Nn \l_fontspec_language_int {\l_fontspec_strnum_int}
\fontspec_update_fontid:n {+lang=Turkish}
\tl_set:Nn \l_fontspec_lang_tl {TRK}
}
{
\fontspec_check_lang:nTF {TUR}
{
\int_set:Nn \l_fontspec_language_int {\l_fontspec_strnum_int}
\fontspec_update_fontid:n {+lang=Turkish}
\tl_set:Nn \l_fontspec_lang_tl {TUR}
}
{
\fontspec_warning:nx {language-not-exist} {Turkish}
\keys_set:nn {fontspec} {Language=Default}
}
}
}
}
\__fontspec_keys_define_code:nnn {fontspec}{ Language / Default }
{
\fontspec_update_fontid:n {+lang=dflt}
\tl_set:Nn \l_fontspec_lang_tl {DFLT}
\int_zero:N \l_fontspec_language_int
}
\__fontspec_keys_define_code:nnn {fontspec} {RawFeature}
{
\fontspec_update_fontid:n {+Raw:#1}
\fontspec_update_featstr:n{#1}
}
\providecommand*{\sidefault}{si}
\DeclareRobustCommand{\sishape}
{
\not@math@alphabet\sishape\relax
\fontshape\sidefault\selectfont
}
\DeclareTextFontCommand{\textsi}{\sishape}
\cs_new:Nn \fontspec_blend_shape:nnn
{
\bool_if:nTF
{
\str_if_eq_x_p:nn {\f@shape} {#2} &&
\cs_if_exist_p:c {\f@encoding/\f@family/\f@series/#3}
}
{ \fontshape{#3}\selectfont }
{ \fontshape{#1}\selectfont }
}
\DeclareRobustCommand \itshape
{
\not@math@alphabet\itshape\mathit
\fontspec_blend_shape:nnn\itdefault\scdefault\sidefault
}
\DeclareRobustCommand \slshape
{
\not@math@alphabet\slshape\relax
\fontspec_blend_shape:nnn\sldefault\scdefault\sidefault
}
\DeclareRobustCommand \scshape
{
\not@math@alphabet\scshape\relax
\fontspec_blend_shape:nnn\scdefault\itdefault\sidefault
}
\DeclareRobustCommand \upshape
{
\not@math@alphabet\upshape\relax
\fontspec_blend_shape:nnn\updefault\sidefault\scdefault
}
\@ifpackageloaded{euler}
{
\bool_set_true:N \g_fontspec_package_euler_loaded_bool
}
{
\bool_set_false:N \g_fontspec_package_euler_loaded_bool
}
\cs_set:Nn \fontspec_setup_maths:
{
\@ifpackageloaded{euler}
{
\bool_if:NTF \g_fontspec_package_euler_loaded_bool
{ \bool_set_true:N \g_fontspec_math_euler_bool }
{ \fontspec_error:n {euler-too-late} }
}
{}
\@ifpackageloaded{lucbmath}{\bool_set_true:N \g_fontspec_math_lucida_bool}{}
\@ifpackageloaded{lucidabr}{\bool_set_true:N \g_fontspec_math_lucida_bool}{}
\@ifpackageloaded{lucimatx}{\bool_set_true:N \g_fontspec_math_lucida_bool}{}
\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}
\group_begin:
\mathchardef\@tempa="603A \relax
\ifx\colon\@tempa
\DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58}
\fi
\group_end:
\bool_if:NF \g_fontspec_math_euler_bool
{
\DeclareMathSymbol{!}{\mathclose}{legacymaths}{33}
\DeclareMathSymbol{:}{\mathrel} {legacymaths}{58}
\DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59}
\DeclareMathSymbol{?}{\mathclose}{legacymaths}{63}
\bool_if:NF \g_fontspec_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}
}
}
\DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g_fontspec_mathrm_tl\mddefault\updefault
\SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g_fontspec_mathrm_tl\mddefault\updefault
\SetMathAlphabet\mathrm{normal}\g_fontspec_encoding_tl\g_fontspec_mathrm_tl\mddefault\updefault
\SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g_fontspec_mathrm_tl\mddefault\itdefault
\SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g_fontspec_mathrm_tl\bfdefault\updefault
\SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g_fontspec_mathsf_tl\mddefault\updefault
\SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g_fontspec_mathtt_tl\mddefault\updefault
\SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g_fontspec_mathrm_tl\bfdefault\updefault
\tl_if_empty:NTF \g_fontspec_bfmathrm_tl
{
\SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g_fontspec_mathrm_tl\bfdefault\updefault
\SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_fontspec_mathrm_tl\bfdefault\itdefault
}
{
\SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g_fontspec_bfmathrm_tl\mddefault\updefault
\SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g_fontspec_bfmathrm_tl\bfdefault\updefault
\SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_fontspec_bfmathrm_tl\mddefault\itdefault
}
\SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g_fontspec_mathsf_tl\bfdefault\updefault
\SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g_fontspec_mathtt_tl\bfdefault\updefault
}
\cs_new:Nn \fontspec_maybe_setup_maths:
{
\@ifpackageloaded{anttor}
{
\ifx\define@antt@mathversions a\bool_set_false:N \g_fontspec_math_bool\fi
}{}
\@ifpackageloaded{arev}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{eulervm}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{mathdesign}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{concmath}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{cmbright}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{mathesf}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{gfsartemisia}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{gfsneohellenic}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{iwona}
{
\ifx\define@iwona@mathversions a\bool_set_false:N \g_fontspec_math_bool\fi
}{}
\@ifpackageloaded{kpfonts}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{kmath}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{kurier}
{
\ifx\define@kurier@mathversions a\bool_set_false:N \g_fontspec_math_bool\fi
}{}
\@ifpackageloaded{fouriernc}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{fourier}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{lmodern}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{mathpazo}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{mathptmx}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{MinionPro}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{unicode-math}{\bool_set_false:N \g_fontspec_math_bool}{}
\@ifpackageloaded{breqn}{\bool_set_false:N \g_fontspec_math_bool}{}
\bool_if:NT \g_fontspec_math_bool
{
\fontspec_info:n {setup-math}
\fontspec_setup_maths:
}
}
\AtBeginDocument{\fontspec_maybe_setup_maths:}
\bool_if:NT \g_fontspec_cfg_bool
{
\InputIfFileExists{fontspec.cfg}
{}
{\typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.}}
}
\tl_set:Nn \zf@enc { \g_fontspec_encoding_tl }
\cs_set:Npn \zf@fontspec #1 #2
{
\fontspec_select:nn {#1} {#2}
\tl_set:Nn \zf@family { \l_fontspec_family_tl }
\tl_set:Nn \zf@basefont { \l_fontspec_font }
}
\ExplSyntaxOff
%%
%% Copyright 2004--2013 Will Robertson <wspr81@gmail.com>
%% Copyright 2009--2013 Khaled Hosny <khaledhosny@eglug.org>
%%
%% Distributable under the LaTeX Project Public License,
%% version 1.3c or higher (your choice). The latest version of
%% this license is at: http://www.latex-project.org/lppl.txt
%%
%% This work is "author-maintained" by Will Robertson.
%%
%% This work consists of this file fontspec.dtx
%% and the derived files fontspec.sty,
%% fontspec.lua,
%% fontspec.cfg,
%% fontspec-xetex.tex,
%% fontspec-luatex.tex,
%% and fontspec.pdf.
%%
%%
%% End of file `fontspec-luatex.sty'.