summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx')
-rw-r--r--Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx802
1 files changed, 68 insertions, 734 deletions
diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx
index b68d73b169e..de3a804aabe 100644
--- a/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx
+++ b/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx
@@ -10,12 +10,23 @@
% \end{macrocode}
% \fi
%
+%
+% \begin{macrocode}
+\clist_set:Nn \g_@@_all_keyval_modules_clist
+ {
+ fontspec, fontspec-opentype, fontspec-aat,
+ fontspec-preparse, fontspec-preparse-external, fontspec-preparse-nested,
+ fontspec-renderer
+ }
+% \end{macrocode}
+%
% \begin{macrocode}
\cs_new:Nn \@@_keys_define_code:nnn
- {
- \keys_define:nn {#1} { #2 .code:n = {#3} }
- }
+ {
+ \keys_define:nn {#1} { #2 .code:n = {#3} }
+ }
% \end{macrocode}
+%
% For catching features that cannot be used in |\addfontfeatures|:
% \begin{macrocode}
\cs_new:Nn \@@_aff_error:n
@@ -29,24 +40,26 @@
%
% These features are extracted from the font feature list before all others.
%
-% \paragraph{\feat{ExternalLocation}}
+% \begin{macro}{Path}
% For fonts that aren't installed in the system. If no argument is given, the font is located
% with |kpsewhich|; it's either in the current directory or the \TeX\ tree. Otherwise, the
% argument given defines the file path of the font.
% \begin{macrocode}
-\bool_new:N \l_@@_external_bool
-\@@_keys_define_code:nnn {fontspec-preparse-external} {ExternalLocation}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {Path}
{
\bool_set_true:N \l_@@_nobf_bool
\bool_set_true:N \l_@@_noit_bool
\bool_set_true:N \l_@@_external_bool
- \cs_set:Npn \@@_namewrap:n ##1 { [ #1 ##1 ] }
+ \tl_set:Nn \l_@@_font_path_tl {#1}
+ \@@_font_is_file:
%<*xetexx>
\keys_set:nn {fontspec-renderer} {Renderer=OpenType}
%</xetexx>
}
-\aliasfontfeature{ExternalLocation}{Path}
+\aliasfontfeature{Path}{ExternalLocation}
+\@@_keys_define_code:nnn {fontspec} {Path} {}
% \end{macrocode}
+% \end{macro}
%
% \paragraph{\feat{Extension}}
% For fonts that aren't installed in the system. Specifies the font extension
@@ -57,10 +70,11 @@
\tl_set:Nn \l_@@_extension_tl {#1}
\bool_if:NF \l_@@_external_bool
{
- \keys_set:nn {fontspec-preparse-external} {ExternalLocation}
+ \keys_set:nn {fontspec-preparse-external} {Path}
}
}
\tl_clear:N \l_@@_extension_tl
+\@@_keys_define_code:nnn {fontspec} {Extension} {}
% \end{macrocode}
%
% \subsubsection{Pre-parsed features}
@@ -81,6 +95,7 @@
%<*xetexx>
\tl_set:Nv \l_fontspec_renderer_tl
{ g_fontspec_renderer_tag_ \l_keys_choice_tl }
+ \tl_gset:Nx \g_@@_single_feat_tl { \l_fontspec_renderer_tl }
%</xetexx>
%<*luatex>
\@@_warning:nx {only-xetex-feature} {Renderer=AAT/OpenType/Graphite}
@@ -93,6 +108,7 @@
%<*luatex>
\tl_set:Nv \l_fontspec_mode_tl
{ g_fontspec_mode_tag_ \l_keys_choice_tl }
+ \tl_gset:Nx \g_@@_single_feat_tl { mode=\l_fontspec_mode_tl }
%</luatex>
}
}
@@ -123,6 +139,22 @@
}
% \end{macrocode}
%
+% \paragraph{TTC font index}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {FontIndex}
+ {
+ \str_if_eq_x:nnF { \str_lower_case:f {\l_@@_extension_tl} } {.ttc}
+ { \@@_warning:n {font-index-needs-ttc} }
+%<xetexx> \tl_set:Nn \l_@@_ttc_index_tl {:#1}
+%<luatex> \tl_set:Nn \l_@@_ttc_index_tl {(#1)}
+ }
+\@@_keys_define_code:nnn {fontspec} {FontIndex}
+ {
+%<xetexx> \tl_set:Nn \l_@@_ttc_index_tl {:#1}
+%<luatex> \tl_set:Nn \l_@@_ttc_index_tl {(#1)}
+ }
+% \end{macrocode}
+%
% \subsubsection{Bold/italic choosing options}
%
% The \feat{Bold}, \feat{Italic}, and \feat{BoldItalic}
@@ -133,7 +165,6 @@
% By default, \pkg{fontspec} uses the default bold series, \cs{bfdefault}.
% We want to be able to make this extensible.
% \begin{macrocode}
-\seq_new:N \g_@@_bf_series_seq
\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldSeries}
{
\tl_gset:Nx \g_@@_curr_series_tl { #1 }
@@ -146,17 +177,15 @@
% \begin{macrocode}
\@@_keys_define_code:nnn {fontspec-preparse-external} {UprightFont}
{
- \fontspec_complete_fontname:Nn \l_fontspec_fontname_up_tl {#1}
+ \fontspec_complete_fontname:Nn \l_@@_fontname_up_tl {#1}
}
\@@_keys_define_code:nnn {fontspec-preparse-external} {FontName}
{
- \fontspec_complete_fontname:Nn \l_fontspec_fontname_up_tl {#1}
+ \fontspec_complete_fontname:Nn \l_@@_fontname_up_tl {#1}
}
% \end{macrocode}
% Bold:
% \begin{macrocode}
-\cs_generate_variant:Nn \tl_if_eq:nnT {ox}
-\cs_generate_variant:Nn \prop_put:Nnn {NxV}
\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldFont}
{
\tl_if_empty:nTF {#1}
@@ -173,7 +202,7 @@
\seq_put_right:Nx \g_@@_bf_series_seq {\bfdefault}
}
\tl_if_eq:oxT \g_@@_curr_series_tl {\bfdefault}
- { \tl_set_eq:NN \l_fontspec_fontname_bf_tl \l_@@_curr_bfname_tl }
+ { \tl_set_eq:NN \l_@@_fontname_bf_tl \l_@@_curr_bfname_tl }
%<debug>\typeout{Setting~bold~font~"\l_@@_curr_bfname_tl"~with~series~"\g_@@_curr_series_tl"}
@@ -182,7 +211,6 @@
}
}
-\prop_new:N \l_@@_nfss_prop
% \end{macrocode}
% Same for italic:
% \begin{macrocode}
@@ -194,7 +222,7 @@
}
{
\bool_set_false:N \l_@@_noit_bool
- \fontspec_complete_fontname:Nn \l_fontspec_fontname_it_tl {#1}
+ \fontspec_complete_fontname:Nn \l_@@_fontname_it_tl {#1}
}
}
% \end{macrocode}
@@ -202,15 +230,15 @@
% \begin{macrocode}
\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont}
{
- \fontspec_complete_fontname:Nn \l_fontspec_fontname_bfit_tl {#1}
+ \fontspec_complete_fontname:Nn \l_@@_fontname_bfit_tl {#1}
}
\@@_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont}
{
- \fontspec_complete_fontname:Nn \l_fontspec_fontname_sl_tl {#1}
+ \fontspec_complete_fontname:Nn \l_@@_fontname_sl_tl {#1}
}
\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont}
{
- \fontspec_complete_fontname:Nn \l_fontspec_fontname_bfsl_tl {#1}
+ \fontspec_complete_fontname:Nn \l_@@_fontname_bfsl_tl {#1}
}
% \end{macrocode}
% Small caps isn't pre-parsed because it can vary with others above:
@@ -223,25 +251,11 @@
}
{
\bool_set_false:N \l_@@_nosc_bool
- \fontspec_complete_fontname:Nn \l_fontspec_fontname_sc_tl {#1}
+ \fontspec_complete_fontname:Nn \l_@@_fontname_sc_tl {#1}
}
}
% \end{macrocode}
%
-% \begin{macro}{\fontspec_complete_fontname:Nn}
-% This macro defines |#1| as the input with any |*| tokens of its input
-% replaced by the font name. This lets us define supplementary fonts in full
-% (``\texttt{Baskerville Semibold}'') or in abbreviation (``\texttt{* Semibold}'').
-% \begin{macrocode}
-\cs_set:Nn \fontspec_complete_fontname:Nn
- {
- \tl_set:Nx #1 {#2}
- \tl_replace_all:Nnx #1 {*} {\l_@@_basename_tl}
-%<luatex> \tl_remove_all:Nn #1 {~}
- }
-\cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx}
-% \end{macrocode}
-% \end{macro}
%
% \paragraph{Features}
%
@@ -352,7 +366,6 @@
% \paragraph{NFSS series/shape}
% This option looks similar in name but has a very different function.
% \begin{macrocode}
-\prop_new:N \l_@@_nfssfont_prop
\@@_keys_define_code:nnn {fontspec} {FontFace}
{
\tl_set:No \l_@@_arg_tl { \use_iii:nnn #1 }
@@ -379,28 +392,6 @@
% \end{macrocode}
%
%
-% \begin{macro}{\@@_add_nfssfont:nnnn}
-% \darg{series}
-% \darg{shape}
-% \darg{fontname}
-% \darg{fontspec features}
-% \begin{macrocode}
-\cs_new:Nn \@@_add_nfssfont:nnnn
- {
- \tl_set:Nx \l_@@_this_font_tl {#3}
-
- \tl_if_empty:xTF {#4}
- { \clist_set:Nn \l_@@_sizefeat_clist {Size={-}} }
- { \keys_set_known:noN {fontspec-preparse-nested} {#4} \l_@@_tmp_tl }
-
- \tl_if_empty:NF \l_@@_this_font_tl
- {
- \prop_put:Nxx \l_@@_nfssfont_prop {#1/#2}
- { {#1}{#2}{\l_@@_this_font_tl}{#4}{\l_@@_sizefeat_clist} }
- }
- }
-% \end{macrocode}
-% \end{macro}
%
% \paragraph{Scale}
% If the input isn't one of the pre-defined string options, then
@@ -463,7 +454,7 @@
\settoheight #1
{
\str_if_eq:nnTF {#3} {\font} \rmfamily #3
- \int_case:nnn #2
+ \int_case:nnF #2
{
{5} {x} % x-height
{8} {X} % cap-height
@@ -578,7 +569,7 @@
\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}
+ \@@_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l_fontspec_hyphenchar_tl}
{
\tl_put_right:Nn \l_@@_postadjust_tl
%<*xetexx>
@@ -619,6 +610,9 @@
}
}
}
+% \end{macrocode}
+%
+% \begin{macrocode}
\cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8
{
\tl_set:Nn \l_@@_hexcol_tl {#1#2#3#4#5#6}
@@ -632,7 +626,6 @@
\aliasfontfeature{Color}{Colour}
% \end{macrocode}
% \begin{macrocode}
-\int_new:N \l_@@_tmp_int
\@@_keys_define_code:nnn {fontspec} {Opacity}
{
\int_set:Nn \l_@@_tmp_int {255}
@@ -665,21 +658,13 @@
{
\@@_warning:n {no-mapping-ligtex}
\msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none}
- \keys_set:nn {fontspec} { Ligatures=TeX }
+ \keys_set:nn {fontspec-opentype} { Ligatures=TeX }
}
{ \@@_warning:n {no-mapping} }
}
%</luatex>
% \end{macrocode}
%
-% \paragraph{FeatureFile}
-% \begin{macrocode}
-\@@_keys_define_code:nnn {fontspec} {FeatureFile}
- {
- \@@_update_featstr:n { featurefile = #1 }
- }
-% \end{macrocode}
-%
%
% \subsubsection{Continuous font axes}
%
@@ -772,17 +757,17 @@
{
\bool_if:NT \l_@@_firsttime_bool
{
- \tl_set:Nn \l_fontspec_fake_slant_tl {#1}
+ \tl_set:Nn \l_@@_fake_slant_tl {#1}
\clist_put_right:Nn \l_@@_fontfeat_it_clist {FakeSlant=#1}
- \tl_set_eq:NN \l_fontspec_fontname_it_tl \l_fontspec_fontname_tl
+ \tl_set_eq:NN \l_@@_fontname_it_tl \l_fontspec_fontname_tl
\bool_set_false:N \l_@@_noit_bool
- \tl_if_empty:NF \l_fontspec_fake_embolden_tl
+ \tl_if_empty:NF \l_@@_fake_embolden_tl
{
\clist_put_right:Nx \l_@@_fontfeat_bfit_clist
- {FakeBold=\l_fontspec_fake_embolden_tl}
+ {FakeBold=\l_@@_fake_embolden_tl}
\clist_put_right:Nx \l_@@_fontfeat_bfit_clist {FakeSlant=#1}
- \tl_set_eq:NN \l_fontspec_fontname_bfit_tl \l_fontspec_fontname_tl
+ \tl_set_eq:NN \l_@@_fontname_bfit_tl \l_fontspec_fontname_tl
}
}
},
@@ -797,17 +782,17 @@
{
\bool_if:NT \l_@@_firsttime_bool
{
- \tl_set:Nn \l_fontspec_fake_embolden_tl {#1}
+ \tl_set:Nn \l_@@_fake_embolden_tl {#1}
\clist_put_right:Nn \l_@@_fontfeat_bf_clist {FakeBold=#1}
- \tl_set_eq:NN \l_fontspec_fontname_bf_tl \l_fontspec_fontname_tl
+ \tl_set_eq:NN \l_@@_fontname_bf_tl \l_fontspec_fontname_tl
\bool_set_false:N \l_@@_nobf_bool
- \tl_if_empty:NF \l_fontspec_fake_slant_tl
+ \tl_if_empty:NF \l_@@_fake_slant_tl
{
\clist_put_right:Nx \l_@@_fontfeat_bfit_clist
- {FakeSlant=\l_fontspec_fake_slant_tl}
+ {FakeSlant=\l_@@_fake_slant_tl}
\clist_put_right:Nx \l_@@_fontfeat_bfit_clist {FakeBold=#1}
- \tl_set_eq:NN \l_fontspec_fontname_bfit_tl \l_fontspec_fontname_tl
+ \tl_set_eq:NN \l_@@_fontname_bfit_tl \l_fontspec_fontname_tl
}
}
},
@@ -816,660 +801,6 @@
% \end{macrocode}
%
%
-% \subsubsection{Ligatures}
-% The call to the nested keyval family must be wrapped in braces to
-% hide the parent list (this later requires the use of global
-% definitions (|\xdef|) in [...]). Both \AAT\ and OpenType
-% names are offered to chose |Rare|/|Discretionary| ligatures.
-% \begin{macrocode}
-\@@_define_font_feature:n{Ligatures}
-\@@_define_feature_option:nnnnn{Ligatures}{Required} {1}{0}{+rlig}
-\@@_define_feature_option:nnnnn{Ligatures}{NoRequired} {1}{1}{-rlig}
-\@@_define_feature_option:nnnnn{Ligatures}{Common} {1}{2}{+liga}
-\@@_define_feature_option:nnnnn{Ligatures}{NoCommon} {1}{3}{-liga}
-\@@_define_feature_option:nnnnn{Ligatures}{Rare} {1}{4}{+dlig}
-\@@_define_feature_option:nnnnn{Ligatures}{NoRare} {1}{5}{-dlig}
-\@@_define_feature_option:nnnnn{Ligatures}{Discretionary} {1}{4}{+dlig}
-\@@_define_feature_option:nnnnn{Ligatures}{NoDiscretionary}{1}{5}{-dlig}
-\@@_define_feature_option:nnnnn{Ligatures}{Contextual} {}{} {+clig}
-\@@_define_feature_option:nnnnn{Ligatures}{NoContextual} {}{} {-clig}
-\@@_define_feature_option:nnnnn{Ligatures}{Historic} {}{} {+hlig}
-\@@_define_feature_option:nnnnn{Ligatures}{NoHistoric} {}{} {-hlig}
-\@@_define_feature_option:nnnnn{Ligatures}{Logos} {1}{6} {}
-\@@_define_feature_option:nnnnn{Ligatures}{NoLogos} {1}{7} {}
-\@@_define_feature_option:nnnnn{Ligatures}{Rebus} {1}{8} {}
-\@@_define_feature_option:nnnnn{Ligatures}{NoRebus} {1}{9} {}
-\@@_define_feature_option:nnnnn{Ligatures}{Diphthong} {1}{10}{}
-\@@_define_feature_option:nnnnn{Ligatures}{NoDiphthong} {1}{11}{}
-\@@_define_feature_option:nnnnn{Ligatures}{Squared} {1}{12}{}
-\@@_define_feature_option:nnnnn{Ligatures}{NoSquared} {1}{13}{}
-\@@_define_feature_option:nnnnn{Ligatures}{AbbrevSquared} {1}{14}{}
-\@@_define_feature_option:nnnnn{Ligatures}{NoAbbrevSquared}{1}{15}{}
-\@@_define_feature_option:nnnnn{Ligatures}{Icelandic} {1}{32}{}
-\@@_define_feature_option:nnnnn{Ligatures}{NoIcelandic} {1}{33}{}
-% \end{macrocode}
-% Emulate CM extra ligatures.
-% \begin{macrocode}
-\keys_define:nn {fontspec}
- {
- Ligatures / TeX .code:n =
- {
-%<*xetexx>
- \@@_update_featstr:n { mapping = tex-text }
-%</xetexx>
-%<*luatex>
- \@@_update_featstr:n { +tlig }
-%</luatex>
- }
- }
-% \end{macrocode}
-%
-% \subsubsection{Letters}
-% \begin{macrocode}
-\@@_define_font_feature:n{Letters}
-\@@_define_feature_option:nnnnn{Letters}{Normal} {3}{0}{}
-\@@_define_feature_option:nnnnn{Letters}{Uppercase} {3}{1}{+case}
-\@@_define_feature_option:nnnnn{Letters}{Lowercase} {3}{2}{}
-\@@_define_feature_option:nnnnn{Letters}{SmallCaps} {3}{3}{+smcp}
-\@@_define_feature_option:nnnnn{Letters}{PetiteCaps} {} {} {+pcap}
-\@@_define_feature_option:nnnnn{Letters}{UppercaseSmallCaps} {} {} {+c2sc}
-\@@_define_feature_option:nnnnn{Letters}{UppercasePetiteCaps}{} {} {+c2pc}
-\@@_define_feature_option:nnnnn{Letters}{InitialCaps} {3}{4}{}
-\@@_define_feature_option:nnnnn{Letters}{Unicase} {} {} {+unic}
-\@@_define_feature_option:nnnnn{Letters}{Random} {} {} {+rand}
-% \end{macrocode}
-%
-% \subsubsection{Numbers}
-%
-% These were originally separated into \feat{NumberCase} and
-% \feat{NumberSpacing} following \AAT, but it makes more sense to
-% combine them.
-%
-% Both naming conventions are offered to select the number case.
-%
-% \begin{macrocode}
-\@@_define_font_feature:n{Numbers}
-\@@_define_feature_option:nnnnn{Numbers}{Monospaced} {6} {0}{+tnum}
-\@@_define_feature_option:nnnnn{Numbers}{Proportional} {6} {1}{+pnum}
-\@@_define_feature_option:nnnnn{Numbers}{Lowercase} {21}{0}{+onum}
-\@@_define_feature_option:nnnnn{Numbers}{OldStyle} {21}{0}{+onum}
-\@@_define_feature_option:nnnnn{Numbers}{Uppercase} {21}{1}{+lnum}
-\@@_define_feature_option:nnnnn{Numbers}{Lining} {21}{1}{+lnum}
-\@@_define_feature_option:nnnnn{Numbers}{SlashedZero} {14}{5}{+zero}
-\@@_define_feature_option:nnnnn{Numbers}{NoSlashedZero}{14}{4}{-zero}
-% \end{macrocode}
-%
-% |luaotload| provides a custom |anum| feature for replacing Latin
-% (AKA Arabic) numbers with Arabic (AKA Indic-Arabic). The same feature
-% maps to Farsi (Persian) numbers if font language is Farsi.
-%
-% \begin{macrocode}
-\luatex_if_engine:T
- {
- \@@_define_feature_option:nnnnn{Numbers}{Arabic}{}{}{+anum}
- }
-% \end{macrocode}
-%
-% \subsubsection{Contextuals}
-% \begin{macrocode}
-\@@_define_font_feature:n {Contextuals}
-\@@_define_feature_option:nnnnn{Contextuals}{Swash} {} {} {+cswh}
-\@@_define_feature_option:nnnnn{Contextuals}{NoSwash} {} {} {-cswh}
-\@@_define_feature_option:nnnnn{Contextuals}{Alternate} {} {} {+calt}
-\@@_define_feature_option:nnnnn{Contextuals}{NoAlternate} {} {} {-calt}
-\@@_define_feature_option:nnnnn{Contextuals}{WordInitial} {8}{0}{+init}
-\@@_define_feature_option:nnnnn{Contextuals}{NoWordInitial}{8}{1}{-init}
-\@@_define_feature_option:nnnnn{Contextuals}{WordFinal} {8}{2}{+fina}
-\@@_define_feature_option:nnnnn{Contextuals}{NoWordFinal} {8}{3}{-fina}
-\@@_define_feature_option:nnnnn{Contextuals}{LineInitial} {8}{4}{}
-\@@_define_feature_option:nnnnn{Contextuals}{NoLineInitial}{8}{5}{}
-\@@_define_feature_option:nnnnn{Contextuals}{LineFinal} {8}{6}{+falt}
-\@@_define_feature_option:nnnnn{Contextuals}{NoLineFinal} {8}{7}{-falt}
-\@@_define_feature_option:nnnnn{Contextuals}{Inner} {8}{8}{+medi}
-\@@_define_feature_option:nnnnn{Contextuals}{NoInner} {8}{9}{-medi}
-% \end{macrocode}
-%
-% \subsubsection{Diacritics}
-% \begin{macrocode}
-\@@_define_font_feature:n{Diacritics}
-\@@_define_feature_option:nnnnn{Diacritics}{Show} {9}{0}{}
-\@@_define_feature_option:nnnnn{Diacritics}{Hide} {9}{1}{}
-\@@_define_feature_option:nnnnn{Diacritics}{Decompose} {9}{2}{}
-\@@_define_feature_option:nnnnn{Diacritics}{MarkToBase} {}{}{+mark}
-\@@_define_feature_option:nnnnn{Diacritics}{NoMarkToBase}{}{}{-mark}
-\@@_define_feature_option:nnnnn{Diacritics}{MarkToMark} {}{}{+mkmk}
-\@@_define_feature_option:nnnnn{Diacritics}{NoMarkToMark}{}{}{-mkmk}
-\@@_define_feature_option:nnnnn{Diacritics}{AboveBase} {}{}{+abvm}
-\@@_define_feature_option:nnnnn{Diacritics}{NoAboveBase} {}{}{-abvm}
-\@@_define_feature_option:nnnnn{Diacritics}{BelowBase} {}{}{+blwm}
-\@@_define_feature_option:nnnnn{Diacritics}{NoBelowBase} {}{}{-blwm}
-% \end{macrocode}
-%
-% \subsubsection{Kerning}
-% \begin{macrocode}
-\@@_define_font_feature:n{Kerning}
-\@@_define_feature_option:nnnnn{Kerning}{Uppercase}{}{}{+cpsp}
-\@@_define_feature_option:nnnnn{Kerning}{On} {}{}{+kern}
-\@@_define_feature_option:nnnnn{Kerning}{Off} {}{}{-kern}
-%\@@_define_feature_option:nnnnn{Kerning}{Vertical}{}{}{+vkrn}
-%\@@_define_feature_option:nnnnn{Kerning}
-% {VerticalAlternateProportional}{}{}{+vpal}
-%\@@_define_feature_option:nnnnn{Kerning}{VerticalAlternateHalfWidth}{}{}{+vhal}
-% \end{macrocode}
-%
-% \subsubsection{Vertical position}
-% \begin{macrocode}
-\@@_define_font_feature:n{VerticalPosition}
-\@@_define_feature_option:nnnnn{VerticalPosition}{Normal} {10}{0}{}
-\@@_define_feature_option:nnnnn{VerticalPosition}{Superior} {10}{1}{+sups}
-\@@_define_feature_option:nnnnn{VerticalPosition}{Inferior} {10}{2}{+subs}
-\@@_define_feature_option:nnnnn{VerticalPosition}{Ordinal} {10}{3}{+ordn}
-\@@_define_feature_option:nnnnn{VerticalPosition}{Numerator} {} {} {+numr}
-\@@_define_feature_option:nnnnn{VerticalPosition}{Denominator}{} {} {+dnom}
-\@@_define_feature_option:nnnnn{VerticalPosition}{ScientificInferior}{}{}{+sinf}
-% \end{macrocode}
-%
-% \subsubsection{Fractions}
-% \begin{macrocode}
-\@@_define_font_feature:n{Fractions}
-\@@_define_feature_option:nnnnn{Fractions}{On} {11}{1}{+frac}
-\@@_define_feature_option:nnnnn{Fractions}{Off} {11}{0}{-frac}
-\@@_define_feature_option:nnnnn{Fractions}{Diagonal} {11}{2}{}
-\@@_define_feature_option:nnnnn{Fractions}{Alternate}{} {} {+afrc}
-% \end{macrocode}
-%
-% \subsubsection{Alternates and variants}
-% Selected numerically because they don't have standard names. Very
-% easy to process, very annoying for the user!
-%
-% \begin{macrocode}
-\@@_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} } }
- }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_set:Nn \fontspec_salt:n { +salt = #1 }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\@@_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}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\@@_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
- }
- }
- }
- }
-% \end{macrocode}
-% Possibilities: \verb|a:0:\q_nil| or \verb|a:b:0:\q_nil|.
-%
-%
-%
-% \subsubsection{Style}
-% \begin{macrocode}
-\@@_define_font_feature:n{Style}
-\@@_define_feature_option:nnnnn{Style}{Alternate} {} {} {+salt}
-\@@_define_feature_option:nnnnn{Style}{Italic} {32}{2}{+ital}
-\@@_define_feature_option:nnnnn{Style}{Ruby} {28}{2}{+ruby}
-\@@_define_feature_option:nnnnn{Style}{Swash} {} {} {+swsh}
-\@@_define_feature_option:nnnnn{Style}{Historic} {} {} {+hist}
-\@@_define_feature_option:nnnnn{Style}{Display} {19}{1}{}
-\@@_define_feature_option:nnnnn{Style}{Engraved} {19}{2}{}
-\@@_define_feature_option:nnnnn{Style}{TitlingCaps} {19}{4}{+titl}
-\@@_define_feature_option:nnnnn{Style}{TallCaps} {19}{5}{}
-\@@_define_feature_option:nnnnn{Style}{HorizontalKana}{} {} {+hkna}
-\@@_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}
-% \end{macrocode}
-%
-% \subsubsection{CJK shape}
-% \begin{macrocode}
-\@@_define_font_feature:n{CJKShape}
-\@@_define_feature_option:nnnnn{CJKShape}{Traditional}{20}{0} {+trad}
-\@@_define_feature_option:nnnnn{CJKShape}{Simplified} {20}{1} {+smpl}
-\@@_define_feature_option:nnnnn{CJKShape}{JIS1978} {20}{2} {+jp78}
-\@@_define_feature_option:nnnnn{CJKShape}{JIS1983} {20}{3} {+jp83}
-\@@_define_feature_option:nnnnn{CJKShape}{JIS1990} {20}{4} {+jp90}
-\@@_define_feature_option:nnnnn{CJKShape}{Expert} {20}{10}{+expt}
-\@@_define_feature_option:nnnnn{CJKShape}{NLC} {20}{13}{+nlck}
-% \end{macrocode}
-%
-% \subsubsection{Character width}
-% \begin{macrocode}
-\@@_define_font_feature:n{CharacterWidth}
-\@@_define_feature_option:nnnnn{CharacterWidth}{Proportional}{22}{0}{+pwid}
-\@@_define_feature_option:nnnnn{CharacterWidth}{Full}{22}{1}{+fwid}
-\@@_define_feature_option:nnnnn{CharacterWidth}{Half}{22}{2}{+hwid}
-\@@_define_feature_option:nnnnn{CharacterWidth}{Third}{22}{3}{+twid}
-\@@_define_feature_option:nnnnn{CharacterWidth}{Quarter}{22}{4}{+qwid}
-\@@_define_feature_option:nnnnn{CharacterWidth}{AlternateProportional}{22}{5}{+palt}
-\@@_define_feature_option:nnnnn{CharacterWidth}{AlternateHalf}{22}{6}{+halt}
-\@@_define_feature_option:nnnnn{CharacterWidth}{Default}{22}{7}{}
-% \end{macrocode}
-%
-% \subsubsection{Annotation}
-% \begin{macrocode}
-\@@_define_feature_option:nnnnn{Annotation}{Off}{24}{0}{}
-\@@_define_feature_option:nnnnn{Annotation}{Box}{24}{1}{}
-\@@_define_feature_option:nnnnn{Annotation}{RoundedBox}{24}{2}{}
-\@@_define_feature_option:nnnnn{Annotation}{Circle}{24}{3}{}
-\@@_define_feature_option:nnnnn{Annotation}{BlackCircle}{24}{4}{}
-\@@_define_feature_option:nnnnn{Annotation}{Parenthesis}{24}{5}{}
-\@@_define_feature_option:nnnnn{Annotation}{Period}{24}{6}{}
-\@@_define_feature_option:nnnnn{Annotation}{RomanNumerals}{24}{7}{}
-\@@_define_feature_option:nnnnn{Annotation}{Diamond}{24}{8}{}
-\@@_define_feature_option:nnnnn{Annotation}{BlackSquare}{24}{9}{}
-\@@_define_feature_option:nnnnn{Annotation}{BlackRoundSquare}{24}{10}{}
-\@@_define_feature_option:nnnnn{Annotation}{DoubleCircle}{24}{11}{}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\@@_define_font_feature:n { Annotation }
-\keys_define:nn {fontspec}
- {
- Annotation .default:n = {0} ,
- Annotation / unknown .code:n =
- {
- \fontspec_make_feature:nnx {}{}{ +nalt=#1 }
- }
- }
-% \end{macrocode}
-%
-%
-% \subsubsection{Vertical}
-% \begin{macrocode}
-\keys_define:nn {fontspec}
- {
- Vertical .choice: ,
- Vertical / RotatedGlyphs .code:n =
- {
- \bool_if:NTF \l_@@_ot_bool
- {
- \fontspec_make_feature:nnn{}{}{+vrt2}
- \@@_update_featstr:n {vertical}
- }
- {
- \@@_update_featstr:n {vertical}
- }
- }
- }
-% \end{macrocode}
-%
-% \subsubsection{Script}
-%
-% \begin{macrocode}
-\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}
- {
- \@@_warning:nx {script-not-exist-latn} {#1}
- \keys_set:nn {fontspec} {Script=Latin}
- }
- {
- \@@_warning:nx {script-not-exist} {#1}
- }
- }
- }
- }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\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~~}
-% \end{macrocode}
-% For convenience:
-% \begin{macrocode}
-\newfontscript{Kana}{kana}
-\newfontscript{Maths}{math}
-\newfontscript{CJK}{hani}
-% \end{macrocode}
-%
-% \subsubsection{Language}
-%
-% \begin{macrocode}
-\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}
- }
- {
- \@@_warning:nx {language-not-exist} {#1}
- \keys_set:nn { fontspec } { Language = Default }
- }
- }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\newfontlanguage{Abaza}{ABA}\newfontlanguage{Abkhazian}{ABK}
-\newfontlanguage{Adyghe}{ADY}\newfontlanguage{Afrikaans}{AFK}
-\newfontlanguage{Afar}{AFR}\newfontlanguage{Agaw}{AGW}
-\newfontlanguage{Altai}{ALT}\newfontlanguage{Amharic}{AMH}
-\newfontlanguage{Arabic}{ARA}\newfontlanguage{Aari}{ARI}
-\newfontlanguage{Arakanese}{ARK}\newfontlanguage{Assamese}{ASM}
-\newfontlanguage{Athapaskan}{ATH}\newfontlanguage{Avar}{AVR}
-\newfontlanguage{Awadhi}{AWA}\newfontlanguage{Aymara}{AYM}
-\newfontlanguage{Azeri}{AZE}\newfontlanguage{Badaga}{BAD}
-\newfontlanguage{Baghelkhandi}{BAG}\newfontlanguage{Balkar}{BAL}
-\newfontlanguage{Baule}{BAU}\newfontlanguage{Berber}{BBR}
-\newfontlanguage{Bench}{BCH}\newfontlanguage{Bible~Cree}{BCR}
-\newfontlanguage{Belarussian}{BEL}\newfontlanguage{Bemba}{BEM}
-\newfontlanguage{Bengali}{BEN}\newfontlanguage{Bulgarian}{BGR}
-\newfontlanguage{Bhili}{BHI}\newfontlanguage{Bhojpuri}{BHO}
-\newfontlanguage{Bikol}{BIK}\newfontlanguage{Bilen}{BIL}
-\newfontlanguage{Blackfoot}{BKF}\newfontlanguage{Balochi}{BLI}
-\newfontlanguage{Balante}{BLN}\newfontlanguage{Balti}{BLT}
-\newfontlanguage{Bambara}{BMB}\newfontlanguage{Bamileke}{BML}
-\newfontlanguage{Breton}{BRE}\newfontlanguage{Brahui}{BRH}
-\newfontlanguage{Braj~Bhasha}{BRI}\newfontlanguage{Burmese}{BRM}
-\newfontlanguage{Bashkir}{BSH}\newfontlanguage{Beti}{BTI}
-\newfontlanguage{Catalan}{CAT}\newfontlanguage{Cebuano}{CEB}
-\newfontlanguage{Chechen}{CHE}\newfontlanguage{Chaha~Gurage}{CHG}
-\newfontlanguage{Chattisgarhi}{CHH}\newfontlanguage{Chichewa}{CHI}
-\newfontlanguage{Chukchi}{CHK}\newfontlanguage{Chipewyan}{CHP}
-\newfontlanguage{Cherokee}{CHR}\newfontlanguage{Chuvash}{CHU}
-\newfontlanguage{Comorian}{CMR}\newfontlanguage{Coptic}{COP}
-\newfontlanguage{Cree}{CRE}\newfontlanguage{Carrier}{CRR}
-\newfontlanguage{Crimean~Tatar}{CRT}\newfontlanguage{Church~Slavonic}{CSL}
-\newfontlanguage{Czech}{CSY}\newfontlanguage{Danish}{DAN}
-\newfontlanguage{Dargwa}{DAR}\newfontlanguage{Woods~Cree}{DCR}
-\newfontlanguage{German}{DEU}
-\newfontlanguage{Dogri}{DGR}\newfontlanguage{Divehi}{DIV}
-\newfontlanguage{Djerma}{DJR}\newfontlanguage{Dangme}{DNG}
-\newfontlanguage{Dinka}{DNK}\newfontlanguage{Dungan}{DUN}
-\newfontlanguage{Dzongkha}{DZN}\newfontlanguage{Ebira}{EBI}
-\newfontlanguage{Eastern~Cree}{ECR}\newfontlanguage{Edo}{EDO}
-\newfontlanguage{Efik}{EFI}\newfontlanguage{Greek}{ELL}
-\newfontlanguage{English}{ENG}\newfontlanguage{Erzya}{ERZ}
-\newfontlanguage{Spanish}{ESP}\newfontlanguage{Estonian}{ETI}
-\newfontlanguage{Basque}{EUQ}\newfontlanguage{Evenki}{EVK}
-\newfontlanguage{Even}{EVN}\newfontlanguage{Ewe}{EWE}
-\newfontlanguage{French~Antillean}{FAN}
-\newfontlanguage{Farsi}{FAR}
-\newfontlanguage{Parsi}{FAR}
-\newfontlanguage{Persian}{FAR}
-\newfontlanguage{Finnish}{FIN}\newfontlanguage{Fijian}{FJI}
-\newfontlanguage{Flemish}{FLE}\newfontlanguage{Forest~Nenets}{FNE}
-\newfontlanguage{Fon}{FON}\newfontlanguage{Faroese}{FOS}
-\newfontlanguage{French}{FRA}\newfontlanguage{Frisian}{FRI}
-\newfontlanguage{Friulian}{FRL}\newfontlanguage{Futa}{FTA}
-\newfontlanguage{Fulani}{FUL}\newfontlanguage{Ga}{GAD}
-\newfontlanguage{Gaelic}{GAE}\newfontlanguage{Gagauz}{GAG}
-\newfontlanguage{Galician}{GAL}\newfontlanguage{Garshuni}{GAR}
-\newfontlanguage{Garhwali}{GAW}\newfontlanguage{Ge'ez}{GEZ}
-\newfontlanguage{Gilyak}{GIL}\newfontlanguage{Gumuz}{GMZ}
-\newfontlanguage{Gondi}{GON}\newfontlanguage{Greenlandic}{GRN}
-\newfontlanguage{Garo}{GRO}\newfontlanguage{Guarani}{GUA}
-\newfontlanguage{Gujarati}{GUJ}\newfontlanguage{Haitian}{HAI}
-\newfontlanguage{Halam}{HAL}\newfontlanguage{Harauti}{HAR}
-\newfontlanguage{Hausa}{HAU}\newfontlanguage{Hawaiin}{HAW}
-\newfontlanguage{Hammer-Banna}{HBN}\newfontlanguage{Hiligaynon}{HIL}
-\newfontlanguage{Hindi}{HIN}\newfontlanguage{High~Mari}{HMA}
-\newfontlanguage{Hindko}{HND}\newfontlanguage{Ho}{HO}
-\newfontlanguage{Harari}{HRI}\newfontlanguage{Croatian}{HRV}
-\newfontlanguage{Hungarian}{HUN}\newfontlanguage{Armenian}{HYE}
-\newfontlanguage{Igbo}{IBO}\newfontlanguage{Ijo}{IJO}
-\newfontlanguage{Ilokano}{ILO}\newfontlanguage{Indonesian}{IND}
-\newfontlanguage{Ingush}{ING}\newfontlanguage{Inuktitut}{INU}
-\newfontlanguage{Irish}{IRI}\newfontlanguage{Irish~Traditional}{IRT}
-\newfontlanguage{Icelandic}{ISL}\newfontlanguage{Inari~Sami}{ISM}
-\newfontlanguage{Italian}{ITA}\newfontlanguage{Hebrew}{IWR}
-\newfontlanguage{Javanese}{JAV}\newfontlanguage{Yiddish}{JII}
-\newfontlanguage{Japanese}{JAN}\newfontlanguage{Judezmo}{JUD}
-\newfontlanguage{Jula}{JUL}\newfontlanguage{Kabardian}{KAB}
-\newfontlanguage{Kachchi}{KAC}\newfontlanguage{Kalenjin}{KAL}
-\newfontlanguage{Kannada}{KAN}\newfontlanguage{Karachay}{KAR}
-\newfontlanguage{Georgian}{KAT}\newfontlanguage{Kazakh}{KAZ}
-\newfontlanguage{Kebena}{KEB}\newfontlanguage{Khutsuri~Georgian}{KGE}
-\newfontlanguage{Khakass}{KHA}\newfontlanguage{Khanty-Kazim}{KHK}
-\newfontlanguage{Khmer}{KHM}\newfontlanguage{Khanty-Shurishkar}{KHS}
-\newfontlanguage{Khanty-Vakhi}{KHV}\newfontlanguage{Khowar}{KHW}
-\newfontlanguage{Kikuyu}{KIK}\newfontlanguage{Kirghiz}{KIR}
-\newfontlanguage{Kisii}{KIS}\newfontlanguage{Kokni}{KKN}
-\newfontlanguage{Kalmyk}{KLM}\newfontlanguage{Kamba}{KMB}
-\newfontlanguage{Kumaoni}{KMN}\newfontlanguage{Komo}{KMO}
-\newfontlanguage{Komso}{KMS}\newfontlanguage{Kanuri}{KNR}
-\newfontlanguage{Kodagu}{KOD}\newfontlanguage{Korean~Old~Hangul}{KOH}
-\newfontlanguage{Konkani}{KOK}\newfontlanguage{Kikongo}{KON}
-\newfontlanguage{Komi-Permyak}{KOP}\newfontlanguage{Korean}{KOR}
-\newfontlanguage{Komi-Zyrian}{KOZ}\newfontlanguage{Kpelle}{KPL}
-\newfontlanguage{Krio}{KRI}\newfontlanguage{Karakalpak}{KRK}
-\newfontlanguage{Karelian}{KRL}\newfontlanguage{Karaim}{KRM}
-\newfontlanguage{Karen}{KRN}\newfontlanguage{Koorete}{KRT}
-\newfontlanguage{Kashmiri}{KSH}\newfontlanguage{Khasi}{KSI}
-\newfontlanguage{Kildin~Sami}{KSM}\newfontlanguage{Kui}{KUI}
-\newfontlanguage{Kulvi}{KUL}\newfontlanguage{Kumyk}{KUM}
-\newfontlanguage{Kurdish}{KUR}\newfontlanguage{Kurukh}{KUU}
-\newfontlanguage{Kuy}{KUY}\newfontlanguage{Koryak}{KYK}
-\newfontlanguage{Ladin}{LAD}\newfontlanguage{Lahuli}{LAH}
-\newfontlanguage{Lak}{LAK}\newfontlanguage{Lambani}{LAM}
-\newfontlanguage{Lao}{LAO}\newfontlanguage{Latin}{LAT}
-\newfontlanguage{Laz}{LAZ}\newfontlanguage{L-Cree}{LCR}
-\newfontlanguage{Ladakhi}{LDK}\newfontlanguage{Lezgi}{LEZ}
-\newfontlanguage{Lingala}{LIN}\newfontlanguage{Low~Mari}{LMA}
-\newfontlanguage{Limbu}{LMB}\newfontlanguage{Lomwe}{LMW}
-\newfontlanguage{Lower~Sorbian}{LSB}\newfontlanguage{Lule~Sami}{LSM}
-\newfontlanguage{Lithuanian}{LTH}\newfontlanguage{Luba}{LUB}
-\newfontlanguage{Luganda}{LUG}\newfontlanguage{Luhya}{LUH}
-\newfontlanguage{Luo}{LUO}\newfontlanguage{Latvian}{LVI}
-\newfontlanguage{Majang}{MAJ}\newfontlanguage{Makua}{MAK}
-\newfontlanguage{Malayalam~Traditional}{MAL}\newfontlanguage{Mansi}{MAN}
-\newfontlanguage{Marathi}{MAR}\newfontlanguage{Marwari}{MAW}
-\newfontlanguage{Mbundu}{MBN}\newfontlanguage{Manchu}{MCH}
-\newfontlanguage{Moose~Cree}{MCR}\newfontlanguage{Mende}{MDE}
-\newfontlanguage{Me'en}{MEN}\newfontlanguage{Mizo}{MIZ}
-\newfontlanguage{Macedonian}{MKD}\newfontlanguage{Male}{MLE}
-\newfontlanguage{Malagasy}{MLG}\newfontlanguage{Malinke}{MLN}
-\newfontlanguage{Malayalam~Reformed}{MLR}\newfontlanguage{Malay}{MLY}
-\newfontlanguage{Mandinka}{MND}\newfontlanguage{Mongolian}{MNG}
-\newfontlanguage{Manipuri}{MNI}\newfontlanguage{Maninka}{MNK}
-\newfontlanguage{Manx~Gaelic}{MNX}\newfontlanguage{Moksha}{MOK}
-\newfontlanguage{Moldavian}{MOL}\newfontlanguage{Mon}{MON}
-\newfontlanguage{Moroccan}{MOR}\newfontlanguage{Maori}{MRI}
-\newfontlanguage{Maithili}{MTH}\newfontlanguage{Maltese}{MTS}
-\newfontlanguage{Mundari}{MUN}\newfontlanguage{Naga-Assamese}{NAG}
-\newfontlanguage{Nanai}{NAN}\newfontlanguage{Naskapi}{NAS}
-\newfontlanguage{N-Cree}{NCR}\newfontlanguage{Ndebele}{NDB}
-\newfontlanguage{Ndonga}{NDG}\newfontlanguage{Nepali}{NEP}
-\newfontlanguage{Newari}{NEW}\newfontlanguage{Nagari}{NGR}
-\newfontlanguage{Norway~House~Cree}{NHC}\newfontlanguage{Nisi}{NIS}
-\newfontlanguage{Niuean}{NIU}\newfontlanguage{Nkole}{NKL}
-\newfontlanguage{N'ko}{NKO}\newfontlanguage{Dutch}{NLD}
-\newfontlanguage{Nogai}{NOG}\newfontlanguage{Norwegian}{NOR}
-\newfontlanguage{Northern~Sami}{NSM}\newfontlanguage{Northern~Tai}{NTA}
-\newfontlanguage{Esperanto}{NTO}\newfontlanguage{Nynorsk}{NYN}
-\newfontlanguage{Oji-Cree}{OCR}\newfontlanguage{Ojibway}{OJB}
-\newfontlanguage{Oriya}{ORI}\newfontlanguage{Oromo}{ORO}
-\newfontlanguage{Ossetian}{OSS}\newfontlanguage{Palestinian~Aramaic}{PAA}
-\newfontlanguage{Pali}{PAL}\newfontlanguage{Punjabi}{PAN}
-\newfontlanguage{Palpa}{PAP}\newfontlanguage{Pashto}{PAS}
-\newfontlanguage{Polytonic~Greek}{PGR}\newfontlanguage{Pilipino}{PIL}
-\newfontlanguage{Palaung}{PLG}\newfontlanguage{Polish}{PLK}
-\newfontlanguage{Provencal}{PRO}\newfontlanguage{Portuguese}{PTG}
-\newfontlanguage{Chin}{QIN}\newfontlanguage{Rajasthani}{RAJ}
-\newfontlanguage{R-Cree}{RCR}\newfontlanguage{Russian~Buriat}{RBU}
-\newfontlanguage{Riang}{RIA}\newfontlanguage{Rhaeto-Romanic}{RMS}
-\newfontlanguage{Romanian}{ROM}\newfontlanguage{Romany}{ROY}
-\newfontlanguage{Rusyn}{RSY}\newfontlanguage{Ruanda}{RUA}
-\newfontlanguage{Russian}{RUS}\newfontlanguage{Sadri}{SAD}
-\newfontlanguage{Sanskrit}{SAN}\newfontlanguage{Santali}{SAT}
-\newfontlanguage{Sayisi}{SAY}\newfontlanguage{Sekota}{SEK}
-\newfontlanguage{Selkup}{SEL}\newfontlanguage{Sango}{SGO}
-\newfontlanguage{Shan}{SHN}\newfontlanguage{Sibe}{SIB}
-\newfontlanguage{Sidamo}{SID}\newfontlanguage{Silte~Gurage}{SIG}
-\newfontlanguage{Skolt~Sami}{SKS}\newfontlanguage{Slovak}{SKY}
-\newfontlanguage{Slavey}{SLA}\newfontlanguage{Slovenian}{SLV}
-\newfontlanguage{Somali}{SML}\newfontlanguage{Samoan}{SMO}
-\newfontlanguage{Sena}{SNA}\newfontlanguage{Sindhi}{SND}
-\newfontlanguage{Sinhalese}{SNH}\newfontlanguage{Soninke}{SNK}
-\newfontlanguage{Sodo~Gurage}{SOG}\newfontlanguage{Sotho}{SOT}
-\newfontlanguage{Albanian}{SQI}\newfontlanguage{Serbian}{SRB}
-\newfontlanguage{Saraiki}{SRK}\newfontlanguage{Serer}{SRR}
-\newfontlanguage{South~Slavey}{SSL}\newfontlanguage{Southern~Sami}{SSM}
-\newfontlanguage{Suri}{SUR}\newfontlanguage{Svan}{SVA}
-\newfontlanguage{Swedish}{SVE}\newfontlanguage{Swadaya~Aramaic}{SWA}
-\newfontlanguage{Swahili}{SWK}\newfontlanguage{Swazi}{SWZ}
-\newfontlanguage{Sutu}{SXT}\newfontlanguage{Syriac}{SYR}
-\newfontlanguage{Tabasaran}{TAB}\newfontlanguage{Tajiki}{TAJ}
-\newfontlanguage{Tamil}{TAM}\newfontlanguage{Tatar}{TAT}
-\newfontlanguage{TH-Cree}{TCR}\newfontlanguage{Telugu}{TEL}
-\newfontlanguage{Tongan}{TGN}\newfontlanguage{Tigre}{TGR}
-\newfontlanguage{Tigrinya}{TGY}\newfontlanguage{Thai}{THA}
-\newfontlanguage{Tahitian}{THT}\newfontlanguage{Tibetan}{TIB}
-\newfontlanguage{Turkmen}{TKM}\newfontlanguage{Temne}{TMN}
-\newfontlanguage{Tswana}{TNA}\newfontlanguage{Tundra~Nenets}{TNE}
-\newfontlanguage{Tonga}{TNG}\newfontlanguage{Todo}{TOD}
-\newfontlanguage{Tsonga}{TSG}\newfontlanguage{Turoyo~Aramaic}{TUA}
-\newfontlanguage{Tulu}{TUL}\newfontlanguage{Tuvin}{TUV}
-\newfontlanguage{Twi}{TWI}\newfontlanguage{Udmurt}{UDM}
-\newfontlanguage{Ukrainian}{UKR}\newfontlanguage{Urdu}{URD}
-\newfontlanguage{Upper~Sorbian}{USB}\newfontlanguage{Uyghur}{UYG}
-\newfontlanguage{Uzbek}{UZB}\newfontlanguage{Venda}{VEN}
-\newfontlanguage{Vietnamese}{VIT}\newfontlanguage{Wa}{WA}
-\newfontlanguage{Wagdi}{WAG}\newfontlanguage{West-Cree}{WCR}
-\newfontlanguage{Welsh}{WEL}\newfontlanguage{Wolof}{WLF}
-\newfontlanguage{Tai~Lue}{XBD}\newfontlanguage{Xhosa}{XHS}
-\newfontlanguage{Yakut}{YAK}\newfontlanguage{Yoruba}{YBA}
-\newfontlanguage{Y-Cree}{YCR}\newfontlanguage{Yi~Classic}{YIC}
-\newfontlanguage{Yi~Modern}{YIM}\newfontlanguage{Chinese~Hong~Kong}{ZHH}
-\newfontlanguage{Chinese~Phonetic}{ZHP}
-\newfontlanguage{Chinese~Simplified}{ZHS}
-\newfontlanguage{Chinese~Traditional}{ZHT}\newfontlanguage{Zande}{ZND}
-\newfontlanguage{Zulu}{ZUL}
-% \end{macrocode}
-%
-% \paragraph{Turkish} Turns out that many fonts use `TUR' as their Turkish language tag rather than the specified `TRK'. So we check for both:
-% \begin{macrocode}
-\keys_define:nn {fontspec}
- {
- 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}
- }
- {
- \@@_warning:nx {language-not-exist} {Turkish}
- \keys_set:nn {fontspec} {Language=Default}
- }
- }
- }
- }
-% \end{macrocode}
-%
-% \paragraph{Default}
-%
-% \begin{macrocode}
-\@@_keys_define_code:nnn {fontspec}{ Language / Default }
- {
- \tl_set:Nn \l_fontspec_lang_tl {DFLT}
- \int_zero:N \l_fontspec_language_int
- }
-% \end{macrocode}
-%
% \subsubsection{Raw feature string}
% This allows savvy \XeTeX-ers to input font features manually if they have
% already memorised the OpenType abbreviations and don't mind not having error checking.
@@ -1480,6 +811,9 @@
}
% \end{macrocode}
%
+%
+%
+%
% \iffalse
% \begin{macrocode}
%</fontspec&(xetexx|luatex)>