%%
%% This is file `fontspec-xetex.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fontspec.dtx  (with options: `fontspec,xetexx')
%% fontspec-vars.dtx  (with options: `vars')
%% fontspec-msg.dtx  (with options: `msg')
%% fontspec-opening.dtx  (with options: `fontspec,xetexx')
%% fontspec-fontload.dtx  (with options: `fontspec,xetexx')
%% fontspec-user.dtx  (with options: `fontspec,xetexx')
%% fontspec-api.dtx  (with options: `fontspec,xetexx')
%% fontspec-internal.dtx  (with options: `fontspec,xetexx')
%% fontspec-keyval.dtx  (with options: `fontspec,xetexx')
%% fontspec-math.dtx  (with options: `fontspec,xetexx')
%% fontspec-closing.dtx  (with options: `fontspec,xetexx')
%% fontspec-patches.dtx  (with options: `patches')
%% ------------------------------------------------
%% The FONTSPEC package for XeLaTeX/LuaLaTeX
%% (C)  2004--2016  Will Robertson and Khaled Hosny
%% License information appended.
%% ------------------------------------------------
\RequirePackage{expl3}
\RequirePackage{xparse}
\ProvidesExplPackage{fontspec-xetex}%
  {2016/02/01}{2.5a}{Font selection for XeLaTeX and LuaLaTeX}
\bool_new:N \l__fontspec_firsttime_bool
\bool_new:N \l__fontspec_nobf_bool
\bool_new:N \l__fontspec_noit_bool
\bool_new:N \l__fontspec_nosc_bool
\bool_new:N \l__fontspec_check_bool
\cs_new:Npn \FontspecSetCheckBoolTrue  { \bool_set_true:N  \l__fontspec_check_bool }
\cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l__fontspec_check_bool }
\bool_new:N \l__fontspec_tfm_bool
\bool_new:N \l__fontspec_atsui_bool
\bool_new:N \l__fontspec_ot_bool
\bool_new:N \l__fontspec_mm_bool
\bool_new:N \l__fontspec_graphite_bool
\bool_new:N \g__fontspec_math_euler_bool
\bool_new:N \g__fontspec_math_lucida_bool
\bool_new:N \g__fontspec_pkg_euler_loaded_bool
\bool_new:N \g__fontspec_cfg_bool
\bool_new:N \g__fontspec_math_bool
\bool_new:N \g__fontspec_euenc_bool
\int_new:N \l_fontspec_script_int
\int_new:N \l_fontspec_language_int
\int_new:N \l_fontspec_strnum_int
\fp_new:N \l__fontspec_tmpa_fp
\fp_new:N \l__fontspec_tmpb_fp
\dim_new:N \l__fontspec_tmpa_dim
\dim_new:N \l__fontspec_tmpb_dim
\dim_new:N \l__fontspec_tmpc_dim
\tl_set:Nx \c_colon_str { \tl_to_str:N : }
\cs_set:Npn \use_v:nnnnn #1#2#3#4#5 {#5}
\cs_set:Npn \use_iv:nnnnn #1#2#3#4#5 {#4}
\cs_generate_variant:Nn \str_if_eq:nnTF {nv}
\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 \tl_if_empty:nTF {x}
\cs_generate_variant:Nn \tl_if_empty:nTF {x}
\cs_generate_variant:Nn \prop_put:Nnn {Nxx}
\cs_new:Nn \__fontspec_int_mult_truncate:Nn
  {
    \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: }
  }

\cs_new:Npn \__fontspec_error:n     { \msg_error:nn     {fontspec} }
\cs_new:Npn \__fontspec_error:nx    { \msg_error:nnx    {fontspec} }
\cs_new:Npn \__fontspec_warning:n   { \msg_warning:nn   {fontspec} }
\cs_new:Npn \__fontspec_warning:nx  { \msg_warning:nnx  {fontspec} }
\cs_new:Npn \__fontspec_warning:nxx { \msg_warning:nnxx {fontspec} }
\cs_new:Npn \__fontspec_info:n      { \msg_info:nn      {fontspec} }
\cs_new:Npn \__fontspec_info:nx     { \msg_info:nnx     {fontspec} }
\cs_new:Npn \__fontspec_info:nxx    { \msg_info:nnxx    {fontspec} }
\cs_new:Npn \__fontspec_trace:n     { \msg_trace:nn     {fontspec} }
\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~ <return>~ 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.~ It's~ better.
 }
\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.
 }
\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__fontspec_script_name_tl'~ and~ language~ '\l__fontspec_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__fontspec_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} {defining-font}
 {
  Font~ family~'\l_fontspec_family_tl'~ created~ for~ font~ '#2'~
  with~ options~ [\l__fontspec_all_features_clist].\\
  \\
  This~ font~ family~ consists~ of~ the~ following~ NFSS~ series/shapes:\\
  \l_fontspec_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__fontspec_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\space 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
 }
\DeclareOption{cm-default}
 { \__fontspec_warning:n {cm-default-obsolete} }
\DeclareOption{math}{\bool_set_true:N \g__fontspec_math_bool}
\DeclareOption{no-math}{\bool_set_false:N \g__fontspec_math_bool}
\DeclareOption{config}{\bool_set_true:N \g__fontspec_cfg_bool}
\DeclareOption{no-config}{\bool_set_false:N \g__fontspec_cfg_bool}
\DeclareOption{euenc}{\bool_set_true:N  \g__fontspec_euenc_bool}
\DeclareOption{tuenc}{\bool_set_false:N \g__fontspec_euenc_bool}
\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 }
 }
\ExecuteOptions{config,math,euenc}
\ProcessOptions*
\tl_set:Nn \g_fontspec_encoding_tl {TU}
\file_if_exist:nF {tuenc.def} { \bool_set_true:N \g__fontspec_euenc_bool }
\bool_if:NT \g__fontspec_euenc_bool
  {
    \tl_set:Nn \g_fontspec_encoding_tl {EU1}
  }
\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
\normalsize % to overcome the encoding changing the current font size
\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
 }
\bool_if:NT \g__fontspec_euenc_bool
  {
    \RequirePackage{xunicode}
  }

\cs_set:Nn \__fontspec_fontwrap:n { "#1" }
\cs_set:Npn \__fontspec_primitive_font_set:Nnn #1#2#3
  {
    \font #1 = #2 ~at~ #3 \scan_stop:
  }

\cs_set:Npn \__fontspec_primitive_font_gset:Nnn #1#2#3
  {
    \global \font #1 = #2 ~at~ #3 \scan_stop:
  }

\cs_set:Npn \__fontspec_font_suppress_not_found_error:
  {
    \int_set_eq:NN \xetex_suppressfontnotfounderror:D \c_one
  }

\prg_set_conditional:Nnn \__fontspec_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
 {
  \__fontspec_primitive_font_set:Nnn  #1 { \__fontspec_fontwrap:n {#2} } {#3}
 }
\cs_new:Nn \__fontspec_font_gset:Nnn
 {
  \__fontspec_primitive_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_new:Nn \__fontspec_pass_args:nnn
 {
  \IfNoValueTF {#2}
   { \__fontspec_post_arg:w {#1} {#3} }
   { #1 {#2} {#3} }
 }
\NewDocumentCommand \__fontspec_post_arg:w { m m O{} }
 { #1 {#3} {#2} }
\NewDocumentCommand \fontspec { o m }
 { \__fontspec_pass_args:nnn \__fontspec_fontspec:nn {#1} {#2} }

\cs_new:Nn \__fontspec_fontspec:nn
 {
  \fontspec_set_family:Nnn \f@family {#1} {#2}
  \fontencoding { \l__fontspec_nfss_enc_tl }
  \selectfont
  \ignorespaces
 }
\DeclareDocumentCommand \setmainfont { o m }
 { \__fontspec_pass_args:nnn \__fontspec_setmainfont:nn {#1} {#2} }

\cs_new:Nn \__fontspec_setmainfont:nn
 {
  \fontspec_set_family:Nnn \rmdefault {#1}{#2}
  \normalfont
  \ignorespaces
 }

\DeclareDocumentCommand \setsansfont { o m }
 { \__fontspec_pass_args:nnn \__fontspec_setsansfont:nn {#1} {#2} }

\cs_new:Nn \__fontspec_setsansfont:nn
 {
  \fontspec_set_family:Nnn \sfdefault {#1}{#2}
  \normalfont
  \ignorespaces
 }

\DeclareDocumentCommand \setmonofont { o m }
 { \__fontspec_pass_args:nnn \__fontspec_setmonofont:nn {#1} {#2} }

\cs_new:Nn \__fontspec_setmonofont:nn
 {
  \fontspec_set_family:Nnn \ttdefault {#1}{#2}
  \normalfont
  \ignorespaces
 }
\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_pass_args:nnn \__fontspec_setmathrm:nn {#1} {#2} }

\cs_new:Nn \__fontspec_setmathrm:nn
 {
  \fontspec_set_family:Nnn \g__fontspec_mathrm_tl {#1} {#2}
 }

\DeclareDocumentCommand \setboldmathrm { o m }
 { \__fontspec_pass_args:nnn \__fontspec_setboldmathrm:nn {#1} {#2} }

\cs_new:Nn \__fontspec_setboldmathrm:nn
 {
  \fontspec_set_family:Nnn \g__fontspec_bfmathrm_tl {#1} {#2}
 }

\DeclareDocumentCommand \setmathsf { o m }
 { \__fontspec_pass_args:nnn \__fontspec_setmathsf:nn {#1} {#2} }

\cs_new:Nn \__fontspec_setmathsf:nn
 {
  \fontspec_set_family:Nnn \g__fontspec_mathsf_tl {#1} {#2}
 }

\DeclareDocumentCommand \setmathtt { o m }
 { \__fontspec_pass_args:nnn \__fontspec_setmathtt:nn {#1} {#2} }

\cs_new:Nn \__fontspec_setmathtt:nn
 {
  \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_pass_args:nnn { \__fontspec_newfontfamily:Nnn #1 } {#2} {#3} }

\cs_new:Nn \__fontspec_newfontfamily:Nnn
 {
  \fontspec_set_family:cnn { g__fontspec_ \cs_to_str:N #1 _family } {#2} {#3}
  \use:x
   {
    \exp_not:N \DeclareRobustCommand \exp_not:N #1
     {
      \exp_not:N \fontfamily { \use:c {g__fontspec_ \cs_to_str:N #1 _family} }
      \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl }
      \exp_not:N \selectfont
     }
   }
 }
\DeclareDocumentCommand \newfontface { m o m }
 { \__fontspec_pass_args:nnn { \__fontspec_newfontface:Nnn #1 } {#2} {#3} }

\cs_new:Nn \__fontspec_newfontface:Nnn
 {
  \newfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2 ] {#3}
 }
\clist_new:N \g__fontspec_default_fontopts_clist
\prop_new:N \g__fontspec_fontopts_prop
\DeclareDocumentCommand \defaultfontfeatures { t+ o m }
 {
  \IfNoValueTF {#2}
   { \__fontspec_set_default_features:nn {#1} {#3} }
   { \__fontspec_set_font_default_features:nnn {#1} {#2} {#3} }
  \ignorespaces
 }
\cs_new:Nn \__fontspec_set_default_features:nn
 {
  \IfBooleanTF {#1} \clist_put_right:Nn \clist_set:Nn
   \g__fontspec_default_fontopts_clist {#2}
 }
\cs_new:Nn \__fontspec_set_font_default_features:nnn
 {
  \clist_map_inline:nn {#2}
   {
    \tl_if_single:nTF {##1}
     { \tl_set:No \l__fontspec_tmp_tl { \cs:w g__fontspec_ \cs_to_str:N ##1 _family\cs_end: } }
     { \__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {##1} }

    \IfBooleanTF {#1}
     {
      \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl
       { \tl_clear:N \l__fontspec_tmpb_tl }
      \tl_put_right:Nn \l__fontspec_tmpb_tl {#3,}
      \prop_gput:NVV   \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl
     }
     {
      \tl_if_empty:nTF {#3}
       { \prop_gremove:NV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl }
       { \prop_put:NVn    \g__fontspec_fontopts_prop \l__fontspec_tmp_tl {#3,} }
     }
   }
 }
\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}
         \clist_map_break:
       }
   }
 }
\bool_new:N \l__fontspec_disable_defaults_bool
\DeclareDocumentCommand \addfontfeatures {m}
 {
  \fontspec_if_fontspec_font:TF
   {
    \group_begin:
      \keys_set_known:nnN {fontspec-addfeatures} {#1} \l__fontspec_tmp_tl
      \prop_get:cnN {g__fontspec_ \f@family _prop} {options} \l__fontspec_options_tl
      \prop_get:cnN {g__fontspec_ \f@family _prop} {fontname} \l__fontspec_fontname_tl
      \bool_set_true:N \l__fontspec_disable_defaults_bool
      \use:x
       {
        \exp_not:N \fontspec_select:nn
          { \l__fontspec_options_tl , #1 } {\l__fontspec_fontname_tl}
       }
    \group_end:
    \fontfamily\l_fontspec_family_tl\selectfont
   }
   {
    \__fontspec_warning:nx {addfontfeatures-ignored} {#1}
   }
  \ignorespaces
 }
\cs_set_eq:NN \addfontfeature \addfontfeatures
\DeclareDocumentCommand \newfontfeature {mm}
 {
  \keys_define:nn { fontspec }
   {
    #1 .code:n =
     {
      \__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 \newopentypefeature {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 \newICUfeature \newopentypefeature % deprecated
\bool_new:N \l__fontspec_alias_bool
\DeclareDocumentCommand \aliasfontfeature {mm}
 {
  \bool_set_false:N \l__fontspec_alias_bool

  \clist_map_inline:nn
   { fontspec, fontspec-preparse, fontspec-preparse-external,
     fontspec-preparse-nested, fontspec-renderer }
   {

     \keys_if_exist:nnT {##1} {#1}
      {
        \bool_set_true:N \l__fontspec_alias_bool
        \__fontspec_alias_font_feature:nnn {##1} {#1} {#2}
      }
   }

  \bool_if:NF \l__fontspec_alias_bool
    { \__fontspec_warning:nx {rename-feature-not-exist} {#1} }
 }

\cs_set:Nn \__fontspec_alias_font_feature:nnn
  {
    \keys_define:nn {#1}
      { #3 .code:n = { \keys_set:nn {#1} { #2 = {##1} } } }
  }

\DeclareDocumentCommand \aliasfontfeatureoption {mmm}
  { \keys_define:nn { fontspec / #1 } { #3 .meta:n = {#2} } }
\DeclareDocumentCommand \newfontscript {mm}
 {
  \fontspec_new_script:nn {#1} {#2}
 }
\DeclareDocumentCommand \newfontlanguage {mm}
 {
  \fontspec_new_lang:nn {#1} {#2}
 }
\DeclareDocumentCommand \DeclareFontsExtensions {m}
 {
  \clist_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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
    \__fontspec_set_font_type:
    \bool_if:NTF \l__fontspec_ot_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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
    \__fontspec_set_font_type:
    \bool_if:NTF \l__fontspec_ot_bool
     {
      \prop_get:cnN {g__fontspec_ \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_ \f@family _prop} {lang-num} \l__fontspec_tmp_tl
      \int_set:Nn \l_fontspec_language_int {\l__fontspec_tmp_tl}

      \prop_get:cnN {g__fontspec_ \f@family _prop} {script-tag}  \l_fontspec_script_tl
      \prop_get:cnN {g__fontspec_ \f@family _prop} {lang-tag}  \l_fontspec_lang_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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
    \__fontspec_set_font_type:
    \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: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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
    \__fontspec_set_font_type:
    \bool_if:NTF \l__fontspec_ot_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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
    \__fontspec_set_font_type:
    \bool_if:NTF \l__fontspec_ot_bool
     {
      \prop_get:cnN {g__fontspec_ \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_ \f@family _prop} {script-tag}  \l_fontspec_script_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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
    \__fontspec_set_font_type:
    \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: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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
    \__fontspec_set_font_type:
    \bool_if:NTF \l__fontspec_ot_bool
     {
      \prop_get:cnN {g__fontspec_ \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
   {
    \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
    \__fontspec_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
    \__fontspec_set_font_type:
    \bool_if:NTF \l__fontspec_ot_bool
     {
      \prop_get:cnN {g__fontspec_ \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:nn {#2}{#3}
  \tl_set_eq:NN #1 \l_fontspec_family_tl
 }
\cs_generate_variant:Nn \fontspec_set_family:Nnn {c}
\cs_new:Nn \fontspec_set_fontface:NNnn
 {
  \tl_set:Nn \l__fontspec_family_label_tl { #1 }
  \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_select:nn
 {
  \group_begin:
  \__fontspec_font_suppress_not_found_error:
  \__fontspec_init:

  \tl_set:Nx \l_fontspec_fontname_tl    {#2}
  \tl_set:Nx \l_fontspec_fontname_up_tl {#2}
  \tl_set:Nx \l__fontspec_basename_tl          {#2}

  \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2}
  \__fontspec_extract_all_features:n {#1}
  \__fontspec_preparse_features:

  \__fontspec_load_font:
  \__fontspec_set_scriptlang:
  \__fontspec_get_features:Nn \l__fontspec_rawfeatures_sclist {}
  \bool_set_false:N \l__fontspec_firsttime_bool

  \__fontspec_save_family:nTF {#2}
   {
    \__fontspec_save_fontinfo:
    \__fontspec_find_autofonts:
    \DeclareFontFamily{\l__fontspec_nfss_enc_tl}{\l_fontspec_family_tl}{}
    \__fontspec_set_faces:
    \__fontspec_info:nxx {defining-font} {#1} {#2}
   }
   {
   }
  \group_end:
 }
\cs_new:Nn \__fontspec_load_external_fontoptions:Nn
 {
  \__fontspec_sanitise_fontname:Nn #1 {#2}
  \tl_set:Nx \l__fontspec_ext_filename_tl {#1.fontspec}
  \tl_remove_all:Nn \l__fontspec_ext_filename_tl {~}
  \prop_if_in:NVF \g__fontspec_fontopts_prop #1
   {
    \exp_args:No \file_if_exist:nT { \l__fontspec_ext_filename_tl }
     { \file_input:n { \l__fontspec_ext_filename_tl } }
   }
 }
\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 }

    \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
     }
   }
  \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist }
 }
\cs_new:Nn \__fontspec_preparse_features:
 {
  \__fontspec_if_detect_external:VT \l__fontspec_basename_tl
   { \keys_set:nn {fontspec-preparse-external} {ExternalLocation} }

  \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
  \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
 }
\cs_new:Nn \__fontspec_load_font:
 {
  \__fontspec_font_set:Nnn    \l_fontspec_font
     { \__fontspec_fullname:n {\l_fontspec_fontname_up_tl} } {\f@size pt}
  \__fontspec_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
 }
\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
    \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_generate_variant:Nn \__fontspec_if_detect_external:nT {V}
\cs_set:Nn \__fontspec_fullname:n
 {
  \__fontspec_namewrap:n { #1 \l__fontspec_extension_tl }
  \l_fontspec_renderer_tl
  \l__fontspec_optical_size_tl
 }
\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}
     }
   }
 }
\prg_new_conditional:Nnn \__fontspec_save_family:n {TF}
 {
  \cs_if_exist:NT \l__fontspec_nfss_fam_tl
   {
    \cs_set_eq:cN {g__fontspec_UID_\l__fontspec_fontid_tl} \l__fontspec_nfss_fam_tl
   }
  \cs_if_exist:cF {g__fontspec_UID_\l__fontspec_fontid_tl}
   {
    % The font name is fully expanded, in case it's defined in terms of macros, before having its spaces zapped:
    \tl_set:Nx \l__fontspec_tmp_tl {#1}
    \tl_remove_all:Nn \l__fontspec_tmp_tl {~}

    \cs_if_exist:cTF {g__fontspec_family_ \l__fontspec_tmp_tl _int}
     { \int_gincr:c  {g__fontspec_family_ \l__fontspec_tmp_tl _int} }
     { \int_new:c    {g__fontspec_family_ \l__fontspec_tmp_tl _int} }

    \tl_gset:cx {g__fontspec_UID_\l__fontspec_fontid_tl}
     {
      \l__fontspec_tmp_tl ( \int_use:c {g__fontspec_family_ \l__fontspec_tmp_tl _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_save_fontinfo:
 {
  \prop_new:c {g__fontspec_ \l_fontspec_family_tl _prop}
  \prop_gput:cnx {g__fontspec_ \l_fontspec_family_tl _prop} {fontname} { \l__fontspec_basename_tl }
  \prop_gput:cnx {g__fontspec_ \l_fontspec_family_tl _prop} {options}  { \l__fontspec_all_features_clist }
  \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

 }
\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_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}
   }

  \__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 }
 }
\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}
 }
\cs_new:Nn \__fontspec_set_font_type:
 {
  \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\l_fontspec_font
    \bool_set_true:N \l__fontspec_tfm_bool
  \or
    \bool_set_true:N \l__fontspec_atsui_bool
    \ifnum\XeTeXcountvariations\l_fontspec_font > \c_zero
      \bool_set_true:N \l__fontspec_mm_bool
    \fi
  \or
    \bool_set_true:N \l__fontspec_ot_bool
  \fi
  \tl_if_empty:NT \l_fontspec_renderer_tl
   {
    \bool_if:NTF \l__fontspec_atsui_bool
     { \tl_set:Nn \l_fontspec_renderer_tl {/AAT} }
     {
       \bool_if:NT \l__fontspec_ot_bool
        { \tl_set:Nn \l_fontspec_renderer_tl {/OT} }
     }
   }
 }
\cs_generate_variant:Nn \tl_if_empty:nF {x}
\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} }
     }
   }
   }
 }

\prg_new_conditional:Nnn \__fontspec_if_autofont:nn {T,TF}
 {
  \__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 }
   { \prg_return_false: }
   { \prg_return_true: }
 }
\cs_new:Nn \__fontspec_make_font_shapes:Nnnnn
 {
  \group_begin:
    \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 }
    \__fontspec_font_set:Nnn \l_fontspec_font {\__fontspec_fullname:n {\l_fontspec_fontname_tl}} {\f@size pt}
    \__fontspec_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {#1} }
 }
\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

  \exp_args:Nx \clist_map_inline:nn {#4}
   {
    \tl_clear:N \l__fontspec_size_tl
    \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed

    \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n ##1 }
      \l__fontspec_sizing_leftover_clist
    \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} }

    % "normal"
    \__fontspec_load_fontname:n {\l__fontspec_sizedfont_tl}
    \__fontspec_setup_nfss:Nnn \l__fontspec_nfss_tl {#3} {}

    % small caps
    \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
     }

    \bool_if:NF \l__fontspec_nosc_bool
     {
      \__fontspec_setup_nfss:Nnn \l__fontspec_nfss_sc_tl {#3} {\l__fontspec_fontfeat_curr_clist}
     }

   }

  \__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_nfss:Nnn
 {
  \__fontspec_get_features:Nn \l__fontspec_rawfeatures_sclist
   { #2 , \l__fontspec_sizing_leftover_clist , #3 }

  \tl_put_right:Nx #1
   {
    <\l__fontspec_size_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_shapes_normal:nn
  {
    \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl} {\l_fontspec_family_tl}
      {#1} {#2} {\l__fontspec_nfss_tl}{\l__fontspec_postadjust_tl}
  }

\cs_new:Nn \__fontspec_declare_shapes_smcaps:nn
  {
    \bool_if:NF \l__fontspec_nosc_bool
     {
      \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl} {\l_fontspec_family_tl} {#1}
        { \__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} }
         { \tl_use:c { \__fontspec_shape_merge:nn {#1} {\scdefault} } }
         { \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}
 }
\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 {\l__fontspec_nfss_enc_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:nn
 {
  \tl_gput_right:Nx \l_fontspec_defined_shapes_tl
   {
    -~ \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
     }
   }
 }
\cs_generate_variant:Nn \tl_if_empty:nF {f}
\clist_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   ;
     }
   }
 }
\cs_set:Nn \__fontspec_get_features:Nn
 {
  \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_set_eq:NN \l__fontspec_postadjust_tl \g__fontspec_postadjust_tl
  \tl_clear:N \l__fontspec_wordspace_adjust_tl
  \tl_clear:N \l__fontspec_punctspace_adjust_tl

  \keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#2}
    \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_set_eq:NN #1 \l__fontspec_rawfeatures_sclist
 }
\tl_clear:N \l__fontspec_family_label_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
\tl_set:Nn  \g__fontspec_postadjust_tl { \l__fontspec_wordspace_adjust_tl \l__fontspec_punctspace_adjust_tl }

\clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}}
\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_ot_bool
  \bool_set_true:N \l__fontspec_firsttime_bool
  \cs_set:Npn \__fontspec_namewrap:n ##1 { ##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_clear:N \g__fontspec_curr_series_tl
  \tl_gset_eq:NN \l__fontspec_nfss_enc_tl \g_fontspec_encoding_tl

  % This is for detecting font families when assigning default features.
  % Replace defaults for the standard families because they're not set in the usual way:
  \exp_args:NV \str_case:nnF {\l__fontspec_family_label_tl}
   {
    {\rmdefault} { \tl_set:Nn \l__fontspec_family_label_tl {\g__fontspec_rmfamily_family} }
    {\sfdefault} { \tl_set:Nn \l__fontspec_family_label_tl {\g__fontspec_sffamily_family} }
    {\ttdefault} { \tl_set:Nn \l__fontspec_family_label_tl {\g__fontspec_ttfamily_family} }
   }{}

 }
\cs_set:Nn \fontspec_make_ot_smallcaps:TF
 {
  \fontspec_check_ot_feat:nTF {+smcp} {#1} {#2}
 }
\cs_set: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:nnTF {3}{3} {#1} {#2} }
   }
 }
\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
 {
  \bool_if:NTF \l__fontspec_ot_bool
   { \fontspec_make_OT_feature:n {#3} }
   {
     \bool_if:NT \l__fontspec_atsui_bool
      { \fontspec_make_AAT_feature:nn {#1}{#2} }
   }
 }
\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_featstr:n {\l_fontspec_feature_string_tl}
     }
     { \__fontspec_warning:nx {aat-feature-not-exist-in-font} {#1,#2} }
   }
 }
\cs_new:Nn \fontspec_make_OT_feature:n
 {
  \tl_if_empty:nTF {#1}
   { \__fontspec_warning:n {icu-feature-not-exist} }
   {
     \fontspec_check_ot_feat:nTF {#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_featstr:n { #1 = #2 }
   }
   { \__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}
 {
  \fontspec_iv_str_to_num:Nn \l_fontspec_strnum_int {#1}
  \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts \l_fontspec_font }
  \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\l_fontspec_font \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:n {TF}
 {
  \fontspec_iv_str_to_num:Nn \l_fontspec_strnum_int {#1}
  \int_set:Nn \l_tmpb_int
   { \XeTeXOTcountlanguages \l_fontspec_font \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\l_fontspec_font\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:n {TF,T}
 {
  \int_set:Nn \l_tmpb_int
   {
    \XeTeXOTcountfeatures \l_fontspec_font
                          \l_fontspec_script_int
                          \l_fontspec_language_int
   }
  \fontspec_v_str_to_num:Nn \l_fontspec_strnum_int {#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\XeTeXOTfeaturetag\l_fontspec_font\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:
 }

\cs_new:Nn \__fontspec_keys_define_code:nnn
 {
  \keys_define:nn {#1} { #2 .code:n = {#3} }
 }
\cs_new:Nn \__fontspec_aff_error:n
  {
    \__fontspec_keys_define_code:nnn {fontspec-addfeatures} {#1}
      { \__fontspec_error:nx {not-in-addfontfeatures} {#1} }
  }
\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_set:Npn \__fontspec_namewrap:n ##1 { [ #1 ##1 ] }
  \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
 }
\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 .choices:nn =
   {AAT,ICU,OpenType,Graphite,Full,Basic}
   {
    \int_compare:nTF {\l_keys_choice_int <= 4} {
      \tl_set:Nv \l_fontspec_renderer_tl
        { g_fontspec_renderer_tag_ \l_keys_choice_tl }
     }
     {
      \__fontspec_warning:nx {only-luatex-feature} {Renderer=Full/Basic}
     }
   }
 }
\tl_set:cn {g_fontspec_renderer_tag_AAT} {/AAT}
\tl_set:cn {g_fontspec_renderer_tag_ICU} {/OT}
\tl_set:cn {g_fontspec_renderer_tag_OpenType} {/OT}
\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}
 {
    \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
  \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}
 }
\seq_new:N \g__fontspec_bf_series_seq
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSeries}
 {
  \tl_gset:Nx \g__fontspec_curr_series_tl { #1 }
  \seq_gput_right:Nx \g__fontspec_bf_series_seq { #1 }
 }
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont}
 {
  \fontspec_complete_fontname:Nn \l_fontspec_fontname_up_tl {#1}
 }
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {FontName}
 {
  \fontspec_complete_fontname:Nn \l_fontspec_fontname_up_tl {#1}
 }
\cs_generate_variant:Nn \tl_if_eq:nnT {ox}
\cs_generate_variant:Nn \prop_put:Nnn {NxV}
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldFont}
 {
  \tl_if_empty:nTF {#1}
   {
    \bool_set_true:N \l__fontspec_nobf_bool
   }
   {
    \bool_set_false:N \l__fontspec_nobf_bool
    \fontspec_complete_fontname:Nn \l__fontspec_curr_bfname_tl {#1}

    \seq_if_empty:NT \g__fontspec_bf_series_seq
     {
      \tl_gset:Nx \g__fontspec_curr_series_tl {\bfdefault}
      \seq_put_right:Nx \g__fontspec_bf_series_seq {\bfdefault}
     }
    \tl_if_eq:oxT \g__fontspec_curr_series_tl {\bfdefault}
     { \tl_set_eq:NN \l_fontspec_fontname_bf_tl \l__fontspec_curr_bfname_tl }


    \prop_put:NxV \l__fontspec_nfss_prop
     {BoldFont-\g__fontspec_curr_series_tl} \l__fontspec_curr_bfname_tl

   }
 }
\prop_new:N \l__fontspec_nfss_prop
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont}
 {
  \tl_if_empty:nTF {#1}
   {
    \bool_set_true:N \l__fontspec_noit_bool
   }
   {
    \bool_set_false:N \l__fontspec_noit_bool
    \fontspec_complete_fontname:Nn \l_fontspec_fontname_it_tl {#1}
   }
 }
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont}
 {
  \fontspec_complete_fontname:Nn \l_fontspec_fontname_bfit_tl {#1}
 }
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont}
 {
  \fontspec_complete_fontname:Nn \l_fontspec_fontname_sl_tl {#1}
 }
\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont}
 {
  \fontspec_complete_fontname:Nn \l_fontspec_fontname_bfsl_tl {#1}
 }
\__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFont}
 {
  \tl_if_empty:nTF {#1}
   {
    \bool_set_true:N \l__fontspec_nosc_bool
   }
   {
    \bool_set_false:N \l__fontspec_nosc_bool
    \fontspec_complete_fontname:Nn \l_fontspec_fontname_sc_tl {#1}
   }
 }
\cs_set:Nn \fontspec_complete_fontname:Nn
 {
  \tl_set:Nx #1 {#2}
  \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl}
 }
\cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx}
\__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures}
 {
  \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}

 }
\__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures}
 {
  \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}
 }
\__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures}
 {
  \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}
 }
\__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures}
 {
  \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} }
 }
\__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
 }
\__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {Font}
 {
  \tl_set:Nn \l__fontspec_this_font_tl {#1}
 }
\__fontspec_keys_define_code:nnn {fontspec} {SizeFeatures}
 {
  % dummy
 }
\__fontspec_keys_define_code:nnn {fontspec} {Font}
 {
  % dummy
 }
\__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-preparse} {NFSSEncoding}
 {
  \tl_gset:Nx \l__fontspec_nfss_enc_tl { #1 }
 }
\__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSFamily}
 {
  \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 }
  \cs_undefine:c {g__fontspec_UID_\l__fontspec_fontid_tl}
  \tl_if_exist:NT \l_fontspec_family_tl
   { \cs_undefine:c {g__fontspec_ \l_fontspec_family_tl _prop} }
 }
\prop_new:N \l__fontspec_nfssfont_prop
\__fontspec_keys_define_code:nnn {fontspec} {FontFace}
 {
  \tl_set:No \l__fontspec_arg_tl { \use_iii:nnn #1 }
  \tl_set_eq:NN \l__fontspec_this_feat_tl \l__fontspec_arg_tl
  \tl_clear:N \l__fontspec_this_font_tl
  \int_compare:nT { \clist_count:N \l__fontspec_arg_tl = 1 }
   {
    \tl_if_in:NnF \l__fontspec_arg_tl {=}
     {
      \tl_set_eq:NN \l__fontspec_this_font_tl \l__fontspec_arg_tl
      \tl_clear:N \l__fontspec_this_feat_tl
     }
   }

  \__fontspec_add_nfssfont:nnnn
   {\use_i:nnn #1}{\use_ii:nnn #1}{\l__fontspec_this_font_tl}{\l__fontspec_this_feat_tl}
 }
\cs_new:Nn \__fontspec_add_nfssfont:nnnn
 {
  \tl_set:Nx \l__fontspec_this_font_tl {#3}

  \tl_if_empty:xTF {#4}
   { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} }
   { \keys_set_known:noN {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} }
   }
 }
\__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] }
 }
\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
    \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} }
     }
    \__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}
 {
  \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
     }
   }
 }
\__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 }
   }
 }
\__fontspec_aff_error:n {PunctuationSpace}
\__fontspec_keys_define_code:nnn {fontspec} {FontAdjustment}
 {
  \tl_put_right:Nx \l__fontspec_postadjust_tl {#1}
 }
\__fontspec_keys_define_code:nnn {fontspec} {LetterSpace}
 {
  \__fontspec_update_featstr:n {letterspace=#1}
 }
\__fontspec_keys_define_code:nnn {fontspec} {HyphenChar}
 {
  \bool_if:NT \l__fontspec_addfontfeatures_bool
   { \__fontspec_error:nx {not-in-addfontfeatures} {HyphenChar} }

  \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 = \l_fontspec_hyphenchar_tl \scan_stop: }
     }
     { \__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_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}
 {
  \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 \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_hex:n { \l__fontspec_tmp_int }
   }
 }
\__fontspec_keys_define_code:nnn {fontspec} {Mapping}
 {
  \__fontspec_update_featstr:n { mapping = #1 }
 }
\__fontspec_keys_define_code:nnn {fontspec} {FeatureFile}
 {
  \__fontspec_update_featstr:n { featurefile = #1 }
 }
\__fontspec_keys_define_code:nnn {fontspec} {Weight}
 {
  \__fontspec_update_featstr:n{weight=#1}
 }
\__fontspec_keys_define_code:nnn {fontspec} {Width}
 {
  \__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} }
   }
 }
\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}
}
\keys_define:nn {fontspec}
 {
  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}
}
\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}
}
\__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_featstr:n { mapping = tex-text }
   }
 }
\__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 = #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
       }
     }
   }
 }
\__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=#1 }
   }
 }
\keys_define:nn {fontspec}
 {
  Vertical .choice: ,
  Vertical / RotatedGlyphs .code:n =
   {
    \bool_if:NTF \l__fontspec_ot_bool
     {
      \fontspec_make_feature:nnn{}{}{+vrt2}
      \__fontspec_update_featstr:n {vertical}
     }
     {
      \__fontspec_update_featstr:n {vertical}
     }
   }
 }
\keys_define:nn { fontspec } { Script .choice: }
\cs_new:Nn \fontspec_new_script:nn
 {
  \keys_define:nn { fontspec } { Script / #1 .code:n =
    \clist_map_inline:nn {#2}
     {
      \fontspec_check_script:nTF {####1}
       {
        \tl_set:Nn \l_fontspec_script_tl {####1}
        \int_set:Nn \l_fontspec_script_int {\l_fontspec_strnum_int}
        \clist_map_break:
       }
       {
        \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}
         }
       }
     }
   }
 }
\newfontscript{Arabic}{arab}            \newfontscript{Armenian}{armn}
\newfontscript{Balinese}{bali}
\newfontscript{Bengali}{bng2,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}{dev2,deva}
\newfontscript{Ethiopic}{ethi}
\newfontscript{Georgian}{geor}          \newfontscript{Glagolitic}{glag}
\newfontscript{Gothic}{goth}            \newfontscript{Greek}{grek}
\newfontscript{Gujarati}{gjr2,gujr}
\newfontscript{Gurmukhi}{gur2,guru}
\newfontscript{Hangul~Jamo}{jamo}       \newfontscript{Hangul}{hang}
\newfontscript{Hanunoo}{hano}           \newfontscript{Hebrew}{hebr}
\newfontscript{Hiragana~and~Katakana}{kana}
\newfontscript{Javanese}{java}
\newfontscript{Kannada}{knd2,knda}
\newfontscript{Kharosthi}{khar}         \newfontscript{Khmer}{khmr}
\newfontscript{Lao}{lao~}               \newfontscript{Latin}{latn}
\newfontscript{Limbu}{limb}             \newfontscript{Linear~B}{linb}
\newfontscript{Malayalam}{mlm2,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}{ory2,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}{tml2,taml}
\newfontscript{Telugu}{tel2,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}
\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}
     {
      \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 }
     }
  }
 }
\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}
      \tl_set:Nn \l_fontspec_lang_tl {TRK}
     }
     {
      \fontspec_check_lang:nTF {TUR}
       {
        \int_set:Nn \l_fontspec_language_int {\l_fontspec_strnum_int}
        \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 }
 {
  \tl_set:Nn \l_fontspec_lang_tl {DFLT}
  \int_zero:N \l_fontspec_language_int
 }
\__fontspec_keys_define_code:nnn {fontspec} {RawFeature}
 {
  \__fontspec_update_featstr:n {#1}
 }
\@ifpackageloaded{euler}
 {
  \bool_set_true:N \g__fontspec_pkg_euler_loaded_bool
 }
 {
  \bool_set_false:N \g__fontspec_pkg_euler_loaded_bool
 }
\cs_set:Nn \fontspec_setup_maths:
 {
  \@ifpackageloaded{euler}
   {
    \bool_if:NTF \g__fontspec_pkg_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
  \DeclareSymbolFontAlphabet\mathrm{operators}
  \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\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{arevmath}{\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:}
\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 }
 }
\bool_if:NT \g__fontspec_cfg_bool
 {
  \InputIfFileExists{fontspec.cfg}
    {}
    {\typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.}}
 }
\providecommand*\itscdefault{\itdefault\scdefault}
\providecommand*\slscdefault{\sldefault\scdefault}
\DeclareRobustCommand{\sishape}
 {
  \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}
\tl_const:cn { \__fontspec_shape_merge:nn \sldefault   \scdefault } {\slscdefault}
\tl_const:cn { \__fontspec_shape_merge:nn \scdefault   \itdefault } {\itscdefault}
\tl_const:cn { \__fontspec_shape_merge:nn \scdefault   \sldefault } {\slscdefault}
\tl_const:cn { \__fontspec_shape_merge:nn \slscdefault \itdefault } {\itscdefault}
\tl_const:cn { \__fontspec_shape_merge:nn \itscdefault \sldefault } {\slscdefault}
\tl_const:cn { \__fontspec_shape_merge:nn \itscdefault \updefault } {\scdefault}
\tl_const:cn { \__fontspec_shape_merge:nn \slscdefault \updefault } {\scdefault}
\cs_new:Nn \fontspec_merge_shape:n
 {
  \bool_if:nTF
    {
      \tl_if_exist_p:c { \__fontspec_shape_merge:nn {\f@shape} {#1} }   &&
      \cs_if_exist_p:c
        {
          \f@encoding/\f@family/\f@series/
          \tl_use:c { \__fontspec_shape_merge:nn {\f@shape} {#1} }
        }
    }
    { \fontshape { \tl_use:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } } \selectfont }
    { \fontshape {#1} \selectfont }
 }
\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
 }
\int_new:N \l__fontspec_em_int
\int_new:N \l__fontspec_emdef_int
\cs_new_protected:Npn \emfontdeclare #1
  {
    \int_zero:N \l__fontspec_emdef_int
    \clist_map_inline:nn {#1}
      {
        \int_incr:N \l__fontspec_emdef_int
        \cs_set:cpn {__fontspec_em_font_ \int_use:N \l__fontspec_emdef_int _switch:} {##1}
      }
  }
\DeclareRobustCommand \em
  {
    \@nomath\em
    \int_incr:N \l__fontspec_em_int
    \use:c {__fontspec_em_font_ \int_use:N \l__fontspec_em_int _switch:}
  }
\DeclareTextFontCommand{\emph}{\em}
\cs_set:Npn \emshape { \itshape }
\cs_set:Npn \eminnershape { \upshape }
\emfontdeclare{ \emshape, \eminnershape }
\DeclareRobustCommand{\-}
 {
  \discretionary
   {
    \char\ifnum\hyphenchar\font<\z@
           \xlx@defaulthyphenchar
         \else
           \hyphenchar\font
         \fi
   }{}{}
 }
\def\xlx@defaulthyphenchar{`\-}
\cs_new:Nn \fontspec_visible_space:
 {
  \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
  }
 }
\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:
\def\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:
 }
\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
     }
   }
 }
\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
     }
  }{}
 }
\cs_set:Npn \fontspec_patch_fancyvrb:
 {
  \@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:
   }{}
 }
\RenewDocumentCommand \oldstylenums {m}
 {
  { \addfontfeature{Numbers=OldStyle} #1 }
 }
\NewDocumentCommand \liningnums {m}
 {
  { \addfontfeature{Numbers=Lining} #1 }
 }
%% ------------------------------------------------
%% Copyright 2004--2016 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.
%% The latest version of this license is at: http://www.latex-project.org/lppl.txt
%% 
%% This work is "maintained" by Will Robertson.
%% It consists of the files: fontspec*.dtx, fontspec.cfg, fontspec-example.tex.
%% And the derived files: fontspec*.sty,fontspec.lua, and fontspec.pdf.
%% ------------------------------------------------
%%
%% End of file `fontspec-xetex.sty'.
