2 %% This is file `fontspec-xetex.sty',
3 %% generated with the docstrip utility.
5 %% The original source files were:
7 %% fontspec.dtx (with options: `fontspec,XE')
8 %% fontspec-code-load.dtx (with options: `fontspec,XE')
9 %% fontspec-code-vars.dtx (with options: `fontspec,XE')
10 %% fontspec-code-msg.dtx (with options: `fontspec,XE')
11 %% fontspec-code-opening.dtx (with options: `fontspec,XE')
12 %% fontspec-code-fontload.dtx (with options: `fontspec,XE')
13 %% fontspec-code-interfaces.dtx (with options: `fontspec,XE')
14 %% fontspec-code-user.dtx (with options: `fontspec,XE')
15 %% fontspec-code-api.dtx (with options: `fontspec,XE')
16 %% fontspec-code-internal.dtx (with options: `fontspec,XE')
17 %% fontspec-code-opentype.dtx (with options: `fontspec,XE')
18 %% fontspec-code-graphite.dtx (with options: `fontspec,XE')
19 %% fontspec-code-keyval.dtx (with options: `fontspec,XE')
20 %% fontspec-code-feat-opentype.dtx (with options: `fontspec,XE')
21 %% fontspec-code-scripts.dtx (with options: `fontspec,XE')
22 %% fontspec-code-lang.dtx (with options: `fontspec,XE')
23 %% fontspec-code-feat-aat.dtx (with options: `fontspec,XE')
24 %% fontspec-code-enc.dtx (with options: `fontspec,XE')
25 %% fontspec-code-math.dtx (with options: `fontspec,XE')
26 %% fontspec-code-closing.dtx (with options: `fontspec,XE')
27 %% fontspec-code-xfss.dtx (with options: `fontspec,XE')
28 %% ------------------------------------------------
29 %% The FONTSPEC package <wspr.io/fontspec>
30 %% ------------------------------------------------
31 %% Copyright 2004-2017 Will Robertson, LPPL "maintainer"
32 %% Copyright 2009-2013 Khaled Hosny
33 %% ------------------------------------------------
34 %% This package is free software and may be redistributed and/or modified under
35 %% the conditions of the LaTeX Project Public License, version 1.3c or higher
36 %% (your choice): <http://www.latex-project.org/lppl/>.
37 %% ------------------------------------------------
38 %%^^A%% fontspec.dtx -- part of FONTSPEC <wspr.io/fontspec>
39 %%^^A%% Metadata for the package, including files and versioning
41 \RequirePackage{xparse
}
42 \ProvidesExplPackage{fontspec-xetex
}%
43 {2020/
02/
21}{2.7i
}{Font selection for XeLaTeX and LuaLaTeX
}
45 %%^^A%% fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec>
46 %%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC <wspr.io/fontspec>
47 \bool_new:N
\l__fontspec_firsttime_bool
48 \bool_new:N
\l__fontspec_nobf_bool
49 \bool_new:N
\l__fontspec_noit_bool
50 \bool_new:N
\l__fontspec_nosc_bool
51 \bool_new:N
\l__fontspec_check_bool
52 \bool_new:N
\l__fontspec_tfm_bool
53 \bool_new:N
\l__fontspec_atsui_bool
54 \bool_new:N
\l__fontspec_ot_bool
55 \bool_new:N
\l__fontspec_mm_bool
56 \bool_new:N
\l__fontspec_harfbuzz_bool
57 \bool_new:N
\l__fontspec_graphite_bool
58 \bool_new:N
\l__fontspec_fontcfg_bool
59 \bool_set_true:N
\l__fontspec_fontcfg_bool
60 \bool_new:N
\g__fontspec_math_euler_bool
61 \bool_new:N
\g__fontspec_math_lucida_bool
62 \bool_new:N
\g__fontspec_pkg_euler_loaded_bool
63 \bool_new:N
\g__fontspec_cfg_bool
64 \bool_new:N
\g__fontspec_math_bool
65 \bool_new:N
\g__fontspec_euenc_bool
66 \bool_new:N
\l__fontspec_tmpa_bool
67 \bool_new:N
\l__fontspec_disable_defaults_bool
68 \bool_new:N
\l__fontspec_alias_bool
69 \bool_new:N
\l__fontspec_external_bool
70 \bool_new:N
\l__fontspec_defining_encoding_bool
71 \bool_new:N
\l__fontspec_scriptlang_exist_bool
72 \bool_new:N
\g__fontspec_em_normalise_slant_bool
73 \bool_new:N
\l__fontspec_proceed_bool
74 \bool_new:N
\l__fontspec_never_check_bool
75 \int_new:N
\l__fontspec_script_int
76 \int_new:N
\l__fontspec_language_int
77 \int_new:N
\l__fontspec_strnum_int
78 \int_new:N
\l__fontspec_tmp_int
79 \int_new:N
\l__fontspec_tmpa_int
80 \int_new:N
\l__fontspec_tmpb_int
81 \int_new:N
\l__fontspec_tmpc_int
82 \int_new:N
\l__fontspec_em_int
83 \int_new:N
\l__fontspec_emdef_int
84 \int_new:N
\l__fontspec_strong_int
85 \int_new:N
\l__fontspec_strongdef_int
86 \fp_new:N
\l__fontspec_tmpa_fp
87 \fp_new:N
\l__fontspec_tmpb_fp
88 \dim_new:N
\l__fontspec_tmpa_dim
89 \dim_new:N
\l__fontspec_tmpb_dim
90 \dim_new:N
\l__fontspec_tmpc_dim
91 \seq_new:N
\l__fontspec_bf_series_seq
92 \clist_new:N
\g__fontspec_default_fontopts_clist
93 \clist_new:N
\g__fontspec_all_keyval_modules_clist
94 \clist_new:N
\l__fontspec_sizefeat_clist
95 \clist_set:Nn
\l__fontspec_sizefeat_clist {Size=
{-
}}
96 \clist_new:N
\l__fontspec_extensions_clist
97 \clist_new:N
\l__fontspec_fontopts_clist
98 \clist_new:N
\l__fontspec_family_fontopts_clist
99 \clist_new:N
\l__fontspec_all_features_clist
100 \clist_new:N
\l__fontspec_leftover_clist
101 \clist_new:N
\l__fontspec_keys_leftover_clist
102 \clist_new:N
\l__fontspec_sizing_leftover_clist
103 \clist_new:N
\l__fontspec_fontfeat_clist
104 \clist_new:N
\l__fontspec_fontfeat_curr_clist
105 \clist_new:N
\l__fontspec_arg_clist
106 \clist_new:N
\l__fontspec_this_feat_clist
107 \clist_new:N
\l__fontspec_fontfeat_up_clist
108 \clist_new:N
\l__fontspec_fontfeat_bf_clist
109 \clist_new:N
\l__fontspec_fontfeat_it_clist
110 \clist_new:N
\l__fontspec_fontfeat_bfit_clist
111 \clist_new:N
\l__fontspec_fontfeat_sl_clist
112 \clist_new:N
\l__fontspec_fontfeat_bfsl_clist
113 \clist_new:N
\l__fontspec_fontfeat_sc_clist
114 \prop_new:N
\g__fontspec_fontopts_prop
115 \prop_new:N
\l__fontspec_nfss_prop
116 \prop_new:N
\l__fontspec_nfssfont_prop
117 \prop_new:N
\g__fontspec_OT_features_prop
118 \prop_new:N
\g__fontspec_all_opentype_feature_names_prop
119 \prop_new:N
\g__fontspec_em_prop
120 \prop_new:N
\g__fontspec_strong_prop
121 \prop_new:N
\g__fontspec_fontid_family_prop
122 \prop_new:N
\g__fontspec_family_int_prop
123 \tl_new:N
\l_fontspec_family_tl
124 \tl_new:N
\g_fontspec_encoding_tl
125 \tl_new:N
\l_fontspec_fontname_tl
126 \tl_clear_new:N
\UTFencname
127 \tl_clear_new:N
\cyrillicencoding
128 \tl_clear_new:N
\latinencoding
129 \tl_new:N
\l__fontspec_renderer_tl
130 \tl_new:N
\l__fontspec_mode_tl
131 \tl_new:N
\l__fontspec_shaper_tl
132 \tl_new:N
\g__fontspec_defined_shapes_tl
133 \tl_new:N
\g__fontspec_single_feat_tl
134 \tl_new:N
\l__fontspec_basename_tl
135 \tl_new:N
\g__fontspec_curr_series_tl
136 \tl_new:N
\l__fontspec_curr_fontname_tl
137 \tl_new:N
\l__fontspec_curr_bfname_tl
138 \tl_new:N
\l__fontspec_ext_filename_tl
139 \tl_new:N
\l__fontspec_extension_tl
140 \tl_new:N
\l__fontspec_font_path_tl
141 \tl_new:N
\l__fontspec_fontid_tl
142 \tl_new:N
\l__fontspec_fontname_tl
143 \tl_new:N
\l__fontspec_options_tl
144 \tl_new:N
\l__fontspec_saved_fontname_tl
145 \tl_new:N
\l__fontspec_prev_unicode_name_tl
146 \tl_new:N
\g__fontspec_nfss_enc_tl
147 \tl_new:N
\g__fontspec_nfss_family_tl
148 \tl_new:N
\l__fontspec_nfss_sc_tl
149 \tl_new:N
\l__fontspec_nfss_tl
150 \tl_new:N
\l__fontspec_nfss_fam_tl
151 \tl_new:N
\l__fontspec_size_tl
152 \tl_new:N
\l__fontspec_sizedfont_tl
153 \tl_new:N
\l__fontspec_this_font_tl
154 \tl_new:N
\l__fontspec_ttc_index_tl
155 \tl_new:N
\l__fontspec_smcp_shape_tl
156 \tl_new:N
\l__fontspec_emshape_query_tl
157 \tl_new:N
\l__fontspec_em_switch_tl
158 \tl_new:N
\l__fontspec_strong_switch_tl
159 \tl_new:N
\l__fontspec_tmp_tl
160 \tl_new:N
\l__fontspec_tmpa_tl
161 \tl_new:N
\l__fontspec_tmpb_tl
162 \tl_new:N
\l__fontspec_em_tmp_tl
163 \tl_new:N
\l__fontspec_strong_tmp_tl
164 \tl_new:N
\g__fontspec_mathrm_tl
165 \tl_new:N
\g__fontspec_bfmathrm_tl
166 \tl_new:N
\g__fontspec_mathsf_tl
167 \tl_new:N
\g__fontspec_mathtt_tl
168 \tl_gset:Nn
\g__fontspec_mathrm_tl {\rmdefault}
169 \tl_gset:Nn
\g__fontspec_mathsf_tl {\sfdefault}
170 \tl_gset:Nn
\g__fontspec_mathtt_tl {\ttdefault}
171 \tl_new:N
\l__fontspec_family_label_tl
172 \tl_new:N
\l__fontspec_fake_slant_tl
173 \tl_new:N
\l__fontspec_fake_embolden_tl
174 \tl_new:N
\l__fontspec_fontname_up_tl
175 \tl_new:N
\l__fontspec_fontname_bf_tl
176 \tl_new:N
\l__fontspec_fontname_it_tl
177 \tl_new:N
\l__fontspec_fontname_bfit_tl
178 \tl_new:N
\l__fontspec_fontname_sl_tl
179 \tl_new:N
\l__fontspec_fontname_bfsl_tl
180 \tl_new:N
\l__fontspec_fontname_sc_tl
181 \tl_new:N
\l__fontspec_script_tl
182 \tl_new:N
\l__fontspec_script_name_tl
183 \tl_set:Nn
\l__fontspec_script_name_tl {CustomDefault
}
184 \tl_new:N
\l__fontspec_lang_tl
185 \tl_new:N
\l__fontspec_lang_name_tl
186 \tl_set:Nn
\l__fontspec_lang_name_tl {Default
}
187 \tl_new:N
\l__fontspec_scale_tl
188 \tl_new:N
\l__fontspec_hyphenchar_tl
189 \tl_new:N
\l__fontspec_hexcol_tl
190 \tl_new:N
\l__fontspec_opacity_tl
191 \tl_new:N
\l__fontspec_optical_size_tl
192 \tl_new:N
\l__fontspec_mapping_tl
193 \tl_new:N
\l__fontspec_punctspace_adjust_tl
194 \tl_new:N
\l__fontspec_wordspace_adjust_tl
195 \tl_new:N
\l__fontspec_postadjust_tl
196 \tl_const:Nn
\c__fontspec_hexcol_tl {000000}
197 \tl_const:Nn
\c__fontspec_opacity_tl {FF~
}
198 \tl_const:Nn
\c__fontspec_postadjust_tl { \l__fontspec_wordspace_adjust_tl \l__fontspec_punctspace_adjust_tl }
199 \tl_new:N
\g__fontspec_rawfeatures_sclist
200 \tl_new:N
\l__fontspec_pre_feat_sclist
201 \tl_new:N
\l__fontspec_rmfamily_family_tl
202 \tl_new:N
\l__fontspec_sffamily_family_tl
203 \tl_new:N
\l__fontspec_ttfamily_family_tl
204 \tl_new:N
\l__fontspec_rmfamily_encoding_tl
205 \tl_new:N
\l__fontspec_sffamily_encoding_tl
206 \tl_new:N
\l__fontspec_ttfamily_encoding_tl
208 %%^^A%% fontspec-code-msg.dtx -- part of FONTSPEC <wspr.io/fontspec>
209 \cs_new:Npn
\__fontspec_error:n
{ \msg_error:nn
{fontspec
} }
210 \cs_new:Npn
\__fontspec_error:nn
{ \msg_error:nnn
{fontspec
} }
211 \cs_new:Npn
\__fontspec_error:nx
{ \msg_error:nnx
{fontspec
} }
212 \cs_new:Npn
\__fontspec_warning:n
{ \msg_warning:nn
{fontspec
} }
213 \cs_new:Npn
\__fontspec_warning:nx
{ \msg_warning:nnx
{fontspec
} }
214 \cs_new:Npn
\__fontspec_warning:nxx
{ \msg_warning:nnxx
{fontspec
} }
215 \cs_new:Npn
\__fontspec_info:n
{ \msg_info:nn
{fontspec
} }
216 \cs_new:Npn
\__fontspec_info:nx
{ \msg_info:nnx
{fontspec
} }
217 \cs_new:Npn
\__fontspec_info:nxx
{ \msg_info:nnxx
{fontspec
} }
218 \cs_new:Npn
\__fontspec_trace:n
{ \msg_trace:nn
{fontspec
} }
219 \cs_generate_variant:Nn
\msg_new:nnn
{nnx
}
220 \cs_generate_variant:Nn
\msg_new:nnnn
{nnxx
}
221 \cs_new:Nn
\__fontspec_msg_new:nnn
222 { \msg_new:nnx
{#1} {#2} { \tl_trim_spaces:n
{#3} } }
223 \cs_new:Nn
\__fontspec_msg_new:nnnn
224 { \msg_new:nnxx
{#1} {#2} { \tl_trim_spaces:n
{#3} } { \tl_trim_spaces:n
{#4} } }
225 \char_set_catcode_space:n
{32}
226 \__fontspec_msg_new:nnn
{fontspec
} {only-inside-encdef
}
228 \exp_not:N
#1can only be used in the second argument
229 to
\string\DeclareUnicodeEncoding.
231 \__fontspec_msg_new:nnn
{fontspec
} {no-size-info
}
233 Size information must be supplied.\\
234 For example, SizeFeatures=
{Size=
{8-
12},...
}.
236 \__fontspec_msg_new:nnnn
{fontspec
} {font-not-found
}
238 The font "
#1" cannot be found.
241 A font might not be found for many reasons.\\
242 Check the spelling, where the font is installed etc. etc.\\\\
243 When in doubt, ask someone for help!
245 \__fontspec_msg_new:nnnn
{fontspec
} {rename-feature-not-exist
}
247 The feature
#1 doesn't appear to be defined.
250 It looks like you're trying to rename a feature that doesn't exist.
252 \__fontspec_msg_new:nnn
{fontspec
} {no-glyph
}
254 '
#1' does not contain glyph
#2.
256 \__fontspec_msg_new:nnnn
{fontspec
} {euler-too-late
}
258 The euler package must be loaded BEFORE fontspec.
261 fontspec only overwrites euler's attempt to
262 define the maths text fonts if fontspec is
263 loaded after euler. Type <return> to proceed
264 with incorrect
\string\mathit,
\string\mathbf, etc.
266 \__fontspec_msg_new:nnnn
{fontspec
} {no-xcolor
}
268 Cannot load named colours without the xcolor package.
271 Sorry, I can't do anything to help. Instead of loading
272 the
color package, use xcolor instead.
274 \__fontspec_msg_new:nnnn
{fontspec
} {unknown-
color-model
}
276 Error loading colour `
#1'; unknown colour model.
279 Sorry, I can't do anything to help. Please
report this error
280 to my developer with a minimal example that causes the problem.
282 \__fontspec_msg_new:nnnn
{fontspec
} {not-in-addfontfeatures
}
284 The "
#1" font feature cannot be used in
\string\addfontfeatures.
287 This is due to how TeX loads fonts; such settings
288 are global so adding them mid-
document within a group causes
289 confusion. You'll need to define multiple font families to achieve
292 \__fontspec_msg_new:nnn
{fontspec
} {tu-clash
}
294 I have found the tuenc.def encoding definition file but the TU encoding is not
295 defined by the LaTeX2e kernel; attempting to correct but you really should update
296 to the latest version of LaTeX2e.
298 \__fontspec_msg_new:nnn
{fontspec
} {tu-missing
}
300 The TU encoding seems to be missing; please update to the latest version of LaTeX2e.
302 \__fontspec_msg_new:nnn
{fontspec
} {addfontfeatures-ignored
}
304 \string\addfontfeature (s) ignored
\msg_line_context:;
305 it cannot be used with a font that wasn't selected by a fontspec command.\\
307 The current font is "
\use:c
{font@name
}".\\
308 \int_compare:nTF
{ \clist_count:n
{#1} =
1 }
309 { The requested feature is "
#1".
}
310 { The requested features are "
#1".
}
312 \__fontspec_msg_new:nnn
{fontspec
} {feature-option-overwrite
}
314 Option '
#2' of font feature '
#1' overwritten.
316 \__fontspec_msg_new:nnn
{fontspec
} {ot-tag-too-long
}
318 OpenType tag '
#1' is too long; script, language, and feature tags must be four characters or fewer.
320 \__fontspec_msg_new:nnn
{fontspec
} {aat-feature-not-exist
}
322 '
\l_keys_key_tl=
\l_keys_value_tl' feature not supported
323 for AAT font '
\l_fontspec_fontname_tl'.
325 \__fontspec_msg_new:nnn
{fontspec
} {aat-feature-not-exist-in-font
}
327 AAT feature '
\l_keys_key_tl=
\l_keys_value_tl' (
#1) not available
328 in font '
\l_fontspec_fontname_tl'.
330 \__fontspec_msg_new:nnn
{fontspec
} {icu-feature-not-exist
}
332 '
\l_keys_key_tl=
\l_keys_value_tl' feature not supported
333 for OpenType font '
\l_fontspec_fontname_tl'
335 \__fontspec_msg_new:nnn
{fontspec
} {icu-feature-not-exist-in-font
}
337 OpenType feature '
\l_keys_key_tl=
\l_keys_value_tl' (
#1) not available
338 for font '
\l_fontspec_fontname_tl'
339 with script '
\l__fontspec_script_name_tl' and language '
\l__fontspec_lang_name_tl'.
341 \__fontspec_msg_new:nnn
{fontspec
} {no-opticals
}
343 '
#1' doesn't appear to have an Optical Size axis.
345 \__fontspec_msg_new:nnn
{fontspec
} {language-not-exist
}
347 Language '
#1' not available
348 for font '
\l_fontspec_fontname_tl'
349 with script '
\l__fontspec_script_name_tl'.
351 \__fontspec_msg_new:nnn
{fontspec
} {only-xetex-feature
}
353 Ignored XeTeX-only feature: '
#1'.
355 \__fontspec_msg_new:nnn
{fontspec
} {only-luatex-feature
}
357 Ignored LuaTeX-only feature: '
#1'.
359 \__fontspec_msg_new:nnn
{fontspec
} {unknown-renderer
}
361 Renderer '
#1' unknown. Assuming Harfbuzz with 'shaper=
#1'.
362 Please raise a fontspec issue to add this shaper to the interface.
364 \__fontspec_msg_new:nnn
{fontspec
} {no-mapping
}
366 Input mapping not supported in LuaTeX.
368 \__fontspec_msg_new:nnn
{fontspec
} {no-mapping-ligtex
}
370 Input mapping not supported in LuaTeX.\\
371 Use "Ligatures=TeX" instead of "Mapping=tex-text".
373 \__fontspec_msg_new:nnn
{fontspec
} {cm-default-obsolete
}
375 The "cm-default" package option is obsolete.
377 \__fontspec_msg_new:nnn
{fontspec
} {font-index-needs-ttc
}
379 The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\
382 \__fontspec_msg_new:nnn
{fontspec
} {feat-cannot-remove
}
384 The "
#1" feature cannot be deactivated. Request ignored.
386 \__fontspec_msg_new:nnn
{fontspec
} {defining-font
}
388 Font family '
\g__fontspec_nfss_family_tl' created for font '
#2'
389 with options
[\l__fontspec_all_features_clist].\\
391 This font family consists of the following NFSS series/shapes:\\
392 \g__fontspec_defined_shapes_tl
394 \__fontspec_msg_new:nnn
{fontspec
} {no-font-shape
}
396 Could not resolve font "
#1" (it probably doesn't exist).
398 \__fontspec_msg_new:nnn
{fontspec
} {set-scale
}
400 \l_fontspec_fontname_tl\space scale =
\l__fontspec_scale_tl.
402 \__fontspec_msg_new:nnn
{fontspec
} {setup-math
}
404 Adjusting the maths setup (use
[no-math
] to avoid this).
406 \__fontspec_msg_new:nnn
{fontspec
} {no-script
}
408 Font "
#1" does not contain requested Script "
#2".
410 \__fontspec_msg_new:nnn
{fontspec
} {opa-twice
}
412 Opacity set twice, in both Colour and Opacity.\\
413 Using specification "Opacity=
#1".
415 \__fontspec_msg_new:nnn
{fontspec
} {opa-twice-col
}
417 Opacity set twice, in both Opacity and Colour.\\
418 Using an opacity specification in hex of "
#1/FF".
420 \__fontspec_msg_new:nnn
{fontspec
} {bad-colour
}
422 Bad colour declaration "
#1".
423 Colour must be one of:\\
424 * a named xcolor colour\\
425 * a six-digit hex colour RRGGBB\\
426 * an eight-digit hex colour RRGGBBTT with opacity
428 \char_set_catcode_ignore:n
{32}
430 %%^^A%% fontspec-code-opening.dtx -- part of FONTSPEC <wspr.io/fontspec>
431 \DeclareOption{cm-default
}
433 \__fontspec_warning:n
{cm-default-obsolete
}
435 \DeclareOption {math
} { \bool_gset_true:N
\g__fontspec_math_bool }
436 \DeclareOption {no-math
} { \bool_gset_false:N
\g__fontspec_math_bool }
437 \DeclareOption {config
} { \bool_gset_true:N
\g__fontspec_cfg_bool }
438 \DeclareOption {no-config
}{ \bool_gset_false:N
\g__fontspec_cfg_bool }
439 \DeclareOption {euenc
} { \bool_gset_true:N
\g__fontspec_euenc_bool }
440 \DeclareOption {tuenc
} { \bool_gset_false:N
\g__fontspec_euenc_bool }
441 \DeclareOption {quiet
}
443 \msg_redirect_module:nnn
{ fontspec
} { warning
} { info
}
444 \msg_redirect_module:nnn
{ fontspec
} { info
} { none
}
446 \DeclareOption{silent
}
448 \msg_redirect_module:nnn
{ fontspec
} { warning
} { none
}
449 \msg_redirect_module:nnn
{ fontspec
} { info
} { none
}
451 \ExecuteOptions{config,math,tuenc
}
453 \bool_if:NF
\g__fontspec_euenc_bool
455 \file_if_exist:nTF
{tuenc.def
}
457 \cs_if_exist:cF
{T@TU
}
459 \__fontspec_warning:n
{tu-clash
}
460 \DeclareFontEncoding{TU
}{}{}
461 \DeclareFontSubstitution{TU
}{lmr
}{m
}{n
}
465 \__fontspec_warning:n
{tu-missing
}
466 \bool_gset_true:N
\g__fontspec_euenc_bool
469 \bool_if:NTF
\g__fontspec_euenc_bool
471 \tl_gset:Nn
\g_fontspec_encoding_tl {EU1
}
473 { \tl_gset:Nn
\g_fontspec_encoding_tl { TU
} }
474 \tl_set:Nn
\rmdefault {lmr
}
475 \tl_set:Nn
\sfdefault {lmss
}
476 \tl_set:Nn
\ttdefault {lmtt
}
477 \RequirePackage[\g_fontspec_encoding_tl]{fontenc}
478 \tl_set_eq:NN
\UTFencname \g_fontspec_encoding_tl % for xunicode if needed
479 \tl_if_in:NnT \@filelist
{.cls
} { \normalsize }
480 \tl_set_eq:NN
\cyrillicencoding \g_fontspec_encoding_tl
481 \tl_set_eq:NN
\latinencoding \g_fontspec_encoding_tl
484 \tl_set_eq:NN
\cyrillicencoding \g_fontspec_encoding_tl
485 \tl_set_eq:NN
\latinencoding \g_fontspec_encoding_tl
487 \bool_if:NT
\g__fontspec_euenc_bool
489 \RequirePackage{xunicode
}
491 \cs_new:Npn
\FontspecSetCheckBoolTrue { \bool_set_true:N
\l__fontspec_check_bool }
492 \cs_new:Npn
\FontspecSetCheckBoolFalse { \bool_set_false:N
\l__fontspec_check_bool }
493 \cs_new:Nn
\__fontspec_keys_set_known:nnN
495 \keys_set_known:nnN
{#1} {#2} #3
497 \cs_generate_variant:Nn
\__fontspec_keys_set_known:nnN
{nx
}
498 \cs_new:Nn
\__fontspec_int_mult_truncate:Nn
500 \int_set:Nn
#1 { \__dim_eval:w
#2 #1 \__dim_eval_end:
}
502 \cs_generate_variant:Nn
\int_set:Nn
{Nv
}
503 \cs_generate_variant:Nn
\keys_set:nn
{nx
}
504 \cs_generate_variant:Nn
\keys_set_known:nnN
{nx
}
505 \cs_generate_variant:Nn
\prop_put:Nnn
{Nxx
}
506 \cs_generate_variant:Nn
\prop_put:Nnn
{NxV
}
507 \cs_generate_variant:Nn
\prop_gput_if_new:Nnn
{NxV
}
508 \cs_generate_variant:Nn
\prop_gput:Nnn
{Nxn
}
509 \cs_generate_variant:Nn
\prop_get:NnNT
{NxN
}
510 \cs_generate_variant:Nn
\prop_get:NnNTF
{NxN
}
511 \cs_generate_variant:Nn
\str_if_eq:nnTF
{nv
}
512 \cs_generate_variant:Nn
\tl_if_empty_p:n
{e
}
513 \cs_generate_variant:Nn
\tl_if_empty:nTF
{x
}
514 \cs_generate_variant:Nn
\tl_if_empty:nF
{x
}
515 \cs_generate_variant:Nn
\tl_if_empty:nF
{f
}
516 \cs_generate_variant:Nn
\tl_if_eq:nnT
{ox
}
517 \cs_generate_variant:Nn
\tl_replace_all:Nnn
{Nnx
}
519 %%^^A%% fontspec-code-fontload.dtx -- part of FONTSPEC <wspr.io/fontspec>
521 \cs_set:Npn
\__fontspec_primitive_font_set:Nnn
#1#2#3
523 \font #1 =
#2 ~at~
\dim_eval:n
{#3} \scan_stop:
525 \cs_set:Npn
\__fontspec_primitive_font_gset:Nnn
#1#2#3
527 \global \font #1 =
#2 ~at~
\dim_eval:n
{#3} \scan_stop:
529 \cs_set:Npn
\__fontspec_font_suppress_not_found_error:
531 \int_set:Nn
\suppressfontnotfounderror {1}
533 \prg_set_conditional:Nnn
\__fontspec_primitive_font_if_null:N
{p,TF,T,F
}
541 \prg_set_conditional:Nnn
\__fontspec_primitive_font_set:Nnn
{TF,T,F
}
543 \__fontspec_primitive_font_set:Nnn
#1 {#2} {#3}
544 \__fontspec_primitive_font_if_null:NTF
#1 {\prg_return_false:
} {\prg_return_true:
}
546 \prg_set_conditional:Nnn
\__fontspec_primitive_font_gset:Nnn
{TF,T,F
}
548 \__fontspec_primitive_font_gset:Nnn
#1 {#2} {#3}
549 \__fontspec_primitive_font_if_null:NTF
#1 {\prg_return_false:
} {\prg_return_true:
}
551 \cs_set:Npn
\__fontspec_primitive_font_set:Onn
{ \exp_last_unbraced:No
\__fontspec_primitive_font_set:Nnn
}
552 \cs_set:Npn
\__fontspec_primitive_font_set:OnnF
{ \exp_last_unbraced:No
\__fontspec_primitive_font_set:NnnF
}
553 \cs_set:Npn
\__fontspec_primitive_font_gset:Onn
{ \exp_last_unbraced:No
\__fontspec_primitive_font_gset:Nnn
}
554 \cs_set:Npn
\__fontspec_primitive_font_gset:OnnF
{ \exp_last_unbraced:No
\__fontspec_primitive_font_gset:NnnF
}
555 \prg_set_conditional:Nnn
\__fontspec_primitive_font_if_exist:n
{TF,T,F
}
558 \__fontspec_font_suppress_not_found_error:
559 \__fontspec_primitive_font_set:Nnn
\l__fontspec_primitive_font {#1} { \f@size pt -
1sp
}
560 \__fontspec_primitive_font_if_null:NTF
\l__fontspec_primitive_font
561 { \group_end:
\prg_return_false:
}
562 { \group_end:
\prg_return_true:
}
564 \prg_new_conditional:Nnn
\__fontspec_primitive_font_glyph_if_exist:Nn
{p,TF,T,F
}
566 \tex_iffontchar:D
#1 #2 \scan_stop:
572 \cs_new:Nn
\__fontspec_primitive_font_set_hyphenchar:Nn
574 \tex_hyphenchar:D
#1 =
#2 \scan_stop:
576 \cs_new_eq:NN
\__fontspec_primitive_font_get_name:N
\fontname
577 \cs_new:Npn
\__fontspec_primitive_font_current_name:
579 \__fontspec_primitive_font_get_name:N
\tex_font:D
582 %%^^A%% fontspec-code-interfaces.dtx -- part of FONTSPEC <wspr.io/fontspec>
584 \NewDocumentCommand \fontspec { O
{} m O
{} }
586 \__fontspec_main_fontspec:nn
{#1,
#3} {#2}
589 \NewDocumentCommand \setmainfont { O
{} m O
{} }
591 \__fontspec_main_setmainfont:nn
{#1,
#3} {#2}
594 \NewDocumentCommand \setsansfont { O
{} m O
{} }
596 \__fontspec_main_setsansfont:nn
{#1,
#3} {#2}
599 \NewDocumentCommand \setmonofont { O
{} m O
{} }
601 \__fontspec_main_setmonofont:nn
{#1,
#3} {#2}
604 \NewDocumentCommand \setmathrm { O
{} m O
{} }
606 \__fontspec_main_setmathrm:nn
{#1,
#3} {#2}
608 \NewDocumentCommand \setboldmathrm { O
{} m O
{} }
610 \__fontspec_main_setboldmathrm:nn
{#1,
#3} {#2}
612 \NewDocumentCommand \setmathsf { O
{} m O
{} }
614 \__fontspec_main_setmathsf:nn
{#1,
#3} {#2}
616 \NewDocumentCommand \setmathtt { O
{} m O
{} }
618 \__fontspec_main_setmathtt:nn
{#1,
#3} {#2}
620 \NewDocumentCommand \setromanfont { O
{} m O
{} }
622 \__fontspec_main_setmainfont:nn
{#1,
#3} {#2}
624 \NewDocumentCommand \newfontfamily { m O
{} m O
{} }
626 \__fontspec_main_newfontfamily:NnnN
#1 {#2,
#4} {#3} \NewDocumentCommand
628 \NewDocumentCommand \renewfontfamily { m O
{} m O
{} }
630 \__fontspec_main_newfontfamily:NnnN
#1 {#2,
#4} {#3} \RenewDocumentCommand
632 \NewDocumentCommand \setfontfamily { m O
{} m O
{} }
634 \__fontspec_main_newfontfamily:NnnN
#1 {#2,
#4} {#3} \DeclareDocumentCommand
636 \NewDocumentCommand \providefontfamily { m O
{} m O
{} }
638 \__fontspec_main_newfontfamily:NnnN
#1 {#2,
#4} {#3} \ProvideDocumentCommand
640 \NewDocumentCommand \newfontface { m O
{} m O
{} }
642 \__fontspec_main_newfontface:NnnN
#1 {#2,
#4} {#3} \NewDocumentCommand
644 \NewDocumentCommand \renewfontface { m O
{} m O
{} }
646 \__fontspec_main_newfontface:NnnN
#1 {#2,
#4} {#3} \RenewDocumentCommand
648 \NewDocumentCommand \setfontface { m O
{} m O
{} }
650 \__fontspec_main_newfontface:NnnN
#1 {#2,
#4} {#3} \DeclareDocumentCommand
652 \NewDocumentCommand \providefontface { m O
{} m O
{} }
654 \__fontspec_main_newfontface:NnnN
#1 {#2,
#4} {#3} \ProvideDocumentCommand
656 \NewDocumentCommand \defaultfontfeatures { t+ o m
}
659 { \__fontspec_set_default_features:nn
{#1} {#3} }
660 { \__fontspec_set_font_default_features:nnn
{#1} {#2} {#3} }
663 \NewDocumentCommand \addfontfeatures {m
}
665 \__fontspec_main_addfontfeatures:n
{#1}
667 \NewDocumentCommand \addfontfeature {m
}
669 \__fontspec_main_addfontfeatures:n
{#1}
671 \NewDocumentCommand \newfontfeature {mm
}
673 \__fontspec_main_newfontfeature:nn
{#1} {#2}
675 \NewDocumentCommand \newAATfeature {mmmm
}
677 \__fontspec_main_newAATfeature:nnnn
{#1} {#2} {#3} {#4}
679 \NewDocumentCommand \newopentypefeature {mmm
}
681 \__fontspec_main_newopentypefeature:nnn
{#1} {#2} {#3}
683 \NewDocumentCommand \newICUfeature {mmm
}
685 \__fontspec_main_newopentypefeature:nnn
{#1} {#2} {#3}
687 \NewDocumentCommand \aliasfontfeature {mm
}
689 \__fontspec_main_aliasfontfeature:nn
{#1} {#2}
691 \NewDocumentCommand \aliasfontfeatureoption {mmm
}
693 \__fontspec_main_aliasfontfeatureoption:nnn
{#1} {#2} {#3}
695 \NewDocumentCommand \newfontscript {mm
}
697 \fontspec_new_script:nn
{#1} {#2}
699 \NewDocumentCommand \newfontlanguage {mm
}
701 \fontspec_new_lang:nn
{#1} {#2}
703 \NewDocumentCommand \DeclareFontExtensions {m
}
705 \__fontspec_main_DeclareFontExtensions:n
{#1}
707 \NewDocumentCommand \IfFontFeatureActiveTF {mmm
}
709 \__fontspec_main_IfFontFeatureActiveTF:nnn
{#1} {#2} {#3}
713 \RenewDocumentCommand \oldstylenums {m
}
715 \__fontspec_main_oldstylenums:n
{#1}
718 \NewDocumentCommand \liningnums {m
}
720 \__fontspec_main_liningnums:n
{#1}
723 %%^^A%% fontspec-code-user.dtx -- part of FONTSPEC <wspr.io/fontspec>
725 \cs_new:Nn
\__fontspec_main_fontspec:nn
727 \fontspec_set_family:Nnn
\f@family
{#1} {#2}
728 \fontencoding { \g__fontspec_nfss_enc_tl }
731 \cs_if_exist:NTF \@rmfamilyhook
733 \tl_put_right:Nn \@rmfamilyhook
{\fontencoding \l__fontspec_rmfamily_encoding_tl}
734 \tl_put_right:Nn \@sffamilyhook
{\fontencoding \l__fontspec_sffamily_encoding_tl}
735 \tl_put_right:Nn \@ttfamilyhook
{\fontencoding \l__fontspec_ttfamily_encoding_tl}
738 \tl_replace_all:cnn
{ rmfamily~
} { \fontfamily }
739 { \fontencoding \l__fontspec_rmfamily_encoding_tl \fontfamily }
740 \tl_replace_all:cnn
{ sffamily~
} { \fontfamily }
741 { \fontencoding \l__fontspec_sffamily_encoding_tl \fontfamily }
742 \tl_replace_all:cnn
{ ttfamily~
} { \fontfamily }
743 { \fontencoding \l__fontspec_ttfamily_encoding_tl \fontfamily }
745 \tl_set:Nn
\l__fontspec_rmfamily_encoding_tl { \encodingdefault }
746 \tl_set:Nn
\l__fontspec_sffamily_encoding_tl { \encodingdefault }
747 \tl_set:Nn
\l__fontspec_ttfamily_encoding_tl { \encodingdefault }
748 \cs_new:Nn
\__fontspec_main_setmainfont:nn
750 \ifdefined\DeclareFontSeriesDefault
751 \DeclareFontSeriesDefault[rm
]{bf
}{\bfdefault}
753 \fontspec_set_family:Nnn
\l__fontspec_rmfamily_family_tl {#1} {#2}
754 \tl_set_eq:NN
\rmdefault \l__fontspec_rmfamily_family_tl
755 \tl_set_eq:NN
\l__fontspec_rmfamily_encoding_tl \g__fontspec_nfss_enc_tl
756 \str_if_eq:eeT
{\familydefault} {\rmdefault}
757 { \tl_set_eq:NN
\encodingdefault \g__fontspec_nfss_enc_tl }
758 \__fontspec_setmainfont_hook:nn
{#1} {#2} % for unicode-math only
761 \cs_new:Nn
\__fontspec_main_setsansfont:nn
763 \ifdefined\DeclareFontSeriesDefault
764 \DeclareFontSeriesDefault[sf
]{bf
}{\bfdefault}
766 \fontspec_set_family:Nnn
\l__fontspec_sffamily_family_tl {#1} {#2}
767 \tl_set_eq:NN
\sfdefault \l__fontspec_sffamily_family_tl
768 \tl_set_eq:NN
\l__fontspec_sffamily_encoding_tl \g__fontspec_nfss_enc_tl
769 \str_if_eq:eeT
{\familydefault} {\sfdefault}
770 { \tl_set_eq:NN
\encodingdefault \g__fontspec_nfss_enc_tl }
771 \__fontspec_setsansfont_hook:nn
{#1} {#2} % for unicode-math only
774 \cs_new:Nn
\__fontspec_main_setmonofont:nn
776 \ifdefined\DeclareFontSeriesDefault
777 \DeclareFontSeriesDefault[tt
]{bf
}{\bfdefault}
779 \fontspec_set_family:Nnn
\l__fontspec_ttfamily_family_tl {#1} {#2}
780 \tl_set_eq:NN
\ttdefault \l__fontspec_ttfamily_family_tl
781 \tl_set_eq:NN
\l__fontspec_ttfamily_encoding_tl \g__fontspec_nfss_enc_tl
782 \str_if_eq:eeT
{\familydefault} {\ttdefault}
783 { \tl_set_eq:NN
\encodingdefault \g__fontspec_nfss_enc_tl }
784 \__fontspec_setmonofont_hook:nn
{#1} {#2} % for unicode-math only
787 \cs_new:Nn
\__fontspec_main_setmathrm:nn
789 \fontspec_gset_family:Nnn
\g__fontspec_mathrm_tl {#1} {#2}
790 \__fontspec_setmathrm_hook:nn
{#1} {#2} % for unicode-math only
792 \cs_new:Nn
\__fontspec_main_setboldmathrm:nn
794 \fontspec_gset_family:Nnn
\g__fontspec_bfmathrm_tl {#1} {#2}
795 \__fontspec_setboldmathrm_hook:nn
{#1} {#2} % for unicode-math only
797 \cs_new:Nn
\__fontspec_main_setmathsf:nn
799 \fontspec_gset_family:Nnn
\g__fontspec_mathsf_tl {#1} {#2}
800 \__fontspec_setmathsf_hook:nn
{#1} {#2} % for unicode-math only
802 \cs_new:Nn
\__fontspec_main_setmathtt:nn
804 \fontspec_gset_family:Nnn
\g__fontspec_mathtt_tl {#1} {#2}
805 \__fontspec_setmathtt_hook:nn
{#1} {#2} % for unicode-math only
807 \cs_set_eq:NN
\__fontspec_setmainfont_hook:nn
\use_none:nn
808 \cs_set_eq:NN
\__fontspec_setsansfont_hook:nn
\use_none:nn
809 \cs_set_eq:NN
\__fontspec_setmonofont_hook:nn
\use_none:nn
810 \cs_set_eq:NN
\__fontspec_setmathrm_hook:nn
\use_none:nn
811 \cs_set_eq:NN
\__fontspec_setmathsf_hook:nn
\use_none:nn
812 \cs_set_eq:NN
\__fontspec_setmathtt_hook:nn
\use_none:nn
813 \cs_set_eq:NN
\__fontspec_setboldmathrm_hook:nn
\use_none:nn
814 \@onlypreamble
\setmathrm
815 \@onlypreamble
\setboldmathrm
816 \@onlypreamble
\setmathsf
817 \@onlypreamble
\setmathtt
818 \tl_gset:Nn
\g__fontspec_mathrm_tl {\rmdefault}
819 \tl_gset:Nn
\g__fontspec_mathsf_tl {\sfdefault}
820 \tl_gset:Nn
\g__fontspec_mathtt_tl {\ttdefault}
821 \cs_new:Nn
\__fontspec_main_newfontfamily:NnnN
823 \fontspec_set_family:cnn
{ l__fontspec_
\cs_to_str:N
#1 _family_tl
} {#2} {#3}
826 \exp_not:N
#4 \exp_not:N
#1 {}
828 \exp_not:N
\fontfamily { \use:c
{ l__fontspec_
\cs_to_str:N
#1 _family_tl
} }
829 \exp_not:N
\fontencoding { \g__fontspec_nfss_enc_tl }
830 \exp_not:N
\selectfont
834 \cs_new:Nn
\__fontspec_main_newfontface:NnnN
836 \__fontspec_main_newfontfamily:NnnN
#1 { BoldFont=
{},ItalicFont=
{},SmallCapsFont=
{},
#2 } {#3} #4
838 \cs_new:Nn
\__fontspec_set_default_features:nn
840 \IfBooleanTF {#1} \clist_gput_right:Nn
\clist_gset:Nn
841 \g__fontspec_default_fontopts_clist {#2}
843 \cs_new:Nn
\__fontspec_set_font_default_features:nnn
845 \clist_map_inline:nn
{#2}
847 \tl_if_single:nTF
{#
#1}
848 { \tl_set:No
\l__fontspec_tmp_tl { \cs:w l__fontspec_
\cs_to_str:N #
#1 _family_tl
\cs_end:
} }
849 { \__fontspec_sanitise_fontname:Nn
\l__fontspec_tmp_tl {#
#1} }
853 \prop_get:NVNF
\g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl
854 { \tl_clear:N
\l__fontspec_tmpb_tl }
855 \tl_put_right:Nn
\l__fontspec_tmpb_tl {#3,
}
856 \prop_gput:NVV
\g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl
859 \tl_if_empty:nTF
{#3}
860 { \prop_gremove:NV
\g__fontspec_fontopts_prop \l__fontspec_tmp_tl }
861 { \prop_gput:NVn
\g__fontspec_fontopts_prop \l__fontspec_tmp_tl {#3,
} }
865 \cs_new:Nn
\__fontspec_main_addfontfeatures:n
867 \fontspec_if_fontspec_font:TF
870 \keys_set_known:nnN
{fontspec-addfeatures
} {#1} \l__fontspec_tmp_tl
871 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {options
} \l__fontspec_options_tl
872 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {fontname
} \l__fontspec_fontname_tl
873 \bool_set_true:N
\l__fontspec_disable_defaults_bool
876 \__fontspec_select_font_family:nn
877 { \l__fontspec_options_tl ,
#1 } {\l__fontspec_fontname_tl}
880 \fontfamily \g__fontspec_nfss_family_tl \selectfont
883 \__fontspec_warning:nx
{addfontfeatures-ignored
} {#1}
887 \cs_new:Nn
\__fontspec_main_newfontfeature:nn
889 \keys_define:nn
{ fontspec
}
891 #1 .code:n =
{ \__fontspec_update_featstr:n
{#2} }
894 \cs_new:Nn
\__fontspec_main_newAATfeature:nnnn
896 \keys_if_exist:nnF
{ fontspec
} {#1}
897 { \__fontspec_define_aat_feature_group:n
{#1} }
899 \keys_if_choice_exist:nnnT
{fontspec
} {#1} {#2}
900 { \__fontspec_warning:nxx
{feature-option-overwrite
} {#1} {#2} }
902 \__fontspec_define_aat_feature:nnnn
{#1}{#2}{#3}{#4}
904 \cs_new:Nn
\__fontspec_main_newopentypefeature:nnn
906 \keys_if_exist:nnF
{ fontspec / options
} {#1}
907 { \__fontspec_define_opentype_feature_group:n
{#1} }
909 \keys_if_choice_exist:nnnT
{fontspec
} {#1} {#2}
910 { \__fontspec_warning:nxx
{feature-option-overwrite
} {#1} {#2} }
912 \exp_args:Nnnx
\__fontspec_define_opentype_feature:nnnnn
913 {#1} {#2} { \__fontspec_strip_plus_minus:n
{#3} } {#3} {}
915 \cs_new:Nn
\__fontspec_strip_plus_minus:n
{ \__fontspec_strip_plus_minus_aux:Nq
#1 \q_nil }
916 \cs_new:Npn
\__fontspec_strip_plus_minus_aux:Nq
#1#2 \q_nil
918 \str_case:nnF
{#1} { {+
} {#2} {-
} {#2} } {#1#2}
920 \cs_new:Nn
\__fontspec_main_aliasfontfeature:nn
922 \bool_set_false:N
\l__fontspec_alias_bool
924 \clist_map_inline:Nn
\g__fontspec_all_keyval_modules_clist
926 \keys_if_exist:nnT
{#
#1} {#1}
928 \bool_set_true:N
\l__fontspec_alias_bool
929 \keys_define:nn
{#
#1}
930 { #2 .code:n =
{ \keys_set:nn
{#
#1} { #1 =
{###
#1} } } }
934 \bool_if:NF
\l__fontspec_alias_bool
935 { \__fontspec_warning:nx
{rename-feature-not-exist
} {#1} }
937 \cs_new:Nn
\__fontspec_main_aliasfontfeatureoption:nnn
939 \bool_set_false:N
\l__fontspec_alias_bool
941 \clist_map_inline:Nn
\g__fontspec_all_keyval_modules_clist
943 \keys_if_exist:nnT
{ #
#1 /
#1 } {#2}
945 \bool_set_true:N
\l__fontspec_alias_bool
946 \keys_define:nn
{ #
#1 /
#1 }
947 { #3 .code:n =
{ \keys_set:nn
{#
#1} { #1 =
{#2} } } }
950 \keys_if_exist:nnT
{ #
#1 /
#1 } {#2Reset
}
952 \keys_define:nn
{ #
#1 /
#1 }
953 { #3Reset .code:n =
{ \keys_set:nn
{#
#1} { #1 =
{#2Reset
} } } }
956 \keys_if_exist:nnT
{ #
#1 /
#1 } {#2Off
}
958 \keys_define:nn
{ #
#1 /
#1 }
959 { #3Off .code:n =
{ \keys_set:nn
{#
#1} { #1 =
{#2Off
} } } }
963 \bool_if:NF
\l__fontspec_alias_bool
964 { \__fontspec_warning:nx
{rename-feature-not-exist
} {#1/
#2} }
966 \cs_new:Nn
\__fontspec_main_DeclareFontExtensions:n
968 \clist_set:Nn
\l__fontspec_extensions_clist { #1 }
970 \__fontspec_main_DeclareFontExtensions:n
{.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont
}
971 \cs_new:Nn
\__fontspec_main_IfFontFeatureActiveTF:nnn
973 \__fontspec_if_font_feature:nTF
{#1} {#2} {#3}
975 \prg_new_conditional:Nnn
\__fontspec_if_font_feature:n
{TF
}
977 \tl_gclear:N
\g__fontspec_single_feat_tl
979 \__fontspec_font_suppress_not_found_error:
981 \bool_set_true:N
\l__fontspec_ot_bool
982 \bool_set_true:N
\l__fontspec_never_check_bool
983 \bool_set_false:N
\l__fontspec_firsttime_bool
984 \clist_clear:N
\l__fontspec_fontfeat_clist
985 \__fontspec_get_features:n
{#1}
989 \tl_if_empty:NTF
\g__fontspec_single_feat_tl { \prg_return_false:
}
991 \exp_args:NV
\fontspec_if_current_feature:nTF
\g__fontspec_single_feat_tl
992 { \prg_return_true:
} { \prg_return_false:
}
995 \cs_new_protected:Nn
\__fontspec_main_oldstylenums:n
998 \addfontfeature{Numbers=OldStyle
}
1002 \cs_new_protected:Nn
\__fontspec_main_liningnums:n
1005 \addfontfeature{Numbers=Lining
}
1010 %%^^A%% fontspec-code-api.dtx -- part of FONTSPEC <wspr.io/fontspec>
1012 \prg_new_conditional:Nnn
\fontspec_if_fontspec_font:
{TF,T,F
}
1014 \cs_if_exist:cTF
{g__fontspec_fontinfo_
\f@family _prop
} \prg_return_true:
\prg_return_false:
1016 \prg_new_conditional:Nnn
\fontspec_if_aat_feature:nn
{TF,T,F
}
1018 \fontspec_if_fontspec_font:TF
1020 \__fontspec_set_font_type:N
\font
1021 \bool_if:NTF
\l__fontspec_atsui_bool
1023 \__fontspec_make_AAT_feature_string:NnnTF
\font {#1} {#2}
1024 \prg_return_true:
\prg_return_false:
1034 \prg_new_conditional:Nnn
\fontspec_if_opentype:
{TF,T,F
}
1036 \fontspec_if_fontspec_font:TF
1038 \__fontspec_set_font_type:N
\font
1039 \bool_if:NTF
\l__fontspec_ot_bool \prg_return_true:
\prg_return_false:
1045 \prg_new_conditional:Nnn
\fontspec_if_feature:n
{TF,T,F
}
1047 \fontspec_if_fontspec_font:TF
1049 \__fontspec_set_font_type:N
\font
1050 \bool_if:NTF
\l__fontspec_ot_bool
1052 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {script-num
} \l__fontspec_tmp_tl
1053 \int_set:Nn
\l__fontspec_script_int {\l__fontspec_tmp_tl}
1055 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {lang-num
} \l__fontspec_tmp_tl
1056 \int_set:Nn
\l__fontspec_language_int {\l__fontspec_tmp_tl}
1058 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {script-tag
} \l__fontspec_script_tl
1059 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {lang-tag
} \l__fontspec_lang_tl
1061 \__fontspec_check_ot_feat:NnTF
\font {#1} {\prg_return_true:
} {\prg_return_false:
}
1071 \prg_new_conditional:Nnn
\fontspec_if_feature:nnn
{TF,T,F
}
1073 \fontspec_if_fontspec_font:TF
1075 \__fontspec_set_font_type:N
\font
1076 \bool_if:NTF
\l__fontspec_ot_bool
1078 \__fontspec_check_ot_feat:NnnnTF
\font {#3} {#2} {#1} \prg_return_true:
\prg_return_false:
1080 { \prg_return_false:
}
1082 { \prg_return_false:
}
1084 \prg_new_conditional:Nnn
\fontspec_if_script:n
{TF,T,F
}
1086 \fontspec_if_fontspec_font:TF
1088 \__fontspec_set_font_type:N
\font
1089 \bool_if:NTF
\l__fontspec_ot_bool
1091 \__fontspec_check_script:NnTF
\font {#1} \prg_return_true:
\prg_return_false:
1093 { \prg_return_false:
}
1095 { \prg_return_false:
}
1097 \prg_new_conditional:Nnn
\fontspec_if_language:n
{TF,T,F
}
1099 \fontspec_if_fontspec_font:TF
1101 \__fontspec_set_font_type:N
\font
1102 \bool_if:NTF
\l__fontspec_ot_bool
1104 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {script-num
} \l__fontspec_tmp_tl
1105 \int_set:Nn
\l__fontspec_script_int {\l__fontspec_tmp_tl}
1106 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {script-tag
} \l__fontspec_script_tl
1108 \__fontspec_check_lang:NnTF
\font {#1} \prg_return_true:
\prg_return_false:
1110 { \prg_return_false:
}
1112 { \prg_return_false:
}
1114 \prg_new_conditional:Nnn
\fontspec_if_language:nn
{TF,T,F
}
1116 \fontspec_if_fontspec_font:TF
1118 \__fontspec_set_font_type:N
\font
1119 \bool_if:NTF
\l__fontspec_ot_bool
1121 \__fontspec_check_lang:NnnTF
\font {#2} {#1} \prg_return_true:
\prg_return_false:
1123 { \prg_return_false:
}
1125 { \prg_return_false:
}
1127 \prg_new_conditional:Nnn
\fontspec_if_current_script:n
{TF,T,F
}
1129 \fontspec_if_fontspec_font:TF
1131 \__fontspec_set_font_type:N
\font
1132 \bool_if:NTF
\l__fontspec_ot_bool
1134 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {script-tag
} \l__fontspec_tmp_tl
1135 \str_if_eq:nVTF
{#1} \l__fontspec_tmp_tl
1136 {\prg_return_true:
} {\prg_return_false:
}
1138 { \prg_return_false:
}
1140 { \prg_return_false:
}
1142 \prg_new_conditional:Nnn
\fontspec_if_current_language:n
{TF,T,F
}
1144 \fontspec_if_fontspec_font:TF
1146 \__fontspec_set_font_type:N
\font
1147 \bool_if:NTF
\l__fontspec_ot_bool
1149 \prop_get:cnN
{g__fontspec_fontinfo_
\f@family _prop
} {lang-tag
} \l__fontspec_tmp_tl
1150 \str_if_eq:nVTF
{#1} \l__fontspec_tmp_tl
1151 {\prg_return_true:
} {\prg_return_false:
}
1153 { \prg_return_false:
}
1155 { \prg_return_false:
}
1157 \cs_new:Nn
\__fontspec_tl_new_if_free:N
{ \tl_if_exist:NF
#1 { \tl_new:N
#1 } }
1158 \cs_new:Nn
\__fontspec_set_family:NnnN
1160 \tl_set:Nn
\l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset
1161 \tl_set:Nn
\l__fontspec_family_label_tl {#1}
1162 \__fontspec_select_font_family:nn
{#2} {#3}
1163 \__fontspec_tl_new_if_free:N
#1
1164 #4 #1 \l_fontspec_family_tl
1165 \tl_set:Nn
\l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset
1167 \cs_new:Nn
\fontspec_gset_family:Nnn
{ \__fontspec_set_family:NnnN
#1 {#2} {#3} \tl_gset_eq:NN
}
1168 \cs_new:Nn
\fontspec_set_family:Nnn
{ \__fontspec_set_family:NnnN
#1 {#2} {#3} \tl_set_eq:NN
}
1169 \cs_generate_variant:Nn
\fontspec_set_family:Nnn
{c
}
1170 \tl_new:N
\l__fontspec_fontface_cs_tl
1171 \tl_set:Nn
\l__fontspec_fontface_cs_tl {\l_fontspec_font}
1172 \cs_new:Nn
\__fontspec_set_fontface:NNnnN
1174 \tl_set:Nn
\l__fontspec_fontface_cs_tl {#1}
1175 \tl_set:Nn
\l__fontspec_family_label_tl {#2}
1176 \__fontspec_select_font_family:nn
{#3} {#4}
1177 #5 #2 \l_fontspec_family_tl
1178 \tl_set:Nn
\l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset
1180 \cs_new:Nn
\fontspec_gset_fontface:NNnn
{ \__fontspec_set_fontface:NNnnN
#1 #2 {#3} {#4} \tl_gset_eq:NN
}
1181 \cs_new:Nn
\fontspec_set_fontface:NNnn
{ \__fontspec_set_fontface:NNnnN
#1 #2 {#3} {#4} \tl_set_eq:NN
}
1182 \prg_new_conditional:Nnn
\fontspec_font_if_exist:n
{TF,T,F
}
1186 \__fontspec_if_detect_external:nT
{#1} { \__fontspec_font_is_file:
}
1187 \__fontspec_primitive_font_if_exist:nTF
{ \__fontspec_construct_font_call:nn
{#1} {} }
1188 { \group_end:
\prg_return_true:
}
1189 { \group_end:
\prg_return_false:
}
1191 \cs_set_eq:NN
\IfFontExistsTF \fontspec_font_if_exist:nTF
1193 \prg_new_conditional:Nnn
\fontspec_if_current_feature:n
{TF,T,F
}
1195 \exp_args:Nxx
\tl_if_in:nnTF
1196 { \__fontspec_primitive_font_current_name:
} { \tl_to_str:n
{#1} }
1197 { \prg_return_true:
} { \prg_return_false:
}
1199 \prg_new_conditional:Nnn
\fontspec_if_small_caps:
{TF,T,F
}
1201 \__fontspec_if_merge_shape:nTF
{sc
}
1203 \tl_set_eq:Nc
\l__fontspec_smcp_shape_tl { \__fontspec_shape_merge:nn
{\f@shape
} {sc
} }
1206 \tl_set:Nn
\l__fontspec_smcp_shape_tl {sc
}
1209 \cs_if_exist:cTF
{ \f@encoding/
\f@family/
\f@series/
\l__fontspec_smcp_shape_tl }
1212 { \f@encoding/
\f@family/
\f@series/
\l__fontspec_smcp_shape_tl }
1213 { \f@encoding/
\f@family/
\f@series/
\shapedefault }
1214 { \prg_return_false:
}
1215 { \prg_return_true:
}
1217 { \prg_return_false:
}
1220 %%^^A%% fontspec-code-internal.dtx -- part of FONTSPEC <wspr.io/fontspec>
1222 \cs_new_protected:Nn
\__fontspec_select_font_family:nn
1225 \__fontspec_font_suppress_not_found_error:
1228 \__fontspec_sanitise_fontname:Nn
\l_fontspec_fontname_tl {#2}
1229 \__fontspec_sanitise_fontname:Nn
\l__fontspec_fontname_up_tl {#2}
1230 \__fontspec_sanitise_fontname:Nn
\l__fontspec_basename_tl {#2}
1232 \__fontspec_if_detect_external:nT
{#2}
1233 { \keys_set:nn
{fontspec-preparse-external
} {Path
} }
1235 \keys_set_known:nn
{fontspec-preparse-cfg
} {#1}
1237 \__fontspec_init_ttc:n
{#2}
1238 \__fontspec_load_external_fontoptions:Nn
\l_fontspec_fontname_tl {#2}
1240 \__fontspec_extract_all_features:n
{#1}
1241 \tl_set:Nx
\l__fontspec_fontid_tl { \tl_to_str:N
\l_fontspec_fontname_tl-:-
\tl_to_str:N
\l__fontspec_all_features_clist }
1244 \__fontspec_preparse_features:
1245 \__fontspec_load_font:
1246 \__fontspec_set_scriptlang:
1247 \__fontspec_get_features:n
{}
1248 \bool_set_false:N
\l__fontspec_firsttime_bool
1250 \__fontspec_save_family_needed:nTF
{#2}
1252 \__fontspec_save_family:nn
{#1} {#2}
1258 \tl_set_eq:NN
\l_fontspec_family_tl \g__fontspec_nfss_family_tl
1260 \cs_set_eq:NN
\fontspec_select:nn
\__fontspec_select_font_family:nn
%% deprecated, for compatibility only
1261 \cs_new:Nn
\__fontspec_sanitise_fontname:Nn
1264 \clist_map_inline:Nn
\l__fontspec_extensions_clist
1266 \tl_if_in:NnT
#1 {#
#1}
1268 \tl_remove_once:Nn
#1 {#
#1}
1269 \tl_set:Nn
\l__fontspec_extension_tl {#
#1}
1274 \prg_new_conditional:Nnn
\__fontspec_if_detect_external:n
{T
}
1276 \clist_map_inline:Nn
\l__fontspec_extensions_clist
1278 \bool_set_false:N
\l__fontspec_tmpa_bool
1279 \exp_args:Nx
% <- this should be handled earlier
1280 \tl_if_in:nnT
{#1 <= end_of_string
} {#
#1 <= end_of_string
}
1281 { \bool_set_true:N
\l__fontspec_tmpa_bool \clist_map_break:
}
1283 \bool_if:NTF
\l__fontspec_tmpa_bool \prg_return_true:
\prg_return_false:
1285 \cs_new:Nn
\__fontspec_init_ttc:n
1287 \str_if_eq:eeT
{ \str_lowercase:f
{\l__fontspec_extension_tl} } {.ttc
}
1289 \__fontspec_sanitise_fontname:Nn
\l__fontspec_fontname_it_tl {#1}
1290 \__fontspec_sanitise_fontname:Nn
\l__fontspec_fontname_bf_tl {#1}
1291 \__fontspec_sanitise_fontname:Nn
\l__fontspec_fontname_bfit_tl {#1}
1294 \cs_new:Nn
\__fontspec_load_external_fontoptions:Nn
1296 \bool_if:NT
\l__fontspec_fontcfg_bool
1298 \__fontspec_sanitise_fontname:Nn
#1 {#2}
1299 \tl_set:Nx
\l__fontspec_ext_filename_tl {#1.fontspec
}
1300 \tl_remove_all:Nn
\l__fontspec_ext_filename_tl {~
}
1301 \prop_if_in:NVF
\g__fontspec_fontopts_prop #1
1303 \exp_args:No
\file_if_exist:nT
{ \l__fontspec_ext_filename_tl }
1304 { \file_input:n
{ \l__fontspec_ext_filename_tl } }
1308 \cs_new:Nn
\__fontspec_extract_all_features:n
1310 \bool_if:NTF
\l__fontspec_disable_defaults_bool
1312 \clist_set:Nx
\l__fontspec_all_features_clist {#1}
1315 \prop_get:NVNF
\g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist
1316 { \clist_clear:N
\l__fontspec_fontopts_clist }
1318 \prop_get:NVNF
\g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist
1319 { \clist_clear:N
\l__fontspec_family_fontopts_clist }
1320 \tl_clear:N
\l__fontspec_family_label_tl
1322 \clist_set:Nx
\l__fontspec_all_features_clist
1324 \g__fontspec_default_fontopts_clist,
1325 \l__fontspec_family_fontopts_clist,
1326 \l__fontspec_fontopts_clist,
1331 \cs_new:Nn
\__fontspec_preparse_features:
1334 \__fontspec_keys_set_known:nxN
{fontspec-preparse-external
}
1335 { \l__fontspec_all_features_clist }
1336 \l__fontspec_keys_leftover_clist
1338 \tl_set_eq:NN
\l_fontspec_fontname_tl \l__fontspec_fontname_up_tl
1339 \__fontspec_keys_set_known:nxN
{fontspec-renderer
} {\l__fontspec_keys_leftover_clist}
1340 \l__fontspec_keys_leftover_clist
1341 \__fontspec_keys_set_known:nxN
{fontspec-preparse
} {\l__fontspec_keys_leftover_clist}
1342 \l__fontspec_fontfeat_clist
1344 \cs_new:Nn
\__fontspec_load_font:
1347 \__fontspec_primitive_font_set:NnnF
\l__fontspec_test_font
1348 { \__fontspec_construct_font_call:nn
{ \l__fontspec_fontname_up_tl } { \l__fontspec_pre_feat_sclist } }
1349 { \f@size pt -
2sp
}
1350 { \__fontspec_error:nx
{font-not-found
} {\l__fontspec_fontname_up_tl} }
1352 \__fontspec_set_font_type:N
\l__fontspec_test_font
1353 \__fontspec_primitive_font_gset:Onn
\l__fontspec_fontface_cs_tl
1354 { \__fontspec_construct_font_call:nn
{ \l__fontspec_fontname_up_tl } { \l__fontspec_pre_feat_sclist } }
1355 { \f@size pt +
2sp
}
1357 \l__fontspec_fontface_cs_tl % this is necessary for LuaLaTeX to check the scripts properly
1360 \cs_new:Nn
\__fontspec_construct_font_call:nnnnnn
1362 "
\__fontspec_fontname_wrap:n
{ #1 #2 #3 }
1364 \str_if_eq:eeF
{#6}{} {:
#6} "
1366 \cs_new:Nn
\__fontspec_construct_font_call:nn
1368 \__fontspec_construct_font_call:nnnnnn
1370 \l__fontspec_extension_tl
1371 \l__fontspec_ttc_index_tl
1372 \l__fontspec_renderer_tl
1373 \l__fontspec_optical_size_tl
1376 \cs_new:Nn
\__fontspec_font_is_name:
1378 \cs_set_eq:NN
\__fontspec_fontname_wrap:n
\use:n
1380 \cs_new:Nn
\__fontspec_font_is_file:
1382 \cs_set:Npn
\__fontspec_fontname_wrap:n #
#1 { [ \l__fontspec_font_path_tl #
#1 ] }
1384 \cs_new:Nn
\__fontspec_set_scriptlang:
1386 \bool_if:NT
\l__fontspec_firsttime_bool
1388 \tl_if_empty:NF
\l__fontspec_script_name_tl
1390 \keys_set:nx
{fontspec-opentype
} {Script=
\l__fontspec_script_name_tl}
1391 \keys_set:nx
{fontspec-opentype
} {Language=
\l__fontspec_lang_name_tl}
1395 \cs_new:Nn
\__fontspec_get_features:n
1397 \__fontspec_init_fontface:
1398 \__fontspec_keys_set_known:nxN
{fontspec-renderer
} {\l__fontspec_fontfeat_clist,
#1}
1399 \l__fontspec_keys_leftover_clist
1400 \__fontspec_keys_set_known:nxN
{fontspec
} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist
1401 \bool_if:NTF
\l__fontspec_ot_bool
1403 \keys_set:nV
{fontspec-opentype
} \l__fontspec_keys_leftover_clist
1406 \bool_if:nT
{ \l__fontspec_atsui_bool ||
\l__fontspec_graphite_bool }
1407 { \keys_set:nV
{fontspec-aat
} \l__fontspec_keys_leftover_clist }
1410 \tl_if_empty:NF
\l__fontspec_mapping_tl
1411 { \__fontspec_update_featstr:n
{ mapping =
\l__fontspec_mapping_tl } }
1413 \str_if_eq:eeF
{ \l__fontspec_hexcol_tl \l__fontspec_opacity_tl }
1414 { \c__fontspec_hexcol_tl \c__fontspec_opacity_tl }
1415 { \__fontspec_update_featstr:n
{ color =
\l__fontspec_hexcol_tl\l__fontspec_opacity_tl } }
1417 \prg_new_conditional:Nnn
\__fontspec_save_family_needed:n
{ TF
}
1421 \tl_if_empty:NTF
\l__fontspec_nfss_fam_tl
1423 \prop_get:NVNTF
\g__fontspec_fontid_family_prop \l__fontspec_fontid_tl \l__fontspec_tmp_tl
1425 \tl_gset_eq:NN
\g__fontspec_nfss_family_tl \l__fontspec_tmp_tl
1429 \tl_set:Nx
\l__fontspec_tmp_tl {#1}
1430 \tl_remove_all:Nn
\l__fontspec_tmp_tl { ~
}
1431 \__fontspec_save_fontid_family:VV
\l__fontspec_fontid_tl \l__fontspec_tmp_tl
1436 \tl_gset_eq:NN
\g__fontspec_nfss_family_tl \l__fontspec_nfss_fam_tl
1437 \cs_undefine:c
{ g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
}
1441 \cs_new:Nn
\__fontspec_save_fontid_family:nn
1443 \prop_get:NnNTF
\g__fontspec_family_int_prop {#2} \l__fontspec_tmp_tl
1445 \tl_set:Nx
\l__fontspec_tmp_tl
1446 { \int_eval:n
{ \l__fontspec_tmp_tl +
1 } }
1448 { \tl_set:Nn
\l__fontspec_tmp_tl { 0 } }
1449 \prop_gput:NnV
\g__fontspec_family_int_prop {#2} \l__fontspec_tmp_tl
1450 \tl_gset:Nx
\g__fontspec_nfss_family_tl { #2 (
\l__fontspec_tmp_tl )
}
1451 \prop_gput:NnV
\g__fontspec_fontid_family_prop {#1} \g__fontspec_nfss_family_tl
1453 \cs_generate_variant:Nn
\__fontspec_save_fontid_family:nn
{ VV
}
1454 \cs_new:Nn
\__fontspec_save_family:nn
1456 \__fontspec_save_fontinfo:n
{#2}
1457 \__fontspec_find_autofonts:
1458 \DeclareFontFamily{\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{}
1459 \__fontspec_set_faces:
1460 \__fontspec_info:nxx
{defining-font
} {#1} {#2}
1462 \cs_new:Nn
\__fontspec_save_fontinfo:n
1464 \prop_new:c
{g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
}
1465 \prop_gput:cnx
{g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
} {fontname
} { #1 }
1466 \prop_gput:cnx
{g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
} {options
} { \l__fontspec_all_features_clist }
1467 \prop_gput:cnx
{g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
} {fontdef
}
1469 \__fontspec_construct_font_call:nn
{\l_fontspec_fontname_tl}
1470 { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist }
1472 \prop_gput:cnV
{g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
} {script-num
} \l__fontspec_script_int
1473 \prop_gput:cnV
{g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
} {lang-num
} \l__fontspec_language_int
1474 \prop_gput:cnV
{g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
} {script-tag
} \l__fontspec_script_tl
1475 \prop_gput:cnV
{g__fontspec_fontinfo_
\g__fontspec_nfss_family_tl _prop
} {lang-tag
} \l__fontspec_lang_tl
1477 \cs_new:Nn
\__fontspec_find_autofonts:
1479 \bool_if:nF
{\l__fontspec_noit_bool ||
\l__fontspec_nobf_bool}
1481 \__fontspec_set_autofont:Nnn
\l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B
}
1482 \__fontspec_set_autofont:Nnn
\l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I
}
1483 \__fontspec_set_autofont:Nnn
\l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI
}
1486 \bool_if:NF
\l__fontspec_nobf_bool
1488 \__fontspec_set_autofont:Nnn
\l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B
}
1491 \bool_if:NF
\l__fontspec_noit_bool
1493 \__fontspec_set_autofont:Nnn
\l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I
}
1496 \__fontspec_set_autofont:Nnn
\l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B
}
1498 \cs_new:Nn
\__fontspec_set_faces:
1500 \__fontspec_add_nfssfont:nnnn
\mddefault \shapedefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist
1501 \__fontspec_add_nfssfont:nnnn
\bfdefault \shapedefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist
1502 \__fontspec_add_nfssfont:nnnn
\mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist
1503 \__fontspec_add_nfssfont:nnnn
\mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist
1504 \__fontspec_add_nfssfont:nnnn
\bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist
1505 \__fontspec_add_nfssfont:nnnn
\bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist
1506 \prop_map_inline:Nn
\l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn #
#2 }
1508 \cs_new:Nn
\__fontspec_set_faces_aux:nnnnn
1510 \fontspec_complete_fontname:Nn
\l__fontspec_curr_fontname_tl {#3}
1511 \__fontspec_make_font_shapes:Nnnnn
\l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5}
1513 \cs_new:Nn
\fontspec_complete_fontname:Nn
1516 \tl_replace_all:Nnx
#1 {*
} {\l__fontspec_basename_tl}
1518 \cs_new:Nn
\__fontspec_add_nfssfont:nnnn
1520 \tl_set:Nx
\l__fontspec_this_font_tl {#3}
1522 \tl_if_empty:xTF
{#4}
1523 { \clist_set:Nn
\l__fontspec_sizefeat_clist {Size=
{-
}} }
1524 { \__fontspec_keys_set_known:nxN
{fontspec-preparse-nested
} {#4} \l__fontspec_tmp_tl }
1526 \tl_if_empty:NF
\l__fontspec_this_font_tl
1528 \prop_put:Nxx
\l__fontspec_nfssfont_prop {#1/
#2}
1529 { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} }
1532 \cs_new:Nn
\__fontspec_set_font_type:N
1534 \bool_set_false:N
\l__fontspec_tfm_bool
1535 \bool_set_false:N
\l__fontspec_atsui_bool
1536 \bool_set_false:N
\l__fontspec_ot_bool
1537 \bool_set_false:N
\l__fontspec_mm_bool
1538 \bool_set_false:N
\l__fontspec_graphite_bool
1539 \ifcase\XeTeXfonttype #1
1540 \bool_set_true:N
\l__fontspec_tfm_bool
1542 \bool_set_true:N
\l__fontspec_atsui_bool
1543 \tl_if_empty:NT
\l__fontspec_renderer_tl { \tl_set:Nn
\l__fontspec_renderer_tl {/AAT
} }
1544 \ifnum\XeTeXcountvariations #1 >
0\relax
1545 \bool_set_true:N
\l__fontspec_mm_bool
1548 \bool_set_true:N
\l__fontspec_ot_bool
1549 \tl_if_empty:NT
\l__fontspec_renderer_tl { \tl_set:Nn
\l__fontspec_renderer_tl {/OT
} }
1551 \bool_set_true:N
\l__fontspec_graphite_bool
1552 \tl_if_empty:NT
\l__fontspec_renderer_tl { \tl_set:Nn
\l__fontspec_renderer_tl {/GR
} }
1555 \cs_new:Nn
\__fontspec_set_autofont:Nnn
1557 \bool_if:NF
\l__fontspec_external_bool
1559 \tl_if_empty:xF
{#2}
1563 \__fontspec_if_autofont:nnTF
{#2} {#3}
1564 { \tl_set:Nx
#1 {#2#3} }
1565 { \__fontspec_info:nx
{no-font-shape
} {#2#3} }
1570 \prg_new_conditional:Nnn
\__fontspec_if_autofont:nn
{T,TF
}
1573 \__fontspec_primitive_font_set:Nnn
\l__fontspec_tmpa_font { \__fontspec_construct_font_call:nn
{#1} { \l__fontspec_pre_feat_sclist } } { \f@size pt +
1sp
}
1574 \__fontspec_primitive_font_set:Nnn
\l__fontspec_tmpb_font { \__fontspec_construct_font_call:nn
{#1#2} { \l__fontspec_pre_feat_sclist } } { \f@size pt +
1sp
}
1575 \str_if_eq:eeTF
{ \__fontspec_primitive_font_get_name:N
\l__fontspec_tmpa_font } { \__fontspec_primitive_font_get_name:N
\l__fontspec_tmpb_font }
1576 { \group_end:
\prg_return_false:
}
1577 { \group_end:
\prg_return_true:
}
1579 \cs_new:Nn
\__fontspec_make_font_shapes:Nnnnn
1582 \__fontspec_keys_set_known:nxN
{fontspec-preparse-external
} { #4 } \l__fontspec_leftover_clist
1583 \__fontspec_load_fontname:Nn
\l_fontspec_fontname_tl {#1}
1584 \__fontspec_declare_shape:nnxx
{#2} {#3} { \l__fontspec_fontopts_clist,
\l__fontspec_leftover_clist } {#5}
1587 \cs_new:Nn
\__fontspec_load_fontname:Nn
1589 \__fontspec_load_external_fontoptions:Nn
#1 {#2}
1590 \prop_get:NVNF
\g__fontspec_fontopts_prop #1 \l__fontspec_fontopts_clist
1591 { \clist_clear:N
\l__fontspec_fontopts_clist }
1592 \keys_set_groups:nnV
{fontspec/fontname
} {getfontname
} \l__fontspec_fontopts_clist
1593 \__fontspec_primitive_font_set:OnnF
\l__fontspec_fontface_cs_tl
1594 { \__fontspec_construct_font_call:nn
{#1} { \l__fontspec_pre_feat_sclist } } { \f@size pt +
2sp
}
1595 { \__fontspec_error:nx
{font-not-found
} {#2} }
1597 \keys_define:nn
{fontspec/fontname
}
1599 Font .tl_set:N =
\l_fontspec_fontname_tl ,
1600 Font .groups:n =
{getfontname
} ,
1602 \cs_new:Nn
\__fontspec_declare_shape:nnnn
1604 \tl_build_begin:N
\l__fontspec_nfss_tl
1605 \tl_build_begin:N
\l__fontspec_nfss_sc_tl
1606 \tl_set_eq:NN
\l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl
1608 \exp_args:Nx
\clist_map_inline:nn
{#4} { \__fontspec_setup_single_size:nn
{#3} {#
#1} }
1610 \tl_build_end:N
\l__fontspec_nfss_tl
1611 \tl_build_end:N
\l__fontspec_nfss_sc_tl
1613 \__fontspec_declare_shapes_normal:nn
{#1} {#2}
1614 \__fontspec_declare_shapes_smcaps:nn
{#1} {#2}
1615 \__fontspec_declare_shape_slanted:nn
{#1} {#2}
1616 \__fontspec_declare_shapes_bx:nn
{#1} {#2}
1617 \__fontspec_declare_shape_loginfo:nn
{#1} {#2}
1619 \cs_generate_variant:Nn
\__fontspec_declare_shape:nnnn
{nnxx
}
1620 \cs_new:Nn
\__fontspec_setup_single_size:nn
1622 \tl_clear:N
\l__fontspec_size_tl
1623 \tl_set_eq:NN
\l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed
1625 \keys_set_known:nxN
{fontspec-sizing
} { \exp_after:wN
\use:n
#2 }
1626 \l__fontspec_sizing_leftover_clist
1627 \tl_if_empty:NT
\l__fontspec_size_tl { \__fontspec_error:n
{no-size-info
} }
1630 \__fontspec_load_fontname:Nn
\l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl}
1631 \__fontspec_setup_nfss:Nnnn
\l__fontspec_nfss_tl {#1} {\l__fontspec_sizing_leftover_clist} {}
1634 \clist_set_eq:NN
\l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist
1636 \bool_if:NF
\l__fontspec_nosc_bool
1638 \tl_if_empty:NTF
\l__fontspec_fontname_sc_tl
1640 \__fontspec_make_smallcaps:TF
1642 \clist_put_left:Nn
\l__fontspec_fontfeat_curr_clist {Letters=SmallCaps
}
1645 \bool_set_true:N
\l__fontspec_nosc_bool
1648 { \__fontspec_load_fontname:Nn
\l_fontspec_fontname_tl {\l__fontspec_fontname_sc_tl} }% local for each size
1651 \bool_if:NF
\l__fontspec_nosc_bool
1653 \__fontspec_setup_nfss:Nnnn
\l__fontspec_nfss_sc_tl
1654 {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist}
1657 \cs_new:Nn
\__fontspec_setup_nfss:Nnnn
1660 \__fontspec_get_features:n
{ #2 ,
#3 ,
#4 }
1662 \tl_if_empty:NF
\l__fontspec_scale_tl
1664 \tl_set:Nx
\l__fontspec_scale_tl { s*
[\l__fontspec_scale_tl] }
1667 \tl_build_put_right:Nx
#1
1669 <
\l__fontspec_size_tl>
\l__fontspec_scale_tl
1670 \__fontspec_construct_font_call:nn
{ \l_fontspec_fontname_tl }
1671 { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist }
1674 \cs_new:Nn
\__fontspec_declare_shapes_normal:nn
1676 \__fontspec_DeclareFontShape:xxxxxx
{\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl}
1677 {#1} {#2} {\l__fontspec_nfss_tl}{\l__fontspec_postadjust_tl}
1679 \cs_new:Nn
\__fontspec_declare_shapes_smcaps:nn
1681 \tl_if_empty:NF
\l__fontspec_nfss_sc_tl
1683 \__fontspec_DeclareFontShape:xxxxxx
{\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} {#1}
1684 { \__fontspec_combo_sc_shape:n
{#2} } {\l__fontspec_nfss_sc_tl} {\l__fontspec_postadjust_tl}
1687 \cs_new:Nn
\__fontspec_combo_sc_shape:n
1689 \tl_if_exist:cTF
{ \__fontspec_shape_merge:nn
{#1} {\scdefault} }
1690 { \tl_use:c
{ \__fontspec_shape_merge:nn
{#1} {\scdefault} } }
1693 \cs_new:Nn
\__fontspec_DeclareFontShape:nnnnnn
1697 \cs_undefine:c
{#1/
#2/
#3/
#4/
\f@size
}
1699 \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6}
1701 \cs_generate_variant:Nn
\__fontspec_DeclareFontShape:nnnnnn
{xxxxxx
}
1702 \cs_new:Nn
\__fontspec_declare_shape_slanted:nn
1706 \str_if_eq_p:ee
{#2} {\itdefault} &&
1707 !(
\str_if_eq_p:ee
{\itdefault} {\sldefault})
1710 \__fontspec_DeclareFontShape:xxxxxx
{\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{#1}{\sldefault}
1711 {<->ssub*
\g__fontspec_nfss_family_tl/
#1/
\itdefault}{\l__fontspec_postadjust_tl}
1714 \cs_new:Nn
\__fontspec_declare_shapes_bx:nn
1718 \str_if_eq_p:ee
{#1} {\bfdefault} &&
1719 !(
\str_if_eq_p:ee
{\bfdefault} {bx
})
1723 \__fontspec_DeclareFontShape:xxxxxx
{\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl}
1725 { <->ssub*
\g__fontspec_nfss_family_tl/
\bfdefault/
#2 }
1726 { \l__fontspec_postadjust_tl }
1729 \tl_if_empty:NF
\l__fontspec_nfss_sc_tl
1731 \__fontspec_DeclareFontShape:xxxxxx
{\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl}
1732 {bx
} { \__fontspec_combo_sc_shape:n
{#2} }
1733 { <->ssub*
\g__fontspec_nfss_family_tl/
\bfdefault/
#2 }
1734 { \l__fontspec_postadjust_tl }
1740 \str_if_eq_p:ee
{#2} {\itdefault} &&
1741 !(
\str_if_eq_p:ee
{\itdefault} {\sldefault})
1744 \__fontspec_DeclareFontShape:xxxxxx
{\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl}
1746 { <->ssub*
\g__fontspec_nfss_family_tl/bx/
\itdefault }
1747 { \l__fontspec_postadjust_tl }
1752 \cs_new:Nn
\__fontspec_declare_shape_loginfo:nn
1754 \tl_gput_right:Nx
\g__fontspec_defined_shapes_tl
1757 -~
\exp_not:N
\str_case:nn
{#1/
#2}
1759 {\mddefault/
\shapedefault} {'normal'~
}
1760 {\bfdefault/
\shapedefault} {'bold'~
}
1761 {\mddefault/
\itdefault} {'italic'~
}
1762 {\mddefault/
\sldefault} {'slanted'~
}
1763 {\bfdefault/
\itdefault} {'bold~ italic'~
}
1764 {\bfdefault/
\sldefault} {'bold~ slanted'~
}
1767 \l__fontspec_nfss_tl
1769 -~
\exp_not:N
\str_case:nn
{ #1 /
\__fontspec_combo_sc_shape:n
{#2} }
1771 {\mddefault/
\scdefault} {'small~ caps'~
}
1772 {\bfdefault/
\scdefault} {'bold~ small~ caps'~
}
1773 {\mddefault/
\scitdefault} {'italic~ small~ caps'~
}
1774 {\bfdefault/
\scitdefault} {'bold~ italic~ small~ caps'~
}
1775 {\mddefault/
\scsldefault} {'slanted~ small~ caps'~
}
1776 {\bfdefault/
\scsldefault} {'bold~ slanted~ small~ caps'~
}
1777 }~(
#1 /
\__fontspec_combo_sc_shape:n
{#2} )~
1779 \l__fontspec_nfss_sc_tl
1780 \tl_if_empty:fF
{\l__fontspec_postadjust_tl}
1782 \exp_not:N \\ and~ font~ adjustment~ code:
1783 \exp_not:N \\
\l__fontspec_postadjust_tl
1787 \tl_set:Nn
\l__fontspec_pre_feat_sclist
1789 \bool_if:NT
\l__fontspec_ot_bool
1791 \tl_if_empty:NF
\l__fontspec_script_tl { script =
\l__fontspec_script_tl ;
}
1792 \tl_if_empty:NF
\l__fontspec_lang_tl { language =
\l__fontspec_lang_tl ;
}
1795 \cs_new:Nn
\__fontspec_make_ot_smallcaps:TF
1797 \exp_args:No
\__fontspec_check_ot_feat:NnTF
\l__fontspec_fontface_cs_tl {smcp
} {#1} {#2}
1799 \cs_new:Nn
\__fontspec_make_smallcaps:TF
1801 \bool_if:NTF
\l__fontspec_ot_bool
1802 { \__fontspec_make_ot_smallcaps:TF
{#1} {#2} }
1804 \bool_if:NT
\l__fontspec_atsui_bool
1806 \exp_args:No
\__fontspec_make_AAT_feature_string:NnnTF
1807 \l__fontspec_fontface_cs_tl {3} {3} {#1} {#2}
1811 \cs_new:Nn
\__fontspec_update_featstr:n
1813 \bool_if:NF
\l__fontspec_firsttime_bool
1815 \tl_gset:Nx
\g__fontspec_single_feat_tl { #1 }
1816 \tl_gput_right:Nx
\g__fontspec_rawfeatures_sclist {#1;
}
1819 \cs_new:Nn
\__fontspec_remove_clashing_featstr:n
1821 \clist_map_inline:nn
{#1}
1823 \tl_gremove_all:Nn
\g__fontspec_rawfeatures_sclist {#
#1;
}
1826 \cs_generate_variant:Nn
\__fontspec_remove_clashing_featstr:n
{x
}
1827 \cs_set:Npn
\__fontspec_init:
1829 \bool_set_false:N
\l__fontspec_ot_bool
1830 \bool_set_true:N
\l__fontspec_firsttime_bool
1831 \__fontspec_font_is_name:
1832 \tl_clear:N
\l__fontspec_font_path_tl
1833 \tl_clear:N
\l__fontspec_optical_size_tl
1834 \tl_clear:N
\l__fontspec_ttc_index_tl
1835 \tl_clear:N
\l__fontspec_renderer_tl
1836 \tl_gclear:N
\g__fontspec_defined_shapes_tl
1837 \tl_gclear:N
\g__fontspec_curr_series_tl
1838 \tl_gset_eq:NN
\g__fontspec_nfss_enc_tl \g_fontspec_encoding_tl
1840 \cs_new:Nn
\__fontspec_init_fontface:
1842 \tl_gclear:N
\g__fontspec_rawfeatures_sclist
1843 \tl_clear:N
\l__fontspec_scale_tl
1844 \tl_set_eq:NN
\l__fontspec_opacity_tl \c__fontspec_opacity_tl
1845 \tl_set_eq:NN
\l__fontspec_hexcol_tl \c__fontspec_hexcol_tl
1846 \tl_set_eq:NN
\l__fontspec_postadjust_tl \c__fontspec_postadjust_tl
1847 \tl_clear:N
\l__fontspec_wordspace_adjust_tl
1848 \tl_clear:N
\l__fontspec_punctspace_adjust_tl
1850 \cs_new:Nn
\__fontspec_iv_str_to_num:Nn
1852 \__fontspec_strip_leading_sign:Nw
#1#2 \q_nil
1854 \cs_generate_variant:Nn
\__fontspec_iv_str_to_num:Nn
{Nx
}
1855 \cs_set:Npn
\__fontspec_strip_leading_sign:Nw
#1#2#3 \q_nil
1857 \bool_if:nTF
{ \str_if_eq_p:nn
{#2} {+
} ||
\str_if_eq_p:nn
{#2} {-
} }
1858 { \__fontspec_iv_str_to_num:w
#1 \q_nil #3 \c_empty_tl \c_empty_tl \q_nil }
1859 { \__fontspec_iv_str_to_num:w
#1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil }
1861 \cs_set:Npn
\__fontspec_iv_str_to_num:w
#1 \q_nil #2#3#4#5#6 \q_nil
1863 \int_compare:nT
{ \tl_count:n
{#6} >
2 }
1864 { \__fontspec_error:nx
{ot-tag-too-long
} {#2#3#4#5#6} }
1870 +
\ifx \c_empty_tl #4 32 \else `
#4 \fi * "
100
1871 +
\ifx \c_empty_tl #5 32 \else `
#5 \fi
1875 %%^^A%% fontspec-code-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec>
1877 \cs_new:Nn
\__fontspec_define_opentype_feature_group:n
1879 \keys_define:nn
{fontspec-opentype
} { #1 .multichoice: , .groups:n =
{opentype
} }
1881 \cs_new:Nn
\__fontspec_feat_prop_add:nn
1883 \tl_if_empty:nF
{#1}
1885 \prop_if_in:NnF
\g__fontspec_OT_features_prop {#1}
1887 \prop_gput:Nnn
\g__fontspec_OT_features_prop {#1} {#2}
1891 \cs_new:Nn
\__fontspec_define_opentype_feature:nnnnn
1893 \__fontspec_feat_prop_add:nn
{#3} {#1\,=\,
#2}
1894 \tl_if_empty:nTF
{#4}
1896 \keys_define:nn
{fontspec-opentype
}
1899 { \__fontspec_remove_clashing_featstr:n
{#5} } ,
1900 #1/
#2 .groups:n =
{opentype
}
1904 \keys_define:nn
{fontspec-opentype
}
1908 \__fontspec_make_OT_feature:nnn
{#3} {#4} {#5}
1910 #1/
#2 .groups:n =
{opentype
}
1914 \cs_new:Nn
\__fontspec_feat_off:n
{#1Off
}
1915 \cs_new:Nn
\__fontspec_feat_reset:n
{#1Reset
}
1916 \cs_new:Nn
\__fontspec_define_opentype_onoffreset:nnnnn
1918 \exp_args:Nnx
\__fontspec_define_opentype_feature:nnnnn
{#1} {#2} {#3} {+
#4} {#5}
1919 \exp_args:Nnx
\__fontspec_define_opentype_feature:nnnnn
{#1} { \__fontspec_feat_off:n
{#2} } {#3} {-
#4} {}
1920 \exp_args:Nnx
\__fontspec_define_opentype_feature:nnnnn
{#1} { \__fontspec_feat_reset:n
{#2} } {} {} {+
#4,-
#4}
1922 \cs_new:Nn
\__fontspec_define_opentype_onreset:nnnnn
1924 \exp_args:Nnx
\__fontspec_define_opentype_feature:nnnnn
{#1} {#2} {#3} {#4} {#5}
1925 \exp_args:Nnx
\__fontspec_define_opentype_feature:nnnnn
{#1} { \__fontspec_feat_reset:n
{#2} } {} {} {#4}
1927 \cs_new:Nn
\__fontspec_make_OT_feature:nnn
1930 \bool_set_true:N
\l__fontspec_proceed_bool
1932 \tl_if_empty:nF
{#1}
1934 \exp_args:No
\__fontspec_check_ot_feat:NnF
\l__fontspec_fontface_cs_tl {#1}
1936 \__fontspec_warning:nx
{icu-feature-not-exist-in-font
} {#1}
1937 \bool_set_false:N
\l__fontspec_proceed_bool
1941 \__fontspec_remove_clashing_featstr:x
{ #2 ,
\__fontspec_swap_plus_minus:n
{#2} ,
#3 }
1943 \bool_if:NT
\l__fontspec_proceed_bool { \__fontspec_update_featstr:n
{#2} }
1945 \cs_generate_variant:Nn
\__fontspec_make_OT_feature:nnn
{xxx
}
1946 \cs_new:Nn
\__fontspec_swap_plus_minus:n
{ \__fontspec_swap_plus_minus_aux:Nq
#1 \q_nil }
1947 \cs_new:Npn
\__fontspec_swap_plus_minus_aux:Nq
#1#2 \q_nil
1948 { \str_case:nn
{#1} { {+
} {-
#2} {-
} {+
#2} } }
1949 \prg_new_conditional:Nnn
\__fontspec_check_script:Nn
{TF,T
}
1951 \bool_if:NTF
\l__fontspec_never_check_bool
1952 { \prg_return_true:
}
1954 \bool_if:nTF
{ \tl_if_empty_p:e
{#2} }
1955 { \prg_return_false:
}
1957 \__fontspec_iv_str_to_num:Nx
\l__fontspec_strnum_int {#2}
1958 \int_set:Nn
\l_tmpb_int { \XeTeXOTcountscripts #1 }
1959 \int_zero:N
\l_tmpa_int
1960 \bool_set_false:N
\l__fontspec_check_bool
1961 \bool_until_do:nn
{ \int_compare_p:nNn
\l_tmpa_int =
\l_tmpb_int }
1963 \ifnum \XeTeXOTscripttag #1 \l_tmpa_int =
\l__fontspec_strnum_int
1964 \bool_set_true:N
\l__fontspec_check_bool
1965 \int_set:Nn
\l_tmpa_int {\l_tmpb_int}
1967 \int_incr:N
\l_tmpa_int
1970 \bool_if:NTF
\l__fontspec_check_bool \prg_return_true:
\prg_return_false:
1974 \prg_new_conditional:Nnn
\__fontspec_check_lang:Nn
{TF
}
1976 \__fontspec_check_lang:NnnTF
#1 {#2} {\l__fontspec_script_tl} {\prg_return_true:
} {\prg_return_false:
}
1978 \prg_new_conditional:Nnn
\__fontspec_check_lang:Nnn
{TF
}
1980 \bool_if:NTF
\l__fontspec_never_check_bool
1981 { \prg_return_true:
}
1983 \bool_if:nTF
{ \tl_if_empty_p:e
{#3} }
1984 { \prg_return_false:
}
1986 \__fontspec_iv_str_to_num:Nx
\l__fontspec_strnum_int {#2}
1987 \__fontspec_iv_str_to_num:Nx
\l__fontspec_script_int {#3}
1988 \int_set:Nn
\l__fontspec_tmpb_int
1989 { \XeTeXOTcountlanguages #1 \l__fontspec_script_int }
1990 \int_zero:N
\l__fontspec_tmpa_int
1991 \bool_set_false:N
\l__fontspec_check_bool
1992 \bool_until_do:nn
{ \int_compare_p:nNn
\l__fontspec_tmpa_int =
\l__fontspec_tmpb_int }
1994 \int_set:Nn
\l__fontspec_tmpc_int
1995 { \XeTeXOTlanguagetag #1 \l__fontspec_script_int \l__fontspec_tmpa_int }
1997 \int_compare:nNnTF
\l__fontspec_tmpc_int =
\l__fontspec_strnum_int
1999 \bool_set_true:N
\l__fontspec_check_bool
2000 \int_set:Nn
\l__fontspec_tmpa_int {\l__fontspec_tmpb_int}
2003 \int_incr:N
\l__fontspec_tmpa_int
2006 \bool_if:NTF
\l__fontspec_check_bool \prg_return_true:
\prg_return_false:
2010 \prg_new_conditional:Nnn
\__fontspec_check_ot_feat:Nn
{TF,F
}
2012 \__fontspec_check_ot_feat:NnnnTF
#1 {#2} {\l__fontspec_lang_tl} {\l__fontspec_script_tl}
2013 {\prg_return_true:
} {\prg_return_false:
}
2015 \prg_new_conditional:Nnn
\__fontspec_check_ot_feat:Nnnn
{TF,F
}
2017 \bool_if:NTF
\l__fontspec_never_check_bool
2018 { \prg_return_true:
}
2020 \bool_if:nTF
{ \tl_if_empty_p:e
{#3} ||
\tl_if_empty_p:e
{#4} }
2021 { \prg_return_false:
}
2023 \__fontspec_iv_str_to_num:Nx
\l__fontspec_strnum_int {#2}
2025 \str_if_eq:eeTF
{#3} {dflt
}
2026 { \int_zero:N
\l__fontspec_language_int }
2027 { \__fontspec_iv_str_to_num:Nx
\l__fontspec_language_int {#3} }
2028 \__fontspec_iv_str_to_num:Nx
\l__fontspec_script_int {#4}
2030 \int_set:Nn
\l_tmpb_int
2031 { \XeTeXOTcountfeatures #1 \l__fontspec_script_int \l__fontspec_language_int }
2033 \int_zero:N
\l_tmpa_int
2034 \bool_set_false:N
\l__fontspec_check_bool
2035 \bool_until_do:nn
{ \int_compare_p:nNn
\l_tmpa_int =
\l_tmpb_int }
2037 \ifnum\XeTeXOTfeaturetag #1 \l__fontspec_script_int \l__fontspec_language_int
2038 \l_tmpa_int =
\l__fontspec_strnum_int
2039 \bool_set_true:N
\l__fontspec_check_bool
2040 \int_set:Nn
\l_tmpa_int {\l_tmpb_int}
2042 \int_incr:N
\l_tmpa_int
2045 \bool_if:NTF
\l__fontspec_check_bool \prg_return_true:
\prg_return_false:
2049 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {aalt
}{Access~All~Alternates
}
2050 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {abvf
}{Above-base~Forms
}
2051 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {abvm
}{Above-base~Mark~Positioning
}
2052 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {abvs
}{Above-base~Substitutions
}
2053 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {afrc
}{Alternative~Fractions
}
2054 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {akhn
}{Akhands
}
2055 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {blwf
}{Below-base~Forms
}
2056 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {blwm
}{Below-base~Mark~Positioning
}
2057 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {blws
}{Below-base~Substitutions
}
2058 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {calt
}{Contextual~Alternates
}
2059 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {case
}{Case-Sensitive~Forms
}
2060 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ccmp
}{Glyph~Composition~/~Decomposition
}
2061 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {cfar
}{Conjunct~Form~After~Ro
}
2062 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {cjct
}{Conjunct~Forms
}
2063 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {clig
}{Contextual~Ligatures
}
2064 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {cpct
}{Centered~CJK~Punctuation
}
2065 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {cpsp
}{Capital~Spacing
}
2066 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {cswh
}{Contextual~Swash
}
2067 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {curs
}{Cursive~Positioning
}
2068 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {cvNN
}{Character~Variant~$N$
}
2069 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {c2pc
}{Petite~Capitals~From~Capitals
}
2070 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {c2sc
}{Small~Capitals~From~Capitals
}
2071 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {dist
}{Distances
}
2072 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {dlig
}{Discretionary~Ligatures
}
2073 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {dnom
}{Denominators
}
2074 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {dtls
}{Dotless~Forms
}
2075 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {expt
}{Expert~Forms
}
2076 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {falt
}{Final~Glyph~on~Line~Alternates
}
2077 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {fin2
}{Terminal~Forms~\
#2}
2078 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {fin3
}{Terminal~Forms~\
#3}
2079 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {fina
}{Terminal~Forms
}
2080 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {flac
}{Flattened~accent~forms
}
2081 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {frac
}{Fractions
}
2082 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {fwid
}{Full~Widths
}
2083 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {half
}{Half~Forms
}
2084 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {haln
}{Halant~Forms
}
2085 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {halt
}{Alternate~Half~Widths
}
2086 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {hist
}{Historical~Forms
}
2087 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {hkna
}{Horizontal~Kana~Alternates
}
2088 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {hlig
}{Historical~Ligatures
}
2089 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {hngl
}{Hangul
}
2090 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {hojo
}{Hojo~Kanji~Forms
}
2091 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {hwid
}{Half~Widths
}
2092 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {init
}{Initial~Forms
}
2093 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {isol
}{Isolated~Forms
}
2094 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ital
}{Italics
}
2095 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {jalt
}{Justification~Alternates
}
2096 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {jp78
}{JIS78~Forms
}
2097 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {jp83
}{JIS83~Forms
}
2098 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {jp90
}{JIS90~Forms
}
2099 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {jp04
}{JIS2004~Forms
}
2100 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {kern
}{Kerning
}
2101 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {lfbd
}{Left~Bounds
}
2102 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {liga
}{Standard~Ligatures
}
2103 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ljmo
}{Leading~Jamo~Forms
}
2104 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {lnum
}{Lining~Figures
}
2105 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {locl
}{Localized~Forms
}
2106 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ltra
}{Left-to-right~alternates
}
2107 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ltrm
}{Left-to-right~mirrored~forms
}
2108 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {mark
}{Mark~Positioning
}
2109 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {med2
}{Medial~Forms~\
#2}
2110 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {medi
}{Medial~Forms
}
2111 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {mgrk
}{Mathematical~Greek
}
2112 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {mkmk
}{Mark~to~Mark~Positioning
}
2113 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {mset
}{Mark~Positioning~via~Substitution
}
2114 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {nalt
}{Alternate~Annotation~Forms
}
2115 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {nlck
}{NLC~Kanji~Forms
}
2116 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {nukt
}{Nukta~Forms
}
2117 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {numr
}{Numerators
}
2118 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {onum
}{Oldstyle~Figures
}
2119 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {opbd
}{Optical~Bounds
}
2120 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ordn
}{Ordinals
}
2121 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ornm
}{Ornaments
}
2122 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {palt
}{Proportional~Alternate~Widths
}
2123 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {pcap
}{Petite~Capitals
}
2124 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {pkna
}{Proportional~Kana
}
2125 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {pnum
}{Proportional~Figures
}
2126 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {pref
}{Pre-Base~Forms
}
2127 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {pres
}{Pre-base~Substitutions
}
2128 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {pstf
}{Post-base~Forms
}
2129 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {psts
}{Post-base~Substitutions
}
2130 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {pwid
}{Proportional~Widths
}
2131 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {qwid
}{Quarter~Widths
}
2132 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rand
}{Randomize
}
2133 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rclt
}{Required~Contextual~Alternates
}
2134 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rkrf
}{Rakar~Forms
}
2135 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rlig
}{Required~Ligatures
}
2136 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rphf
}{Reph~Forms
}
2137 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rtbd
}{Right~Bounds
}
2138 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rtla
}{Right-to-left~alternates
}
2139 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rtlm
}{Right-to-left~mirrored~forms
}
2140 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ruby
}{Ruby~Notation~Forms
}
2141 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {rvrn
}{Required~Variation~Alternates
}
2142 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {salt
}{Stylistic~Alternates
}
2143 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {sinf
}{Scientific~Inferiors
}
2144 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {size
}{Optical~size
}
2145 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {smcp
}{Small~Capitals
}
2146 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {smpl
}{Simplified~Forms
}
2147 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ssNN
}{Stylistic~Set~$N$
}
2148 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {ssty
}{Math~script~style~alternates
}
2149 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {stch
}{Stretching~Glyph~Decomposition
}
2150 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {subs
}{Subscript
}
2151 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {sups
}{Superscript
}
2152 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {swsh
}{Swash
}
2153 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {titl
}{Titling
}
2154 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {tjmo
}{Trailing~Jamo~Forms
}
2155 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {tnam
}{Traditional~Name~Forms
}
2156 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {tnum
}{Tabular~Figures
}
2157 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {trad
}{Traditional~Forms
}
2158 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {twid
}{Third~Widths
}
2159 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {unic
}{Unicase
}
2160 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {valt
}{Alternate~Vertical~Metrics
}
2161 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vatu
}{Vattu~Variants
}
2162 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vert
}{Vertical~Writing
}
2163 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vhal
}{Alternate~Vertical~Half~Metrics
}
2164 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vjmo
}{Vowel~Jamo~Forms
}
2165 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vkna
}{Vertical~Kana~Alternates
}
2166 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vkrn
}{Vertical~Kerning
}
2167 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vpal
}{Proportional~Alternate~Vertical~Metrics
}
2168 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vrt2
}{Vertical~Alternates~and~Rotation
}
2169 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {vrtr
}{Vertical~Alternates~for~Rotation
}
2170 \prop_gput:Nnn
\g__fontspec_all_opentype_feature_names_prop {zero
}{Slashed~Zero
}
2172 %%^^A%% fontspec-code-graphite.dtx -- part of FONTSPEC <wspr.io/fontspec>
2175 \cs_new:Nn
\__fontspec_define_aat_feature_group:n
2177 \keys_define:nn
{fontspec-aat
} { #1 .multichoice:
}
2179 \cs_new:Nn
\__fontspec_define_aat_feature:nnnn
2181 \keys_define:nn
{fontspec-aat
}
2183 #1/
#2 .code:n =
{ \__fontspec_make_AAT_feature:nn
{#3}{#4} }
2187 \cs_new:Nn
\__fontspec_make_AAT_feature:nn
2189 \tl_if_empty:nTF
{#1}
2190 { \__fontspec_warning:n
{aat-feature-not-exist
} }
2192 \exp_args:No
\__fontspec_make_AAT_feature_string:NnnTF
\l__fontspec_fontface_cs_tl {#1} {#2}
2194 \__fontspec_update_featstr:n
{\l_fontspec_feature_string_tl}
2197 \__fontspec_warning:nx
{aat-feature-not-exist-in-font
} {#1,
#2}
2201 \prg_new_conditional:Nnn
\__fontspec_make_AAT_feature_string:Nnn
{TF,T,F
}
2203 \tl_set:Nx
\l__fontspec_tmpa_tl { \XeTeXfeaturename #1 #2 }
2204 \tl_if_empty:NTF
\l__fontspec_tmpa_tl
2205 { \prg_return_false:
}
2207 \int_compare:nTF
{ \XeTeXisexclusivefeature #1 #2 >
0 }
2209 \tl_set:Nx
\l__fontspec_tmpb_tl {\XeTeXselectorname #1 #2\space #3}
2212 \int_if_even:nTF
{#3}
2214 \tl_set:Nx
\l__fontspec_tmpb_tl {\XeTeXselectorname #1 #2\space #3}
2217 \tl_set:Nx
\l__fontspec_tmpb_tl
2219 \XeTeXselectorname #1 #2\space \numexpr#3-
1\relax
2221 \tl_if_empty:NF
\l__fontspec_tmpb_tl { \tl_put_left:Nn
\l__fontspec_tmpb_tl {!
} }
2225 \tl_if_empty:NTF
\l__fontspec_tmpb_tl
2226 { \prg_return_false:
}
2228 \tl_set:Nx
\l_fontspec_feature_string_tl { \l__fontspec_tmpa_tl =
\l__fontspec_tmpb_tl }
2234 %%^^A%% fontspec-code-keyval.dtx -- part of FONTSPEC <wspr.io/fontspec>
2236 \clist_gset:Nn
\g__fontspec_all_keyval_modules_clist
2238 fontspec, fontspec-opentype, fontspec-aat,
2239 fontspec-preparse, fontspec-preparse-cfg, fontspec-preparse-external, fontspec-preparse-nested,
2242 \cs_new:Nn
\__fontspec_keys_define_code:nnn
2244 \keys_define:nn
{#1} { #2 .code:n =
{#3} }
2246 \cs_new:Nn
\__fontspec_aff_error:n
2248 \__fontspec_keys_define_code:nnn
{fontspec-addfeatures
} {#1}
2249 { \__fontspec_error:nx
{not-in-addfontfeatures
} {#1} }
2251 \__fontspec_keys_define_code:nnn
{fontspec-preparse-cfg
} {IgnoreFontspecFile
}
2253 \bool_set_false:N
\l__fontspec_fontcfg_bool
2255 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {IgnoreFontspecFile
}
2257 \bool_set_false:N
\l__fontspec_fontcfg_bool
2259 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {Path
}
2261 \bool_set_true:N
\l__fontspec_nobf_bool
2262 \bool_set_true:N
\l__fontspec_noit_bool
2263 \bool_set_true:N
\l__fontspec_external_bool
2264 \tl_set:Nn
\l__fontspec_font_path_tl {#1}
2265 \__fontspec_font_is_file:
2266 \keys_set:nn
{fontspec-renderer
} {Renderer=OpenType
}
2268 \aliasfontfeature{Path
}{ExternalLocation
}
2269 \__fontspec_keys_define_code:nnn
{fontspec
} {Path
} {}
2270 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {Extension
}
2272 \tl_set:Nn
\l__fontspec_extension_tl {#1}
2273 \bool_if:NF
\l__fontspec_external_bool
2275 \keys_set:nn
{fontspec-preparse-external
} {Path
}
2278 \tl_clear:N
\l__fontspec_extension_tl
2279 \__fontspec_keys_define_code:nnn
{fontspec
} {Extension
} {}
2280 \keys_define:nn
{fontspec-renderer
}
2282 Renderer .choices:nn =
2283 {AAT,ICU,OpenType,Graphite,Full,Basic,Node,Base,HarfBuzz,Harfbuzz
}
2285 \int_compare:nTF
{\l_keys_choice_int <=
4}
2287 \tl_set:Nx
\l__fontspec_renderer_tl
2289 \int_case:nn
\l_keys_choice_int { 1 {/AAT
} 2 {/OT
} 3 {/OT
} 4 {/GR
} }
2291 \tl_gset:Nx
\g__fontspec_single_feat_tl { \l__fontspec_renderer_tl }
2294 \__fontspec_warning:nx
{only-luatex-feature
} {Renderer=Full/Basic/Node/Base/HarfBuzz
}
2298 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {Script
}
2300 \keys_set:nn
{fontspec-renderer
} {Renderer=OpenType
}
2301 \tl_set:Nn
\l__fontspec_script_name_tl {#1}
2303 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {Language
}
2305 \keys_set:nn
{fontspec-renderer
} {Renderer=OpenType
}
2306 \tl_set:Nn
\l__fontspec_lang_name_tl {#1}
2308 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {FontIndex
}
2310 \str_if_eq:eeF
{ \str_lowercase:f
{\l__fontspec_extension_tl} } {.ttc
}
2311 { \__fontspec_warning:n
{font-index-needs-ttc
} }
2312 \tl_set:Nn
\l__fontspec_ttc_index_tl {:
#1}
2314 \__fontspec_keys_define_code:nnn
{fontspec
} {FontIndex
}
2316 \tl_set:Nn
\l__fontspec_ttc_index_tl {:
#1}
2318 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {UprightFont
}
2320 \fontspec_complete_fontname:Nn
\l__fontspec_fontname_up_tl {#1}
2322 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {ItalicFont
}
2324 \tl_if_empty:nTF
{#1}
2326 \bool_set_true:N
\l__fontspec_noit_bool
2329 \bool_set_false:N
\l__fontspec_noit_bool
2330 \fontspec_complete_fontname:Nn
\l__fontspec_fontname_it_tl {#1}
2333 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {SlantedFont
}
2335 \fontspec_complete_fontname:Nn
\l__fontspec_fontname_sl_tl {#1}
2337 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {BoldFont
}
2339 \tl_if_empty:nTF
{#1}
2341 \bool_set_true:N
\l__fontspec_nobf_bool
2344 \bool_set_false:N
\l__fontspec_nobf_bool
2345 \fontspec_complete_fontname:Nn
\l__fontspec_curr_bfname_tl {#1}
2347 \seq_if_empty:NT
\l__fontspec_bf_series_seq
2349 \tl_gset:Nx
\g__fontspec_curr_series_tl {\bfdefault}
2350 \seq_put_right:Nx
\l__fontspec_bf_series_seq {\bfdefault}
2353 \tl_if_eq:oxT
\g__fontspec_curr_series_tl {\bfdefault}
2355 \tl_set_eq:NN
\l__fontspec_fontname_bf_tl \l__fontspec_curr_bfname_tl
2358 \prop_put:NxV
\l__fontspec_nfss_prop {BoldFont-
\g__fontspec_curr_series_tl} \l__fontspec_curr_bfname_tl
2363 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {BoldItalicFont
}
2365 \fontspec_complete_fontname:Nn
\l__fontspec_fontname_bfit_tl {#1}
2367 \__fontspec_keys_define_code:nnn
{fontspec-preparse-external
} {BoldSlantedFont
}
2369 \fontspec_complete_fontname:Nn
\l__fontspec_fontname_bfsl_tl {#1}
2371 \__fontspec_keys_define_code:nnn
{fontspec
} {SmallCapsFont
}
2373 \tl_if_empty:nTF
{#1}
2375 \bool_set_true:N
\l__fontspec_nosc_bool
2378 \bool_set_false:N
\l__fontspec_nosc_bool
2379 \fontspec_complete_fontname:Nn
\l__fontspec_fontname_sc_tl {#1}
2382 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {UprightFeatures
}
2384 \clist_put_right:Nn
\l__fontspec_fontfeat_up_clist {#1}
2386 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {BoldFeatures
}
2388 \clist_put_right:Nn
\l__fontspec_fontfeat_bf_clist {#1}
2391 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {ItalicFeatures
}
2393 \clist_put_right:Nn
\l__fontspec_fontfeat_it_clist {#1}
2395 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {BoldItalicFeatures
}
2397 \clist_put_right:Nn
\l__fontspec_fontfeat_bfit_clist {#1}
2399 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {SlantedFeatures
}
2401 \clist_put_right:Nn
\l__fontspec_fontfeat_sl_clist {#1}
2403 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {BoldSlantedFeatures
}
2405 \clist_put_right:Nn
\l__fontspec_fontfeat_bfsl_clist {#1}
2407 \__fontspec_keys_define_code:nnn
{fontspec
} {SmallCapsFeatures
}
2409 \bool_if:NF
\l__fontspec_firsttime_bool
2411 \clist_put_right:Nn
\l__fontspec_fontfeat_sc_clist {#1}
2414 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {SizeFeatures
}
2416 \clist_set:Nn
\l__fontspec_sizefeat_clist {#1}
2417 \clist_put_right:Nn
\l__fontspec_fontfeat_up_clist { SizeFeatures =
{#1} }
2419 \__fontspec_keys_define_code:nnn
{fontspec-preparse-nested
} {SizeFeatures
}
2421 \clist_set:Nn
\l__fontspec_sizefeat_clist {#1}
2422 \tl_if_empty:NT
\l__fontspec_this_font_tl
2423 { \tl_set:Nn
\l__fontspec_this_font_tl { --
} } % needs to be non-empty as a flag
2425 \__fontspec_keys_define_code:nnn
{fontspec-preparse-nested
} {Font
}
2427 \tl_set:Nn
\l__fontspec_this_font_tl {#1}
2429 \__fontspec_keys_define_code:nnn
{fontspec
} {SizeFeatures
}
2433 \__fontspec_keys_define_code:nnn
{fontspec
} {Font
}
2437 \__fontspec_keys_define_code:nnn
{fontspec-sizing
} {Size
}
2439 \tl_set:Nn
\l__fontspec_size_tl {#1}
2441 \__fontspec_keys_define_code:nnn
{fontspec-sizing
} {Font
}
2443 \fontspec_complete_fontname:Nn
\l__fontspec_sizedfont_tl {#1}
2445 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} {UprightFont
} {}
2446 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} {ItalicFont
} {}
2447 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} {SlantedFont
} {}
2448 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} {BoldFont
} {}
2449 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} {BoldItalicFont
} {}
2450 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} {BoldSlantedFont
} {}
2451 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {NFSSEncoding
}
2453 \tl_gset:Nx
\g__fontspec_nfss_enc_tl { #1 }
2455 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {NFSSFamily
}
2457 \tl_set:Nx
\l__fontspec_nfss_fam_tl { #1 }
2459 \__fontspec_keys_define_code:nnn
{fontspec-preparse
} {FontFace
}
2461 \tl_clear:N
\l__fontspec_this_font_tl
2462 \clist_set:No
\l__fontspec_arg_clist { \use_iii:nnn
#1 }
2463 \clist_set_eq:NN
\l__fontspec_this_feat_clist \l__fontspec_arg_clist
2464 \int_compare:nT
{ \clist_count:N
\l__fontspec_arg_clist =
1 }
2466 \tl_if_in:NnF
\l__fontspec_arg_clist {=
}
2468 \tl_set_eq:NN
\l__fontspec_this_font_tl \l__fontspec_arg_clist
2469 \tl_clear:N
\l__fontspec_this_feat_clist
2473 \__fontspec_add_nfssfont:nnnn
2474 {\use_i:nnn
#1} {\use_ii:nnn
#1} {\l__fontspec_this_font_tl} {\l__fontspec_this_feat_clist}
2476 \__fontspec_keys_define_code:nnn
{fontspec
} {Scale
}
2480 {MatchLowercase
} { \__fontspec_calc_scale:n
{5} }
2481 {MatchUppercase
} { \__fontspec_calc_scale:n
{8} }
2483 { \tl_set:Nx
\l__fontspec_scale_tl {#1} }
2485 \__fontspec_keys_define_code:nnn
{fontspec
} {ScaleAgain
}
2487 \tl_if_empty:NT
\l__fontspec_scale_tl { \tl_set:Nn
\l__fontspec_scale_tl {1} }
2488 \tl_set:Nx
\l__fontspec_scale_tl { \fp_eval:n
{ #1 *
\l__fontspec_scale_tl } }
2489 \__fontspec_info:n
{set-scale
}
2491 \cs_new:Nn
\__fontspec_calc_scale:n
2495 \fontencoding { \encodingdefault }
2496 \fontfamily { \familydefault }
2499 \__fontspec_set_font_dimen:NnN
\l__fontspec_tmpa_dim {#1} \font
2500 \__fontspec_set_font_dimen:NnN
\l__fontspec_tmpb_dim {#1} \l__fontspec_fontface_cs_tl
2502 \tl_set:Nx
\l__fontspec_scale_tl
2504 \fp_eval:n
{ \dim_to_fp:n
{\l__fontspec_tmpa_dim} /
2505 \dim_to_fp:n
{\l__fontspec_tmpb_dim} }
2508 \__fontspec_info:n
{set-scale
}
2511 \tl_set:Nx
\l__fontspec_scale_tl { \l__fontspec_scale_tl }
2513 \cs_new:Nn
\__fontspec_set_font_dimen:NnN
2515 \dim_set:Nn
#1 { \fontdimen #2 #3 }
2516 \dim_compare:nNnT
#1 =
{0pt
}
2520 \str_if_eq:nnTF
{#3} {\font} \rmfamily #3
2524 {8} {X
} % cap-height
2525 } {?
} % "else" clause; never reached.
2529 \__fontspec_keys_define_code:nnn
{fontspec
} {WordSpace
}
2531 \bool_if:NF
\l__fontspec_firsttime_bool
2532 { \_fontspec_parse_wordspace:w
#1,,,
\q_stop }
2534 \__fontspec_aff_error:n
{WordSpace
}
2535 \cs_set:Npn
\_fontspec_parse_wordspace:w
#1,
#2,
#3,
#4 \q_stop
2537 \tl_if_empty:nTF
{#4}
2539 \tl_set:Nn
\l__fontspec_wordspace_adjust_tl
2541 \fontdimen 2 \font =
#1 \fontdimen 2 \font
2542 \fontdimen 3 \font =
#1 \fontdimen 3 \font
2543 \fontdimen 4 \font =
#1 \fontdimen 4 \font
2547 \tl_set:Nn
\l__fontspec_wordspace_adjust_tl
2549 \fontdimen 2 \font =
#1 \fontdimen 2 \font
2550 \fontdimen 3 \font =
#2 \fontdimen 3 \font
2551 \fontdimen 4 \font =
#3 \fontdimen 4 \font
2555 \__fontspec_keys_define_code:nnn
{fontspec
} {PunctuationSpace
}
2557 \str_case_e:nnF
{#1}
2561 \tl_set:Nn
\l__fontspec_punctspace_adjust_tl
2562 { \fontdimen 7 \font =
0 \fontdimen 2 \font }
2566 \tl_set:Nn
\l__fontspec_punctspace_adjust_tl
2567 { \fontdimen 7 \font =
1 \fontdimen 2 \font }
2571 \tl_set:Nn
\l__fontspec_punctspace_adjust_tl
2572 { \fontdimen 7 \font =
#1 \fontdimen 7 \font }
2575 \__fontspec_aff_error:n
{PunctuationSpace
}
2576 \__fontspec_keys_define_code:nnn
{fontspec
} {FontAdjustment
}
2578 \tl_put_right:Nx
\l__fontspec_postadjust_tl {#1}
2580 \__fontspec_keys_define_code:nnn
{fontspec
} {LetterSpace
}
2582 \__fontspec_update_featstr:n
{letterspace=
#1}
2584 \__fontspec_keys_define_code:nnn
{fontspec
} {HyphenChar
}
2586 \str_if_eq:nnTF
{#1} {None
}
2588 \tl_put_right:Nn
\l__fontspec_postadjust_tl
2589 { \__fontspec_primitive_font_set_hyphenchar:Nn
\font {-
1} }
2593 \tl_if_single:nTF
{#1}
2594 { \tl_set:Nn
\l__fontspec_hyphenchar_tl {`
#1} }
2595 { \tl_set:Nn
\l__fontspec_hyphenchar_tl { #1} }
2597 \exp_args:No
\__fontspec_primitive_font_glyph_if_exist:NnTF
\l__fontspec_fontface_cs_tl {\l__fontspec_hyphenchar_tl}
2599 \tl_put_right:Nn
\l__fontspec_postadjust_tl
2600 { \__fontspec_primitive_font_set_hyphenchar:Nn
\font { \l__fontspec_hyphenchar_tl } }
2602 { \__fontspec_error:nxx
{no-glyph
}{\l_fontspec_fontname_tl}{#1} }
2606 \__fontspec_aff_error:n
{HyphenChar
}
2607 \__fontspec_keys_define_code:nnn
{fontspec
} {Color
}
2609 \cs_if_exist:cTF
{ \token_to_str:N
\color@
#1 }
2611 \convertcolorspec{named
}{#1}{HTML
}\l__fontspec_hexcol_tl
2614 \int_compare:nTF
{ \tl_count:n
{#1} ==
6 }
2615 { \tl_set:Nn
\l__fontspec_hexcol_tl {#1} }
2617 \int_compare:nTF
{ \tl_count:n
{#1} ==
8 }
2618 { \fontspec_parse_colour:viii
#1 }
2620 \bool_if:NF
\l__fontspec_firsttime_bool
2621 { \__fontspec_warning:nx
{bad-colour
} {#1} }
2626 \cs_set:Npn
\fontspec_parse_colour:viii
#1#2#3#4#5#6#7#8
2628 \tl_set:Nn
\l__fontspec_hexcol_tl {#1#2#3#4#5#6}
2629 \tl_if_eq:NNF
\l__fontspec_opacity_tl \c__fontspec_opacity_tl
2631 \bool_if:NF
\l__fontspec_firsttime_bool
2632 { \__fontspec_warning:nx
{opa-twice-col
} {#7#8} }
2634 \tl_set:Nn
\l__fontspec_opacity_tl {#7#8}
2636 \aliasfontfeature{Color
}{Colour
}
2637 \__fontspec_keys_define_code:nnn
{fontspec
} {Opacity
}
2639 \int_set:Nn
\l__fontspec_tmp_int {255}
2640 \__fontspec_int_mult_truncate:Nn
\l__fontspec_tmp_int { #1 }
2641 \tl_if_eq:NNF
\l__fontspec_opacity_tl \c__fontspec_opacity_tl
2643 \bool_if:NF
\l__fontspec_firsttime_bool
2644 { \__fontspec_warning:nx
{opa-twice
} {#1} }
2646 \tl_set:Nx
\l__fontspec_opacity_tl
2648 \int_compare:nT
{ \l__fontspec_tmp_int <= "F
} {0} % zero pad
2649 \int_to_hex:n
{ \l__fontspec_tmp_int }
2652 \__fontspec_keys_define_code:nnn
{fontspec-aat
} {Mapping
}
2654 \tl_set:Nn
\l__fontspec_mapping_tl { #1 }
2656 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} {Mapping
}
2658 \tl_set:Nn
\l__fontspec_mapping_tl { #1 }
2660 \__fontspec_keys_define_code:nnn
{fontspec
} {Weight
}
2662 \__fontspec_update_featstr:n
{weight=
#1}
2664 \__fontspec_keys_define_code:nnn
{fontspec
} {Width
}
2666 \__fontspec_update_featstr:n
{width=
#1}
2668 \__fontspec_keys_define_code:nnn
{fontspec
} {OpticalSize
}
2670 \bool_if:NTF
\l__fontspec_ot_bool
2672 \tl_set:Nn
\l__fontspec_optical_size_tl {/ S =
#1}
2675 \bool_if:NT
\l__fontspec_mm_bool
2677 \__fontspec_update_featstr:n
{ optical size =
#1 }
2680 \bool_if:nT
{ !
\l__fontspec_ot_bool && !
\l__fontspec_mm_bool }
2682 \bool_if:NT
\l__fontspec_firsttime_bool
2683 { \__fontspec_warning:nx
{no-opticals
} {\l_fontspec_fontname_tl} }
2686 \keys_define:nn
{fontspec
}
2690 \__fontspec_update_featstr:n
{slant=
#1}
2692 FakeSlant .default:n =
{0.2}
2694 \keys_define:nn
{fontspec
}
2696 FakeStretch .code:n =
2698 \__fontspec_update_featstr:n
{extend=
#1}
2700 FakeStretch .default:n =
{1.2}
2702 \keys_define:nn
{fontspec
}
2706 \__fontspec_update_featstr:n
{embolden=
#1}
2708 FakeBold .default:n =
{1.5}
2710 \keys_define:nn
{fontspec
}
2712 AutoFakeSlant .code:n =
2714 \bool_if:NT
\l__fontspec_firsttime_bool
2716 \tl_set:Nn
\l__fontspec_fake_slant_tl {#1}
2717 \clist_put_right:Nn
\l__fontspec_fontfeat_it_clist {FakeSlant=
#1}
2718 \tl_set_eq:NN
\l__fontspec_fontname_it_tl \l_fontspec_fontname_tl
2719 \bool_set_false:N
\l__fontspec_noit_bool
2721 \tl_if_empty:NF
\l__fontspec_fake_embolden_tl
2723 \clist_put_right:Nx
\l__fontspec_fontfeat_bfit_clist
2724 {FakeBold=
\l__fontspec_fake_embolden_tl}
2725 \clist_put_right:Nx
\l__fontspec_fontfeat_bfit_clist {FakeSlant=
#1}
2726 \tl_set_eq:NN
\l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl
2730 AutoFakeSlant .default:n =
{0.2}
2732 \keys_define:nn
{fontspec
}
2734 AutoFakeBold .code:n =
2736 \bool_if:NT
\l__fontspec_firsttime_bool
2738 \tl_set:Nn
\l__fontspec_fake_embolden_tl {#1}
2739 \clist_put_right:Nn
\l__fontspec_fontfeat_bf_clist {FakeBold=
#1}
2740 \tl_set_eq:NN
\l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl
2741 \bool_set_false:N
\l__fontspec_nobf_bool
2743 \tl_if_empty:NF
\l__fontspec_fake_slant_tl
2745 \clist_put_right:Nx
\l__fontspec_fontfeat_bfit_clist
2746 {FakeSlant=
\l__fontspec_fake_slant_tl}
2747 \clist_put_right:Nx
\l__fontspec_fontfeat_bfit_clist {FakeBold=
#1}
2748 \tl_set_eq:NN
\l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl
2752 AutoFakeBold .default:n =
{1.5}
2754 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} {RawFeature
}
2756 \__fontspec_update_featstr:n
{#1}
2758 \__fontspec_keys_define_code:nnn
{fontspec-aat
} {RawFeature
}
2760 \__fontspec_update_featstr:n
{#1}
2763 %%^^A%% fontspec-code-feat-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec>
2765 \__fontspec_feat_prop_add:nn
{salt
} { Alternate\,=\,$N$
}
2766 \__fontspec_feat_prop_add:nn
{nalt
} { Annotation\,=\,$N$
}
2767 \__fontspec_feat_prop_add:nn
{ornm
} { Ornament\,=\,$N$
}
2768 \__fontspec_feat_prop_add:nn
{cvNN
} { CharacterVariant\,=\,$N$:$M$
}
2769 \__fontspec_feat_prop_add:nn
{ssNN
} { StylisticSet\,=\,$N$
}
2770 \__fontspec_define_opentype_feature_group:n
{Ligatures
}
2771 \__fontspec_define_opentype_feature:nnnnn
{Ligatures
} {ResetAll
} {} {}
2773 +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig,
2776 \__fontspec_define_opentype_onoffreset:nnnnn
{Ligatures
} {Required
} {rlig
} {rlig
} {}
2777 \__fontspec_define_opentype_onoffreset:nnnnn
{Ligatures
} {Common
} {liga
} {liga
} {}
2778 \__fontspec_define_opentype_onoffreset:nnnnn
{Ligatures
} {Rare
} {dlig
} {dlig
} {}
2779 \__fontspec_define_opentype_onoffreset:nnnnn
{Ligatures
} {Discretionary
} {dlig
} {dlig
} {}
2780 \__fontspec_define_opentype_onoffreset:nnnnn
{Ligatures
} {Contextual
} {clig
} {clig
} {}
2781 \__fontspec_define_opentype_onoffreset:nnnnn
{Ligatures
} {Historic
} {hlig
} {hlig
} {}
2782 \keys_define:nn
{fontspec-opentype
}
2784 Ligatures / TeX .code:n =
{ \tl_set:Nn
\l__fontspec_mapping_tl {tex-text
} },
2785 Ligatures / TeXOff .code:n =
{ \tl_clear:N
\l__fontspec_mapping_tl },
2786 Ligatures / TeXReset .code:n =
{ \tl_clear:N
\l__fontspec_mapping_tl },
2788 \__fontspec_define_opentype_feature_group:n
{Letters
}
2789 \__fontspec_define_opentype_feature:nnnnn
{Letters
} {ResetAll
} {} {}
2791 +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand,
2792 -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand
2794 \__fontspec_define_opentype_onoffreset:nnnnn
{Letters
} {Uppercase
} {case
} {case
} {}
2795 \__fontspec_define_opentype_onoffreset:nnnnn
{Letters
} {SmallCaps
} {smcp
} {smcp
} {+pcap,+unic
}
2796 \__fontspec_define_opentype_onoffreset:nnnnn
{Letters
} {PetiteCaps
} {pcap
} {pcap
} {+smcp,+unic
}
2797 \__fontspec_define_opentype_onoffreset:nnnnn
{Letters
} {UppercaseSmallCaps
} {c2sc
} {c2sc
} {+c2pc,+unic
}
2798 \__fontspec_define_opentype_onoffreset:nnnnn
{Letters
} {UppercasePetiteCaps
} {c2pc
} {c2pc
} {+c2sc,+unic
}
2799 \__fontspec_define_opentype_onoffreset:nnnnn
{Letters
} {Unicase
} {unic
} {unic
} {}
2800 \__fontspec_define_opentype_onoffreset:nnnnn
{Letters
} {Random
} {rand
} {rand
} {}
2801 \__fontspec_define_opentype_feature_group:n
{Numbers
}
2802 \__fontspec_define_opentype_feature:nnnnn
{Numbers
} {ResetAll
} {} {}
2811 \__fontspec_define_opentype_onoffreset:nnnnn
{Numbers
} {Monospaced
} {tnum
} {tnum
} {+pnum,-pnum
}
2812 \__fontspec_define_opentype_onoffreset:nnnnn
{Numbers
} {Proportional
} {pnum
} {pnum
} {+tnum,-tnum
}
2813 \__fontspec_define_opentype_onoffreset:nnnnn
{Numbers
} {Lowercase
} {onum
} {onum
} {+lnum,-lnum
}
2814 \__fontspec_define_opentype_onoffreset:nnnnn
{Numbers
} {Uppercase
} {lnum
} {lnum
} {+onum,-onum
}
2815 \__fontspec_define_opentype_onoffreset:nnnnn
{Numbers
} {SlashedZero
} {zero
} {zero
} {}
2816 \aliasfontfeatureoption {Numbers
} {Monospaced
} {Tabular
}
2817 \aliasfontfeatureoption {Numbers
} {Lowercase
} {OldStyle
}
2818 \aliasfontfeatureoption {Numbers
} {Uppercase
} {Lining
}
2819 \__fontspec_define_opentype_feature_group:n
{VerticalPosition
}
2820 \__fontspec_define_opentype_feature:nnnnn
{VerticalPosition
} {ResetAll
} {} {}
2829 \__fontspec_define_opentype_onoffreset:nnnnn
{VerticalPosition
} {Superior
} {sups
} {sups
} {+subs,+ordn,+numr,+dnom,+sinf
}
2830 \__fontspec_define_opentype_onoffreset:nnnnn
{VerticalPosition
} {Inferior
} {subs
} {subs
} {+sups,+ordn,+numr,+dnom,+sinf
}
2831 \__fontspec_define_opentype_onoffreset:nnnnn
{VerticalPosition
} {Ordinal
} {ordn
} {ordn
} {+sups,+subs,+numr,+dnom,+sinf
}
2832 \__fontspec_define_opentype_onoffreset:nnnnn
{VerticalPosition
} {Numerator
} {numr
} {numr
} {+sups,+subs,+ordn,+dnom,+sinf
}
2833 \__fontspec_define_opentype_onoffreset:nnnnn
{VerticalPosition
} {Denominator
} {dnom
} {dnom
} {+sups,+subs,+ordn,+numr,+sinf
}
2834 \__fontspec_define_opentype_onoffreset:nnnnn
{VerticalPosition
} {ScientificInferior
} {sinf
} {sinf
} {+sups,+subs,+ordn,+numr,+dnom
}
2835 \__fontspec_define_opentype_feature_group:n
{Contextuals
}
2836 \__fontspec_define_opentype_feature:nnnnn
{Contextuals
} {ResetAll
} {} {}
2845 \__fontspec_define_opentype_onoffreset:nnnnn
{Contextuals
} {Swash
} {cswh
} {cswh
} {}
2846 \__fontspec_define_opentype_onoffreset:nnnnn
{Contextuals
} {Alternate
} {calt
} {calt
} {}
2847 \__fontspec_define_opentype_onoffreset:nnnnn
{Contextuals
} {WordInitial
} {init
} {init
} {}
2848 \__fontspec_define_opentype_onoffreset:nnnnn
{Contextuals
} {WordFinal
} {fina
} {fina
} {}
2849 \__fontspec_define_opentype_onoffreset:nnnnn
{Contextuals
} {LineFinal
} {falt
} {falt
} {}
2850 \__fontspec_define_opentype_onoffreset:nnnnn
{Contextuals
} {Inner
} {medi
} {medi
} {}
2851 \__fontspec_define_opentype_feature_group:n
{Diacritics
}
2852 \__fontspec_define_opentype_feature:nnnnn
{Diacritics
} {ResetAll
} {} {}
2859 \__fontspec_define_opentype_onoffreset:nnnnn
{Diacritics
} {MarkToBase
} {mark
} {mark
} {}
2860 \__fontspec_define_opentype_onoffreset:nnnnn
{Diacritics
} {MarkToMark
} {mkmk
} {mkmk
} {}
2861 \__fontspec_define_opentype_onoffreset:nnnnn
{Diacritics
} {AboveBase
} {abvm
} {abvm
} {}
2862 \__fontspec_define_opentype_onoffreset:nnnnn
{Diacritics
} {BelowBase
} {blwm
} {blwm
} {}
2863 \__fontspec_define_opentype_feature_group:n
{Kerning
}
2864 \__fontspec_define_opentype_feature:nnnnn
{Kerning
} {ResetAll
} {} {}
2869 \__fontspec_define_opentype_onoffreset:nnnnn
{Kerning
} {Uppercase
} {cpsp
} {cpsp
} {}
2870 \__fontspec_define_opentype_feature:nnnnn
{Kerning
} {On
} {kern
} {+kern
} {-kern
}
2871 \__fontspec_define_opentype_feature:nnnnn
{Kerning
} {Off
} {kern
} {-kern
} {+kern
}
2872 \__fontspec_define_opentype_feature:nnnnn
{Kerning
} {Reset
} {} {} {+kern,-kern
}
2873 \__fontspec_define_opentype_feature_group:n
{Fractions
}
2874 \__fontspec_define_opentype_feature:nnnnn
{Fractions
} {ResetAll
} {} {}
2879 \__fontspec_define_opentype_feature:nnnnn
{Fractions
} {On
} {frac
} {+frac
} {}
2880 \__fontspec_define_opentype_feature:nnnnn
{Fractions
} {Off
} {frac
} {-frac
} {}
2881 \__fontspec_define_opentype_feature:nnnnn
{Fractions
} {Reset
} {} {} {+frac,-frac
}
2882 \__fontspec_define_opentype_onoffreset:nnnnn
{Fractions
} {Alternate
} {afrc
} {afrc
} {-frac
}
2883 \__fontspec_define_opentype_feature_group:n
{LocalForms
}
2884 \__fontspec_define_opentype_feature:nnnnn
{LocalForms
} {On
} {locl
} {+locl
} {}
2885 \__fontspec_define_opentype_feature:nnnnn
{LocalForms
} {Off
} {locl
} {-locl
} {}
2886 \__fontspec_define_opentype_feature:nnnnn
{LocalForms
} {Reset
} {} {} {+locl,-locl
}
2888 \__fontspec_define_opentype_feature_group:n
{Style
}
2889 \__fontspec_define_opentype_feature:nnnnn
{Style
} {ResetAll
} {} {}
2902 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {Alternate
} {salt
} {salt
} {}
2903 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {Italic
} {ital
} {ital
} {}
2904 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {Ruby
} {ruby
} {ruby
} {}
2905 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {Swash
} {swsh
} {swsh
} {}
2906 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {Cursive
} {swsh
} {curs
} {}
2907 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {Historic
} {hist
} {hist
} {}
2908 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {Titling
} {titl
} {titl
} {}
2909 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {TitlingCaps
} {titl
} {titl
} {} % backwards compat
2910 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {HorizontalKana
} {hkna
} {hkna
} {+vkna,+pkna
}
2911 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {VerticalKana
} {vkna
} {vkna
} {+hkna,+pkna
}
2912 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {ProportionalKana
} {pkna
} {pkna
} {+vkna,+hkna
}
2913 \__fontspec_define_opentype_feature:nnnnn
{Style
} {MathScript
} {ssty
} {+ssty=
0} {+ssty=
1}
2914 \__fontspec_define_opentype_feature:nnnnn
{Style
} {MathScriptScript
} {ssty
} {+ssty=
1} {+ssty=
0}
2915 \__fontspec_define_opentype_onoffreset:nnnnn
{Style
} {Uppercase
} {case
} {case
} {}
2916 \__fontspec_define_opentype_feature_group:n
{CJKShape
}
2917 \__fontspec_define_opentype_feature:nnnnn
{CJKShape
} {ResetAll
} {} {}
2928 \__fontspec_define_opentype_onoffreset:nnnnn
{CJKShape
} {Traditional
} {trad
} {trad
} {+smpl,+jp78,+jp83,+jp90,+jp04,+expt,+nlck
}
2929 \__fontspec_define_opentype_onoffreset:nnnnn
{CJKShape
} {Simplified
} {smpl
} {smpl
} {+trad,+jp78,+jp83,+jp90,+jp04,+expt,+nlck
}
2930 \__fontspec_define_opentype_onoffreset:nnnnn
{CJKShape
} {JIS1978
} {jp78
} {jp78
} {+trad,+smpl,+jp83,+jp90,+jp04,+expt,+nlck
}
2931 \__fontspec_define_opentype_onoffreset:nnnnn
{CJKShape
} {JIS1983
} {jp83
} {jp83
} {+trad,+smpl,+jp78,+jp90,+jp04,+expt,+nlck
}
2932 \__fontspec_define_opentype_onoffreset:nnnnn
{CJKShape
} {JIS1990
} {jp90
} {jp90
} {+trad,+smpl,+jp78,+jp83,+jp04,+expt,+nlck
}
2933 \__fontspec_define_opentype_onoffreset:nnnnn
{CJKShape
} {JIS2004
} {jp04
} {jp04
} {+trad,+smpl,+jp78,+jp83,+jp90,+expt,+nlck
}
2934 \__fontspec_define_opentype_onoffreset:nnnnn
{CJKShape
} {Expert
} {expt
} {expt
} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+nlck
}
2935 \__fontspec_define_opentype_onoffreset:nnnnn
{CJKShape
} {NLC
} {nlck
} {nlck
} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+expt
}
2936 \__fontspec_define_opentype_feature_group:n
{CharacterWidth
}
2937 \__fontspec_define_opentype_feature:nnnnn
{CharacterWidth
} {ResetAll
} {} {}
2947 \__fontspec_define_opentype_onoffreset:nnnnn
{CharacterWidth
} {Proportional
} {pwid
} {pwid
} {+fwid,+hwid,+twid,+qwid,+palt,+halt
}
2948 \__fontspec_define_opentype_onoffreset:nnnnn
{CharacterWidth
} {Full
} {fwid
} {fwid
} {+pwid,+hwid,+twid,+qwid,+palt,+halt
}
2949 \__fontspec_define_opentype_onoffreset:nnnnn
{CharacterWidth
} {Half
} {hwid
} {hwid
} {+pwid,+fwid,+twid,+qwid,+palt,+halt
}
2950 \__fontspec_define_opentype_onoffreset:nnnnn
{CharacterWidth
} {Third
} {twid
} {twid
} {+pwid,+fwid,+hwid,+qwid,+palt,+halt
}
2951 \__fontspec_define_opentype_onoffreset:nnnnn
{CharacterWidth
} {Quarter
} {qwid
} {qwid
} {+pwid,+fwid,+hwid,+twid,+palt,+halt
}
2952 \__fontspec_define_opentype_onoffreset:nnnnn
{CharacterWidth
} {AlternateProportional
} {palt
} {palt
} {+pwid,+fwid,+hwid,+twid,+qwid,+halt
}
2953 \__fontspec_define_opentype_onoffreset:nnnnn
{CharacterWidth
} {AlternateHalf
} {halt
} {halt
} {+pwid,+fwid,+hwid,+twid,+qwid,+palt
}
2954 \__fontspec_define_opentype_feature_group:n
{Vertical
}
2955 \__fontspec_define_opentype_onoffreset:nnnnn
{Vertical
} {RotatedGlyphs
} {vrt2
} {vrt2
} {+vrtr,+vert
}
2956 \__fontspec_define_opentype_onoffreset:nnnnn
{Vertical
} {AlternatesForRotation
} {vrtr
} {vrtr
} {+vrt2
}
2957 \__fontspec_define_opentype_onoffreset:nnnnn
{Vertical
} {Alternates
} {vert
} {vert
} {+vrt2
}
2958 \__fontspec_define_opentype_onoffreset:nnnnn
{Vertical
} {KanaAlternates
} {vkna
} {vkna
} {+hkna
}
2959 \__fontspec_define_opentype_onoffreset:nnnnn
{Vertical
} {Kerning
} {vkrn
} {vkrn
} {}
2960 \__fontspec_define_opentype_onoffreset:nnnnn
{Vertical
} {AlternateMetrics
} {valt
} {valt
} {+vhal,+vpal,+kern
}
2961 \__fontspec_define_opentype_onoffreset:nnnnn
{Vertical
} {HalfMetrics
} {vhal
} {vhal
} {+valt,+vpal,+kern
}
2962 \__fontspec_define_opentype_onoffreset:nnnnn
{Vertical
} {ProportionalMetrics
} {vpal
} {vpal
} {+valt,+vhal
}
2963 \__fontspec_define_opentype_feature_group:n
{Alternate
}
2964 \keys_define:nn
{fontspec-opentype
}
2966 Alternate .default:n =
{0} ,
2967 Alternate .groups:n =
{opentype
},
2968 Alternate / unknown .code:n =
2970 \clist_map_inline:nn
{#1}
2971 { \__fontspec_make_OT_feature:nnn
{salt
}{ +salt = #
#1 }{} }
2974 \aliasfontfeature{Alternate
}{StylisticAlternates
}
2975 \__fontspec_define_opentype_feature_group:n
{Variant
}
2976 \keys_define:nn
{fontspec-opentype
}
2978 Variant .default:n =
{0} ,
2979 Variant .groups:n =
{opentype
} ,
2980 Variant / unknown .code:n =
2982 \clist_map_inline:nn
{#1}
2984 \__fontspec_make_OT_feature:xxx
{ ss
\two@digits
{#
#1} } { +ss
\two@digits
{#
#1} } {}
2988 \aliasfontfeature{Variant
}{StylisticSet
}
2989 \__fontspec_define_opentype_feature_group:n
{CharacterVariant
}
2992 \cs_new:Npn
\exp_not:N
\fontspec_parse_cv:w
2993 #
#1 \c_colon_str #
#2 \c_colon_str #
#3 \exp_not:N
\q_nil
2995 \__fontspec_make_OT_feature:xxx
2996 { cv
\exp_not:N
\two@digits
{#
#1} }
2997 { +cv
\exp_not:N
\two@digits
{#
#1} = #
#2 } {}
2999 \keys_define:nn
{fontspec-opentype
}
3001 CharacterVariant / unknown .code:n =
3003 \clist_map_inline:nn
{#
#1}
3005 \exp_not:N
\fontspec_parse_cv:w
3006 ###
#1 \c_colon_str 0 \c_colon_str \exp_not:N
\q_nil
3011 \__fontspec_define_opentype_feature_group:n
{Annotation
}
3012 \keys_define:nn
{fontspec-opentype
}
3014 Annotation .default:n =
{0} ,
3015 Annotation .groups:n =
{opentype
},
3016 Annotation / unknown .code:n =
3018 \__fontspec_make_OT_feature:nnn
{nalt
} {+nalt=
#1} {}
3021 \__fontspec_define_opentype_feature_group:n
{Ornament
}
3022 \keys_define:nn
{fontspec-opentype
}
3024 Ornament .default:n =
{0} ,
3025 Ornament .groups:n =
{opentype
},
3026 Ornament / unknown .code:n =
3028 \__fontspec_make_OT_feature:nnn
{ornm
} { +ornm=
#1 } {}
3031 \keys_define:nn
{fontspec-opentype
}
3034 Script .groups:n =
{opentype
} ,
3036 \cs_new:Nn
\fontspec_new_script:nn
3038 \keys_define:nn
{fontspec-opentype
} { Script /
#1 .code:n =
3040 \bool_set_false:N
\l__fontspec_scriptlang_exist_bool
3041 \clist_map_inline:nn
{#2}
3043 \exp_args:No
\__fontspec_check_script:NnT
\l__fontspec_fontface_cs_tl {###
#1}
3045 \tl_set:Nn
\l__fontspec_script_name_tl {#1}
3046 \tl_set:Nn
\l__fontspec_script_tl {###
#1}
3047 \int_set:Nn
\l__fontspec_script_int {\l__fontspec_strnum_int}
3048 \bool_set_true:N
\l__fontspec_scriptlang_exist_bool
3049 \tl_gset:Nx
\g__fontspec_single_feat_tl { script=###
#1 }
3054 \bool_if:NF
\l__fontspec_scriptlang_exist_bool
3056 \bool_if:nF
{ \str_if_eq_p:ee
{#1} {CustomDefault
} }
3058 \tl_clear:N
\l__fontspec_script_name_tl
3059 \__fontspec_warning:nxx
{no-script
} {\l_fontspec_fontname_tl} {#1}
3064 \str_if_eq_p:ee
{#1} {Default
} ||
3065 \str_if_eq_p:ee
{#1} {Latin
} ||
3066 \str_if_eq_p:ee
{#1} {CustomDefault
}
3069 \keys_set:nn
{fontspec-opentype
} { Script = CustomDefault
}
3075 \keys_define:nn
{fontspec-opentype
}
3078 Language .groups:n =
{opentype
} ,
3080 \cs_new:Nn
\fontspec_new_lang:nn
3082 \keys_define:nn
{fontspec-opentype
} { Language /
#1 .code:n =
3084 \bool_set_false:N
\l__fontspec_scriptlang_exist_bool
3085 \clist_map_inline:nn
{#2}
3087 \exp_args:No
\__fontspec_check_lang:NnTF
\l__fontspec_fontface_cs_tl {###
#1}
3089 \tl_set:Nn
\l__fontspec_lang_tl {###
#1}
3090 \int_set:Nn
\l__fontspec_language_int {\l__fontspec_strnum_int}
3091 \tl_gset:Nx
\g__fontspec_single_feat_tl { language=###
#1 }
3092 \bool_set_true:N
\l__fontspec_scriptlang_exist_bool
3096 \bool_if:NF
\l__fontspec_scriptlang_exist_bool
3098 \__fontspec_warning:nx
{language-not-exist
} {#1}
3099 \keys_set:nn
{fontspec-opentype
} { Language = Default
}
3104 \__fontspec_keys_define_code:nnn
{fontspec-opentype
} { Language / Default
}
3106 \tl_set:Nn
\l__fontspec_lang_tl {dflt
}
3107 \int_zero:N
\l__fontspec_language_int
3108 \tl_gset:Nn
\g__fontspec_single_feat_tl { language=dflt
}
3110 \cs_new:Nn
\__fontspec_ot_compat:nn
3112 \aliasfontfeatureoption {#1} {#2Off
} {No
#2}
3114 \__fontspec_ot_compat:nn
{Ligatures
} {Rare
}
3115 \__fontspec_ot_compat:nn
{Ligatures
} {Required
}
3116 \__fontspec_ot_compat:nn
{Ligatures
} {Common
}
3117 \__fontspec_ot_compat:nn
{Ligatures
} {Discretionary
}
3118 \__fontspec_ot_compat:nn
{Ligatures
} {Contextual
}
3119 \__fontspec_ot_compat:nn
{Ligatures
} {Historic
}
3120 \__fontspec_ot_compat:nn
{Numbers
} {SlashedZero
}
3121 \__fontspec_ot_compat:nn
{Contextuals
} {Swash
}
3122 \__fontspec_ot_compat:nn
{Contextuals
} {Alternate
}
3123 \__fontspec_ot_compat:nn
{Contextuals
} {WordInitial
}
3124 \__fontspec_ot_compat:nn
{Contextuals
} {WordFinal
}
3125 \__fontspec_ot_compat:nn
{Contextuals
} {LineFinal
}
3126 \__fontspec_ot_compat:nn
{Contextuals
} {Inner
}
3127 \__fontspec_ot_compat:nn
{Diacritics
} {MarkToBase
}
3128 \__fontspec_ot_compat:nn
{Diacritics
} {MarkToMark
}
3129 \__fontspec_ot_compat:nn
{Diacritics
} {AboveBase
}
3130 \__fontspec_ot_compat:nn
{Diacritics
} {BelowBase
}
3132 %%^^A%% fontspec-code-scripts.dtx -- part of FONTSPEC <wspr.io/fontspec>
3134 \newfontscript{Adlam
}{adlm
}
3135 \newfontscript{Ahom
}{ahom
}
3136 \newfontscript{Anatolian~Hieroglyphs
}{hluw
}
3137 \newfontscript{Arabic
}{arab
}
3138 \newfontscript{Armenian
}{armn
}
3139 \newfontscript{Avestan
}{avst
}
3140 \newfontscript{Balinese
}{bali
}
3141 \newfontscript{Bamum
}{bamu
}
3142 \newfontscript{Bassa~Vah
}{bass
}
3143 \newfontscript{Batak
}{batk
}
3144 \newfontscript{Bengali
}{bng2,beng
}
3145 \newfontscript{Bhaiksuki
}{bhks
}
3146 \newfontscript{Bopomofo
}{bopo
}
3147 \newfontscript{Brahmi
}{brah
}
3148 \newfontscript{Braille
}{brai
}
3149 \newfontscript{Buginese
}{bugi
}
3150 \newfontscript{Buhid
}{buhd
}
3151 \newfontscript{Byzantine~Music
}{byzm
}
3152 \newfontscript{Canadian~Syllabics
}{cans
}
3153 \newfontscript{Carian
}{cari
}
3154 \newfontscript{Caucasian~Albanian
}{aghb
}
3155 \newfontscript{Chakma
}{cakm
}
3156 \newfontscript{Cham
}{cham
}
3157 \newfontscript{Cherokee
}{cher
}
3158 \newfontscript{Chorasmian
}{chrs
}
3159 \newfontscript{CJK~Ideographic
}{hani
}
3160 \newfontscript{Coptic
}{copt
}
3161 \newfontscript{Cypriot~Syllabary
}{cprt
}
3162 \newfontscript{Cyrillic
}{cyrl
}
3163 \newfontscript{Default
}{DFLT
}
3164 \newfontscript{CustomDefault
}{latn,DFLT
}
3165 \newfontscript{Deseret
}{dsrt
}
3166 \newfontscript{Devanagari
}{dev2,deva
}
3167 \newfontscript{Dives~Akuru
}{diak
}
3168 \newfontscript{Dogra
}{dogr
}
3169 \newfontscript{Duployan
}{dupl
}
3170 \newfontscript{Egyptian~Hieroglyphs
}{egyp
}
3171 \newfontscript{Elbasan
}{elba
}
3172 \newfontscript{Elymaic
}{elym
}
3173 \newfontscript{Ethiopic
}{ethi
}
3174 \newfontscript{Georgian
}{geor
}
3175 \newfontscript{Glagolitic
}{glag
}
3176 \newfontscript{Gothic
}{goth
}
3177 \newfontscript{Grantha
}{gran
}
3178 \newfontscript{Greek
}{grek
}
3179 \newfontscript{Gujarati
}{gjr2,gujr
}
3180 \newfontscript{Gunjala~Gondi
}{gong
}
3181 \newfontscript{Gurmukhi
}{gur2,guru
}
3182 \newfontscript{Hangul~Jamo
}{jamo
}
3183 \newfontscript{Hangul
}{hang
}
3184 \newfontscript{Hanifi~Rohingya
}{rohg
}
3185 \newfontscript{Hanunoo
}{hano
}
3186 \newfontscript{Hatran
}{hatr
}
3187 \newfontscript{Hebrew
}{hebr
}
3188 \newfontscript{Hiragana~and~Katakana
}{kana
}
3189 \newfontscript{Imperial~Aramaic
}{armi
}
3190 \newfontscript{Inscriptional~Pahlavi
}{phli
}
3191 \newfontscript{Inscriptional~Parthian
}{prti
}
3192 \newfontscript{Javanese
}{java
}
3193 \newfontscript{Kaithi
}{kthi
}
3194 \newfontscript{Kannada
}{knd2,knda
}
3195 \newfontscript{Kayah~Li
}{kali
}
3196 \newfontscript{Kharosthi
}{khar
}
3197 \newfontscript{Khitan~Small~Script
}{kits
}
3198 \newfontscript{Khmer
}{khmr
}
3199 \newfontscript{Khojki
}{khoj
}
3200 \newfontscript{Khudawadi
}{sind
}
3201 \newfontscript{Lao
}{lao~
}
3202 \newfontscript{Latin
}{latn
}
3203 \newfontscript{Lepcha
}{lepc
}
3204 \newfontscript{Limbu
}{limb
}
3205 \newfontscript{Linear~A
}{lina
}
3206 \newfontscript{Linear~B
}{linb
}
3207 \newfontscript{Lisu
}{lisu
}
3208 \newfontscript{Lycian
}{lyci
}
3209 \newfontscript{Lydian
}{lydi
}
3210 \newfontscript{Mahajani
}{mahj
}
3211 \newfontscript{Makasar
}{maka
}
3212 \newfontscript{Malayalam
}{mlm2,mlym
}
3213 \newfontscript{Mandaic
}{mand
}
3214 \newfontscript{Manichaean
}{mani
}
3215 \newfontscript{Marchen
}{marc
}
3216 \newfontscript{Masaram Gondi
}{gonm
}
3217 \newfontscript{Math
}{math
}
3218 \newfontscript{Medefaidrin
}{medf
}
3219 \newfontscript{Meitei~Mayek
}{mtei
}
3220 \newfontscript{Mende~Kikakui
}{mend
}
3221 \newfontscript{Meroitic~Cursive
}{merc
}
3222 \newfontscript{Meroitic~Hieroglyphs
}{mero
}
3223 \newfontscript{Miao
}{plrd
}
3224 \newfontscript{Modi
}{modi
}
3225 \newfontscript{Mongolian
}{mong
}
3226 \newfontscript{Mro
}{mroo
}
3227 \newfontscript{Multani
}{mult
}
3228 \newfontscript{Musical~Symbols
}{musc
}
3229 \newfontscript{Myanmar
}{mym2,mymr
}
3230 \newfontscript{N'Ko
}{nko~
}
3231 \newfontscript{Nabataean
}{nbat
}
3232 \newfontscript{Nandinagari
}{nand
}
3233 \newfontscript{Newa
}{newa
}
3234 \newfontscript{Nushu
}{nshu
}
3235 \newfontscript{Nyiakeng~Puachue~Hmong
}{hmnp
}
3236 \newfontscript{Odia
}{ory2,orya
}
3237 \newfontscript{Ogham
}{ogam
}
3238 \newfontscript{Ol~Chiki
}{olck
}
3239 \newfontscript{Old~Italic
}{ital
}
3240 \newfontscript{Old~Hungarian
}{hung
}
3241 \newfontscript{Old~North~Arabian
}{narb
}
3242 \newfontscript{Old~Permic
}{perm
}
3243 \newfontscript{Old~Persian~Cuneiform
}{xpeo
}
3244 \newfontscript{Old~Sogdian
}{sogo
}
3245 \newfontscript{Old~South~Arabian
}{sarb
}
3246 \newfontscript{Old~Turkic
}{orkh
}
3247 \newfontscript{Osage
}{osge
}
3248 \newfontscript{Osmanya
}{osma
}
3249 \newfontscript{Pahawh~Hmong
}{hmng
}
3250 \newfontscript{Palmyrene
}{palm
}
3251 \newfontscript{Pau~Cin~Hau
}{pauc
}
3252 \newfontscript{Phags-pa
}{phag
}
3253 \newfontscript{Phoenician
}{phnx
}
3254 \newfontscript{Psalter~Pahlavi
}{phlp
}
3255 \newfontscript{Rejang
}{rjng
}
3256 \newfontscript{Runic
}{runr
}
3257 \newfontscript{Samaritan
}{samr
}
3258 \newfontscript{Saurashtra
}{saur
}
3259 \newfontscript{Sharada
}{shrd
}
3260 \newfontscript{Shavian
}{shaw
}
3261 \newfontscript{Siddham
}{sidd
}
3262 \newfontscript{Sign~Writing
}{sgnw
}
3263 \newfontscript{Sinhala
}{sinh
}
3264 \newfontscript{Sogdian
}{sogd
}
3265 \newfontscript{Sora~Sompeng
}{sora
}
3266 \newfontscript{Sumero-Akkadian~Cuneiform
}{xsux
}
3267 \newfontscript{Sundanese
}{sund
}
3268 \newfontscript{Syloti~Nagri
}{sylo
}
3269 \newfontscript{Syriac
}{syrc
}
3270 \newfontscript{Tagalog
}{tglg
}
3271 \newfontscript{Tagbanwa
}{tagb
}
3272 \newfontscript{Tai~Le
}{tale
}
3273 \newfontscript{Tai~Lu
}{talu
}
3274 \newfontscript{Tai~Tham
}{lana
}
3275 \newfontscript{Tai~Viet
}{tavt
}
3276 \newfontscript{Takri
}{takr
}
3277 \newfontscript{Tamil
}{tml2,taml
}
3278 \newfontscript{Tangut
}{tang
}
3279 \newfontscript{Telugu
}{tel2,telu
}
3280 \newfontscript{Thaana
}{thaa
}
3281 \newfontscript{Thai
}{thai
}
3282 \newfontscript{Tibetan
}{tibt
}
3283 \newfontscript{Tifinagh
}{tfng
}
3284 \newfontscript{Tirhuta
}{tirh
}
3285 \newfontscript{Ugaritic~Cuneiform
}{ugar
}
3286 \newfontscript{Vai
}{vai~
}
3287 \newfontscript{Wancho
}{wcho
}
3288 \newfontscript{Warang~Citi
}{wara
}
3289 \newfontscript{Yezidi
}{yezi
}
3290 \newfontscript{Yi
}{yi~~
}
3291 \newfontscript{Zanabazar~Square
}{zanb
}
3292 \newfontscript{CJK
}{hani
}
3293 \newfontscript{Kana
}{kana
}
3294 \newfontscript{Maths
}{math
}
3295 \newfontscript{N'ko
}{nko~
}
3296 \newfontscript{Oriya
}{ory2,orya
}
3298 %%^^A%% fontspec-code-lang.dtx -- part of FONTSPEC <wspr.io/fontspec>
3300 \newfontlanguage{Abaza
}{ABA
}
3301 \newfontlanguage{Abkhazian
}{ABK
}
3302 \newfontlanguage{Adyghe
}{ADY
}
3303 \newfontlanguage{Afrikaans
}{AFK
}
3304 \newfontlanguage{Afar
}{AFR
}
3305 \newfontlanguage{Agaw
}{AGW
}
3306 \newfontlanguage{Altai
}{ALT
}
3307 \newfontlanguage{Amharic
}{AMH
}
3308 \newfontlanguage{Arabic
}{ARA
}
3309 \newfontlanguage{Aari
}{ARI
}
3310 \newfontlanguage{Arakanese
}{ARK
}
3311 \newfontlanguage{Assamese
}{ASM
}
3312 \newfontlanguage{Athapaskan
}{ATH
}
3313 \newfontlanguage{Avar
}{AVR
}
3314 \newfontlanguage{Awadhi
}{AWA
}
3315 \newfontlanguage{Aymara
}{AYM
}
3316 \newfontlanguage{Azeri
}{AZE
}
3317 \newfontlanguage{Badaga
}{BAD
}
3318 \newfontlanguage{Baghelkhandi
}{BAG
}
3319 \newfontlanguage{Balkar
}{BAL
}
3320 \newfontlanguage{Baule
}{BAU
}
3321 \newfontlanguage{Berber
}{BBR
}
3322 \newfontlanguage{Bench
}{BCH
}
3323 \newfontlanguage{Bible~Cree
}{BCR
}
3324 \newfontlanguage{Belarussian
}{BEL
}
3325 \newfontlanguage{Bemba
}{BEM
}
3326 \newfontlanguage{Bengali
}{BEN
}
3327 \newfontlanguage{Bulgarian
}{BGR
}
3328 \newfontlanguage{Bhili
}{BHI
}
3329 \newfontlanguage{Bhojpuri
}{BHO
}
3330 \newfontlanguage{Bikol
}{BIK
}
3331 \newfontlanguage{Bilen
}{BIL
}
3332 \newfontlanguage{Blackfoot
}{BKF
}
3333 \newfontlanguage{Balochi
}{BLI
}
3334 \newfontlanguage{Balante
}{BLN
}
3335 \newfontlanguage{Balti
}{BLT
}
3336 \newfontlanguage{Bambara
}{BMB
}
3337 \newfontlanguage{Bamileke
}{BML
}
3338 \newfontlanguage{Breton
}{BRE
}
3339 \newfontlanguage{Brahui
}{BRH
}
3340 \newfontlanguage{Braj~Bhasha
}{BRI
}
3341 \newfontlanguage{Burmese
}{BRM
}
3342 \newfontlanguage{Bashkir
}{BSH
}
3343 \newfontlanguage{Beti
}{BTI
}
3344 \newfontlanguage{Catalan
}{CAT
}
3345 \newfontlanguage{Cebuano
}{CEB
}
3346 \newfontlanguage{Chechen
}{CHE
}
3347 \newfontlanguage{Chaha~Gurage
}{CHG
}
3348 \newfontlanguage{Chattisgarhi
}{CHH
}
3349 \newfontlanguage{Chichewa
}{CHI
}
3350 \newfontlanguage{Chukchi
}{CHK
}
3351 \newfontlanguage{Chipewyan
}{CHP
}
3352 \newfontlanguage{Cherokee
}{CHR
}
3353 \newfontlanguage{Chuvash
}{CHU
}
3354 \newfontlanguage{Comorian
}{CMR
}
3355 \newfontlanguage{Coptic
}{COP
}
3356 \newfontlanguage{Cree
}{CRE
}
3357 \newfontlanguage{Carrier
}{CRR
}
3358 \newfontlanguage{Crimean~Tatar
}{CRT
}
3359 \newfontlanguage{Church~Slavonic
}{CSL
}
3360 \newfontlanguage{Czech
}{CSY
}
3361 \newfontlanguage{Danish
}{DAN
}
3362 \newfontlanguage{Dargwa
}{DAR
}
3363 \newfontlanguage{Woods~Cree
}{DCR
}
3364 \newfontlanguage{German
}{DEU
}
3365 \newfontlanguage{Dogri
}{DGR
}
3366 \newfontlanguage{Divehi
}{DIV
}
3367 \newfontlanguage{Djerma
}{DJR
}
3368 \newfontlanguage{Dangme
}{DNG
}
3369 \newfontlanguage{Dinka
}{DNK
}
3370 \newfontlanguage{Dungan
}{DUN
}
3371 \newfontlanguage{Dzongkha
}{DZN
}
3372 \newfontlanguage{Ebira
}{EBI
}
3373 \newfontlanguage{Eastern~Cree
}{ECR
}
3374 \newfontlanguage{Edo
}{EDO
}
3375 \newfontlanguage{Efik
}{EFI
}
3376 \newfontlanguage{Greek
}{ELL
}
3377 \newfontlanguage{English
}{ENG
}
3378 \newfontlanguage{Erzya
}{ERZ
}
3379 \newfontlanguage{Spanish
}{ESP
}
3380 \newfontlanguage{Estonian
}{ETI
}
3381 \newfontlanguage{Basque
}{EUQ
}
3382 \newfontlanguage{Evenki
}{EVK
}
3383 \newfontlanguage{Even
}{EVN
}
3384 \newfontlanguage{Ewe
}{EWE
}
3385 \newfontlanguage{French~Antillean
}{FAN
}
3386 \newfontlanguage{Farsi
}{FAR
}
3387 \newfontlanguage{Parsi
}{FAR
}
3388 \newfontlanguage{Persian
}{FAR
}
3389 \newfontlanguage{Finnish
}{FIN
}
3390 \newfontlanguage{Fijian
}{FJI
}
3391 \newfontlanguage{Flemish
}{FLE
}
3392 \newfontlanguage{Forest~Nenets
}{FNE
}
3393 \newfontlanguage{Fon
}{FON
}
3394 \newfontlanguage{Faroese
}{FOS
}
3395 \newfontlanguage{French
}{FRA
}
3396 \newfontlanguage{Frisian
}{FRI
}
3397 \newfontlanguage{Friulian
}{FRL
}
3398 \newfontlanguage{Futa
}{FTA
}
3399 \newfontlanguage{Fulani
}{FUL
}
3400 \newfontlanguage{Ga
}{GAD
}
3401 \newfontlanguage{Gaelic
}{GAE
}
3402 \newfontlanguage{Gagauz
}{GAG
}
3403 \newfontlanguage{Galician
}{GAL
}
3404 \newfontlanguage{Garshuni
}{GAR
}
3405 \newfontlanguage{Garhwali
}{GAW
}
3406 \newfontlanguage{Ge'ez
}{GEZ
}
3407 \newfontlanguage{Gilyak
}{GIL
}
3408 \newfontlanguage{Gumuz
}{GMZ
}
3409 \newfontlanguage{Gondi
}{GON
}
3410 \newfontlanguage{Greenlandic
}{GRN
}
3411 \newfontlanguage{Garo
}{GRO
}
3412 \newfontlanguage{Guarani
}{GUA
}
3413 \newfontlanguage{Gujarati
}{GUJ
}
3414 \newfontlanguage{Haitian
}{HAI
}
3415 \newfontlanguage{Halam
}{HAL
}
3416 \newfontlanguage{Harauti
}{HAR
}
3417 \newfontlanguage{Hausa
}{HAU
}
3418 \newfontlanguage{Hawaiin
}{HAW
}
3419 \newfontlanguage{Hammer-Banna
}{HBN
}
3420 \newfontlanguage{Hiligaynon
}{HIL
}
3421 \newfontlanguage{Hindi
}{HIN
}
3422 \newfontlanguage{High~Mari
}{HMA
}
3423 \newfontlanguage{Hindko
}{HND
}
3424 \newfontlanguage{Ho
}{HO
}
3425 \newfontlanguage{Harari
}{HRI
}
3426 \newfontlanguage{Croatian
}{HRV
}
3427 \newfontlanguage{Hungarian
}{HUN
}
3428 \newfontlanguage{Armenian
}{HYE
}
3429 \newfontlanguage{Igbo
}{IBO
}
3430 \newfontlanguage{Ijo
}{IJO
}
3431 \newfontlanguage{Ilokano
}{ILO
}
3432 \newfontlanguage{Indonesian
}{IND
}
3433 \newfontlanguage{Ingush
}{ING
}
3434 \newfontlanguage{Inuktitut
}{INU
}
3435 \newfontlanguage{Irish
}{IRI
}
3436 \newfontlanguage{Irish~Traditional
}{IRT
}
3437 \newfontlanguage{Icelandic
}{ISL
}
3438 \newfontlanguage{Inari~Sami
}{ISM
}
3439 \newfontlanguage{Italian
}{ITA
}
3440 \newfontlanguage{Hebrew
}{IWR
}
3441 \newfontlanguage{Javanese
}{JAV
}
3442 \newfontlanguage{Yiddish
}{JII
}
3443 \newfontlanguage{Japanese
}{JAN
}
3444 \newfontlanguage{Judezmo
}{JUD
}
3445 \newfontlanguage{Jula
}{JUL
}
3446 \newfontlanguage{Kabardian
}{KAB
}
3447 \newfontlanguage{Kachchi
}{KAC
}
3448 \newfontlanguage{Kalenjin
}{KAL
}
3449 \newfontlanguage{Kannada
}{KAN
}
3450 \newfontlanguage{Karachay
}{KAR
}
3451 \newfontlanguage{Georgian
}{KAT
}
3452 \newfontlanguage{Kazakh
}{KAZ
}
3453 \newfontlanguage{Kebena
}{KEB
}
3454 \newfontlanguage{Khutsuri~Georgian
}{KGE
}
3455 \newfontlanguage{Khakass
}{KHA
}
3456 \newfontlanguage{Khanty-Kazim
}{KHK
}
3457 \newfontlanguage{Khmer
}{KHM
}
3458 \newfontlanguage{Khanty-Shurishkar
}{KHS
}
3459 \newfontlanguage{Khanty-Vakhi
}{KHV
}
3460 \newfontlanguage{Khowar
}{KHW
}
3461 \newfontlanguage{Kikuyu
}{KIK
}
3462 \newfontlanguage{Kirghiz
}{KIR
}
3463 \newfontlanguage{Kisii
}{KIS
}
3464 \newfontlanguage{Kokni
}{KKN
}
3465 \newfontlanguage{Kalmyk
}{KLM
}
3466 \newfontlanguage{Kamba
}{KMB
}
3467 \newfontlanguage{Kumaoni
}{KMN
}
3468 \newfontlanguage{Komo
}{KMO
}
3469 \newfontlanguage{Komso
}{KMS
}
3470 \newfontlanguage{Kanuri
}{KNR
}
3471 \newfontlanguage{Kodagu
}{KOD
}
3472 \newfontlanguage{Korean~Old~Hangul
}{KOH
}
3473 \newfontlanguage{Konkani
}{KOK
}
3474 \newfontlanguage{Kikongo
}{KON
}
3475 \newfontlanguage{Komi-Permyak
}{KOP
}
3476 \newfontlanguage{Korean
}{KOR
}
3477 \newfontlanguage{Komi-Zyrian
}{KOZ
}
3478 \newfontlanguage{Kpelle
}{KPL
}
3479 \newfontlanguage{Krio
}{KRI
}
3480 \newfontlanguage{Karakalpak
}{KRK
}
3481 \newfontlanguage{Karelian
}{KRL
}
3482 \newfontlanguage{Karaim
}{KRM
}
3483 \newfontlanguage{Karen
}{KRN
}
3484 \newfontlanguage{Koorete
}{KRT
}
3485 \newfontlanguage{Kashmiri
}{KSH
}
3486 \newfontlanguage{Khasi
}{KSI
}
3487 \newfontlanguage{Kildin~Sami
}{KSM
}
3488 \newfontlanguage{Kui
}{KUI
}
3489 \newfontlanguage{Kulvi
}{KUL
}
3490 \newfontlanguage{Kumyk
}{KUM
}
3491 \newfontlanguage{Kurdish
}{KUR
}
3492 \newfontlanguage{Kurukh
}{KUU
}
3493 \newfontlanguage{Kuy
}{KUY
}
3494 \newfontlanguage{Koryak
}{KYK
}
3495 \newfontlanguage{Ladin
}{LAD
}
3496 \newfontlanguage{Lahuli
}{LAH
}
3497 \newfontlanguage{Lak
}{LAK
}
3498 \newfontlanguage{Lambani
}{LAM
}
3499 \newfontlanguage{Lao
}{LAO
}
3500 \newfontlanguage{Latin
}{LAT
}
3501 \newfontlanguage{Laz
}{LAZ
}
3502 \newfontlanguage{L-Cree
}{LCR
}
3503 \newfontlanguage{Ladakhi
}{LDK
}
3504 \newfontlanguage{Lezgi
}{LEZ
}
3505 \newfontlanguage{Lingala
}{LIN
}
3506 \newfontlanguage{Low~Mari
}{LMA
}
3507 \newfontlanguage{Limbu
}{LMB
}
3508 \newfontlanguage{Lomwe
}{LMW
}
3509 \newfontlanguage{Lower~Sorbian
}{LSB
}
3510 \newfontlanguage{Lule~Sami
}{LSM
}
3511 \newfontlanguage{Lithuanian
}{LTH
}
3512 \newfontlanguage{Luba
}{LUB
}
3513 \newfontlanguage{Luganda
}{LUG
}
3514 \newfontlanguage{Luhya
}{LUH
}
3515 \newfontlanguage{Luo
}{LUO
}
3516 \newfontlanguage{Latvian
}{LVI
}
3517 \newfontlanguage{Majang
}{MAJ
}
3518 \newfontlanguage{Makua
}{MAK
}
3519 \newfontlanguage{Malayalam~Traditional
}{MAL
}
3520 \newfontlanguage{Mansi
}{MAN
}
3521 \newfontlanguage{Marathi
}{MAR
}
3522 \newfontlanguage{Marwari
}{MAW
}
3523 \newfontlanguage{Mbundu
}{MBN
}
3524 \newfontlanguage{Manchu
}{MCH
}
3525 \newfontlanguage{Moose~Cree
}{MCR
}
3526 \newfontlanguage{Mende
}{MDE
}
3527 \newfontlanguage{Me'en
}{MEN
}
3528 \newfontlanguage{Mizo
}{MIZ
}
3529 \newfontlanguage{Macedonian
}{MKD
}
3530 \newfontlanguage{Male
}{MLE
}
3531 \newfontlanguage{Malagasy
}{MLG
}
3532 \newfontlanguage{Malinke
}{MLN
}
3533 \newfontlanguage{Malayalam~Reformed
}{MLR
}
3534 \newfontlanguage{Malay
}{MLY
}
3535 \newfontlanguage{Mandinka
}{MND
}
3536 \newfontlanguage{Mongolian
}{MNG
}
3537 \newfontlanguage{Manipuri
}{MNI
}
3538 \newfontlanguage{Maninka
}{MNK
}
3539 \newfontlanguage{Manx~Gaelic
}{MNX
}
3540 \newfontlanguage{Moksha
}{MOK
}
3541 \newfontlanguage{Moldavian
}{MOL
}
3542 \newfontlanguage{Mon
}{MON
}
3543 \newfontlanguage{Moroccan
}{MOR
}
3544 \newfontlanguage{Maori
}{MRI
}
3545 \newfontlanguage{Maithili
}{MTH
}
3546 \newfontlanguage{Maltese
}{MTS
}
3547 \newfontlanguage{Mundari
}{MUN
}
3548 \newfontlanguage{Naga-Assamese
}{NAG
}
3549 \newfontlanguage{Nanai
}{NAN
}
3550 \newfontlanguage{Naskapi
}{NAS
}
3551 \newfontlanguage{N-Cree
}{NCR
}
3552 \newfontlanguage{Ndebele
}{NDB
}
3553 \newfontlanguage{Ndonga
}{NDG
}
3554 \newfontlanguage{Nepali
}{NEP
}
3555 \newfontlanguage{Newari
}{NEW
}
3556 \newfontlanguage{Nagari
}{NGR
}
3557 \newfontlanguage{Norway~House~Cree
}{NHC
}
3558 \newfontlanguage{Nisi
}{NIS
}
3559 \newfontlanguage{Niuean
}{NIU
}
3560 \newfontlanguage{Nkole
}{NKL
}
3561 \newfontlanguage{N'ko
}{NKO
}
3562 \newfontlanguage{Dutch
}{NLD
}
3563 \newfontlanguage{Nogai
}{NOG
}
3564 \newfontlanguage{Norwegian
}{NOR
}
3565 \newfontlanguage{Northern~Sami
}{NSM
}
3566 \newfontlanguage{Northern~Tai
}{NTA
}
3567 \newfontlanguage{Esperanto
}{NTO
}
3568 \newfontlanguage{Nynorsk
}{NYN
}
3569 \newfontlanguage{Oji-Cree
}{OCR
}
3570 \newfontlanguage{Ojibway
}{OJB
}
3571 \newfontlanguage{Oriya
}{ORI
}
3572 \newfontlanguage{Oromo
}{ORO
}
3573 \newfontlanguage{Ossetian
}{OSS
}
3574 \newfontlanguage{Palestinian~Aramaic
}{PAA
}
3575 \newfontlanguage{Pali
}{PAL
}
3576 \newfontlanguage{Punjabi
}{PAN
}
3577 \newfontlanguage{Palpa
}{PAP
}
3578 \newfontlanguage{Pashto
}{PAS
}
3579 \newfontlanguage{Polytonic~Greek
}{PGR
}
3580 \newfontlanguage{Pilipino
}{PIL
}
3581 \newfontlanguage{Palaung
}{PLG
}
3582 \newfontlanguage{Polish
}{PLK
}
3583 \newfontlanguage{Provencal
}{PRO
}
3584 \newfontlanguage{Portuguese
}{PTG
}
3585 \newfontlanguage{Chin
}{QIN
}
3586 \newfontlanguage{Rajasthani
}{RAJ
}
3587 \newfontlanguage{R-Cree
}{RCR
}
3588 \newfontlanguage{Russian~Buriat
}{RBU
}
3589 \newfontlanguage{Riang
}{RIA
}
3590 \newfontlanguage{Rhaeto-Romanic
}{RMS
}
3591 \newfontlanguage{Romanian
}{ROM
}
3592 \newfontlanguage{Romany
}{ROY
}
3593 \newfontlanguage{Rusyn
}{RSY
}
3594 \newfontlanguage{Ruanda
}{RUA
}
3595 \newfontlanguage{Russian
}{RUS
}
3596 \newfontlanguage{Sadri
}{SAD
}
3597 \newfontlanguage{Sanskrit
}{SAN
}
3598 \newfontlanguage{Santali
}{SAT
}
3599 \newfontlanguage{Sayisi
}{SAY
}
3600 \newfontlanguage{Sekota
}{SEK
}
3601 \newfontlanguage{Selkup
}{SEL
}
3602 \newfontlanguage{Sango
}{SGO
}
3603 \newfontlanguage{Shan
}{SHN
}
3604 \newfontlanguage{Sibe
}{SIB
}
3605 \newfontlanguage{Sidamo
}{SID
}
3606 \newfontlanguage{Silte~Gurage
}{SIG
}
3607 \newfontlanguage{Skolt~Sami
}{SKS
}
3608 \newfontlanguage{Slovak
}{SKY
}
3609 \newfontlanguage{Slavey
}{SLA
}
3610 \newfontlanguage{Slovenian
}{SLV
}
3611 \newfontlanguage{Somali
}{SML
}
3612 \newfontlanguage{Samoan
}{SMO
}
3613 \newfontlanguage{Sena
}{SNA
}
3614 \newfontlanguage{Sindhi
}{SND
}
3615 \newfontlanguage{Sinhalese
}{SNH
}
3616 \newfontlanguage{Soninke
}{SNK
}
3617 \newfontlanguage{Sodo~Gurage
}{SOG
}
3618 \newfontlanguage{Sotho
}{SOT
}
3619 \newfontlanguage{Albanian
}{SQI
}
3620 \newfontlanguage{Serbian
}{SRB
}
3621 \newfontlanguage{Saraiki
}{SRK
}
3622 \newfontlanguage{Serer
}{SRR
}
3623 \newfontlanguage{South~Slavey
}{SSL
}
3624 \newfontlanguage{Southern~Sami
}{SSM
}
3625 \newfontlanguage{Suri
}{SUR
}
3626 \newfontlanguage{Svan
}{SVA
}
3627 \newfontlanguage{Swedish
}{SVE
}
3628 \newfontlanguage{Swadaya~Aramaic
}{SWA
}
3629 \newfontlanguage{Swahili
}{SWK
}
3630 \newfontlanguage{Swazi
}{SWZ
}
3631 \newfontlanguage{Sutu
}{SXT
}
3632 \newfontlanguage{Syriac
}{SYR
}
3633 \newfontlanguage{Tabasaran
}{TAB
}
3634 \newfontlanguage{Tajiki
}{TAJ
}
3635 \newfontlanguage{Tamil
}{TAM
}
3636 \newfontlanguage{Tatar
}{TAT
}
3637 \newfontlanguage{TH-Cree
}{TCR
}
3638 \newfontlanguage{Telugu
}{TEL
}
3639 \newfontlanguage{Tongan
}{TGN
}
3640 \newfontlanguage{Tigre
}{TGR
}
3641 \newfontlanguage{Tigrinya
}{TGY
}
3642 \newfontlanguage{Thai
}{THA
}
3643 \newfontlanguage{Tahitian
}{THT
}
3644 \newfontlanguage{Tibetan
}{TIB
}
3645 \newfontlanguage{Turkish
}{TRK,TUR
}
3646 \newfontlanguage{Turkmen
}{TKM
}
3647 \newfontlanguage{Temne
}{TMN
}
3648 \newfontlanguage{Tswana
}{TNA
}
3649 \newfontlanguage{Tundra~Nenets
}{TNE
}
3650 \newfontlanguage{Tonga
}{TNG
}
3651 \newfontlanguage{Todo
}{TOD
}
3652 \newfontlanguage{Tsonga
}{TSG
}
3653 \newfontlanguage{Turoyo~Aramaic
}{TUA
}
3654 \newfontlanguage{Tulu
}{TUL
}
3655 \newfontlanguage{Tuvin
}{TUV
}
3656 \newfontlanguage{Twi
}{TWI
}
3657 \newfontlanguage{Udmurt
}{UDM
}
3658 \newfontlanguage{Ukrainian
}{UKR
}
3659 \newfontlanguage{Urdu
}{URD
}
3660 \newfontlanguage{Upper~Sorbian
}{USB
}
3661 \newfontlanguage{Uyghur
}{UYG
}
3662 \newfontlanguage{Uzbek
}{UZB
}
3663 \newfontlanguage{Venda
}{VEN
}
3664 \newfontlanguage{Vietnamese
}{VIT
}
3665 \newfontlanguage{Wa
}{WA
}
3666 \newfontlanguage{Wagdi
}{WAG
}
3667 \newfontlanguage{West-Cree
}{WCR
}
3668 \newfontlanguage{Welsh
}{WEL
}
3669 \newfontlanguage{Wolof
}{WLF
}
3670 \newfontlanguage{Tai~Lue
}{XBD
}
3671 \newfontlanguage{Xhosa
}{XHS
}
3672 \newfontlanguage{Yakut
}{YAK
}
3673 \newfontlanguage{Yoruba
}{YBA
}
3674 \newfontlanguage{Y-Cree
}{YCR
}
3675 \newfontlanguage{Yi~Classic
}{YIC
}
3676 \newfontlanguage{Yi~Modern
}{YIM
}
3677 \newfontlanguage{Chinese~Hong~Kong
}{ZHH
}
3678 \newfontlanguage{Chinese~Phonetic
}{ZHP
}
3679 \newfontlanguage{Chinese~Simplified
}{ZHS
}
3680 \newfontlanguage{Chinese~Traditional
}{ZHT
}
3681 \newfontlanguage{Zande
}{ZND
}
3682 \newfontlanguage{Zulu
}{ZUL
}
3684 %%^^A%% fontspec-code-feat-aat.dtx -- part of FONTSPEC <wspr.io/fontspec>
3687 \__fontspec_define_aat_feature_group:n
{Ligatures
}
3688 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Required
} {1} {0}
3689 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoRequired
} {1} {1}
3690 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Common
} {1} {2}
3691 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoCommon
} {1} {3}
3692 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Rare
} {1} {4}
3693 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoRare
} {1} {5}
3694 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Discretionary
} {1} {4}
3695 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoDiscretionary
} {1} {5}
3696 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Logos
} {1} {6}
3697 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoLogos
} {1} {7}
3698 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Rebus
} {1} {8}
3699 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoRebus
} {1} {9}
3700 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Diphthong
} {1} {10}
3701 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoDiphthong
} {1} {11}
3702 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Squared
} {1} {12}
3703 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoSquared
} {1} {13}
3704 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {AbbrevSquared
} {1} {14}
3705 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoAbbrevSquared
} {1} {15}
3706 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {Icelandic
} {1} {32}
3707 \__fontspec_define_aat_feature:nnnn
{Ligatures
} {NoIcelandic
} {1} {33}
3708 \keys_define:nn
{fontspec-aat
}
3710 Ligatures / TeX .code:n =
3712 \tl_set:Nn
\l__fontspec_mapping_tl { tex-text
}
3715 \__fontspec_define_aat_feature_group:n
{Letters
}
3716 \__fontspec_define_aat_feature:nnnn
{Letters
} {Normal
} {3} {0}
3717 \__fontspec_define_aat_feature:nnnn
{Letters
} {Uppercase
} {3} {1}
3718 \__fontspec_define_aat_feature:nnnn
{Letters
} {Lowercase
} {3} {2}
3719 \__fontspec_define_aat_feature:nnnn
{Letters
} {SmallCaps
} {3} {3}
3720 \__fontspec_define_aat_feature:nnnn
{Letters
} {InitialCaps
} {3} {4}
3721 \__fontspec_define_aat_feature_group:n
{Numbers
}
3722 \__fontspec_define_aat_feature:nnnn
{Numbers
} {Monospaced
} {6} {0}
3723 \__fontspec_define_aat_feature:nnnn
{Numbers
} {Proportional
} {6} {1}
3724 \__fontspec_define_aat_feature:nnnn
{Numbers
} {Lowercase
} {21} {0}
3725 \__fontspec_define_aat_feature:nnnn
{Numbers
} {OldStyle
} {21} {0}
3726 \__fontspec_define_aat_feature:nnnn
{Numbers
} {Uppercase
} {21} {1}
3727 \__fontspec_define_aat_feature:nnnn
{Numbers
} {Lining
} {21} {1}
3728 \__fontspec_define_aat_feature:nnnn
{Numbers
} {SlashedZero
} {14} {5}
3729 \__fontspec_define_aat_feature:nnnn
{Numbers
} {NoSlashedZero
} {14} {4}
3730 \__fontspec_define_aat_feature_group:n
{Contextuals
}
3731 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {WordInitial
} {8} {0}
3732 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {NoWordInitial
} {8} {1}
3733 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {WordFinal
} {8} {2}
3734 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {NoWordFinal
} {8} {3}
3735 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {LineInitial
} {8} {4}
3736 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {NoLineInitial
} {8} {5}
3737 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {LineFinal
} {8} {6}
3738 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {NoLineFinal
} {8} {7}
3739 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {Inner
} {8} {8}
3740 \__fontspec_define_aat_feature:nnnn
{Contextuals
} {NoInner
} {8} {9}
3741 \__fontspec_define_aat_feature_group:n
{Diacritics
}
3742 \__fontspec_define_aat_feature:nnnn
{Diacritics
} {Show
} {9} {0}
3743 \__fontspec_define_aat_feature:nnnn
{Diacritics
} {Hide
} {9} {1}
3744 \__fontspec_define_aat_feature:nnnn
{Diacritics
} {Decompose
} {9} {2}
3745 \__fontspec_define_aat_feature_group:n
{VerticalPosition
}
3746 \__fontspec_define_aat_feature:nnnn
{VerticalPosition
} {Normal
} {10} {0}
3747 \__fontspec_define_aat_feature:nnnn
{VerticalPosition
} {Superior
} {10} {1}
3748 \__fontspec_define_aat_feature:nnnn
{VerticalPosition
} {Inferior
} {10} {2}
3749 \__fontspec_define_aat_feature:nnnn
{VerticalPosition
} {Ordinal
} {10} {3}
3750 \__fontspec_define_aat_feature_group:n
{Fractions
}
3751 \__fontspec_define_aat_feature:nnnn
{Fractions
} {On
} {11} {1}
3752 \__fontspec_define_aat_feature:nnnn
{Fractions
} {Off
} {11} {0}
3753 \__fontspec_define_aat_feature:nnnn
{Fractions
} {Diagonal
} {11} {2}
3754 \__fontspec_define_aat_feature_group:n
{ Alternate
}
3755 \keys_define:nn
{fontspec-aat
}
3757 Alternate .default:n =
{0} ,
3758 Alternate / unknown .code:n =
3760 \clist_map_inline:nn
{#1}
3762 \__fontspec_make_AAT_feature:nn
{17}{#
#1}
3766 \__fontspec_define_aat_feature_group:n
{Variant
}
3767 \keys_define:nn
{fontspec-aat
}
3769 Variant .default:n =
{0} ,
3770 Variant / unknown .code:n =
3772 \clist_map_inline:nn
{#1}
3773 { \__fontspec_make_AAT_feature:nn
{18}{#
#1} }
3776 \aliasfontfeature{Variant
}{StylisticSet
}
3777 \__fontspec_define_aat_feature_group:n
{Vertical
}
3778 \keys_define:nn
{fontspec-aat
}
3781 Vertical / RotatedGlyphs .code:n =
3783 \__fontspec_update_featstr:n
{vertical
}
3786 \__fontspec_define_aat_feature_group:n
{Style
}
3787 \__fontspec_define_aat_feature:nnnn
{Style
} {Italic
} {32} {2}
3788 \__fontspec_define_aat_feature:nnnn
{Style
} {Ruby
} {28} {2}
3789 \__fontspec_define_aat_feature:nnnn
{Style
} {Display
} {19} {1}
3790 \__fontspec_define_aat_feature:nnnn
{Style
} {Engraved
} {19} {2}
3791 \__fontspec_define_aat_feature:nnnn
{Style
} {Titling
} {19} {4}
3792 \__fontspec_define_aat_feature:nnnn
{Style
} {TitlingCaps
} {19} {4} % backwards compat
3793 \__fontspec_define_aat_feature:nnnn
{Style
} {TallCaps
} {19} {5}
3794 \__fontspec_define_aat_feature_group:n
{CJKShape
}
3795 \__fontspec_define_aat_feature:nnnn
{CJKShape
} {Traditional
} {20} {0}
3796 \__fontspec_define_aat_feature:nnnn
{CJKShape
} {Simplified
} {20} {1}
3797 \__fontspec_define_aat_feature:nnnn
{CJKShape
} {JIS1978
} {20} {2}
3798 \__fontspec_define_aat_feature:nnnn
{CJKShape
} {JIS1983
} {20} {3}
3799 \__fontspec_define_aat_feature:nnnn
{CJKShape
} {JIS1990
} {20} {4}
3800 \__fontspec_define_aat_feature:nnnn
{CJKShape
} {Expert
} {20} {10}
3801 \__fontspec_define_aat_feature:nnnn
{CJKShape
} {NLC
} {20} {13}
3802 \__fontspec_define_aat_feature_group:n
{CharacterWidth
}
3803 \__fontspec_define_aat_feature:nnnn
{CharacterWidth
} {Proportional
} {22} {0}
3804 \__fontspec_define_aat_feature:nnnn
{CharacterWidth
} {Full
} {22} {1}
3805 \__fontspec_define_aat_feature:nnnn
{CharacterWidth
} {Half
} {22} {2}
3806 \__fontspec_define_aat_feature:nnnn
{CharacterWidth
} {Third
} {22} {3}
3807 \__fontspec_define_aat_feature:nnnn
{CharacterWidth
} {Quarter
} {22} {4}
3808 \__fontspec_define_aat_feature:nnnn
{CharacterWidth
} {AlternateProportional
} {22} {5}
3809 \__fontspec_define_aat_feature:nnnn
{CharacterWidth
} {AlternateHalf
} {22} {6}
3810 \__fontspec_define_aat_feature:nnnn
{CharacterWidth
} {Default
} {22} {7}
3811 \__fontspec_define_aat_feature_group:n
{Annotation
}
3812 \__fontspec_define_aat_feature:nnnn
{Annotation
} {Off
} {24} {0}
3813 \__fontspec_define_aat_feature:nnnn
{Annotation
} {Box
} {24} {1}
3814 \__fontspec_define_aat_feature:nnnn
{Annotation
} {RoundedBox
} {24} {2}
3815 \__fontspec_define_aat_feature:nnnn
{Annotation
} {Circle
} {24} {3}
3816 \__fontspec_define_aat_feature:nnnn
{Annotation
} {BlackCircle
} {24} {4}
3817 \__fontspec_define_aat_feature:nnnn
{Annotation
} {Parenthesis
} {24} {5}
3818 \__fontspec_define_aat_feature:nnnn
{Annotation
} {Period
} {24} {6}
3819 \__fontspec_define_aat_feature:nnnn
{Annotation
} {RomanNumerals
} {24} {7}
3820 \__fontspec_define_aat_feature:nnnn
{Annotation
} {Diamond
} {24} {8}
3821 \__fontspec_define_aat_feature:nnnn
{Annotation
} {BlackSquare
} {24} {9}
3822 \__fontspec_define_aat_feature:nnnn
{Annotation
} {BlackRoundSquare
} {24} {10}
3823 \__fontspec_define_aat_feature:nnnn
{Annotation
} {DoubleCircle
} {24} {11}
3825 %%^^A%% fontspec-code-enc.dtx -- part of FONTSPEC <wspr.io/fontspec>
3827 \DeclareDocumentCommand \EncodingCommand { m O
{} O
{} m
}
3829 \bool_if:NF
\l__fontspec_defining_encoding_bool
3830 { \__fontspec_error:nn
{only-inside-encdef
} \EncodingCommand }
3831 \DeclareTextCommand{#1}{\UnicodeEncodingName}[#2][#3]{#4}
3833 \DeclareDocumentCommand \EncodingAccent {mm
}
3835 \bool_if:NF
\l__fontspec_defining_encoding_bool
3836 { \__fontspec_error:nn
{only-inside-encdef
} \EncodingAccent }
3837 \DeclareTextCommand{#1}{\UnicodeEncodingName}{\add@unicode@accent
{#2}}
3839 \DeclareDocumentCommand \EncodingSymbol {mm
}
3841 \bool_if:NF
\l__fontspec_defining_encoding_bool
3842 { \__fontspec_error:nn
{only-inside-encdef
} \EncodingSymbol }
3843 \DeclareTextSymbol{#1}{\UnicodeEncodingName}{#2}
3845 \DeclareDocumentCommand \EncodingComposite {mmm
}
3847 \bool_if:NF
\l__fontspec_defining_encoding_bool
3848 { \__fontspec_error:nn
{only-inside-encdef
} \EncodingComposite }
3849 \DeclareTextComposite{#1}{\UnicodeEncodingName}{#2}{#3}
3851 \DeclareDocumentCommand \EncodingCompositeCommand {mmm
}
3853 \bool_if:NF
\l__fontspec_defining_encoding_bool
3854 { \__fontspec_error:nn
{only-inside-encdef
} \EncodingCompositeCommand }
3855 \DeclareTextCompositeCommand{#1}{\UnicodeEncodingName}{#2}{#3}
3857 \DeclareDocumentCommand \DeclareUnicodeEncoding {mm
}
3859 \DeclareFontEncoding{#1}{}{}
3860 \DeclareFontSubstitution{#1}{lmr
}{m
}{n
}
3861 \DeclareFontFamily{#1}{lmr
}{}
3863 \DeclareFontShape{#1}{lmr
}{m
}{n
}
3864 {<->
\UnicodeFontFile{lmroman10-regular
}{\UnicodeFontTeXLigatures}}{}
3865 \DeclareFontShape{#1}{lmr
}{m
}{it
}
3866 {<->
\UnicodeFontFile{lmroman10-italic
}{\UnicodeFontTeXLigatures}}{}
3867 \DeclareFontShape{#1}{lmr
}{m
}{sc
}
3868 {<->
\UnicodeFontFile{lmromancaps10-regular
}{\UnicodeFontTeXLigatures}}{}
3869 \DeclareFontShape{#1}{lmr
}{bx
}{n
}
3870 {<->
\UnicodeFontFile{lmroman10-bold
}{\UnicodeFontTeXLigatures}}{}
3871 \DeclareFontShape{#1}{lmr
}{bx
}{it
}
3872 {<->
\UnicodeFontFile{lmroman10-bolditalic
}{\UnicodeFontTeXLigatures}}{}
3874 \tl_set_eq:NN
\l__fontspec_prev_unicode_name_tl \UnicodeEncodingName
3875 \tl_set:Nn
\UnicodeEncodingName {#1}
3876 \bool_set_true:N
\l__fontspec_defining_encoding_bool
3878 \bool_set_false:N
\l__fontspec_defining_encoding_bool
3879 \tl_set_eq:NN
\UnicodeEncodingName \l__fontspec_prev_unicode_name_tl
3881 \DeclareDocumentCommand \UndeclareSymbol {m
}
3883 \bool_if:NF
\l__fontspec_defining_encoding_bool
3884 { \__fontspec_error:nn
{only-inside-encdef
} \UndeclareSymbol }
3885 \UndeclareTextCommand {#1} {\UnicodeEncodingName}
3887 \DeclareDocumentCommand \UndeclareAccent {m
}
3889 \bool_if:NF
\l__fontspec_defining_encoding_bool
3890 { \__fontspec_error:nn
{only-inside-encdef
} \UndeclareAccent }
3891 \UndeclareTextCommand {#1} {\UnicodeEncodingName}
3893 \DeclareDocumentCommand \UndeclareCommand {m
}
3895 \bool_if:NF
\l__fontspec_defining_encoding_bool
3896 { \__fontspec_error:nn
{only-inside-encdef
} \UndeclareCommand }
3897 \UndeclareTextCommand {#1} {\UnicodeEncodingName}
3899 \DeclareDocumentCommand \UndeclareComposite {mm
}
3901 \bool_if:NF
\l__fontspec_defining_encoding_bool
3902 { \__fontspec_error:nn
{only-inside-encdef
} \UndeclareComposite }
3904 { \c_backslash_str \UnicodeEncodingName \token_to_str:N
#1 -
\tl_to_str:n
{#2} }
3907 %%^^A%% fontspec-code-math.dtx -- part of FONTSPEC <wspr.io/fontspec>
3908 \@ifpackageloaded
{euler
}
3909 { \bool_gset_true:N
\g__fontspec_pkg_euler_loaded_bool }
3910 { \bool_gset_false:N
\g__fontspec_pkg_euler_loaded_bool }
3911 \cs_new:Nn
\fontspec_setup_maths:
3913 \@ifpackageloaded
{euler
}
3915 \bool_if:NTF
\g__fontspec_pkg_euler_loaded_bool
3916 { \bool_gset_true:N
\g__fontspec_math_euler_bool }
3917 { \__fontspec_error:n
{euler-too-late
} }
3920 \@ifpackageloaded
{lucbmath
}{ \bool_gset_true:N
\g__fontspec_math_lucida_bool }{}
3921 \@ifpackageloaded
{lucidabr
}{ \bool_gset_true:N
\g__fontspec_math_lucida_bool }{}
3922 \@ifpackageloaded
{lucimatx
}{ \bool_gset_true:N
\g__fontspec_math_lucida_bool }{}
3923 \DeclareSymbolFont{legacymaths
}{OT1
}{cmr
}{m
}{n
}
3924 \SetSymbolFont{legacymaths
}{bold
}{OT1
}{cmr
}{bx
}{n
}
3925 \DeclareMathAccent{\acute} {\mathalpha}{legacymaths
}{19}
3926 \DeclareMathAccent{\grave} {\mathalpha}{legacymaths
}{18}
3927 \DeclareMathAccent{\ddot} {\mathalpha}{legacymaths
}{127}
3928 \DeclareMathAccent{\tilde} {\mathalpha}{legacymaths
}{126}
3929 \DeclareMathAccent{\bar} {\mathalpha}{legacymaths
}{22}
3930 \DeclareMathAccent{\breve} {\mathalpha}{legacymaths
}{21}
3931 \DeclareMathAccent{\check} {\mathalpha}{legacymaths
}{20}
3932 \DeclareMathAccent{\hat} {\mathalpha}{legacymaths
}{94} % too bad, euler
3933 \DeclareMathAccent{\dot} {\mathalpha}{legacymaths
}{95}
3934 \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths
}{23}
3936 \mathchardef\@tempa="
603A
\relax
3938 \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths
}{58}
3941 \bool_if:NF
\g__fontspec_math_euler_bool
3943 \DeclareMathSymbol{!
}{\mathclose}{legacymaths
}{33}
3944 \DeclareMathSymbol{:
}{\mathrel} {legacymaths
}{58}
3945 \DeclareMathSymbol{;
}{\mathpunct}{legacymaths
}{59}
3946 \DeclareMathSymbol{?
}{\mathclose}{legacymaths
}{63}
3947 \bool_if:NF
\g__fontspec_math_lucida_bool
3949 \DeclareMathSymbol{0}{\mathalpha}{legacymaths
}{`
0}
3950 \DeclareMathSymbol{1}{\mathalpha}{legacymaths
}{`
1}
3951 \DeclareMathSymbol{2}{\mathalpha}{legacymaths
}{`
2}
3952 \DeclareMathSymbol{3}{\mathalpha}{legacymaths
}{`
3}
3953 \DeclareMathSymbol{4}{\mathalpha}{legacymaths
}{`
4}
3954 \DeclareMathSymbol{5}{\mathalpha}{legacymaths
}{`
5}
3955 \DeclareMathSymbol{6}{\mathalpha}{legacymaths
}{`
6}
3956 \DeclareMathSymbol{7}{\mathalpha}{legacymaths
}{`
7}
3957 \DeclareMathSymbol{8}{\mathalpha}{legacymaths
}{`
8}
3958 \DeclareMathSymbol{9}{\mathalpha}{legacymaths
}{`
9}
3959 \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths
}{0}
3960 \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths
}{1}
3961 \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths
}{2}
3962 \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths
}{3}
3963 \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths
}{4}
3964 \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths
}{5}
3965 \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths
}{6}
3966 \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths
}{7}
3967 \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths
}{8}
3968 \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths
}{9}
3969 \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths
}{10}
3970 \DeclareMathSymbol{+
}{\mathbin}{legacymaths
}{43}
3971 \DeclareMathSymbol{=
}{\mathrel}{legacymaths
}{61}
3972 \DeclareMathDelimiter{(
}{\mathopen} {legacymaths
}{40}{largesymbols
}{0}
3973 \DeclareMathDelimiter{)
}{\mathclose}{legacymaths
}{41}{largesymbols
}{1}
3974 \DeclareMathDelimiter{[}{\mathopen} {legacymaths
}{91}{largesymbols
}{2}
3975 \DeclareMathDelimiter{]}{\mathclose}{legacymaths
}{93}{largesymbols
}{3}
3976 \DeclareMathDelimiter{/
}{\mathord}{legacymaths
}{47}{largesymbols
}{14}
3977 \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths
}{36}
3978 \renewcommand{\hbar}{{\mathchar"AF
\mkern-
9mu h
}}% TODO: test with other fonts
3981 \DeclareSymbolFont{operators
}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\shapedefault
3982 \SetSymbolFont{operators
}{normal
}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\shapedefault
3983 \DeclareSymbolFontAlphabet\mathrm{operators
}
3984 \SetMathAlphabet\mathit{normal
}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\itdefault
3985 \SetMathAlphabet\mathbf{normal
}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\shapedefault
3986 \SetMathAlphabet\mathsf{normal
}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\mddefault\shapedefault
3987 \SetMathAlphabet\mathtt{normal
}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\mddefault\shapedefault
3988 \SetSymbolFont{operators
}{bold
}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\shapedefault
3989 \tl_if_empty:NTF
\g__fontspec_bfmathrm_tl
3991 \SetMathAlphabet\mathit{bold
}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\itdefault
3994 \SetMathAlphabet\mathrm{bold
}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\shapedefault
3995 \SetMathAlphabet\mathbf{bold
}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\bfdefault\shapedefault
3996 \SetMathAlphabet\mathit{bold
}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\itdefault
3998 \SetMathAlphabet\mathsf{bold
}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\bfdefault\shapedefault
3999 \SetMathAlphabet\mathtt{bold
}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\bfdefault\shapedefault
4001 \cs_new:Nn
\fontspec_maybe_setup_maths:
4003 \@ifpackageloaded
{anttor
}
4005 \ifx\define@antt@mathversions a
\bool_gset_false:N
\g__fontspec_math_bool\fi
4007 \@ifpackageloaded
{arevmath
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4008 \@ifpackageloaded
{eulervm
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4009 \@ifpackageloaded
{mathdesign
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4010 \@ifpackageloaded
{concmath
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4011 \@ifpackageloaded
{cmbright
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4012 \@ifpackageloaded
{mathesf
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4013 \@ifpackageloaded
{gfsartemisia
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4014 \@ifpackageloaded
{gfsneohellenic
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4015 \@ifpackageloaded
{iwona
}
4017 \ifx\define@iwona@mathversions a
\bool_set_false:N
\g__fontspec_math_bool\fi
4019 \@ifpackageloaded
{kpfonts
}{\bool_gset_false:N
\g__fontspec_math_bool}{}
4020 \@ifpackageloaded
{kmath
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4021 \@ifpackageloaded
{kurier
}
4023 \ifx\define@kurier@mathversions a
\bool_set_false:N
\g__fontspec_math_bool\fi
4025 \@ifpackageloaded
{fouriernc
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4026 \@ifpackageloaded
{fourier
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4027 \@ifpackageloaded
{lmodern
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4028 \@ifpackageloaded
{mathpazo
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4029 \@ifpackageloaded
{mathptmx
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4030 \@ifpackageloaded
{MinionPro
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4031 \@ifpackageloaded
{unicode-math
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4032 \@ifpackageloaded
{breqn
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4033 \@ifpackageloaded
{pxfonts
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4034 \@ifpackageloaded
{txfonts
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4035 \@ifpackageloaded
{newpxmath
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4036 \@ifpackageloaded
{newtxmath
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4037 \@ifpackageloaded
{mtpro2
} {\bool_gset_false:N
\g__fontspec_math_bool}{}
4038 \bool_if:NT
\g__fontspec_math_bool
4040 \__fontspec_info:n
{setup-math
}
4041 \fontspec_setup_maths:
4044 \AtBeginDocument{\fontspec_maybe_setup_maths:
}
4046 %%^^A%% fontspec-code-closing.dtx -- part of FONTSPEC <wspr.io/fontspec>
4047 \bool_if:NT
\g__fontspec_cfg_bool
4049 \InputIfFileExists{fontspec.cfg
}
4051 { \typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.
} }
4054 %%^^A%% fontspec-code-xfss.dtx -- part of FONTSPEC <wspr.io/fontspec>
4056 \providecommand*
\scitdefault{\scdefault\itdefault}
4057 \providecommand*
\scsldefault{\scdefault\sldefault}
4058 \cs_new:Nn
\__fontspec_shape_merge:nn
{ c__fontspec_shape_
#1_
#2_tl
}
4059 \cs_new:Nn
\__fontspec_merge_default_shapes:
4061 \tl_const:cn
{ \__fontspec_shape_merge:nn
\itdefault \scdefault } {\scitdefault}
4062 \tl_const:cn
{ \__fontspec_shape_merge:nn
\sldefault \scdefault } {\scsldefault}
4063 \tl_const:cn
{ \__fontspec_shape_merge:nn
\scdefault \itdefault } {\scitdefault}
4064 \tl_const:cn
{ \__fontspec_shape_merge:nn
\scdefault \sldefault } {\scsldefault}
4065 \tl_const:cn
{ \__fontspec_shape_merge:nn
\scsldefault \itdefault } {\scitdefault}
4066 \tl_const:cn
{ \__fontspec_shape_merge:nn
\scitdefault \sldefault } {\scsldefault}
4067 \tl_const:cn
{ \__fontspec_shape_merge:nn
\scitdefault \shapedefault } {\scdefault}
4068 \tl_const:cn
{ \__fontspec_shape_merge:nn
\scsldefault \shapedefault } {\scdefault}
4070 \__fontspec_merge_default_shapes:
4071 \prg_new_conditional:Nnn
\__fontspec_if_merge_shape:n
{TF
}
4074 { \tl_if_exist_p:c
{ \__fontspec_shape_merge:nn
{\f@shape
} {#1} } }
4078 \f@encoding/
\f@family/
\f@series/
4079 \tl_use:c
{ \__fontspec_shape_merge:nn
{\f@shape
} {#1} }
4082 \prg_return_true:
\prg_return_false:
4084 \cs_if_exist:NTF
\DeclareFontSeriesChangeRule
4086 \cs_set_eq:NN
\emfontdeclare \DeclareEmphSequence
4089 \DeclareRobustCommand{\sishape}
4091 \not@math@alphabet
\sishape\relax
4092 \fontshape{\scitdefault}\selectfont
4094 \DeclareTextFontCommand{\textsi}{\sishape}
4095 \cs_new:Nn
\__fontspec_merge_shape:n
4097 \__fontspec_if_merge_shape:nTF
{#1}
4098 { \fontshape { \tl_use:c
{ \__fontspec_shape_merge:nn
{\f@shape
} {#1} } } \selectfont }
4099 { \fontshape {#1} \selectfont }
4101 \DeclareRobustCommand \itshape
4103 \not@math@alphabet
\itshape\mathit
4104 \__fontspec_merge_shape:n
\itdefault
4106 \DeclareRobustCommand \slshape
4108 \not@math@alphabet
\slshape\relax
4109 \__fontspec_merge_shape:n
\sldefault
4111 \DeclareRobustCommand \scshape
4113 \not@math@alphabet
\scshape\relax
4114 \__fontspec_merge_shape:n
\scdefault
4116 \DeclareRobustCommand \upshape
4118 \not@math@alphabet
\upshape\relax
4119 \__fontspec_merge_shape:n
\updefault
4121 \cs_set_protected:Npn
\emfontdeclare #1
4123 \prop_gclear:N
\g__fontspec_em_prop
4124 \int_zero:N
\l__fontspec_emdef_int
4125 \bool_gset_true:N
\g__fontspec_em_normalise_slant_bool
4127 \tl_if_in:nnT
{#1} {\slshape}
4129 \tl_if_in:nnT
{#1} {\itshape}
4131 \bool_gset_false:N
\g__fontspec_em_normalise_slant_bool
4137 \clist_map_inline:nn
{\emreset,
#1}
4140 \prop_gput_if_new:NxV
\g__fontspec_em_prop { \f@shape
} { \l__fontspec_emdef_int }
4141 \prop_gput:Nxn
\g__fontspec_em_prop { switch-
\int_use:N
\l__fontspec_emdef_int } { #
#1 }
4142 \int_incr:N
\l__fontspec_emdef_int
4146 \DeclareRobustCommand \em
4149 \tl_set:Nx
\l__fontspec_emshape_query_tl { \f@shape
}
4151 \bool_if:NT
\g__fontspec_em_normalise_slant_bool
4153 \tl_replace_all:Nnn
\l__fontspec_emshape_query_tl {/sl
} {/it
}
4156 \prop_get:NxNT
\g__fontspec_em_prop { \l__fontspec_emshape_query_tl } \l__fontspec_em_tmp_tl
4158 \int_set:Nn
\l__fontspec_em_int { \l__fontspec_em_tmp_tl }
4161 \int_incr:N
\l__fontspec_em_int
4163 \prop_get:NxNTF
\g__fontspec_em_prop { switch-
\int_use:N
\l__fontspec_em_int } \l__fontspec_em_switch_tl
4164 { \l__fontspec_em_switch_tl }
4166 \int_zero:N
\l__fontspec_em_int
4171 \DeclareTextFontCommand{\emph}{\em}
4172 \cs_set:Npn
\emreset { \upshape }
4173 \cs_set:Npn
\emshape { \itshape }
4174 \cs_set:Npn
\eminnershape { \upshape }
4175 \emfontdeclare{ \emshape,
\eminnershape }
4176 \cs_new:Nn
\fontspec_set_em_level:n
{ \int_set:Nn
\l__fontspec_em_int {#1} }
4178 \cs_set_protected:Npn
\strongfontdeclare #1
4180 \prop_gclear:N
\g__fontspec_strong_prop
4181 \int_zero:N
\l__fontspec_strongdef_int
4185 \clist_map_inline:nn
{\strongreset,
#1}
4188 \prop_gput_if_new:NxV
\g__fontspec_strong_prop { \f@series
} { \l__fontspec_strongdef_int }
4189 \prop_gput:Nxn
\g__fontspec_strong_prop { switch-
\int_use:N
\l__fontspec_strongdef_int } { #
#1 }
4190 \int_incr:N
\l__fontspec_strongdef_int
4194 \DeclareRobustCommand \strongenv
4198 \prop_get:NxNT
\g__fontspec_strong_prop { \f@series
} \l__fontspec_strong_tmp_tl
4200 \int_set:Nn
\l__fontspec_strong_int { \l__fontspec_strong_tmp_tl }
4203 \int_incr:N
\l__fontspec_strong_int
4205 \prop_get:NxNTF
\g__fontspec_strong_prop { switch-
\int_use:N
\l__fontspec_strong_int } \l__fontspec_strong_switch_tl
4206 { \l__fontspec_strong_switch_tl }
4208 \int_zero:N
\l__fontspec_strong_int
4213 \DeclareTextFontCommand{\strong}{\strongenv}
4214 \cs_set:Npn
\strongreset {}
4215 \cs_set:Npn
\reset@font
4218 \int_zero:N
\l__fontspec_em_int
4219 \int_zero:N
\l__fontspec_strong_int
4221 \cs_new:Nn
\fontspec_set_strong_level:n
{ \int_set:Nn
\l__fontspec_strong_int {#1} }
4222 \strongfontdeclare{ \bfseries }