Run `update-copyright' script.
[ttfautohint.git] / doc / fontspec-xetex.sty
blob6ff78f06dbbfc1ea114a7eb7fc7045fef544bcf0
1 %%
2 %% This is file `fontspec-xetex.sty',
3 %% generated with the docstrip utility.
4 %%
5 %% The original source files were:
6 %%
7 %% fontspec.dtx (with options: `fontspec,xetexx')
8 %% fontspec-vars.dtx (with options: `fontspec,xetexx')
9 %% fontspec-msg.dtx (with options: `fontspec,xetexx')
10 %% fontspec-opening.dtx (with options: `fontspec,xetexx')
11 %% fontspec-fontload.dtx (with options: `fontspec,xetexx')
12 %% fontspec-user.dtx (with options: `fontspec,xetexx')
13 %% fontspec-api.dtx (with options: `fontspec,xetexx')
14 %% fontspec-internal.dtx (with options: `fontspec,xetexx')
15 %% fontspec-opentype.dtx (with options: `fontspec,xetexx')
16 %% fontspec-graphite.dtx (with options: `fontspec,xetexx')
17 %% fontspec-keyval.dtx (with options: `fontspec,xetexx')
18 %% fontspec-feat-opentype.dtx (with options: `fontspec,xetexx')
19 %% fontspec-scripts.dtx (with options: `fontspec,xetexx')
20 %% fontspec-lang.dtx (with options: `fontspec,xetexx')
21 %% fontspec-feat-aat.dtx (with options: `fontspec,xetexx')
22 %% fontspec-enc.dtx (with options: `fontspec,xetexx')
23 %% fontspec-math.dtx (with options: `fontspec,xetexx')
24 %% fontspec-closing.dtx (with options: `fontspec,xetexx')
25 %% fontspec-xfss.dtx (with options: `fontspec,xetexx')
26 %% fontspec-patches.dtx (with options: `fontspec,xetexx')
27 %% ------------------------------------------------
28 %% The FONTSPEC package for XeLaTeX/LuaLaTeX
29 %% (C) 2004--2017 Will Robertson and Khaled Hosny
30 %% License information appended.
31 %% ------------------------------------------------
32 \RequirePackage{expl3}
33 \RequirePackage{xparse}
34 \ProvidesExplPackage{fontspec-xetex}%
35 {2017/08/14}{2.6d}{Font selection for XeLaTeX and LuaLaTeX}
36 \bool_new:N \l__fontspec_firsttime_bool
37 \bool_new:N \l__fontspec_nobf_bool
38 \bool_new:N \l__fontspec_noit_bool
39 \bool_new:N \l__fontspec_nosc_bool
40 \bool_new:N \l__fontspec_check_bool
41 \cs_new:Npn \FontspecSetCheckBoolTrue { \bool_set_true:N \l__fontspec_check_bool }
42 \cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l__fontspec_check_bool }
43 \bool_new:N \l__fontspec_tfm_bool
44 \bool_new:N \l__fontspec_atsui_bool
45 \bool_new:N \l__fontspec_ot_bool
46 \bool_new:N \l__fontspec_mm_bool
47 \bool_new:N \l__fontspec_graphite_bool
48 \bool_new:N \l__fontspec_fontcfg_bool
49 \bool_set_true:N \l__fontspec_fontcfg_bool
50 \bool_new:N \g__fontspec_math_euler_bool
51 \bool_new:N \g__fontspec_math_lucida_bool
52 \bool_new:N \g__fontspec_pkg_euler_loaded_bool
53 \bool_new:N \g__fontspec_cfg_bool
54 \bool_new:N \g__fontspec_math_bool
55 \bool_new:N \g__fontspec_euenc_bool
56 \bool_new:N \l__fontspec_disable_defaults_bool
57 \bool_new:N \l__fontspec_alias_bool
58 \bool_new:N \l__fontspec_external_bool
59 \bool_new:N \l__fontspec_never_check_bool
60 \bool_new:N \l__fontspec_defining_encoding_bool
61 \bool_new:N \l__fontspec_script_exist_bool
62 \bool_new:N \g__fontspec_em_normalise_slant_bool
63 \int_new:N \l__fontspec_script_int
64 \int_new:N \l__fontspec_language_int
65 \int_new:N \l__fontspec_strnum_int
66 \int_new:N \l__fontspec_tmp_int
67 \int_new:N \l__fontspec_em_int
68 \int_new:N \l__fontspec_emdef_int
69 \int_new:N \l__fontspec_strong_int
70 \int_new:N \l__fontspec_strongdef_int
71 \fp_new:N \l__fontspec_tmpa_fp
72 \fp_new:N \l__fontspec_tmpb_fp
73 \dim_new:N \l__fontspec_tmpa_dim
74 \dim_new:N \l__fontspec_tmpb_dim
75 \dim_new:N \l__fontspec_tmpc_dim
76 \seq_new:N \g__fontspec_bf_series_seq
77 \clist_new:N \g__fontspec_default_fontopts_clist
78 \clist_new:N \g__fontspec_all_keyval_modules_clist
79 \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}}
80 \prop_new:N \g__fontspec_fontopts_prop
81 \prop_new:N \l__fontspec_nfss_prop
82 \prop_new:N \l__fontspec_nfssfont_prop
83 \prop_new:N \g__fontspec_OT_features_prop
84 \prop_new:N \g__fontspec_all_opentype_feature_names_prop
85 \prop_new:N \g__fontspec_em_prop
86 \tl_new:N \g__fontspec_mathrm_tl
87 \tl_new:N \g__fontspec_bfmathrm_tl
88 \tl_new:N \g__fontspec_mathsf_tl
89 \tl_new:N \g__fontspec_mathtt_tl
90 \tl_new:N \l__fontspec_family_label_tl
91 \tl_new:N \l__fontspec_fake_slant_tl
92 \tl_new:N \l__fontspec_fake_embolden_tl
93 \tl_new:N \l__fontspec_fontname_up_tl
94 \tl_new:N \l__fontspec_fontname_bf_tl
95 \tl_new:N \l__fontspec_fontname_it_tl
96 \tl_new:N \l__fontspec_fontname_bfit_tl
97 \tl_new:N \l__fontspec_fontname_sl_tl
98 \tl_new:N \l__fontspec_fontname_bfsl_tl
99 \tl_new:N \l__fontspec_fontname_sc_tl
100 \tl_new:N \l__fontspec_fontfeat_up_clist
101 \tl_new:N \l__fontspec_fontfeat_bf_clist
102 \tl_new:N \l__fontspec_fontfeat_it_clist
103 \tl_new:N \l__fontspec_fontfeat_bfit_clist
104 \tl_new:N \l__fontspec_fontfeat_sl_clist
105 \tl_new:N \l__fontspec_fontfeat_bfsl_clist
106 \tl_new:N \l__fontspec_fontfeat_sc_clist
107 \tl_new:N \l__fontspec_script_name_tl
108 \tl_new:N \l_fontspec_script_tl
109 \tl_new:N \l__fontspec_lang_name_tl
110 \tl_new:N \l_fontspec_lang_tl
111 \tl_new:N \l__fontspec_mapping_tl
112 \tl_new:N \g__fontspec_hexcol_tl
113 \tl_new:N \g__fontspec_opacity_tl
114 \tl_set:Nn \g__fontspec_hexcol_tl {000000}
115 \tl_set:Nn \g__fontspec_opacity_tl {FF~}
116 \tl_set:Nn \g__fontspec_postadjust_tl { \l__fontspec_wordspace_adjust_tl \l__fontspec_punctspace_adjust_tl }
117 \cs_new:Nn \__fontspec_keys_set_known:nnN
119 \keys_set_known:nnN {#1} {#2} #3
121 \cs_generate_variant:Nn \__fontspec_keys_set_known:nnN {nx}
122 \cs_set:Npn \__fontspec_head_ii:n #1 { \__fontspec_head_ii:w #1 *** \q_stop}
123 \cs_set:Npn \__fontspec_head_ii:w #1#2#3 \q_stop { #1#2 }
124 \cs_generate_variant:Nn \__fontspec_head_ii:n {o}
125 \cs_new:Nn \__fontspec_int_mult_truncate:Nn
127 \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: }
129 \cs_generate_variant:Nn \int_set:Nn {Nv}
130 \cs_generate_variant:Nn \keys_set:nn {nx}
131 \cs_generate_variant:Nn \keys_set_known:nnN {nx}
132 \cs_generate_variant:Nn \prop_put:Nnn {Nxx}
133 \cs_generate_variant:Nn \prop_put:Nnn {NxV}
134 \cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV}
135 \cs_generate_variant:Nn \prop_gput:Nnn {Nxn}
136 \cs_generate_variant:Nn \prop_get:NnNT {NxN}
137 \cs_generate_variant:Nn \prop_get:NnNTF {NxN}
138 \cs_generate_variant:Nn \str_if_eq:nnTF {nv}
139 \cs_generate_variant:Nn \tl_if_empty:nTF {x}
140 \cs_generate_variant:Nn \tl_if_empty:nF {x}
141 \cs_generate_variant:Nn \tl_if_empty:nF {f}
142 \cs_generate_variant:Nn \tl_if_eq:nnT {ox}
143 \cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx}
145 \cs_new:Npn \__fontspec_error:n { \msg_error:nn {fontspec} }
146 \cs_new:Npn \__fontspec_error:nn { \msg_error:nnn {fontspec} }
147 \cs_new:Npn \__fontspec_error:nx { \msg_error:nnx {fontspec} }
148 \cs_new:Npn \__fontspec_warning:n { \msg_warning:nn {fontspec} }
149 \cs_new:Npn \__fontspec_warning:nx { \msg_warning:nnx {fontspec} }
150 \cs_new:Npn \__fontspec_warning:nxx { \msg_warning:nnxx {fontspec} }
151 \cs_new:Npn \__fontspec_info:n { \msg_info:nn {fontspec} }
152 \cs_new:Npn \__fontspec_info:nx { \msg_info:nnx {fontspec} }
153 \cs_new:Npn \__fontspec_info:nxx { \msg_info:nnxx {fontspec} }
154 \cs_new:Npn \__fontspec_trace:n { \msg_trace:nn {fontspec} }
155 \cs_generate_variant:Nn \msg_new:nnn {nnx}
156 \cs_generate_variant:Nn \msg_new:nnnn {nnxx}
157 \cs_new:Nn \__fontspec_msg_new:nnn
158 { \msg_new:nnx {#1} {#2} { \tl_trim_spaces:n {#3} } }
159 \cs_new:Nn \__fontspec_msg_new:nnnn
160 { \msg_new:nnxx {#1} {#2} { \tl_trim_spaces:n {#3} } { \tl_trim_spaces:n {#4} } }
161 \char_set_catcode_space:n {32}
162 \__fontspec_msg_new:nnn {fontspec} {only-inside-encdef}
164 \exp_not:N#1can only be used in the second argument
165 to \string\DeclareUnicodeEncoding.
167 \__fontspec_msg_new:nnn {fontspec} {only-import-tu}
169 The "\string\ImportEncoding" command can only take "TU" as an argument at this stage.
171 \__fontspec_msg_new:nnn {fontspec} {no-size-info}
173 Size information must be supplied.\\
174 For example, SizeFeatures={Size={8-12},...}.
176 \__fontspec_msg_new:nnnn {fontspec} {font-not-found}
178 The font "#1" cannot be found.
181 A font might not be found for many reasons.\\
182 Check the spelling, where the font is installed etc. etc.\\\\
183 When in doubt, ask someone for help!
185 \__fontspec_msg_new:nnnn {fontspec} {rename-feature-not-exist}
187 The feature #1 doesn't appear to be defined.
190 It looks like you're trying to rename a feature that doesn't exist.
192 \__fontspec_msg_new:nnn {fontspec} {no-glyph}
194 '\l_fontspec_fontname_tl' does not contain glyph #1.
196 \__fontspec_msg_new:nnnn {fontspec} {euler-too-late}
198 The euler package must be loaded BEFORE fontspec.
201 fontspec only overwrites euler's attempt to
202 define the maths text fonts if fontspec is
203 loaded after euler. Type <return> to proceed
204 with incorrect \string\mathit, \string\mathbf, etc.
206 \__fontspec_msg_new:nnnn {fontspec} {no-xcolor}
208 Cannot load named colours without the xcolor package.
211 Sorry, I can't do anything to help. Instead of loading
212 the color package, use xcolor instead.
214 \__fontspec_msg_new:nnnn {fontspec} {unknown-color-model}
216 Error loading colour `#1'; unknown colour model.
219 Sorry, I can't do anything to help. Please report this error
220 to my developer with a minimal example that causes the problem.
222 \__fontspec_msg_new:nnnn {fontspec} {not-in-addfontfeatures}
224 The "#1" font feature cannot be used in \string\addfontfeatures.
227 This is due to how TeX loads fonts; such settings
228 are global so adding them mid-document within a group causes
229 confusion. You'll need to define multiple font families to achieve
230 what you want.
232 \__fontspec_msg_new:nnn {fontspec} {tu-clash}
234 I have found the tuenc.def encoding definition file but the TU encoding is not
235 defined by the LaTeX2e kernel; attempting to correct but you really should update
236 to the latest version of LaTeX2e.
238 \__fontspec_msg_new:nnn {fontspec} {tu-missing}
240 The TU encoding seems to be missing; please update to the latest version of LaTeX2e.
242 \__fontspec_msg_new:nnn {fontspec} {addfontfeatures-ignored}
244 \string\addfontfeature (s) ignored \msg_line_context:;
245 it cannot be used with a font that wasn't selected by a fontspec command.\\
247 The current font is "\use:c{font@name}".\\
248 \int_compare:nTF { \clist_count:n {#1} = 1 }
249 { The requested feature is "#1". }
250 { The requested features are "#1". }
252 \__fontspec_msg_new:nnn {fontspec} {feature-option-overwrite}
254 Option '#2' of font feature '#1' overwritten.
256 \__fontspec_msg_new:nnn {fontspec} {script-not-exist-latn}
258 Font '\l_fontspec_fontname_tl' does not contain script '#1'.\\
259 'Latin' script used instead.
261 \__fontspec_msg_new:nnn {fontspec} {script-not-exist}
263 Font '\l_fontspec_fontname_tl' does not contain script '#1'.
265 \__fontspec_msg_new:nnn {fontspec} {aat-feature-not-exist}
267 '\l_keys_key_tl=\l_keys_value_tl' feature not supported
268 for AAT font '\l_fontspec_fontname_tl'.
270 \__fontspec_msg_new:nnn {fontspec} {aat-feature-not-exist-in-font}
272 AAT feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available
273 in font '\l_fontspec_fontname_tl'.
275 \__fontspec_msg_new:nnn {fontspec} {icu-feature-not-exist}
277 '\l_keys_key_tl=\l_keys_value_tl' feature not supported
278 for OpenType font '\l_fontspec_fontname_tl'
280 \__fontspec_msg_new:nnn {fontspec} {icu-feature-not-exist-in-font}
282 OpenType feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available
283 for font '\l_fontspec_fontname_tl'
284 with script '\l__fontspec_script_name_tl' and language '\l__fontspec_lang_name_tl'.
286 \__fontspec_msg_new:nnn {fontspec} {no-opticals}
288 '\l_fontspec_fontname_tl' doesn't appear to have an Optical Size axis.
290 \__fontspec_msg_new:nnn {fontspec} {language-not-exist}
292 Language '#1' not available
293 for font '\l_fontspec_fontname_tl'
294 with script '\l__fontspec_script_name_tl'.\\
295 'Default' language used instead.
297 \__fontspec_msg_new:nnn {fontspec} {only-xetex-feature}
299 Ignored XeTeX only feature: '#1'.
301 \__fontspec_msg_new:nnn {fontspec} {only-luatex-feature}
303 Ignored LuaTeX only feature: '#1'.
305 \__fontspec_msg_new:nnn {fontspec} {no-mapping}
307 Input mapping not (yet?) supported in LuaTeX.
309 \__fontspec_msg_new:nnn {fontspec} {no-mapping-ligtex}
311 Input mapping not (yet?) supported in LuaTeX.\\
312 Use "Ligatures=TeX" instead of "Mapping=tex-text".
314 \__fontspec_msg_new:nnn {fontspec} {cm-default-obsolete}
316 The "cm-default" package option is obsolete.
318 \__fontspec_msg_new:nnn {fontspec} {fakebold-only-xetex}
320 The "FakeBold" and "AutoFakeBold" options are only available with XeLaTeX.\\
321 Option ignored.
323 \__fontspec_msg_new:nnn {fontspec} {font-index-needs-ttc}
325 The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\
326 Feature ignored.
328 \__fontspec_msg_new:nnn {fontspec} {feat-cannot-remove}
330 The "#1" feature cannot be deactivated. Request ignored.
332 \__fontspec_msg_new:nnn {fontspec} {defining-font}
334 Font family '\l_fontspec_family_tl' created for font '#2'
335 with options [\l__fontspec_all_features_clist].\\
337 This font family consists of the following NFSS series/shapes:\\
338 \l_fontspec_defined_shapes_tl
340 \__fontspec_msg_new:nnn {fontspec} {no-font-shape}
342 Could not resolve font "#1" (it probably doesn't exist).
344 \__fontspec_msg_new:nnn {fontspec} {set-scale}
346 \l_fontspec_fontname_tl\space scale = \l__fontspec_scale_tl.
348 \__fontspec_msg_new:nnn {fontspec} {setup-math}
350 Adjusting the maths setup (use [no-math] to avoid this).
352 \__fontspec_msg_new:nnn {fontspec} {no-scripts}
354 Font "\l_fontspec_fontname_tl" does not contain any OpenType `Script' information.
356 \__fontspec_msg_new:nnn {fontspec} {opa-twice}
358 Opacity set twice, in both Colour and Opacity.\\
359 Using specification "Opacity=#1".
361 \__fontspec_msg_new:nnn {fontspec} {opa-twice-col}
363 Opacity set twice, in both Opacity and Colour.\\
364 Using an opacity specification in hex of "#1/FF".
366 \__fontspec_msg_new:nnn {fontspec} {bad-colour}
368 Bad colour declaration "#1".
369 Colour must be one of:\\
370 * a named xcolor colour\\
371 * a six-digit hex colour RRGGBB\\
372 * an eight-digit hex colour RRGGBBTT with opacity
374 \char_set_catcode_ignore:n {32}
375 \DeclareOption{cm-default}
376 { \__fontspec_warning:n {cm-default-obsolete} }
377 \DeclareOption{math}{\bool_set_true:N \g__fontspec_math_bool}
378 \DeclareOption{no-math}{\bool_set_false:N \g__fontspec_math_bool}
379 \DeclareOption{config}{\bool_set_true:N \g__fontspec_cfg_bool}
380 \DeclareOption{no-config}{\bool_set_false:N \g__fontspec_cfg_bool}
381 \DeclareOption{euenc}{\bool_set_true:N \g__fontspec_euenc_bool}
382 \DeclareOption{tuenc}{\bool_set_false:N \g__fontspec_euenc_bool}
383 \DeclareOption{quiet}
385 \msg_redirect_module:nnn { fontspec } { warning } { info }
386 \msg_redirect_module:nnn { fontspec } { info } { none }
388 \DeclareOption{silent}
390 \msg_redirect_module:nnn { fontspec } { warning } { none }
391 \msg_redirect_module:nnn { fontspec } { info } { none }
393 \ExecuteOptions{config,math,tuenc}
394 \ProcessOptions*
395 \bool_if:NF \g__fontspec_euenc_bool
397 \file_if_exist:nTF {tuenc.def}
399 \cs_if_exist:cF {T@TU}
401 \__fontspec_warning:n {tu-clash}
402 \DeclareFontEncoding{TU}{}{}
403 \DeclareFontSubstitution{TU}{lmr}{m}{n}
407 \__fontspec_warning:n {tu-missing}
408 \bool_set_true:N \g__fontspec_euenc_bool
411 \bool_if:NTF \g__fontspec_euenc_bool
413 \tl_set:Nn \g_fontspec_encoding_tl {EU1}
415 { \tl_set:Nn \g_fontspec_encoding_tl { TU } }
416 \tl_set:Nn \rmdefault {lmr}
417 \tl_set:Nn \sfdefault {lmss}
418 \tl_set:Nn \ttdefault {lmtt}
419 \RequirePackage[\g_fontspec_encoding_tl]{fontenc}
420 \tl_set_eq:NN \UTFencname \g_fontspec_encoding_tl % for xunicode if needed
421 \tl_if_in:NnT \@filelist {.cls} { \normalsize }
422 \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl
423 \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl
424 \AtBeginDocument
426 \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl
427 \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl
429 \bool_if:NT \g__fontspec_euenc_bool
431 \RequirePackage{xunicode}
434 \cs_set:Npn \__fontspec_primitive_font_set:Nnn #1#2#3
436 \font #1 = #2 ~at~ #3 \scan_stop:
438 \cs_set:Npn \__fontspec_primitive_font_gset:Nnn #1#2#3
440 \global \font #1 = #2 ~at~ #3 \scan_stop:
442 \cs_set:Npn \__fontspec_font_suppress_not_found_error:
444 \int_set_eq:NN \xetex_suppressfontnotfounderror:D \c_one
446 \prg_set_conditional:Nnn \__fontspec_primitive_font_if_null:N {p,TF,T,F}
448 \ifx #1 \nullfont
449 \prg_return_true:
450 \else
451 \prg_return_false:
454 \prg_set_conditional:Nnn \__fontspec_primitive_font_if_exist:n {TF,T,F}
456 \group_begin:
457 \__fontspec_font_suppress_not_found_error:
458 \__fontspec_primitive_font_set:Nnn \l__fontspec_primitive_font {#1} {10pt}
459 \__fontspec_primitive_font_if_null:NTF \l__fontspec_primitive_font
460 { \group_end: \prg_return_false: }
461 { \group_end: \prg_return_true: }
463 \prg_new_conditional:Nnn \__fontspec_primitive_font_glyph_if_exist:Nn {p,TF,T,F}
465 \etex_iffontchar:D #1 #2 \scan_stop:
466 \prg_return_true:
467 \else:
468 \prg_return_false:
469 \fi:
471 \NewDocumentCommand \fontspec { O{} m O{} }
473 \__fontspec_main_fontspec:nnn {#1} {#2} {#3}
475 \cs_set:Nn \__fontspec_main_fontspec:nnn
477 \fontspec_set_family:Nnn \f@family {#1,#3} {#2}
478 \fontencoding { \l__fontspec_nfss_enc_tl }
479 \selectfont
480 \ignorespaces
482 \DeclareDocumentCommand \setmainfont { O{} m O{} }
484 \__fontspec_main_setmainfont:nnn {#1} {#2} {#3}
486 \cs_set:Nn \__fontspec_main_setmainfont:nnn
488 \fontspec_set_family:Nnn \g__fontspec_rmfamily_family {#1,#3} {#2}
489 \tl_set_eq:NN \rmdefault \g__fontspec_rmfamily_family
490 \use:x { \exp_not:n { \DeclareRobustCommand \rmfamily }
492 \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl }
493 \exp_not:N \fontfamily { \g__fontspec_rmfamily_family }
494 \exp_not:N \selectfont
497 \str_if_eq_x:nnT {\familydefault} {\rmdefault}
498 { \tl_set_eq:NN \encodingdefault \l__fontspec_nfss_enc_tl }
499 \normalfont
500 \ignorespaces
502 \DeclareDocumentCommand \setsansfont { O{} m O{} }
504 \__fontspec_main_setsansfont:nnn {#1} {#2} {#3}
506 \cs_set:Nn \__fontspec_main_setsansfont:nnn
508 \fontspec_set_family:Nnn \g__fontspec_sffamily_family {#1,#3} {#2}
509 \tl_set_eq:NN \sfdefault \g__fontspec_sffamily_family
510 \use:x { \exp_not:n { \DeclareRobustCommand \sffamily }
512 \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl }
513 \exp_not:N \fontfamily { \g__fontspec_sffamily_family }
514 \exp_not:N \selectfont
517 \str_if_eq_x:nnT {\familydefault} {\sfdefault}
518 { \tl_set_eq:NN \encodingdefault \l__fontspec_nfss_enc_tl }
519 \normalfont
520 \ignorespaces
522 \DeclareDocumentCommand \setmonofont { O{} m O{} }
524 \__fontspec_main_setmonofont:nnn {#1} {#2} {#3}
526 \cs_set:Nn \__fontspec_main_setmonofont:nnn
528 \fontspec_set_family:Nnn \g__fontspec_ttfamily_family {#1,#3} {#2}
529 \tl_set_eq:NN \ttdefault \g__fontspec_ttfamily_family
530 \use:x { \exp_not:n { \DeclareRobustCommand \ttfamily }
532 \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl }
533 \exp_not:N \fontfamily { \g__fontspec_ttfamily_family }
534 \exp_not:N \selectfont
537 \str_if_eq_x:nnT {\familydefault} {\ttdefault}
538 { \tl_set_eq:NN \encodingdefault \l__fontspec_nfss_enc_tl }
539 \normalfont
540 \ignorespaces
542 \DeclareDocumentCommand \setromanfont { O{} m O{} }
544 \__fontspec_main_setmainfont:nnn {#1} {#2} {#3}
546 \DeclareDocumentCommand \setmathrm { O{} m O{} }
548 \__fontspec_main_setmathrm:nnn {#1} {#2} {#3}
550 \cs_set:Nn \__fontspec_main_setmathrm:nnn
552 \fontspec_set_family:Nnn \g__fontspec_mathrm_tl {#1} {#2}
554 \DeclareDocumentCommand \setboldmathrm { O{} m O{} }
556 \__fontspec_main_setboldmathrm:nnn {#1} {#2} {#3}
558 \cs_set:Nn \__fontspec_main_setboldmathrm:nnn
560 \fontspec_set_family:Nnn \g__fontspec_bfmathrm_tl {#1} {#2}
562 \DeclareDocumentCommand \setmathsf { O{} m O{} }
564 \__fontspec_main_setmathsf:nnn {#1} {#2} {#3}
566 \cs_set:Nn \__fontspec_main_setmathsf:nnn
568 \fontspec_set_family:Nnn \g__fontspec_mathsf_tl {#1} {#2}
570 \DeclareDocumentCommand \setmathtt { O{} m O{} }
572 \__fontspec_main_setmathtt:nnn {#1} {#2} {#3}
574 \cs_set:Nn \__fontspec_main_setmathtt:nnn
576 \fontspec_set_family:Nnn \g__fontspec_mathtt_tl {#1} {#2}
578 \@onlypreamble\setmathrm
579 \@onlypreamble\setboldmathrm
580 \@onlypreamble\setmathsf
581 \@onlypreamble\setmathtt
582 \tl_set:Nn \g__fontspec_mathrm_tl {\rmdefault}
583 \tl_set:Nn \g__fontspec_mathsf_tl {\sfdefault}
584 \tl_set:Nn \g__fontspec_mathtt_tl {\ttdefault}
585 \DeclareDocumentCommand \newfontfamily { m O{} m O{} }
587 \__fontspec_main_newfontfamily:nnnn {#1} {#2} {#3} {#4}
589 \cs_set:Nn \__fontspec_main_newfontfamily:nnnn
591 \fontspec_set_family:cnn { g__fontspec_ \cs_to_str:N #1 _family } {#2,#4} {#3}
592 \use:x
594 \exp_not:N \DeclareRobustCommand \exp_not:N #1
596 \exp_not:N \fontfamily { \use:c {g__fontspec_ \cs_to_str:N #1 _family} }
597 \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl }
598 \exp_not:N \selectfont
602 \DeclareDocumentCommand \newfontface { m O{} m O{} }
604 \__fontspec_main_newfontface:nnnn {#1} {#2} {#3} {#4}
606 \cs_set:Nn \__fontspec_main_newfontface:nnnn
608 \newfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
610 \DeclareDocumentCommand \defaultfontfeatures { t+ o m }
612 \IfNoValueTF {#2}
613 { \__fontspec_set_default_features:nn {#1} {#3} }
614 { \__fontspec_set_font_default_features:nnn {#1} {#2} {#3} }
615 \ignorespaces
617 \cs_new:Nn \__fontspec_set_default_features:nn
619 \IfBooleanTF {#1} \clist_put_right:Nn \clist_set:Nn
620 \g__fontspec_default_fontopts_clist {#2}
622 \cs_new:Nn \__fontspec_set_font_default_features:nnn
624 \clist_map_inline:nn {#2}
626 \tl_if_single:nTF {##1}
627 { \tl_set:No \l__fontspec_tmp_tl { \cs:w g__fontspec_ \cs_to_str:N ##1 _family\cs_end: } }
628 { \__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {##1} }
630 \IfBooleanTF {#1}
632 \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl
633 { \tl_clear:N \l__fontspec_tmpb_tl }
634 \tl_put_right:Nn \l__fontspec_tmpb_tl {#3,}
635 \prop_gput:NVV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl
638 \tl_if_empty:nTF {#3}
639 { \prop_gremove:NV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl }
640 { \prop_put:NVn \g__fontspec_fontopts_prop \l__fontspec_tmp_tl {#3,} }
644 \DeclareDocumentCommand \addfontfeatures {m}
646 \__fontspec_main_addfontfeatures:n {#1}
648 \cs_set:Nn \__fontspec_main_addfontfeatures:n
650 \fontspec_if_fontspec_font:TF
652 \group_begin:
653 \keys_set_known:nnN {fontspec-addfeatures} {#1} \l__fontspec_tmp_tl
654 \prop_get:cnN {g__fontspec_ \f@family _prop} {options} \l__fontspec_options_tl
655 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontname} \l__fontspec_fontname_tl
656 \bool_set_true:N \l__fontspec_disable_defaults_bool
657 \use:x
659 \__fontspec_select_font_family:nn
660 { \l__fontspec_options_tl , #1 } {\l__fontspec_fontname_tl}
662 \group_end:
663 \fontfamily\l_fontspec_family_tl\selectfont
666 \__fontspec_warning:nx {addfontfeatures-ignored} {#1}
668 \ignorespaces
670 \cs_set_eq:NN \addfontfeature \addfontfeatures
671 \DeclareDocumentCommand \newfontfeature {mm}
673 \__fontspec_main_newfontfeature:nn {#1} {#2}
675 \cs_set:Nn \__fontspec_main_newfontfeature:nn
677 \keys_define:nn { fontspec }
679 #1 .code:n =
681 \__fontspec_update_featstr:n {#2}
685 \DeclareDocumentCommand \newAATfeature {mmmm}
687 \__fontspec_main_newAATfeature:nnnn {#1} {#2} {#3} {#4}
689 \cs_set:Nn \__fontspec_main_newAATfeature:nnnn
691 \keys_if_exist:nnF { fontspec } {#1}
692 { \__fontspec_define_aat_feature_group:n {#1} }
694 \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
695 { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} }
697 \__fontspec_define_aat_feature:nnnn {#1}{#2}{#3}{#4}
699 \DeclareDocumentCommand \newopentypefeature {mmm}
701 \__fontspec_main_newopentypefeature:nnn {#1} {#2} {#3}
703 \cs_set:Nn \__fontspec_main_newopentypefeature:nnn
705 \keys_if_exist:nnF { fontspec / options } {#1}
706 { \__fontspec_define_opentype_feature_group:n {#1} }
708 \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
709 { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} }
711 \exp_args:Nnnx \__fontspec_define_opentype_feature:nnnnn
712 {#1} {#2} { \__fontspec_strip_plus_minus:n {#3} } {#3} {}
714 \cs_new:Nn \__fontspec_strip_plus_minus:n { \__fontspec_strip_plus_minus_aux:Nq #1 \q_nil }
715 \cs_new:Npn \__fontspec_strip_plus_minus_aux:Nq #1#2 \q_nil
717 \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2}
719 \DeclareDocumentCommand \newICUfeature {mmm}
721 \__fontspec_main_newopentypefeature:nnn {#1} {#2} {#3}
723 \DeclareDocumentCommand \aliasfontfeature {mm}
725 \__fontspec_main_aliasfontfeature:nn {#1} {#2}
727 \cs_set:Nn \__fontspec_main_aliasfontfeature:nn
729 \bool_set_false:N \l__fontspec_alias_bool
731 \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist
733 \keys_if_exist:nnT {##1} {#1}
735 \bool_set_true:N \l__fontspec_alias_bool
736 \keys_define:nn {##1}
737 { #2 .code:n = { \keys_set:nn {##1} { #1 = {####1} } } }
741 \bool_if:NF \l__fontspec_alias_bool
742 { \__fontspec_warning:nx {rename-feature-not-exist} {#1} }
744 \DeclareDocumentCommand \aliasfontfeatureoption {mmm}
746 \__fontspec_main_aliasfontfeatureoption:nnn {#1} {#2} {#3}
748 \cs_set:Nn \__fontspec_main_aliasfontfeatureoption:nnn
750 \bool_set_false:N \l__fontspec_alias_bool
752 \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist
754 \keys_if_exist:nnT { ##1 / #1 } {#2}
756 \bool_set_true:N \l__fontspec_alias_bool
757 \keys_define:nn { ##1 / #1 }
758 { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } }
761 \keys_if_exist:nnT { ##1 / #1 } {#2Reset}
763 \keys_define:nn { ##1 / #1 }
764 { #3Reset .code:n = { \keys_set:nn {##1} { #1 = {#2Reset} } } }
767 \keys_if_exist:nnT { ##1 / #1 } {#2Off}
769 \keys_define:nn { ##1 / #1 }
770 { #3Off .code:n = { \keys_set:nn {##1} { #1 = {#2Off} } } }
774 \bool_if:NF \l__fontspec_alias_bool
775 { \__fontspec_warning:nx {rename-feature-not-exist} {#1/#2} }
777 \DeclareDocumentCommand \newfontscript {mm}
779 \fontspec_new_script:nn {#1} {#2}
781 \DeclareDocumentCommand \newfontlanguage {mm}
783 \fontspec_new_lang:nn {#1} {#2}
785 \DeclareDocumentCommand \DeclareFontsExtensions {m}
787 \__fontspec_main_DeclareFontsExtensions:n {#1}
789 \cs_set:Nn \__fontspec_main_DeclareFontsExtensions:n
791 \clist_set:Nn \l__fontspec_extensions_clist { #1 }
792 \tl_remove_all:Nn \l__fontspec_extensions_clist {~}
794 \DeclareFontsExtensions{.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont}
796 \DeclareDocumentCommand \IfFontFeatureActiveTF {mmm}
798 \__fontspec_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3}
800 \cs_set:Nn \__fontspec_main_IfFontFeatureActiveTF:nnn
802 \__fontspec_if_font_feature:nTF {#1} {#2} {#3}
804 \prg_new_conditional:Nnn \__fontspec_if_font_feature:n {TF}
806 \tl_gclear:N \g__fontspec_single_feat_tl
807 \group_begin:
808 \__fontspec_font_suppress_not_found_error:
809 \__fontspec_init:
810 \bool_set_true:N \l__fontspec_ot_bool
811 \bool_set_true:N \l__fontspec_never_check_bool
812 \bool_set_false:N \l__fontspec_firsttime_bool
813 \clist_clear:N \l__fontspec_fontfeat_clist
814 \__fontspec_get_features:Nn \l__fontspec_rawfeatures_sclist {#1}
815 \group_end:
818 \tl_if_empty:NTF \g__fontspec_single_feat_tl { \prg_return_false: }
820 \exp_args:NV \fontspec_if_current_feature:nTF \g__fontspec_single_feat_tl
821 { \prg_return_true: } { \prg_return_false: }
825 \prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F}
827 \cs_if_exist:cTF {g__fontspec_ \f@family _prop} \prg_return_true: \prg_return_false:
829 \prg_new_conditional:Nnn \fontspec_if_aat_feature:nn {TF,T,F}
831 \fontspec_if_fontspec_font:TF
833 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
834 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
835 \bool_if:NTF \l__fontspec_atsui_bool
837 \__fontspec_make_AAT_feature_string:nnTF {#1}{#2}
838 \prg_return_true: \prg_return_false:
841 \prg_return_false:
845 \prg_return_false:
848 \prg_new_conditional:Nnn \fontspec_if_opentype: {TF,T,F}
850 \fontspec_if_fontspec_font:TF
852 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
853 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
854 \__fontspec_set_font_type:
855 \bool_if:NTF \l__fontspec_ot_bool \prg_return_true: \prg_return_false:
858 \prg_return_false:
861 \prg_new_conditional:Nnn \fontspec_if_feature:n {TF,T,F}
863 \fontspec_if_fontspec_font:TF
865 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
866 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
867 \__fontspec_set_font_type:
868 \bool_if:NTF \l__fontspec_ot_bool
870 \prop_get:cnN {g__fontspec_ \f@family _prop} {script-num} \l__fontspec_tmp_tl
871 \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl}
873 \prop_get:cnN {g__fontspec_ \f@family _prop} {lang-num} \l__fontspec_tmp_tl
874 \int_set:Nn \l__fontspec_language_int {\l__fontspec_tmp_tl}
876 \prop_get:cnN {g__fontspec_ \f@family _prop} {script-tag} \l_fontspec_script_tl
877 \prop_get:cnN {g__fontspec_ \f@family _prop} {lang-tag} \l_fontspec_lang_tl
879 \__fontspec_check_ot_feat:nTF {#1} {\prg_return_true:} {\prg_return_false:}
882 \prg_return_false:
886 \prg_return_false:
889 \prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F}
891 \fontspec_if_fontspec_font:TF
893 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
894 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
895 \__fontspec_set_font_type:
896 \bool_if:NTF \l__fontspec_ot_bool
898 \__fontspec_iv_str_to_num:Nn \l__fontspec_script_int {#1}
899 \__fontspec_iv_str_to_num:Nn \l__fontspec_language_int {#2}
900 \__fontspec_check_ot_feat:nTF {#3} \prg_return_true: \prg_return_false:
902 { \prg_return_false: }
904 { \prg_return_false: }
906 \prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F}
908 \fontspec_if_fontspec_font:TF
910 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
911 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
912 \__fontspec_set_font_type:
913 \bool_if:NTF \l__fontspec_ot_bool
915 \__fontspec_check_script:nTF {#1} \prg_return_true: \prg_return_false:
917 { \prg_return_false: }
919 { \prg_return_false: }
921 \prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F}
923 \fontspec_if_fontspec_font:TF
925 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
926 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
927 \__fontspec_set_font_type:
928 \bool_if:NTF \l__fontspec_ot_bool
930 \prop_get:cnN {g__fontspec_ \f@family _prop} {script-num} \l__fontspec_tmp_tl
931 \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl}
932 \prop_get:cnN {g__fontspec_ \f@family _prop} {script-tag} \l_fontspec_script_tl
934 \__fontspec_check_lang:nTF {#1} \prg_return_true: \prg_return_false:
936 { \prg_return_false: }
938 { \prg_return_false: }
940 \prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F}
942 \fontspec_if_fontspec_font:TF
944 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
945 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
946 \__fontspec_set_font_type:
947 \bool_if:NTF \l__fontspec_ot_bool
949 \tl_set:Nn \l_fontspec_script_tl {#1}
950 \__fontspec_iv_str_to_num:Nn \l__fontspec_script_int {#1}
951 \__fontspec_check_lang:nTF {#2} \prg_return_true: \prg_return_false:
953 { \prg_return_false: }
955 { \prg_return_false: }
957 \prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F}
959 \fontspec_if_fontspec_font:TF
961 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
962 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
963 \__fontspec_set_font_type:
964 \bool_if:NTF \l__fontspec_ot_bool
966 \prop_get:cnN {g__fontspec_ \f@family _prop} {script-tag} \l__fontspec_tmp_tl
967 \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl
968 {\prg_return_true:} {\prg_return_false:}
970 { \prg_return_false: }
972 { \prg_return_false: }
974 \prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F}
976 \fontspec_if_fontspec_font:TF
978 \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl
979 \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt}
980 \__fontspec_set_font_type:
981 \bool_if:NTF \l__fontspec_ot_bool
983 \prop_get:cnN {g__fontspec_ \f@family _prop} {lang-tag} \l__fontspec_tmp_tl
984 \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl
985 {\prg_return_true:} {\prg_return_false:}
987 { \prg_return_false: }
989 { \prg_return_false: }
991 \cs_new:Nn \fontspec_set_family:Nnn
993 \tl_set:Nn \l__fontspec_family_label_tl { #1 }
994 \__fontspec_select_font_family:nn {#2}{#3}
995 \tl_set_eq:NN #1 \l_fontspec_family_tl
997 \cs_generate_variant:Nn \fontspec_set_family:Nnn {c}
998 \cs_new:Nn \fontspec_set_fontface:NNnn
1000 \tl_set:Nn \l__fontspec_family_label_tl { #1 }
1001 \__fontspec_select_font_family:nn {#3}{#4}
1002 \tl_set_eq:NN #1 \l_fontspec_font
1003 \tl_set_eq:NN #2 \l_fontspec_family_tl
1005 \prg_new_conditional:Nnn \fontspec_font_if_exist:n {TF,T,F}
1007 \group_begin:
1008 \__fontspec_init:
1009 \__fontspec_if_detect_external:nT {#1} { \__fontspec_font_is_file: }
1010 \__fontspec_primitive_font_if_exist:nTF { \__fontspec_construct_font_call:nn {#1} {} }
1011 { \group_end: \prg_return_true: }
1012 { \group_end: \prg_return_false: }
1014 \cs_set_eq:NN \IfFontExistsTF \fontspec_font_if_exist:nTF
1016 \prg_new_conditional:Nnn \fontspec_if_current_feature:n {TF,T,F}
1018 \exp_args:Nxx \tl_if_in:nnTF
1019 { \fontname\font } { \tl_to_str:n {#1} }
1020 { \prg_return_true: } { \prg_return_false: }
1022 \prg_new_conditional:Nnn \fontspec_if_small_caps: {TF,T,F}
1024 \__fontspec_if_merge_shape:nTF {sc}
1026 \tl_set_eq:Nc \l__fontspec_smcp_shape_tl { \__fontspec_shape_merge:nn {\f@shape} {sc} }
1029 \tl_set:Nn \l__fontspec_smcp_shape_tl {sc}
1032 \cs_if_exist:cTF { \f@encoding/\f@family/\f@series/\l__fontspec_smcp_shape_tl }
1034 \tl_if_eq:ccTF
1035 { \f@encoding/\f@family/\f@series/\l__fontspec_smcp_shape_tl }
1036 { \f@encoding/\f@family/\f@series/\updefault }
1037 { \prg_return_false: }
1038 { \prg_return_true: }
1040 { \prg_return_false: }
1042 \cs_new_protected:Nn \__fontspec_select_font_family:nn
1044 \group_begin:
1045 \__fontspec_font_suppress_not_found_error:
1046 \__fontspec_init:
1048 \__fontspec_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2}
1049 \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_up_tl {#2}
1050 \__fontspec_sanitise_fontname:Nn \l__fontspec_basename_tl {#2}
1052 \__fontspec_if_detect_external:nT {#2}
1053 { \keys_set:nn {fontspec-preparse-external} {Path} }
1055 \keys_set_known:nn {fontspec-preparse-cfg} {#1}
1057 \__fontspec_init_ttc:n {#2}
1058 \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2}
1060 \__fontspec_extract_all_features:n {#1}
1061 \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist }
1064 \__fontspec_preparse_features:
1065 \__fontspec_load_font:
1066 \__fontspec_set_scriptlang:
1067 \__fontspec_get_features:Nn \l__fontspec_rawfeatures_sclist {}
1068 \bool_set_false:N \l__fontspec_firsttime_bool
1070 \__fontspec_save_family_needed:nTF {#2}
1072 \__fontspec_save_family:nn {#1} {#2}
1076 \group_end:
1078 \cs_set_eq:NN \fontspec_select:nn \__fontspec_select_font_family:nn
1079 \cs_new:Nn \__fontspec_sanitise_fontname:Nn
1081 \tl_set:Nx #1 {#2}
1082 \clist_map_inline:Nn \l__fontspec_extensions_clist
1084 \tl_if_in:NnT #1 {##1}
1086 \tl_remove_once:Nn #1 {##1}
1087 \tl_set:Nn \l__fontspec_extension_tl {##1}
1088 \clist_map_break:
1092 \prg_new_conditional:Nnn \__fontspec_if_detect_external:n {T}
1094 \clist_map_inline:Nn \l__fontspec_extensions_clist
1096 \bool_set_false:N \l__fontspec_tmpa_bool
1097 \exp_args:Nx % <- this should be handled earlier
1098 \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string}
1099 { \bool_set_true:N \l__fontspec_tmpa_bool \clist_map_break: }
1101 \bool_if:NTF \l__fontspec_tmpa_bool \prg_return_true: \prg_return_false:
1103 \cs_new:Nn \__fontspec_init_ttc:n
1105 \str_if_eq_x:nnT { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc}
1107 \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1}
1108 \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1}
1109 \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bfit_tl {#1}
1112 \cs_new:Nn \__fontspec_load_external_fontoptions:Nn
1114 \bool_if:NT \l__fontspec_fontcfg_bool
1116 \__fontspec_sanitise_fontname:Nn #1 {#2}
1117 \tl_set:Nx \l__fontspec_ext_filename_tl {#1.fontspec}
1118 \tl_remove_all:Nn \l__fontspec_ext_filename_tl {~}
1119 \prop_if_in:NVF \g__fontspec_fontopts_prop #1
1121 \exp_args:No \file_if_exist:nT { \l__fontspec_ext_filename_tl }
1122 { \file_input:n { \l__fontspec_ext_filename_tl } }
1126 \cs_new:Nn \__fontspec_extract_all_features:n
1128 \bool_if:NTF \l__fontspec_disable_defaults_bool
1130 \clist_set:Nx \l__fontspec_all_features_clist {#1}
1133 \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist
1134 { \clist_clear:N \l__fontspec_fontopts_clist }
1136 \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist
1137 { \clist_clear:N \l__fontspec_family_fontopts_clist }
1138 \tl_clear:N \l__fontspec_family_label_tl
1140 \clist_set:Nx \l__fontspec_all_features_clist
1142 \g__fontspec_default_fontopts_clist,
1143 \l__fontspec_family_fontopts_clist,
1144 \l__fontspec_fontopts_clist,
1149 \cs_new:Nn \__fontspec_preparse_features:
1152 \__fontspec_keys_set_known:nxN {fontspec-preparse-external}
1153 { \l__fontspec_all_features_clist }
1154 \l__fontspec_keys_leftover_clist
1156 \tl_set_eq:NN \l_fontspec_fontname_tl \l__fontspec_fontname_up_tl
1157 \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_keys_leftover_clist}
1158 \l__fontspec_keys_leftover_clist
1159 \__fontspec_keys_set_known:nxN {fontspec-preparse} {\l__fontspec_keys_leftover_clist}
1160 \l__fontspec_fontfeat_clist
1162 \cs_new:Nn \__fontspec_load_font:
1164 \__fontspec_primitive_font_set:Nnn \l_fontspec_font
1165 { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt}
1166 \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} }
1167 \__fontspec_set_font_type:
1168 \__fontspec_primitive_font_gset:Nnn \l_fontspec_font
1169 { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt}
1170 \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly
1172 \cs_set:Nn \__fontspec_construct_font_call:nnnnnn
1174 " \__fontspec_fontname_wrap:n { #1 #2 #3 }
1175 #4 #5
1176 \str_if_eq_x:nnF {#6}{} {:#6} "
1178 \cs_set:Nn \__fontspec_construct_font_call:nn
1180 \__fontspec_construct_font_call:nnnnnn
1181 {#1}
1182 \l__fontspec_extension_tl
1183 \l__fontspec_ttc_index_tl
1184 \l_fontspec_renderer_tl
1185 \l__fontspec_optical_size_tl
1186 {#2}
1188 \cs_new:Nn \__fontspec_font_is_name:
1190 \cs_set_eq:NN \__fontspec_fontname_wrap:n \use:n
1192 \cs_new:Nn \__fontspec_font_is_file:
1194 \cs_set:Npn \__fontspec_fontname_wrap:n ##1 { [ \l__fontspec_font_path_tl ##1 ] }
1196 \cs_new:Nn \__fontspec_set_scriptlang:
1198 \bool_if:NT \l__fontspec_firsttime_bool
1200 \tl_if_empty:NTF \l__fontspec_script_name_tl
1202 \__fontspec_check_script:nTF {latn}
1204 \tl_set:Nn \l__fontspec_script_name_tl {Latin}
1205 \tl_if_empty:NT \l__fontspec_lang_name_tl
1207 \tl_set:Nn \l__fontspec_lang_name_tl {Default}
1209 \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
1210 \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
1213 \__fontspec_info:n {no-scripts}
1217 \tl_if_empty:NT \l__fontspec_lang_name_tl
1219 \tl_set:Nn \l__fontspec_lang_name_tl {Default}
1221 \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
1222 \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
1226 \cs_set:Nn \__fontspec_get_features:Nn
1228 \__fontspec_init_fontface:
1229 \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#2}
1230 \l__fontspec_keys_leftover_clist
1231 \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist
1232 \bool_if:NTF \l__fontspec_ot_bool
1234 % \tracingall
1235 \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist
1236 % \EROROR
1239 \bool_if:NT \l__fontspec_atsui_bool
1240 { \keys_set:nV {fontspec-aat} \l__fontspec_keys_leftover_clist }
1243 \tl_if_empty:NF \l__fontspec_mapping_tl
1244 { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } }
1246 \str_if_eq_x:nnF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl }
1247 { \g__fontspec_hexcol_tl \g__fontspec_opacity_tl }
1248 { \__fontspec_update_featstr:n { color = \l__fontspec_hexcol_tl\l__fontspec_opacity_tl } }
1250 \tl_set_eq:NN #1 \l__fontspec_rawfeatures_sclist
1252 \prg_new_conditional:Nnn \__fontspec_save_family_needed:n {TF}
1256 \cs_if_exist:NT \l__fontspec_nfss_fam_tl
1258 \cs_set_eq:cN {g__fontspec_UID_\l__fontspec_fontid_tl} \l__fontspec_nfss_fam_tl
1260 \cs_if_exist:cF {g__fontspec_UID_\l__fontspec_fontid_tl}
1262 % The font name is fully expanded, in case it's defined in terms of macros, before having its spaces zapped:
1263 \tl_set:Nx \l__fontspec_tmp_tl {#1}
1264 \tl_remove_all:Nn \l__fontspec_tmp_tl {~}
1266 \cs_if_exist:cTF {g__fontspec_family_ \l__fontspec_tmp_tl _int}
1267 { \int_gincr:c {g__fontspec_family_ \l__fontspec_tmp_tl _int} }
1268 { \int_new:c {g__fontspec_family_ \l__fontspec_tmp_tl _int} }
1270 \tl_gset:cx {g__fontspec_UID_\l__fontspec_fontid_tl}
1272 \l__fontspec_tmp_tl ( \int_use:c {g__fontspec_family_ \l__fontspec_tmp_tl _int} )
1275 \tl_gset:Nv \l_fontspec_family_tl {g__fontspec_UID_\l__fontspec_fontid_tl}
1276 \cs_if_exist:cTF {g__fontspec_ \l_fontspec_family_tl _prop}
1277 \prg_return_false: \prg_return_true:
1279 \cs_new:Nn \__fontspec_save_family:nn
1281 \__fontspec_save_fontinfo:n {#2}
1282 \__fontspec_find_autofonts:
1283 \DeclareFontFamily{\l__fontspec_nfss_enc_tl}{\l_fontspec_family_tl}{}
1284 \__fontspec_set_faces:
1285 \__fontspec_info:nxx {defining-font} {#1} {#2}
1287 \cs_new:Nn \__fontspec_save_fontinfo:n
1289 \prop_new:c {g__fontspec_ \l_fontspec_family_tl _prop}
1290 \prop_gput:cnx {g__fontspec_ \l_fontspec_family_tl _prop} {fontname} { #1 }
1291 \prop_gput:cnx {g__fontspec_ \l_fontspec_family_tl _prop} {options} { \l__fontspec_all_features_clist }
1292 \prop_gput:cnx {g__fontspec_ \l_fontspec_family_tl _prop} {fontdef}
1294 \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl}
1295 { \l__fontspec_pre_feat_sclist \l__fontspec_rawfeatures_sclist }
1297 \prop_gput:cnV {g__fontspec_ \l_fontspec_family_tl _prop} {script-num} \l__fontspec_script_int
1298 \prop_gput:cnV {g__fontspec_ \l_fontspec_family_tl _prop} {lang-num} \l__fontspec_language_int
1299 \prop_gput:cnV {g__fontspec_ \l_fontspec_family_tl _prop} {script-tag} \l_fontspec_script_tl
1300 \prop_gput:cnV {g__fontspec_ \l_fontspec_family_tl _prop} {lang-tag} \l_fontspec_lang_tl
1302 \cs_new:Nn \__fontspec_find_autofonts:
1304 \bool_if:nF {\l__fontspec_noit_bool || \l__fontspec_nobf_bool}
1306 \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B}
1307 \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I}
1308 \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI}
1311 \bool_if:NF \l__fontspec_nobf_bool
1313 \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B}
1316 \bool_if:NF \l__fontspec_noit_bool
1318 \__fontspec_set_autofont:Nnn \l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I}
1321 \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B}
1323 \cs_new:Nn \__fontspec_set_faces:
1325 \__fontspec_add_nfssfont:nnnn \mddefault \updefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist
1326 \__fontspec_add_nfssfont:nnnn \bfdefault \updefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist
1327 \__fontspec_add_nfssfont:nnnn \mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist
1328 \__fontspec_add_nfssfont:nnnn \mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist
1329 \__fontspec_add_nfssfont:nnnn \bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist
1330 \__fontspec_add_nfssfont:nnnn \bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist
1332 \prop_map_inline:Nn \l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn ##2 }
1334 \cs_new:Nn \__fontspec_set_faces_aux:nnnnn
1336 \fontspec_complete_fontname:Nn \l__fontspec_curr_fontname_tl {#3}
1337 \__fontspec_make_font_shapes:Nnnnn \l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5}
1339 \cs_set:Nn \fontspec_complete_fontname:Nn
1341 \tl_set:Nx #1 {#2}
1342 \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl}
1344 \cs_new:Nn \__fontspec_add_nfssfont:nnnn
1346 \tl_set:Nx \l__fontspec_this_font_tl {#3}
1348 \tl_if_empty:xTF {#4}
1349 { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} }
1350 { \__fontspec_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l__fontspec_tmp_tl }
1352 \tl_if_empty:NF \l__fontspec_this_font_tl
1354 \prop_put:Nxx \l__fontspec_nfssfont_prop {#1/#2}
1355 { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} }
1358 \cs_new:Nn \__fontspec_set_font_type:
1360 \bool_set_false:N \l__fontspec_tfm_bool
1361 \bool_set_false:N \l__fontspec_atsui_bool
1362 \bool_set_false:N \l__fontspec_ot_bool
1363 \bool_set_false:N \l__fontspec_mm_bool
1364 \bool_set_false:N \l__fontspec_graphite_bool
1365 \ifcase\XeTeXfonttype\l_fontspec_font
1366 \bool_set_true:N \l__fontspec_tfm_bool
1368 \bool_set_true:N \l__fontspec_atsui_bool
1369 \ifnum\XeTeXcountvariations\l_fontspec_font > \c_zero
1370 \bool_set_true:N \l__fontspec_mm_bool
1373 \bool_set_true:N \l__fontspec_ot_bool
1375 \tl_if_empty:NT \l_fontspec_renderer_tl
1377 \bool_if:NTF \l__fontspec_atsui_bool
1378 { \tl_set:Nn \l_fontspec_renderer_tl {/AAT} }
1380 \bool_if:NT \l__fontspec_ot_bool
1381 { \tl_set:Nn \l_fontspec_renderer_tl {/OT} }
1385 \cs_new:Nn \__fontspec_set_autofont:Nnn
1387 \bool_if:NF \l__fontspec_external_bool
1389 \tl_if_empty:xF {#2}
1391 \tl_if_empty:NT #1
1393 \__fontspec_if_autofont:nnTF {#2} {#3}
1394 { \tl_set:Nx #1 {#2#3} }
1395 { \__fontspec_info:nx {no-font-shape} {#2#3} }
1401 \prg_new_conditional:Nnn \__fontspec_if_autofont:nn {T,TF}
1403 \__fontspec_primitive_font_set:Nnn \l_tmpa_font { \__fontspec_construct_font_call:nn {#1} {} } {\f@size pt}
1404 \__fontspec_primitive_font_set:Nnn \l_tmpb_font { \__fontspec_construct_font_call:nn {#1#2} {} } {\f@size pt}
1405 \str_if_eq_x:nnTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font }
1406 { \prg_return_false: }
1407 { \prg_return_true: }
1409 \cs_new:Nn \__fontspec_make_font_shapes:Nnnnn
1411 \group_begin:
1412 \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l__fontspec_leftover_clist
1413 \__fontspec_load_fontname:n {#1}
1414 \__fontspec_declare_shape:nnxx {#2} {#3} { \l__fontspec_fontopts_clist, \l__fontspec_leftover_clist } {#5}
1415 \group_end:
1418 \cs_new:Nn \__fontspec_load_fontname:n
1420 \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#1}
1421 \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist
1422 { \clist_clear:N \l__fontspec_fontopts_clist }
1423 \__fontspec_primitive_font_set:Nnn \l_fontspec_font { \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} {} } {\f@size pt}
1424 \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {#1} }
1426 \cs_new:Nn \__fontspec_declare_shape:nnnn
1428 \tl_clear:N \l__fontspec_nfss_tl
1429 \tl_clear:N \l__fontspec_nfss_sc_tl
1430 \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl
1432 \exp_args:Nx \clist_map_inline:nn {#4} { \__fontspec_setup_single_size:nn {#3} {##1} }
1434 \__fontspec_declare_shapes_normal:nn {#1} {#2}
1435 \__fontspec_declare_shapes_smcaps:nn {#1} {#2}
1436 \__fontspec_declare_shape_slanted:nn {#1} {#2}
1437 \__fontspec_declare_shape_loginfo:nn {#1} {#2}
1439 \cs_generate_variant:Nn \__fontspec_declare_shape:nnnn {nnxx}
1440 \cs_new:Nn \__fontspec_setup_single_size:nn
1442 \tl_clear:N \l__fontspec_size_tl
1443 \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed
1445 \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n #2 }
1446 \l__fontspec_sizing_leftover_clist
1447 \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} }
1449 % "normal"
1450 \__fontspec_load_fontname:n {\l__fontspec_sizedfont_tl}
1451 \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#1} {\l__fontspec_sizing_leftover_clist} {}
1453 % small caps
1454 \clist_set_eq:NN \l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist
1456 \bool_if:NF \l__fontspec_nosc_bool
1458 \tl_if_empty:NTF \l__fontspec_fontname_sc_tl
1460 \__fontspec_make_smallcaps:TF
1462 \clist_put_left:Nn \l__fontspec_fontfeat_curr_clist {Letters=SmallCaps}
1465 \bool_set_true:N \l__fontspec_nosc_bool
1468 { \__fontspec_load_fontname:n {\l__fontspec_fontname_sc_tl} }% local for each size
1471 \bool_if:NF \l__fontspec_nosc_bool
1473 \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl
1474 {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist}
1477 \cs_new:Nn \__fontspec_setup_nfss:Nnnn
1480 \__fontspec_get_features:Nn \l__fontspec_rawfeatures_sclist { #2 , #3 , #4 }
1482 \tl_put_right:Nx #1
1484 <\l__fontspec_size_tl> \l__fontspec_scale_tl
1485 \__fontspec_construct_font_call:nn { \l_fontspec_fontname_tl }
1486 { \l__fontspec_pre_feat_sclist \l__fontspec_rawfeatures_sclist }
1489 \cs_new:Nn \__fontspec_declare_shapes_normal:nn
1491 \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl} {\l_fontspec_family_tl}
1492 {#1} {#2} {\l__fontspec_nfss_tl}{\l__fontspec_postadjust_tl}
1494 \cs_new:Nn \__fontspec_declare_shapes_smcaps:nn
1496 \tl_if_empty:NF \l__fontspec_nfss_sc_tl
1498 \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl} {\l_fontspec_family_tl} {#1}
1499 { \__fontspec_combo_sc_shape:n {#2} } {\l__fontspec_nfss_sc_tl} {\l__fontspec_postadjust_tl}
1503 \cs_new:Nn \__fontspec_combo_sc_shape:n
1505 \tl_if_exist:cTF { \__fontspec_shape_merge:nn {#1} {\scdefault} }
1506 { \tl_use:c { \__fontspec_shape_merge:nn {#1} {\scdefault} } }
1507 { \scdefault }
1509 \cs_new:Nn \__fontspec_DeclareFontShape:nnnnnn
1511 \group_begin:
1512 \normalsize
1513 \cs_undefine:c {#1/#2/#3/#4/\f@size}
1514 \group_end:
1515 \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6}
1517 \cs_generate_variant:Nn \__fontspec_DeclareFontShape:nnnnnn {xxxxxx}
1518 \cs_new:Nn \__fontspec_declare_shape_slanted:nn
1520 \bool_if:nT
1522 \str_if_eq_x_p:nn {#2} {\itdefault} &&
1523 !(\str_if_eq_x_p:nn {\itdefault} {\sldefault})
1526 \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl}{\l_fontspec_family_tl}{#1}{\sldefault}
1527 {<->ssub*\l_fontspec_family_tl/#1/\itdefault}{\l__fontspec_postadjust_tl}
1530 \cs_new:Nn \__fontspec_declare_shape_loginfo:nn
1532 \tl_gput_right:Nx \l_fontspec_defined_shapes_tl
1534 \exp_not:n { \\ }
1535 -~ \exp_not:N \str_case:nn {#1/#2}
1537 {\mddefault/\updefault} {'normal'~}
1538 {\bfdefault/\updefault} {'bold'~}
1539 {\mddefault/\itdefault} {'italic'~}
1540 {\mddefault/\sldefault} {'slanted'~}
1541 {\bfdefault/\itdefault} {'bold~ italic'~}
1542 {\bfdefault/\sldefault} {'bold~ slanted'~}
1543 } (#1/#2)~
1544 with~ NFSS~ spec.:~
1545 \l__fontspec_nfss_tl
1546 \exp_not:n { \\ }
1547 -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} }
1549 {\mddefault/\scdefault} {'small~ caps'~}
1550 {\bfdefault/\scdefault} {'bold~ small~ caps'~}
1551 {\mddefault/\itscdefault} {'italic~ small~ caps'~}
1552 {\bfdefault/\itscdefault} {'bold~ italic~ small~ caps'~}
1553 {\mddefault/\slscdefault} {'slanted~ small~ caps'~}
1554 {\bfdefault/\slscdefault} {'bold~ slanted~ small~ caps'~}
1555 }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~
1556 with~ NFSS~ spec.:~
1557 \l__fontspec_nfss_sc_tl
1558 \tl_if_empty:fF {\l__fontspec_postadjust_tl}
1560 \exp_not:N \\ and~ font~ adjustment~ code: \exp_not:N \\ \l__fontspec_postadjust_tl
1564 \tl_set:Nn \l__fontspec_pre_feat_sclist
1566 \bool_if:NT \l__fontspec_ot_bool
1568 \tl_if_empty:NF \l_fontspec_script_tl
1570 script = \l_fontspec_script_tl ;
1571 language = \l_fontspec_lang_tl ;
1575 \cs_set:Nn \__fontspec_make_ot_smallcaps:TF
1577 \__fontspec_check_ot_feat:nTF {smcp} {#1} {#2}
1579 \cs_set:Nn \__fontspec_make_smallcaps:TF
1581 \bool_if:NTF \l__fontspec_ot_bool
1582 { \__fontspec_make_ot_smallcaps:TF {#1} {#2} }
1584 \bool_if:NT \l__fontspec_atsui_bool
1585 { \__fontspec_make_AAT_feature_string:nnTF {3}{3} {#1} {#2} }
1588 \cs_new:Nn \__fontspec_update_featstr:n
1590 \bool_if:NF \l__fontspec_firsttime_bool
1592 \tl_gset:Nx \g__fontspec_single_feat_tl { #1 }
1593 \tl_gput_right:Nx \l__fontspec_rawfeatures_sclist {#1;}
1596 \cs_new:Nn \__fontspec_remove_clashing_featstr:n
1598 \clist_map_inline:nn {#1}
1600 \tl_gremove_all:Nn \l__fontspec_rawfeatures_sclist {##1;}
1603 \cs_set:Npn \__fontspec_init:
1605 \bool_set_false:N \l__fontspec_ot_bool
1606 \bool_set_true:N \l__fontspec_firsttime_bool
1607 \__fontspec_font_is_name:
1608 \tl_clear:N \l__fontspec_font_path_tl
1609 \tl_clear:N \l__fontspec_optical_size_tl
1610 \tl_clear:N \l__fontspec_ttc_index_tl
1611 \tl_clear:N \l_fontspec_renderer_tl
1612 \tl_clear:N \l_fontspec_defined_shapes_tl
1613 \tl_clear:N \g__fontspec_curr_series_tl
1614 \tl_gset_eq:NN \l__fontspec_nfss_enc_tl \g_fontspec_encoding_tl
1617 \cs_new:Nn \__fontspec_init_fontface:
1619 \tl_clear:N \l__fontspec_rawfeatures_sclist
1620 \tl_clear:N \l__fontspec_scale_tl
1621 \tl_set_eq:NN \l__fontspec_opacity_tl \g__fontspec_opacity_tl
1622 \tl_set_eq:NN \l__fontspec_hexcol_tl \g__fontspec_hexcol_tl
1623 \tl_set_eq:NN \l__fontspec_postadjust_tl \g__fontspec_postadjust_tl
1624 \tl_clear:N \l__fontspec_wordspace_adjust_tl
1625 \tl_clear:N \l__fontspec_punctspace_adjust_tl
1627 \cs_set:Nn \__fontspec_iv_str_to_num:Nn
1629 \__fontspec_strip_leading_sign:Nw #1#2 \q_nil
1631 \cs_set:Npn \__fontspec_strip_leading_sign:Nw #1#2#3 \q_nil
1633 \bool_if:nTF { \str_if_eq_p:nn {#2} {+} || \str_if_eq_p:nn {#2} {-} }
1634 { \__fontspec_iv_str_to_num:w #1 \q_nil #3 \c_empty_tl \c_empty_tl \q_nil }
1635 { \__fontspec_iv_str_to_num:w #1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil }
1637 \cs_set:Npn \__fontspec_iv_str_to_num:w #1 \q_nil #2#3#4#5#6 \q_nil
1639 \int_set:Nn #1
1641 `#2 * "1000000
1642 + `#3 * "10000
1643 + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100
1644 + \ifx \c_empty_tl #5 32 \else `#5 \fi
1647 \cs_generate_variant:Nn \__fontspec_iv_str_to_num:Nn {No}
1648 \cs_new:Nn \__fontspec_define_opentype_feature_group:n
1650 \keys_define:nn {fontspec-opentype} { #1 .multichoice: }
1652 \cs_new:Nn \__fontspec_feat_prop_add:nn
1654 \tl_if_empty:nF {#1}
1656 \prop_if_in:NnF \g__fontspec_OT_features_prop {#1}
1658 \prop_gput:Nnn \g__fontspec_OT_features_prop {#1} {#2}
1662 \cs_new:Nn \__fontspec_define_opentype_feature:nnnnn
1664 \__fontspec_feat_prop_add:nn {#3} {#1\,=\,#2}
1665 \tl_if_empty:nTF {#4}
1667 \keys_define:nn {fontspec-opentype}
1669 #1/#2 .code:n =
1670 { \__fontspec_remove_clashing_featstr:n {#5} }
1674 \keys_define:nn {fontspec-opentype}
1676 #1/#2 .code:n =
1678 \__fontspec_make_OT_feature:nnn {#3} {#4} {#5}
1683 \cs_new:Nn \__fontspec_feat_off:n {#1Off}
1684 \cs_new:Nn \__fontspec_feat_reset:n {#1Reset}
1685 \cs_new:Nn \__fontspec_define_opentype_onoffreset:nnnnn
1687 \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5}
1688 \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_off:n {#2} } {#3} {-#4} {}
1689 \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {+#4,-#4}
1691 \cs_new:Nn \__fontspec_define_opentype_onreset:nnnnn
1693 \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5}
1694 \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {#4}
1696 \cs_new:Nn \__fontspec_make_OT_feature:nnn
1699 \bool_set_true:N \l__fontspec_proceed_bool
1700 \bool_set_true:N \l__fontspec_check_feat_bool
1702 \tl_if_empty:nT {#1} { \bool_set_false:N \l__fontspec_check_feat_bool }
1703 \bool_if:NT \l__fontspec_check_feat_bool
1705 \__fontspec_check_ot_feat:nF {#1}
1707 \__fontspec_warning:nx {icu-feature-not-exist-in-font} {#1}
1708 \bool_set_false:N \l__fontspec_proceed_bool
1712 \bool_if:NT \l__fontspec_proceed_bool
1714 \exp_args:Nx \__fontspec_remove_clashing_featstr:n
1715 { #2 , \__fontspec_swap_plus_minus:n {#2} , #3 }
1717 \__fontspec_update_featstr:n {#2}
1720 \cs_generate_variant:Nn \__fontspec_make_OT_feature:nnn {xxx}
1721 \cs_new:Nn \__fontspec_swap_plus_minus:n { \__fontspec_swap_plus_minus_aux:Nq #1 \q_nil }
1722 \cs_new:Npn \__fontspec_swap_plus_minus_aux:Nq #1#2 \q_nil
1723 { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } }
1724 \prg_new_conditional:Nnn \__fontspec_check_script:n {TF}
1726 \bool_if:NTF \l__fontspec_never_check_bool
1727 { \prg_return_true: }
1729 \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#1}
1730 \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts \l_fontspec_font }
1731 \int_zero:N \l_tmpa_int
1732 \bool_set_false:N \l__fontspec_check_bool
1733 \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int }
1735 \ifnum \XeTeXOTscripttag\l_fontspec_font \l_tmpa_int = \l__fontspec_strnum_int
1736 \bool_set_true:N \l__fontspec_check_bool
1737 \int_set:Nn \l_tmpa_int {\l_tmpb_int}
1738 \else
1739 \int_incr:N \l_tmpa_int
1742 \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
1745 \prg_new_conditional:Nnn \__fontspec_check_lang:n {TF}
1747 \bool_if:NTF \l__fontspec_never_check_bool
1748 { \prg_return_true: }
1750 \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#1}
1751 \int_set:Nn \l_tmpb_int
1752 { \XeTeXOTcountlanguages \l_fontspec_font \l__fontspec_script_int }
1753 \int_zero:N \l_tmpa_int
1754 \bool_set_false:N \l__fontspec_check_bool
1755 \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int }
1757 \ifnum\XeTeXOTlanguagetag\l_fontspec_font\l__fontspec_script_int \l_tmpa_int =\l__fontspec_strnum_int
1758 \bool_set_true:N \l__fontspec_check_bool
1759 \int_set:Nn \l_tmpa_int {\l_tmpb_int}
1760 \else
1761 \int_incr:N \l_tmpa_int
1764 \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
1767 \prg_new_conditional:Nnn \__fontspec_check_ot_feat:n {TF,F}
1769 \bool_if:NTF \l__fontspec_never_check_bool
1770 { \prg_return_true: }
1772 \int_set:Nn \l_tmpb_int
1774 \XeTeXOTcountfeatures \l_fontspec_font
1775 \l__fontspec_script_int
1776 \l__fontspec_language_int
1778 \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#1}
1779 \int_zero:N \l_tmpa_int
1780 \bool_set_false:N \l__fontspec_check_bool
1781 \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int }
1783 \ifnum\XeTeXOTfeaturetag\l_fontspec_font\l__fontspec_script_int\l__fontspec_language_int
1784 \l_tmpa_int =\l__fontspec_strnum_int
1785 \bool_set_true:N \l__fontspec_check_bool
1786 \int_set:Nn \l_tmpa_int {\l_tmpb_int}
1787 \else
1788 \int_incr:N \l_tmpa_int
1791 \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
1794 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {aalt}{Access~All~Alternates}
1795 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvf}{Above-base~Forms}
1796 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvm}{Above-base~Mark~Positioning}
1797 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvs}{Above-base~Substitutions}
1798 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {afrc}{Alternative~Fractions}
1799 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {akhn}{Akhands}
1800 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blwf}{Below-base~Forms}
1801 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blwm}{Below-base~Mark~Positioning}
1802 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blws}{Below-base~Substitutions}
1803 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {calt}{Contextual~Alternates}
1804 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {case}{Case-Sensitive~Forms}
1805 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ccmp}{Glyph~Composition~/~Decomposition}
1806 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cfar}{Conjunct~Form~After~Ro}
1807 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cjct}{Conjunct~Forms}
1808 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {clig}{Contextual~Ligatures}
1809 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cpct}{Centered~CJK~Punctuation}
1810 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cpsp}{Capital~Spacing}
1811 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cswh}{Contextual~Swash}
1812 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {curs}{Cursive~Positioning}
1813 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cvNN}{Character~Variant~$N$}
1814 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {c2pc}{Petite~Capitals~From~Capitals}
1815 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {c2sc}{Small~Capitals~From~Capitals}
1816 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dist}{Distances}
1817 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dlig}{Discretionary~Ligatures}
1818 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dnom}{Denominators}
1819 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dtls}{Dotless~Forms}
1820 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {expt}{Expert~Forms}
1821 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {falt}{Final~Glyph~on~Line~Alternates}
1822 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fin2}{Terminal~Forms~\#2}
1823 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fin3}{Terminal~Forms~\#3}
1824 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fina}{Terminal~Forms}
1825 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {flac}{Flattened~accent~forms}
1826 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {frac}{Fractions}
1827 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fwid}{Full~Widths}
1828 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {half}{Half~Forms}
1829 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {haln}{Halant~Forms}
1830 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {halt}{Alternate~Half~Widths}
1831 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hist}{Historical~Forms}
1832 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hkna}{Horizontal~Kana~Alternates}
1833 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hlig}{Historical~Ligatures}
1834 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hngl}{Hangul}
1835 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hojo}{Hojo~Kanji~Forms}
1836 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hwid}{Half~Widths}
1837 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {init}{Initial~Forms}
1838 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {isol}{Isolated~Forms}
1839 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ital}{Italics}
1840 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jalt}{Justification~Alternates}
1841 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp78}{JIS78~Forms}
1842 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp83}{JIS83~Forms}
1843 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp90}{JIS90~Forms}
1844 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp04}{JIS2004~Forms}
1845 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {kern}{Kerning}
1846 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {lfbd}{Left~Bounds}
1847 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {liga}{Standard~Ligatures}
1848 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ljmo}{Leading~Jamo~Forms}
1849 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {lnum}{Lining~Figures}
1850 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {locl}{Localized~Forms}
1851 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ltra}{Left-to-right~alternates}
1852 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ltrm}{Left-to-right~mirrored~forms}
1853 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mark}{Mark~Positioning}
1854 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {med2}{Medial~Forms~\#2}
1855 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {medi}{Medial~Forms}
1856 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mgrk}{Mathematical~Greek}
1857 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mkmk}{Mark~to~Mark~Positioning}
1858 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mset}{Mark~Positioning~via~Substitution}
1859 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nalt}{Alternate~Annotation~Forms}
1860 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nlck}{NLC~Kanji~Forms}
1861 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nukt}{Nukta~Forms}
1862 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {numr}{Numerators}
1863 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {onum}{Oldstyle~Figures}
1864 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {opbd}{Optical~Bounds}
1865 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ordn}{Ordinals}
1866 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ornm}{Ornaments}
1867 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {palt}{Proportional~Alternate~Widths}
1868 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pcap}{Petite~Capitals}
1869 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pkna}{Proportional~Kana}
1870 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pnum}{Proportional~Figures}
1871 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pref}{Pre-Base~Forms}
1872 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pres}{Pre-base~Substitutions}
1873 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pstf}{Post-base~Forms}
1874 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {psts}{Post-base~Substitutions}
1875 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pwid}{Proportional~Widths}
1876 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {qwid}{Quarter~Widths}
1877 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rand}{Randomize}
1878 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rclt}{Required~Contextual~Alternates}
1879 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rkrf}{Rakar~Forms}
1880 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rlig}{Required~Ligatures}
1881 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rphf}{Reph~Forms}
1882 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtbd}{Right~Bounds}
1883 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtla}{Right-to-left~alternates}
1884 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtlm}{Right-to-left~mirrored~forms}
1885 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ruby}{Ruby~Notation~Forms}
1886 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rvrn}{Required~Variation~Alternates}
1887 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {salt}{Stylistic~Alternates}
1888 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {sinf}{Scientific~Inferiors}
1889 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {size}{Optical~size}
1890 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {smcp}{Small~Capitals}
1891 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {smpl}{Simplified~Forms}
1892 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ssNN}{Stylistic~Set~$N$}
1893 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ssty}{Math~script~style~alternates}
1894 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {stch}{Stretching~Glyph~Decomposition}
1895 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {subs}{Subscript}
1896 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {sups}{Superscript}
1897 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {swsh}{Swash}
1898 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {titl}{Titling}
1899 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tjmo}{Trailing~Jamo~Forms}
1900 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tnam}{Traditional~Name~Forms}
1901 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tnum}{Tabular~Figures}
1902 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {trad}{Traditional~Forms}
1903 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {twid}{Third~Widths}
1904 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {unic}{Unicase}
1905 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {valt}{Alternate~Vertical~Metrics}
1906 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vatu}{Vattu~Variants}
1907 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vert}{Vertical~Writing}
1908 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vhal}{Alternate~Vertical~Half~Metrics}
1909 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vjmo}{Vowel~Jamo~Forms}
1910 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vkna}{Vertical~Kana~Alternates}
1911 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vkrn}{Vertical~Kerning}
1912 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vpal}{Proportional~Alternate~Vertical~Metrics}
1913 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrt2}{Vertical~Alternates~and~Rotation}
1914 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation}
1915 \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {zero}{Slashed~Zero}
1918 \cs_new:Nn \__fontspec_define_aat_feature_group:n
1919 { \keys_define:nn {fontspec-aat} { #1 .multichoice: } }
1920 \cs_new:Nn \__fontspec_define_aat_feature:nnnn
1922 \keys_define:nn {fontspec-aat}
1924 #1/#2 .code:n = { \__fontspec_make_AAT_feature:nn {#3}{#4} }
1928 \cs_new:Nn \__fontspec_make_AAT_feature:nn
1930 \tl_if_empty:nTF {#1}
1931 { \__fontspec_warning:n {aat-feature-not-exist} }
1933 \__fontspec_make_AAT_feature_string:nnTF {#1}{#2}
1935 \__fontspec_update_featstr:n {\l_fontspec_feature_string_tl}
1937 { \__fontspec_warning:nx {aat-feature-not-exist-in-font} {#1,#2} }
1940 \prg_new_conditional:Nnn \__fontspec_make_AAT_feature_string:nn {TF,T,F}
1942 \tl_set:Nx \l_tmpa_tl { \XeTeXfeaturename \l_fontspec_font #1 }
1943 \tl_if_empty:NTF \l_tmpa_tl
1944 { \prg_return_false: }
1946 \int_compare:nTF { \XeTeXisexclusivefeature\l_fontspec_font #1 > 0 }
1948 \tl_set:Nx \l_tmpb_tl {\XeTeXselectorname\l_fontspec_font #1\space #2}
1951 \int_if_even:nTF {#2}
1953 \tl_set:Nx \l_tmpb_tl {\XeTeXselectorname\l_fontspec_font #1\space #2}
1956 \tl_set:Nx \l_tmpb_tl
1958 \XeTeXselectorname\l_fontspec_font #1\space \numexpr#2-1\relax
1960 \tl_if_empty:NF \l_tmpb_tl { \tl_put_left:Nn \l_tmpb_tl {!} }
1963 \tl_if_empty:NTF \l_tmpb_tl
1964 { \prg_return_false: }
1966 \tl_set:Nx \l_fontspec_feature_string_tl { \l_tmpa_tl = \l_tmpb_tl }
1967 \prg_return_true:
1972 \clist_set:Nn \g__fontspec_all_keyval_modules_clist
1974 fontspec, fontspec-opentype, fontspec-aat,
1975 fontspec-preparse, fontspec-preparse-cfg, fontspec-preparse-external, fontspec-preparse-nested,
1976 fontspec-renderer
1978 \cs_new:Nn \__fontspec_keys_define_code:nnn
1980 \keys_define:nn {#1} { #2 .code:n = {#3} }
1982 \cs_new:Nn \__fontspec_aff_error:n
1984 \__fontspec_keys_define_code:nnn {fontspec-addfeatures} {#1}
1985 { \__fontspec_error:nx {not-in-addfontfeatures} {#1} }
1987 \__fontspec_keys_define_code:nnn {fontspec-preparse-cfg} {IgnoreFontspecFile}
1989 \bool_set_false:N \l__fontspec_fontcfg_bool
1991 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {IgnoreFontspecFile}
1993 \bool_set_false:N \l__fontspec_fontcfg_bool
1995 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Path}
1997 \bool_set_true:N \l__fontspec_nobf_bool
1998 \bool_set_true:N \l__fontspec_noit_bool
1999 \bool_set_true:N \l__fontspec_external_bool
2000 \tl_set:Nn \l__fontspec_font_path_tl {#1}
2001 \__fontspec_font_is_file:
2002 \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
2004 \aliasfontfeature{Path}{ExternalLocation}
2005 \__fontspec_keys_define_code:nnn {fontspec} {Path} {}
2006 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Extension}
2008 \tl_set:Nn \l__fontspec_extension_tl {#1}
2009 \bool_if:NF \l__fontspec_external_bool
2011 \keys_set:nn {fontspec-preparse-external} {Path}
2014 \tl_clear:N \l__fontspec_extension_tl
2015 \__fontspec_keys_define_code:nnn {fontspec} {Extension} {}
2016 \keys_define:nn {fontspec-renderer}
2018 Renderer .choices:nn =
2019 {AAT,ICU,OpenType,Graphite,Full,Basic}
2021 \int_compare:nTF {\l_keys_choice_int <= 4} {
2022 \tl_set:Nv \l_fontspec_renderer_tl
2023 { g_fontspec_renderer_tag_ \l_keys_choice_tl }
2024 \tl_gset:Nx \g__fontspec_single_feat_tl { \l_fontspec_renderer_tl }
2027 \__fontspec_warning:nx {only-luatex-feature} {Renderer=Full/Basic}
2031 \tl_set:cn {g_fontspec_renderer_tag_AAT} {/AAT}
2032 \tl_set:cn {g_fontspec_renderer_tag_ICU} {/OT}
2033 \tl_set:cn {g_fontspec_renderer_tag_OpenType} {/OT}
2034 \tl_set:cn {g_fontspec_renderer_tag_Graphite} {/GR}
2035 \tl_set:cn {g_fontspec_mode_tag_Full} {node}
2036 \tl_set:cn {g_fontspec_mode_tag_Basic} {base}
2037 \__fontspec_keys_define_code:nnn {fontspec-preparse} {Script}
2039 \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
2040 \tl_set:Nn \l__fontspec_script_name_tl {#1}
2042 \__fontspec_keys_define_code:nnn {fontspec-preparse} {Language}
2044 \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
2045 \tl_set:Nn \l__fontspec_lang_name_tl {#1}
2047 \__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex}
2049 \str_if_eq_x:nnF { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc}
2050 { \__fontspec_warning:n {font-index-needs-ttc} }
2051 \tl_set:Nn \l__fontspec_ttc_index_tl {:#1}
2053 \__fontspec_keys_define_code:nnn {fontspec} {FontIndex}
2055 \tl_set:Nn \l__fontspec_ttc_index_tl {:#1}
2057 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSeries}
2059 \tl_gset:Nx \g__fontspec_curr_series_tl { #1 }
2060 \seq_gput_right:Nx \g__fontspec_bf_series_seq { #1 }
2062 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont}
2064 \fontspec_complete_fontname:Nn \l__fontspec_fontname_up_tl {#1}
2066 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {FontName}
2068 \fontspec_complete_fontname:Nn \l__fontspec_fontname_up_tl {#1}
2070 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldFont}
2072 \tl_if_empty:nTF {#1}
2074 \bool_set_true:N \l__fontspec_nobf_bool
2077 \bool_set_false:N \l__fontspec_nobf_bool
2078 \fontspec_complete_fontname:Nn \l__fontspec_curr_bfname_tl {#1}
2080 \seq_if_empty:NT \g__fontspec_bf_series_seq
2082 \tl_gset:Nx \g__fontspec_curr_series_tl {\bfdefault}
2083 \seq_put_right:Nx \g__fontspec_bf_series_seq {\bfdefault}
2085 \tl_if_eq:oxT \g__fontspec_curr_series_tl {\bfdefault}
2086 { \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l__fontspec_curr_bfname_tl }
2089 \prop_put:NxV \l__fontspec_nfss_prop
2090 {BoldFont-\g__fontspec_curr_series_tl} \l__fontspec_curr_bfname_tl
2094 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont}
2096 \tl_if_empty:nTF {#1}
2098 \bool_set_true:N \l__fontspec_noit_bool
2101 \bool_set_false:N \l__fontspec_noit_bool
2102 \fontspec_complete_fontname:Nn \l__fontspec_fontname_it_tl {#1}
2105 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont}
2107 \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfit_tl {#1}
2109 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont}
2111 \fontspec_complete_fontname:Nn \l__fontspec_fontname_sl_tl {#1}
2113 \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont}
2115 \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfsl_tl {#1}
2117 \__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFont}
2119 \tl_if_empty:nTF {#1}
2121 \bool_set_true:N \l__fontspec_nosc_bool
2124 \bool_set_false:N \l__fontspec_nosc_bool
2125 \fontspec_complete_fontname:Nn \l__fontspec_fontname_sc_tl {#1}
2128 \__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures}
2130 \clist_set:Nn \l__fontspec_fontfeat_up_clist {#1}
2132 \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures}
2134 \clist_set:Nn \l__fontspec_fontfeat_bf_clist {#1}
2137 \__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures}
2139 \clist_set:Nn \l__fontspec_fontfeat_it_clist {#1}
2141 \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures}
2143 \clist_set:Nn \l__fontspec_fontfeat_bfit_clist {#1}
2145 \__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures}
2147 \clist_set:Nn \l__fontspec_fontfeat_sl_clist {#1}
2149 \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures}
2151 \clist_set:Nn \l__fontspec_fontfeat_bfsl_clist {#1}
2153 \__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures}
2155 \bool_if:NF \l__fontspec_firsttime_bool
2157 \clist_set:Nn \l__fontspec_fontfeat_sc_clist {#1}
2160 \__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures}
2162 \clist_set:Nn \l__fontspec_sizefeat_clist {#1}
2163 \clist_put_right:Nn \l__fontspec_fontfeat_up_clist { SizeFeatures = {#1} }
2165 \__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures}
2167 \clist_set:Nn \l__fontspec_sizefeat_clist {#1}
2168 \tl_if_empty:NT \l__fontspec_this_font_tl
2169 { \tl_set:Nn \l__fontspec_this_font_tl { -- } } % needs to be non-empty as a flag
2171 \__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {Font}
2173 \tl_set:Nn \l__fontspec_this_font_tl {#1}
2175 \__fontspec_keys_define_code:nnn {fontspec} {SizeFeatures}
2177 % dummy
2179 \__fontspec_keys_define_code:nnn {fontspec} {Font}
2181 % dummy
2183 \__fontspec_keys_define_code:nnn {fontspec-sizing} {Size}
2185 \tl_set:Nn \l__fontspec_size_tl {#1}
2187 \__fontspec_keys_define_code:nnn {fontspec-sizing} {Font}
2189 \fontspec_complete_fontname:Nn \l__fontspec_sizedfont_tl {#1}
2191 \__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding}
2193 \tl_gset:Nx \l__fontspec_nfss_enc_tl { #1 }
2195 \__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSFamily}
2197 \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 }
2198 \cs_undefine:c {g__fontspec_UID_\l__fontspec_fontid_tl}
2199 \tl_if_exist:NT \l_fontspec_family_tl
2200 { \cs_undefine:c {g__fontspec_ \l_fontspec_family_tl _prop} }
2202 \__fontspec_keys_define_code:nnn {fontspec} {FontFace}
2204 \tl_set:No \l__fontspec_arg_tl { \use_iii:nnn #1 }
2205 \tl_set_eq:NN \l__fontspec_this_feat_tl \l__fontspec_arg_tl
2206 \tl_clear:N \l__fontspec_this_font_tl
2207 \int_compare:nT { \clist_count:N \l__fontspec_arg_tl = 1 }
2209 \tl_if_in:NnF \l__fontspec_arg_tl {=}
2211 \tl_set_eq:NN \l__fontspec_this_font_tl \l__fontspec_arg_tl
2212 \tl_clear:N \l__fontspec_this_feat_tl
2216 \__fontspec_add_nfssfont:nnnn
2217 {\use_i:nnn #1}{\use_ii:nnn #1}{\l__fontspec_this_font_tl}{\l__fontspec_this_feat_tl}
2219 \__fontspec_keys_define_code:nnn {fontspec} {Scale}
2221 \str_case:nnF {#1}
2223 {MatchLowercase} { \__fontspec_calc_scale:n {5} }
2224 {MatchUppercase} { \__fontspec_calc_scale:n {8} }
2226 { \tl_set:Nx \l__fontspec_scale_tl {#1} }
2227 \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] }
2229 \cs_new:Nn \__fontspec_calc_scale:n
2231 \group_begin:
2233 \fontencoding { \encodingdefault }
2234 \fontfamily { \rmdefault }
2235 \selectfont
2237 \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font
2238 \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l_fontspec_font
2240 \tl_gset:Nx \l__fontspec_scale_tl
2242 \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} /
2243 \dim_to_fp:n {\l__fontspec_tmpb_dim} }
2246 \__fontspec_info:n {set-scale}
2247 \group_end:
2249 \cs_new:Nn \__fontspec_set_font_dimen:NnN
2251 \dim_set:Nn #1 { \fontdimen #2 #3 }
2252 \dim_compare:nNnT #1 = {0pt}
2254 \settoheight #1
2256 \str_if_eq:nnTF {#3} {\font} \rmfamily #3
2257 \int_case:nnF #2
2259 {5} {x} % x-height
2260 {8} {X} % cap-height
2261 } {?} % "else" clause; never reached.
2265 \__fontspec_keys_define_code:nnn {fontspec} {WordSpace}
2267 \bool_if:NF \l__fontspec_firsttime_bool
2268 { \_fontspec_parse_wordspace:w #1,,,\q_stop }
2270 \__fontspec_aff_error:n {WordSpace}
2271 \cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop
2273 \tl_if_empty:nTF {#4}
2275 \tl_set:Nn \l__fontspec_wordspace_adjust_tl
2277 \fontdimen 2 \font = #1 \fontdimen 2 \font
2278 \fontdimen 3 \font = #1 \fontdimen 3 \font
2279 \fontdimen 4 \font = #1 \fontdimen 4 \font
2283 \tl_set:Nn \l__fontspec_wordspace_adjust_tl
2285 \fontdimen 2 \font = #1 \fontdimen 2 \font
2286 \fontdimen 3 \font = #2 \fontdimen 3 \font
2287 \fontdimen 4 \font = #3 \fontdimen 4 \font
2291 \__fontspec_keys_define_code:nnn {fontspec} {PunctuationSpace}
2293 \str_case_x:nnF {#1}
2295 {WordSpace}
2297 \tl_set:Nn \l__fontspec_punctspace_adjust_tl
2298 { \fontdimen 7 \font = 0 \fontdimen 2 \font }
2300 {TwiceWordSpace}
2302 \tl_set:Nn \l__fontspec_punctspace_adjust_tl
2303 { \fontdimen 7 \font = 1 \fontdimen 2 \font }
2307 \tl_set:Nn \l__fontspec_punctspace_adjust_tl
2308 { \fontdimen 7 \font = #1 \fontdimen 7 \font }
2311 \__fontspec_aff_error:n {PunctuationSpace}
2312 \__fontspec_keys_define_code:nnn {fontspec} {FontAdjustment}
2314 \tl_put_right:Nx \l__fontspec_postadjust_tl {#1}
2316 \__fontspec_keys_define_code:nnn {fontspec} {LetterSpace}
2318 \__fontspec_update_featstr:n {letterspace=#1}
2320 \__fontspec_keys_define_code:nnn {fontspec} {HyphenChar}
2322 \__fontspec_warning:nx {only-xetex-feature} {HyphenChar}
2323 \str_if_eq:nnTF {#1} {None}
2325 \tl_put_right:Nn \l__fontspec_postadjust_tl
2326 { \hyphenchar \font = -1 \relax }
2330 \tl_if_single:nTF {#1}
2331 { \tl_set:Nn \l_fontspec_hyphenchar_tl {`#1} }
2332 { \tl_set:Nn \l_fontspec_hyphenchar_tl { #1} }
2334 \__fontspec_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l_fontspec_hyphenchar_tl}
2336 \tl_put_right:Nn \l__fontspec_postadjust_tl
2337 { \hyphenchar \font = \l_fontspec_hyphenchar_tl \scan_stop: }
2339 { \__fontspec_error:nx {no-glyph}{#1} }
2343 \__fontspec_aff_error:n {HyphenChar}
2344 \__fontspec_keys_define_code:nnn {fontspec} {Color}
2346 \cs_if_exist:cTF { \token_to_str:N \color@ #1 }
2348 \convertcolorspec{named}{#1}{HTML}\l__fontspec_hexcol_tl
2351 \int_compare:nTF { \tl_count:n {#1} == 6 }
2352 { \tl_set:Nn \l__fontspec_hexcol_tl {#1} }
2354 \int_compare:nTF { \tl_count:n {#1} == 8 }
2355 { \fontspec_parse_colour:viii #1 }
2357 \bool_if:NF \l__fontspec_firsttime_bool
2358 { \__fontspec_warning:nx {bad-colour} {#1} }
2363 \cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8
2365 \tl_set:Nn \l__fontspec_hexcol_tl {#1#2#3#4#5#6}
2366 \tl_if_eq:NNF \l__fontspec_opacity_tl \g__fontspec_opacity_tl
2368 \bool_if:NF \l__fontspec_firsttime_bool
2369 { \__fontspec_warning:nx {opa-twice-col} {#7#8} }
2371 \tl_set:Nn \l__fontspec_opacity_tl {#7#8}
2373 \aliasfontfeature{Color}{Colour}
2374 \__fontspec_keys_define_code:nnn {fontspec} {Opacity}
2376 \int_set:Nn \l__fontspec_tmp_int {255}
2377 \__fontspec_int_mult_truncate:Nn \l__fontspec_tmp_int { #1 }
2378 \tl_if_eq:NNF \l__fontspec_opacity_tl \g__fontspec_opacity_tl
2380 \bool_if:NF \l__fontspec_firsttime_bool
2381 { \__fontspec_warning:nx {opa-twice} {#1} }
2383 \tl_set:Nx \l__fontspec_opacity_tl
2385 \int_compare:nT { \l__fontspec_tmp_int <= "F } {0} % zero pad
2386 \int_to_hex:n { \l__fontspec_tmp_int }
2389 \__fontspec_keys_define_code:nnn {fontspec-aat} {Mapping}
2391 \tl_set:Nn \l__fontspec_mapping_tl { #1 }
2393 \__fontspec_keys_define_code:nnn {fontspec-opentype} {Mapping}
2395 \tl_set:Nn \l__fontspec_mapping_tl { #1 }
2397 \__fontspec_keys_define_code:nnn {fontspec} {Weight}
2399 \__fontspec_update_featstr:n{weight=#1}
2401 \__fontspec_keys_define_code:nnn {fontspec} {Width}
2403 \__fontspec_update_featstr:n{width=#1}
2405 \__fontspec_keys_define_code:nnn {fontspec} {OpticalSize}
2407 \bool_if:NTF \l__fontspec_ot_bool
2409 \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1}
2412 \bool_if:NT \l__fontspec_mm_bool
2414 \__fontspec_update_featstr:n { optical size = #1 }
2417 \bool_if:nT { !\l__fontspec_ot_bool && !\l__fontspec_mm_bool }
2419 \bool_if:NT \l__fontspec_firsttime_bool
2420 { \__fontspec_warning:n {no-opticals} }
2423 \keys_define:nn {fontspec}
2425 FakeSlant .code:n =
2427 \__fontspec_update_featstr:n{slant=#1}
2429 FakeSlant .default:n = {0.2}
2431 \keys_define:nn {fontspec}
2433 FakeStretch .code:n =
2435 \__fontspec_update_featstr:n{extend=#1}
2437 FakeStretch .default:n = {1.2}
2439 \keys_define:nn {fontspec}
2441 FakeBold .code:n =
2443 \__fontspec_update_featstr:n {embolden=#1}
2445 FakeBold .default:n = {1.5}
2447 \keys_define:nn {fontspec}
2449 AutoFakeSlant .code:n =
2451 \bool_if:NT \l__fontspec_firsttime_bool
2453 \tl_set:Nn \l__fontspec_fake_slant_tl {#1}
2454 \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {FakeSlant=#1}
2455 \tl_set_eq:NN \l__fontspec_fontname_it_tl \l_fontspec_fontname_tl
2456 \bool_set_false:N \l__fontspec_noit_bool
2458 \tl_if_empty:NF \l__fontspec_fake_embolden_tl
2460 \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist
2461 {FakeBold=\l__fontspec_fake_embolden_tl}
2462 \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=#1}
2463 \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl
2467 AutoFakeSlant .default:n = {0.2}
2469 \keys_define:nn {fontspec}
2471 AutoFakeBold .code:n =
2473 \bool_if:NT \l__fontspec_firsttime_bool
2475 \tl_set:Nn \l__fontspec_fake_embolden_tl {#1}
2476 \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {FakeBold=#1}
2477 \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl
2478 \bool_set_false:N \l__fontspec_nobf_bool
2480 \tl_if_empty:NF \l__fontspec_fake_slant_tl
2482 \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist
2483 {FakeSlant=\l__fontspec_fake_slant_tl}
2484 \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=#1}
2485 \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl
2489 AutoFakeBold .default:n = {1.5}
2491 \__fontspec_keys_define_code:nnn {fontspec-opentype} {RawFeature}
2493 \__fontspec_update_featstr:n {#1}
2495 \__fontspec_keys_define_code:nnn {fontspec-aat} {RawFeature}
2497 \__fontspec_update_featstr:n {#1}
2500 \__fontspec_feat_prop_add:nn {salt} { Alternate\,=\,$N$ }
2501 \__fontspec_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ }
2502 \__fontspec_feat_prop_add:nn {ornm} { Ornament\,=\,$N$ }
2503 \__fontspec_feat_prop_add:nn {cvNN} { CharacterVariant\,=\,$N$:$M$ }
2504 \__fontspec_feat_prop_add:nn {ssNN} { StylisticSet\,=\,$N$ }
2505 \__fontspec_define_opentype_feature_group:n {Ligatures}
2506 \__fontspec_define_opentype_feature:nnnnn {Ligatures} {ResetAll} {} {}
2508 +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig,
2509 mapping = tex-text
2511 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Required} {rlig} {rlig} {}
2512 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Common} {liga} {liga} {}
2513 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Rare} {dlig} {dlig} {}
2514 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {}
2515 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual} {clig} {clig} {}
2516 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Historic} {hlig} {hlig} {}
2517 \keys_define:nn {fontspec-opentype}
2519 Ligatures / TeX .code:n = { \tl_set:Nn \l__fontspec_mapping_tl {tex-text} },
2520 Ligatures / TeXReset .code:n = { \tl_clear:N \l__fontspec_mapping_tl },
2522 \__fontspec_define_opentype_feature_group:n {Letters}
2523 \__fontspec_define_opentype_feature:nnnnn {Letters} {ResetAll} {} {}
2525 +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand,
2526 -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand
2528 \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {+smcp,+pcap,+c2sc,+c2pc,+unic,+rand}
2529 \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic,+rand}
2530 \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic,+rand}
2531 \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic,+rand}
2532 \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic,+rand}
2533 \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {+rand}
2534 \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {+unic}
2535 \__fontspec_define_opentype_feature_group:n {Numbers}
2536 \__fontspec_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {}
2538 +tnum,-tnum,
2539 +pnum,-pnum,
2540 +onum,-onum,
2541 +lnum,-lnum,
2542 +zero,-zero,
2543 +anum,-anum,
2545 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Monospaced} {tnum} {tnum} {+pnum,-pnum}
2546 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Proportional} {pnum} {pnum} {+tnum,-tnum}
2547 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase} {onum} {onum} {+lnum,-lnum}
2548 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase} {lnum} {lnum} {+onum,-onum}
2549 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero} {zero} {zero} {}
2550 \aliasfontfeatureoption {Numbers} {Monospaced} {Tabular}
2551 \aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle}
2552 \aliasfontfeatureoption {Numbers} {Uppercase} {Lining}
2553 \__fontspec_define_opentype_feature_group:n {VerticalPosition}
2554 \__fontspec_define_opentype_feature:nnnnn {VerticalPosition} {ResetAll} {} {}
2556 +sups,-sups,
2557 +subs,-subs,
2558 +ordn,-ordn,
2559 +numr,-numr,
2560 +dnom,-dnom,
2561 +sinf,-sinf,
2563 \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Superior} {sups} {sups} {+subs,+ordn,+numr,+dnom,+sinf}
2564 \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Inferior} {subs} {subs} {+sups,+ordn,+numr,+dnom,+sinf}
2565 \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Ordinal} {ordn} {ordn} {+sups,+subs,+numr,+dnom,+sinf}
2566 \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Numerator} {numr} {numr} {+sups,+subs,+ordn,+dnom,+sinf}
2567 \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Denominator} {dnom} {dnom} {+sups,+subs,+ordn,+numr,+sinf}
2568 \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {ScientificInferior} {sinf} {sinf} {+sups,+subs,+ordn,+numr,+dnom}
2569 \__fontspec_define_opentype_feature_group:n {Contextuals}
2570 \__fontspec_define_opentype_feature:nnnnn {Contextuals} {ResetAll} {} {}
2572 +cswh,-cswh,
2573 +calt,-calt,
2574 +init,-init,
2575 +fina,-fina,
2576 +falt,-falt,
2577 +medi,-medi,
2579 \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Swash} {cswh} {cswh} {}
2580 \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Alternate} {calt} {calt} {}
2581 \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {WordInitial} {init} {init} {}
2582 \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {WordFinal} {fina} {fina} {}
2583 \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {LineFinal} {falt} {falt} {}
2584 \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Inner} {medi} {medi} {}
2585 \__fontspec_define_opentype_feature_group:n {Diacritics}
2586 \__fontspec_define_opentype_feature:nnnnn {Diacritics} {ResetAll} {} {}
2588 +mark,-mark,
2589 +mkmk,-mkmk,
2590 +abvm,-abvm,
2591 +blwm,-blwm,
2593 \__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToBase} {mark} {mark} {}
2594 \__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToMark} {mkmk} {mkmk} {}
2595 \__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {AboveBase} {abvm} {abvm} {}
2596 \__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {BelowBase} {blwm} {blwm} {}
2597 \__fontspec_define_opentype_feature_group:n {Kerning}
2598 \__fontspec_define_opentype_feature:nnnnn {Kerning} {ResetAll} {} {}
2600 +cpsp,-cpsp,
2601 +kern,-kern,
2603 \__fontspec_define_opentype_onoffreset:nnnnn {Kerning} {Uppercase} {cpsp} {cpsp} {}
2604 \__fontspec_define_opentype_feature:nnnnn {Kerning} {On} {kern} {+kern} {-kern}
2605 \__fontspec_define_opentype_feature:nnnnn {Kerning} {Off} {kern} {-kern} {+kern}
2606 \__fontspec_define_opentype_feature:nnnnn {Kerning} {Reset} {} {} {+kern,-kern}
2607 \__fontspec_define_opentype_feature_group:n {Fractions}
2608 \__fontspec_define_opentype_feature:nnnnn {Fractions} {ResetAll} {} {}
2610 +frac,-frac,
2611 +afrc,-afrc,
2613 \__fontspec_define_opentype_feature:nnnnn {Fractions} {On} {frac} {+frac} {}
2614 \__fontspec_define_opentype_feature:nnnnn {Fractions} {Off} {frac} {-frac} {}
2615 \__fontspec_define_opentype_feature:nnnnn {Fractions} {Reset} {} {} {+frac,-frac}
2616 \__fontspec_define_opentype_onoffreset:nnnnn {Fractions} {Alternate} {afrc} {afrc} {-frac}
2618 \__fontspec_define_opentype_feature_group:n {Style}
2619 \__fontspec_define_opentype_feature:nnnnn {Style} {ResetAll} {} {}
2621 +salt,-salt,
2622 +ital,-ital,
2623 +ruby,-ruby,
2624 +swsh,-swsh,
2625 +hist,-hist,
2626 +titl,-titl,
2627 +hkna,-hkna,
2628 +vkna,-vkna,
2629 +ssty=0,-ssty=0,
2630 +ssty=1,-ssty=1,
2632 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Alternate} {salt} {salt} {}
2633 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Italic} {ital} {ital} {}
2634 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Ruby} {ruby} {ruby} {}
2635 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {}
2636 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {}
2637 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {}
2638 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {}
2639 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna}
2640 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna}
2641 \__fontspec_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna}
2642 \__fontspec_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1}
2643 \__fontspec_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0}
2644 \__fontspec_define_opentype_feature_group:n {CJKShape}
2645 \__fontspec_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {}
2647 +trad,-trad,
2648 +smpl,-smpl,
2649 +jp78,-jp78,
2650 +jp83,-jp83,
2651 +jp90,-jp90,
2652 +jp04,-jp04,
2653 +expt,-expt,
2654 +nlck,-nlck,
2656 \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Traditional} {trad} {trad} {+smpl,+jp78,+jp83,+jp90,+jp04,+expt,+nlck}
2657 \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Simplified} {smpl} {smpl} {+trad,+jp78,+jp83,+jp90,+jp04,+expt,+nlck}
2658 \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1978} {jp78} {jp78} {+trad,+smpl,+jp83,+jp90,+jp04,+expt,+nlck}
2659 \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1983} {jp83} {jp83} {+trad,+smpl,+jp78,+jp90,+jp04,+expt,+nlck}
2660 \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1990} {jp90} {jp90} {+trad,+smpl,+jp78,+jp83,+jp04,+expt,+nlck}
2661 \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS2004} {jp04} {jp04} {+trad,+smpl,+jp78,+jp83,+jp90,+expt,+nlck}
2662 \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Expert} {expt} {expt} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+nlck}
2663 \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {NLC} {nlck} {nlck} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+expt}
2664 \__fontspec_define_opentype_feature_group:n {CharacterWidth}
2665 \__fontspec_define_opentype_feature:nnnnn {CharacterWidth} {ResetAll} {} {}
2667 +pwid,-pwid,
2668 +fwid,-fwid,
2669 +hwid,-hwid,
2670 +twid,-twid,
2671 +qwid,-qwid,
2672 +palt,-palt,
2673 +halt,-halt,
2675 \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Proportional} {pwid} {pwid} {+fwid,+hwid,+twid,+qwid,+palt,+halt}
2676 \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Full} {fwid} {fwid} {+pwid,+hwid,+twid,+qwid,+palt,+halt}
2677 \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Half} {hwid} {hwid} {+pwid,+fwid,+twid,+qwid,+palt,+halt}
2678 \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Third} {twid} {twid} {+pwid,+fwid,+hwid,+qwid,+palt,+halt}
2679 \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Quarter} {qwid} {qwid} {+pwid,+fwid,+hwid,+twid,+palt,+halt}
2680 \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateProportional} {palt} {palt} {+pwid,+fwid,+hwid,+twid,+qwid,+halt}
2681 \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateHalf} {halt} {halt} {+pwid,+fwid,+hwid,+twid,+qwid,+palt}
2682 \__fontspec_define_opentype_feature_group:n {Vertical}
2683 \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {RotatedGlyphs} {vrt2} {vrt2} {+vrtr,+vert}
2684 \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {AlternatesForRotation} {vrtr} {vrtr} {+vrt2}
2685 \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {Alternates} {vert} {vert} {+vrt2}
2686 \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {KanaAlternates} {vkna} {vkna} {+hkna}
2687 \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {Kerning} {vkrn} {vkrn} {}
2688 \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {AlternateMetrics} {valt} {valt} {+vhal,+vpal,+kern}
2689 \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {HalfMetrics} {vhal} {vhal} {+valt,+vpal,+kern}
2690 \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal}
2691 \__fontspec_define_opentype_feature_group:n {Alternate}
2692 \keys_define:nn {fontspec-opentype}
2694 Alternate .default:n = {0} ,
2695 Alternate / unknown .code:n =
2697 \clist_map_inline:nn {#1}
2698 { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} }
2701 \aliasfontfeature{Alternate}{StylisticAlternates}
2702 \__fontspec_define_opentype_feature_group:n {Variant}
2703 \keys_define:nn {fontspec-opentype}
2705 Variant .default:n = {0} ,
2706 Variant / unknown .code:n =
2708 \clist_map_inline:nn {#1}
2710 \__fontspec_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {}
2714 \aliasfontfeature{Variant}{StylisticSet}
2715 \__fontspec_define_opentype_feature_group:n {CharacterVariant}
2716 \use:x
2718 \cs_new:Npn \exp_not:N \fontspec_parse_cv:w
2719 ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil
2721 \__fontspec_make_OT_feature:xxx
2722 { cv \exp_not:N \two@digits {##1} } { +cv \exp_not:N \two@digits {##1} = ##2 } {}
2724 \keys_define:nn {fontspec-opentype}
2726 CharacterVariant / unknown .code:n =
2728 \clist_map_inline:nn {##1}
2730 \exp_not:N \fontspec_parse_cv:w
2731 ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil
2736 \__fontspec_define_opentype_feature_group:n {Annotation}
2737 \keys_define:nn {fontspec-opentype}
2739 Annotation .default:n = {0} ,
2740 Annotation / unknown .code:n =
2742 \__fontspec_make_OT_feature:nnn {nalt} {+nalt=#1} {}
2745 \__fontspec_define_opentype_feature_group:n {Ornament}
2746 \keys_define:nn {fontspec-opentype}
2748 Ornament .default:n = {0} ,
2749 Ornament / unknown .code:n =
2751 \__fontspec_make_OT_feature:nnn {ornm} { +ornm=#1 } {}
2754 \keys_define:nn { fontspec-opentype } { Script .choice: }
2755 \cs_new:Nn \fontspec_new_script:nn
2757 \keys_define:nn { fontspec-opentype } { Script / #1 .code:n =
2758 \bool_set_false:N \l__fontspec_script_exist_bool
2759 \clist_map_inline:nn {#2}
2761 \__fontspec_check_script:nTF {####1}
2763 \tl_set:Nn \l_fontspec_script_tl {####1}
2764 \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
2765 \bool_set_true:N \l__fontspec_script_exist_bool
2766 \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 }
2767 \clist_map_break:
2771 \bool_if:NF \l__fontspec_script_exist_bool
2773 \str_if_eq:nnTF {#1} {Latin}
2775 \__fontspec_warning:nx {script-not-exist} {#1}
2778 \__fontspec_check_script:nTF {latn}
2780 \__fontspec_warning:nx {script-not-exist-latn} {#1}
2781 \tl_set:Nn \l_fontspec_script_tl {latn}
2782 \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
2785 \__fontspec_warning:nx {script-not-exist} {#1}
2791 \keys_define:nn { fontspec-opentype } { Language .choice: }
2792 \cs_new:Nn \fontspec_new_lang:nn
2794 \keys_define:nn { fontspec-opentype } { Language / #1 .code:n =
2795 \__fontspec_check_lang:nTF {#2}
2797 \tl_set:Nn \l_fontspec_lang_tl {#2}
2798 \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int}
2799 \tl_gset:Nx \g__fontspec_single_feat_tl { language=#2 }
2802 \__fontspec_warning:nx {language-not-exist} {#1}
2803 \keys_set:nn { fontspec-opentype } { Language = Default }
2807 \__fontspec_keys_define_code:nnn {fontspec-opentype}{ Language / Default }
2809 \tl_set:Nn \l_fontspec_lang_tl {DFLT}
2810 \int_zero:N \l__fontspec_language_int
2811 \tl_gset:Nn \g__fontspec_single_feat_tl { language=DFLT }
2813 \keys_define:nn {fontspec-opentype}
2815 Language / Turkish .code:n =
2817 \__fontspec_check_lang:nTF {TRK}
2819 \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int}
2820 \tl_set:Nn \l_fontspec_lang_tl {TRK}
2821 \tl_gset:Nn \g__fontspec_single_feat_tl { language=TRK }
2824 \__fontspec_check_lang:nTF {TUR}
2826 \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int}
2827 \tl_set:Nn \l_fontspec_lang_tl {TUR}
2828 \tl_gset:Nn \g__fontspec_single_feat_tl { language=TUR }
2831 \__fontspec_warning:nx {language-not-exist} {Turkish}
2832 \keys_set:nn {fontspec-opentype} {Language=Default}
2837 \cs_new:Nn \__fontspec_ot_compat:nn
2839 \aliasfontfeatureoption {#1} {#2Off} {No#2}
2841 \__fontspec_ot_compat:nn {Ligatures} {Rare}
2842 \__fontspec_ot_compat:nn {Ligatures} {Required}
2843 \__fontspec_ot_compat:nn {Ligatures} {Common}
2844 \__fontspec_ot_compat:nn {Ligatures} {Discretionary}
2845 \__fontspec_ot_compat:nn {Ligatures} {Contextual}
2846 \__fontspec_ot_compat:nn {Ligatures} {Historic}
2847 \__fontspec_ot_compat:nn {Numbers} {SlashedZero}
2848 \__fontspec_ot_compat:nn {Contextuals} {Swash}
2849 \__fontspec_ot_compat:nn {Contextuals} {Alternate}
2850 \__fontspec_ot_compat:nn {Contextuals} {WordInitial}
2851 \__fontspec_ot_compat:nn {Contextuals} {WordFinal}
2852 \__fontspec_ot_compat:nn {Contextuals} {LineFinal}
2853 \__fontspec_ot_compat:nn {Contextuals} {Inner}
2854 \__fontspec_ot_compat:nn {Diacritics} {MarkToBase}
2855 \__fontspec_ot_compat:nn {Diacritics} {MarkToMark}
2856 \__fontspec_ot_compat:nn {Diacritics} {AboveBase}
2857 \__fontspec_ot_compat:nn {Diacritics} {BelowBase}
2859 \newfontscript{Adlam}{adlm}
2860 \newfontscript{Ahom}{ahom}
2861 \newfontscript{Anatolian~Hieroglyphs}{hluw}
2862 \newfontscript{Arabic}{arab}
2863 \newfontscript{Armenian}{armn}
2864 \newfontscript{Avestan}{avst}
2865 \newfontscript{Balinese}{bali}
2866 \newfontscript{Bamum}{bamu}
2867 \newfontscript{Bassa~Vah}{bass}
2868 \newfontscript{Batak}{batk}
2869 \newfontscript{Bengali}{bng2,beng}
2870 \newfontscript{Bhaiksuki}{bhks}
2871 \newfontscript{Bopomofo}{bopo}
2872 \newfontscript{Brahmi}{brah}
2873 \newfontscript{Braille}{brai}
2874 \newfontscript{Buginese}{bugi}
2875 \newfontscript{Buhid}{buhd}
2876 \newfontscript{Byzantine~Music}{byzm}
2877 \newfontscript{Canadian~Syllabics}{cans}
2878 \newfontscript{Carian}{cari}
2879 \newfontscript{Caucasian~Albanian}{aghb}
2880 \newfontscript{Chakma}{cakm}
2881 \newfontscript{Cham}{cham}
2882 \newfontscript{Cherokee}{cher}
2883 \newfontscript{CJK~Ideographic}{hani}
2884 \newfontscript{Coptic}{copt}
2885 \newfontscript{Cypriot~Syllabary}{cprt}
2886 \newfontscript{Cyrillic}{cyrl}
2887 \newfontscript{Default}{DFLT}
2888 \newfontscript{Deseret}{dsrt}
2889 \newfontscript{Devanagari}{dev2,deva}
2890 \newfontscript{Duployan}{dupl}
2891 \newfontscript{Egyptian~Hieroglyphs}{egyp}
2892 \newfontscript{Elbasan}{elba}
2893 \newfontscript{Ethiopic}{ethi}
2894 \newfontscript{Georgian}{geor}
2895 \newfontscript{Glagolitic}{glag}
2896 \newfontscript{Gothic}{goth}
2897 \newfontscript{Grantha}{gran}
2898 \newfontscript{Greek}{grek}
2899 \newfontscript{Gujarati}{gjr2,gujr}
2900 \newfontscript{Gurmukhi}{gur2,guru}
2901 \newfontscript{Hangul~Jamo}{jamo}
2902 \newfontscript{Hangul}{hang}
2903 \newfontscript{Hanunoo}{hano}
2904 \newfontscript{Hatran}{hatr}
2905 \newfontscript{Hebrew}{hebr}
2906 \newfontscript{Hiragana~and~Katakana}{kana}
2907 \newfontscript{Imperial~Aramaic}{armi}
2908 \newfontscript{Inscriptional~Pahlavi}{phli}
2909 \newfontscript{Inscriptional~Parthian}{prti}
2910 \newfontscript{Javanese}{java}
2911 \newfontscript{Kaithi}{kthi}
2912 \newfontscript{Kannada}{knd2,knda}
2913 \newfontscript{Kayah~Li}{kali}
2914 \newfontscript{Kharosthi}{khar}
2915 \newfontscript{Khmer}{khmr}
2916 \newfontscript{Khojki}{khoj}
2917 \newfontscript{Khudawadi}{sind}
2918 \newfontscript{Lao}{lao~}
2919 \newfontscript{Latin}{latn}
2920 \newfontscript{Lepcha}{lepc}
2921 \newfontscript{Limbu}{limb}
2922 \newfontscript{Linear~A}{lina}
2923 \newfontscript{Linear~B}{linb}
2924 \newfontscript{Lisu}{lisu}
2925 \newfontscript{Lycian}{lyci}
2926 \newfontscript{Lydian}{lydi}
2927 \newfontscript{Mahajani}{mahj}
2928 \newfontscript{Malayalam}{mlm2,mlym}
2929 \newfontscript{Mandaic}{mand}
2930 \newfontscript{Manichaean}{mani}
2931 \newfontscript{Marchen}{marc}
2932 \newfontscript{Math}{math}
2933 \newfontscript{Meitei~Mayek}{mtei}
2934 \newfontscript{Mende~Kikakui}{mend}
2935 \newfontscript{Meroitic~Cursive}{merc}
2936 \newfontscript{Meroitic~Hieroglyphs}{mero}
2937 \newfontscript{Miao}{plrd}
2938 \newfontscript{Modi}{modi}
2939 \newfontscript{Mongolian}{mong}
2940 \newfontscript{Mro}{mroo}
2941 \newfontscript{Multani}{mult}
2942 \newfontscript{Musical~Symbols}{musc}
2943 \newfontscript{Myanmar}{mym2,mymr}
2944 \newfontscript{N'Ko}{nko~}
2945 \newfontscript{Nabataean}{nbat}
2946 \newfontscript{Newa}{newa}
2947 \newfontscript{Odia}{ory2,orya}
2948 \newfontscript{Ogham}{ogam}
2949 \newfontscript{Ol~Chiki}{olck}
2950 \newfontscript{Old~Italic}{ital}
2951 \newfontscript{Old~Hungarian}{hung}
2952 \newfontscript{Old~North~Arabian}{narb}
2953 \newfontscript{Old~Permic}{perm}
2954 \newfontscript{Old~Persian~Cuneiform}{xpeo}
2955 \newfontscript{Old~South~Arabian}{sarb}
2956 \newfontscript{Old~Turkic}{orkh}
2957 \newfontscript{Osage}{osge}
2958 \newfontscript{Osmanya}{osma}
2959 \newfontscript{Pahawh~Hmong}{hmng}
2960 \newfontscript{Palmyrene}{palm}
2961 \newfontscript{Pau~Cin~Hau}{pauc}
2962 \newfontscript{Phags-pa}{phag}
2963 \newfontscript{Phoenician}{phnx}
2964 \newfontscript{Psalter~Pahlavi}{phlp}
2965 \newfontscript{Rejang}{rjng}
2966 \newfontscript{Runic}{runr}
2967 \newfontscript{Samaritan}{samr}
2968 \newfontscript{Saurashtra}{saur}
2969 \newfontscript{Sharada}{shrd}
2970 \newfontscript{Shavian}{shaw}
2971 \newfontscript{Siddham}{sidd}
2972 \newfontscript{Sign~Writing}{sgnw}
2973 \newfontscript{Sinhala}{sinh}
2974 \newfontscript{Sora~Sompeng}{sora}
2975 \newfontscript{Sumero-Akkadian~Cuneiform}{xsux}
2976 \newfontscript{Sundanese}{sund}
2977 \newfontscript{Syloti~Nagri}{sylo}
2978 \newfontscript{Syriac}{syrc}
2979 \newfontscript{Tagalog}{tglg}
2980 \newfontscript{Tagbanwa}{tagb}
2981 \newfontscript{Tai~Le}{tale}
2982 \newfontscript{Tai~Lu}{talu}
2983 \newfontscript{Tai~Tham}{lana}
2984 \newfontscript{Tai~Viet}{tavt}
2985 \newfontscript{Takri}{takr}
2986 \newfontscript{Tamil}{tml2,taml}
2987 \newfontscript{Tangut}{tang}
2988 \newfontscript{Telugu}{tel2,telu}
2989 \newfontscript{Thaana}{thaa}
2990 \newfontscript{Thai}{thai}
2991 \newfontscript{Tibetan}{tibt}
2992 \newfontscript{Tifinagh}{tfng}
2993 \newfontscript{Tirhuta}{tirh}
2994 \newfontscript{Ugaritic~Cuneiform}{ugar}
2995 \newfontscript{Vai}{vai~}
2996 \newfontscript{Warang~Citi}{wara}
2997 \newfontscript{Yi}{yi~~}
2998 \newfontscript{CJK}{hani}
2999 \newfontscript{Kana}{kana}
3000 \newfontscript{Maths}{math}
3001 \newfontscript{N'ko}{nko~}
3002 \newfontscript{Oriya}{ory2,orya}
3004 \newfontlanguage{Abaza}{ABA}
3005 \newfontlanguage{Abkhazian}{ABK}
3006 \newfontlanguage{Adyghe}{ADY}
3007 \newfontlanguage{Afrikaans}{AFK}
3008 \newfontlanguage{Afar}{AFR}
3009 \newfontlanguage{Agaw}{AGW}
3010 \newfontlanguage{Altai}{ALT}
3011 \newfontlanguage{Amharic}{AMH}
3012 \newfontlanguage{Arabic}{ARA}
3013 \newfontlanguage{Aari}{ARI}
3014 \newfontlanguage{Arakanese}{ARK}
3015 \newfontlanguage{Assamese}{ASM}
3016 \newfontlanguage{Athapaskan}{ATH}
3017 \newfontlanguage{Avar}{AVR}
3018 \newfontlanguage{Awadhi}{AWA}
3019 \newfontlanguage{Aymara}{AYM}
3020 \newfontlanguage{Azeri}{AZE}
3021 \newfontlanguage{Badaga}{BAD}
3022 \newfontlanguage{Baghelkhandi}{BAG}
3023 \newfontlanguage{Balkar}{BAL}
3024 \newfontlanguage{Baule}{BAU}
3025 \newfontlanguage{Berber}{BBR}
3026 \newfontlanguage{Bench}{BCH}
3027 \newfontlanguage{Bible~Cree}{BCR}
3028 \newfontlanguage{Belarussian}{BEL}
3029 \newfontlanguage{Bemba}{BEM}
3030 \newfontlanguage{Bengali}{BEN}
3031 \newfontlanguage{Bulgarian}{BGR}
3032 \newfontlanguage{Bhili}{BHI}
3033 \newfontlanguage{Bhojpuri}{BHO}
3034 \newfontlanguage{Bikol}{BIK}
3035 \newfontlanguage{Bilen}{BIL}
3036 \newfontlanguage{Blackfoot}{BKF}
3037 \newfontlanguage{Balochi}{BLI}
3038 \newfontlanguage{Balante}{BLN}
3039 \newfontlanguage{Balti}{BLT}
3040 \newfontlanguage{Bambara}{BMB}
3041 \newfontlanguage{Bamileke}{BML}
3042 \newfontlanguage{Breton}{BRE}
3043 \newfontlanguage{Brahui}{BRH}
3044 \newfontlanguage{Braj~Bhasha}{BRI}
3045 \newfontlanguage{Burmese}{BRM}
3046 \newfontlanguage{Bashkir}{BSH}
3047 \newfontlanguage{Beti}{BTI}
3048 \newfontlanguage{Catalan}{CAT}
3049 \newfontlanguage{Cebuano}{CEB}
3050 \newfontlanguage{Chechen}{CHE}
3051 \newfontlanguage{Chaha~Gurage}{CHG}
3052 \newfontlanguage{Chattisgarhi}{CHH}
3053 \newfontlanguage{Chichewa}{CHI}
3054 \newfontlanguage{Chukchi}{CHK}
3055 \newfontlanguage{Chipewyan}{CHP}
3056 \newfontlanguage{Cherokee}{CHR}
3057 \newfontlanguage{Chuvash}{CHU}
3058 \newfontlanguage{Comorian}{CMR}
3059 \newfontlanguage{Coptic}{COP}
3060 \newfontlanguage{Cree}{CRE}
3061 \newfontlanguage{Carrier}{CRR}
3062 \newfontlanguage{Crimean~Tatar}{CRT}
3063 \newfontlanguage{Church~Slavonic}{CSL}
3064 \newfontlanguage{Czech}{CSY}
3065 \newfontlanguage{Danish}{DAN}
3066 \newfontlanguage{Dargwa}{DAR}
3067 \newfontlanguage{Woods~Cree}{DCR}
3068 \newfontlanguage{German}{DEU}
3069 \newfontlanguage{Dogri}{DGR}
3070 \newfontlanguage{Divehi}{DIV}
3071 \newfontlanguage{Djerma}{DJR}
3072 \newfontlanguage{Dangme}{DNG}
3073 \newfontlanguage{Dinka}{DNK}
3074 \newfontlanguage{Dungan}{DUN}
3075 \newfontlanguage{Dzongkha}{DZN}
3076 \newfontlanguage{Ebira}{EBI}
3077 \newfontlanguage{Eastern~Cree}{ECR}
3078 \newfontlanguage{Edo}{EDO}
3079 \newfontlanguage{Efik}{EFI}
3080 \newfontlanguage{Greek}{ELL}
3081 \newfontlanguage{English}{ENG}
3082 \newfontlanguage{Erzya}{ERZ}
3083 \newfontlanguage{Spanish}{ESP}
3084 \newfontlanguage{Estonian}{ETI}
3085 \newfontlanguage{Basque}{EUQ}
3086 \newfontlanguage{Evenki}{EVK}
3087 \newfontlanguage{Even}{EVN}
3088 \newfontlanguage{Ewe}{EWE}
3089 \newfontlanguage{French~Antillean}{FAN}
3090 \newfontlanguage{Farsi}{FAR}
3091 \newfontlanguage{Parsi}{FAR}
3092 \newfontlanguage{Persian}{FAR}
3093 \newfontlanguage{Finnish}{FIN}
3094 \newfontlanguage{Fijian}{FJI}
3095 \newfontlanguage{Flemish}{FLE}
3096 \newfontlanguage{Forest~Nenets}{FNE}
3097 \newfontlanguage{Fon}{FON}
3098 \newfontlanguage{Faroese}{FOS}
3099 \newfontlanguage{French}{FRA}
3100 \newfontlanguage{Frisian}{FRI}
3101 \newfontlanguage{Friulian}{FRL}
3102 \newfontlanguage{Futa}{FTA}
3103 \newfontlanguage{Fulani}{FUL}
3104 \newfontlanguage{Ga}{GAD}
3105 \newfontlanguage{Gaelic}{GAE}
3106 \newfontlanguage{Gagauz}{GAG}
3107 \newfontlanguage{Galician}{GAL}
3108 \newfontlanguage{Garshuni}{GAR}
3109 \newfontlanguage{Garhwali}{GAW}
3110 \newfontlanguage{Ge'ez}{GEZ}
3111 \newfontlanguage{Gilyak}{GIL}
3112 \newfontlanguage{Gumuz}{GMZ}
3113 \newfontlanguage{Gondi}{GON}
3114 \newfontlanguage{Greenlandic}{GRN}
3115 \newfontlanguage{Garo}{GRO}
3116 \newfontlanguage{Guarani}{GUA}
3117 \newfontlanguage{Gujarati}{GUJ}
3118 \newfontlanguage{Haitian}{HAI}
3119 \newfontlanguage{Halam}{HAL}
3120 \newfontlanguage{Harauti}{HAR}
3121 \newfontlanguage{Hausa}{HAU}
3122 \newfontlanguage{Hawaiin}{HAW}
3123 \newfontlanguage{Hammer-Banna}{HBN}
3124 \newfontlanguage{Hiligaynon}{HIL}
3125 \newfontlanguage{Hindi}{HIN}
3126 \newfontlanguage{High~Mari}{HMA}
3127 \newfontlanguage{Hindko}{HND}
3128 \newfontlanguage{Ho}{HO}
3129 \newfontlanguage{Harari}{HRI}
3130 \newfontlanguage{Croatian}{HRV}
3131 \newfontlanguage{Hungarian}{HUN}
3132 \newfontlanguage{Armenian}{HYE}
3133 \newfontlanguage{Igbo}{IBO}
3134 \newfontlanguage{Ijo}{IJO}
3135 \newfontlanguage{Ilokano}{ILO}
3136 \newfontlanguage{Indonesian}{IND}
3137 \newfontlanguage{Ingush}{ING}
3138 \newfontlanguage{Inuktitut}{INU}
3139 \newfontlanguage{Irish}{IRI}
3140 \newfontlanguage{Irish~Traditional}{IRT}
3141 \newfontlanguage{Icelandic}{ISL}
3142 \newfontlanguage{Inari~Sami}{ISM}
3143 \newfontlanguage{Italian}{ITA}
3144 \newfontlanguage{Hebrew}{IWR}
3145 \newfontlanguage{Javanese}{JAV}
3146 \newfontlanguage{Yiddish}{JII}
3147 \newfontlanguage{Japanese}{JAN}
3148 \newfontlanguage{Judezmo}{JUD}
3149 \newfontlanguage{Jula}{JUL}
3150 \newfontlanguage{Kabardian}{KAB}
3151 \newfontlanguage{Kachchi}{KAC}
3152 \newfontlanguage{Kalenjin}{KAL}
3153 \newfontlanguage{Kannada}{KAN}
3154 \newfontlanguage{Karachay}{KAR}
3155 \newfontlanguage{Georgian}{KAT}
3156 \newfontlanguage{Kazakh}{KAZ}
3157 \newfontlanguage{Kebena}{KEB}
3158 \newfontlanguage{Khutsuri~Georgian}{KGE}
3159 \newfontlanguage{Khakass}{KHA}
3160 \newfontlanguage{Khanty-Kazim}{KHK}
3161 \newfontlanguage{Khmer}{KHM}
3162 \newfontlanguage{Khanty-Shurishkar}{KHS}
3163 \newfontlanguage{Khanty-Vakhi}{KHV}
3164 \newfontlanguage{Khowar}{KHW}
3165 \newfontlanguage{Kikuyu}{KIK}
3166 \newfontlanguage{Kirghiz}{KIR}
3167 \newfontlanguage{Kisii}{KIS}
3168 \newfontlanguage{Kokni}{KKN}
3169 \newfontlanguage{Kalmyk}{KLM}
3170 \newfontlanguage{Kamba}{KMB}
3171 \newfontlanguage{Kumaoni}{KMN}
3172 \newfontlanguage{Komo}{KMO}
3173 \newfontlanguage{Komso}{KMS}
3174 \newfontlanguage{Kanuri}{KNR}
3175 \newfontlanguage{Kodagu}{KOD}
3176 \newfontlanguage{Korean~Old~Hangul}{KOH}
3177 \newfontlanguage{Konkani}{KOK}
3178 \newfontlanguage{Kikongo}{KON}
3179 \newfontlanguage{Komi-Permyak}{KOP}
3180 \newfontlanguage{Korean}{KOR}
3181 \newfontlanguage{Komi-Zyrian}{KOZ}
3182 \newfontlanguage{Kpelle}{KPL}
3183 \newfontlanguage{Krio}{KRI}
3184 \newfontlanguage{Karakalpak}{KRK}
3185 \newfontlanguage{Karelian}{KRL}
3186 \newfontlanguage{Karaim}{KRM}
3187 \newfontlanguage{Karen}{KRN}
3188 \newfontlanguage{Koorete}{KRT}
3189 \newfontlanguage{Kashmiri}{KSH}
3190 \newfontlanguage{Khasi}{KSI}
3191 \newfontlanguage{Kildin~Sami}{KSM}
3192 \newfontlanguage{Kui}{KUI}
3193 \newfontlanguage{Kulvi}{KUL}
3194 \newfontlanguage{Kumyk}{KUM}
3195 \newfontlanguage{Kurdish}{KUR}
3196 \newfontlanguage{Kurukh}{KUU}
3197 \newfontlanguage{Kuy}{KUY}
3198 \newfontlanguage{Koryak}{KYK}
3199 \newfontlanguage{Ladin}{LAD}
3200 \newfontlanguage{Lahuli}{LAH}
3201 \newfontlanguage{Lak}{LAK}
3202 \newfontlanguage{Lambani}{LAM}
3203 \newfontlanguage{Lao}{LAO}
3204 \newfontlanguage{Latin}{LAT}
3205 \newfontlanguage{Laz}{LAZ}
3206 \newfontlanguage{L-Cree}{LCR}
3207 \newfontlanguage{Ladakhi}{LDK}
3208 \newfontlanguage{Lezgi}{LEZ}
3209 \newfontlanguage{Lingala}{LIN}
3210 \newfontlanguage{Low~Mari}{LMA}
3211 \newfontlanguage{Limbu}{LMB}
3212 \newfontlanguage{Lomwe}{LMW}
3213 \newfontlanguage{Lower~Sorbian}{LSB}
3214 \newfontlanguage{Lule~Sami}{LSM}
3215 \newfontlanguage{Lithuanian}{LTH}
3216 \newfontlanguage{Luba}{LUB}
3217 \newfontlanguage{Luganda}{LUG}
3218 \newfontlanguage{Luhya}{LUH}
3219 \newfontlanguage{Luo}{LUO}
3220 \newfontlanguage{Latvian}{LVI}
3221 \newfontlanguage{Majang}{MAJ}
3222 \newfontlanguage{Makua}{MAK}
3223 \newfontlanguage{Malayalam~Traditional}{MAL}
3224 \newfontlanguage{Mansi}{MAN}
3225 \newfontlanguage{Marathi}{MAR}
3226 \newfontlanguage{Marwari}{MAW}
3227 \newfontlanguage{Mbundu}{MBN}
3228 \newfontlanguage{Manchu}{MCH}
3229 \newfontlanguage{Moose~Cree}{MCR}
3230 \newfontlanguage{Mende}{MDE}
3231 \newfontlanguage{Me'en}{MEN}
3232 \newfontlanguage{Mizo}{MIZ}
3233 \newfontlanguage{Macedonian}{MKD}
3234 \newfontlanguage{Male}{MLE}
3235 \newfontlanguage{Malagasy}{MLG}
3236 \newfontlanguage{Malinke}{MLN}
3237 \newfontlanguage{Malayalam~Reformed}{MLR}
3238 \newfontlanguage{Malay}{MLY}
3239 \newfontlanguage{Mandinka}{MND}
3240 \newfontlanguage{Mongolian}{MNG}
3241 \newfontlanguage{Manipuri}{MNI}
3242 \newfontlanguage{Maninka}{MNK}
3243 \newfontlanguage{Manx~Gaelic}{MNX}
3244 \newfontlanguage{Moksha}{MOK}
3245 \newfontlanguage{Moldavian}{MOL}
3246 \newfontlanguage{Mon}{MON}
3247 \newfontlanguage{Moroccan}{MOR}
3248 \newfontlanguage{Maori}{MRI}
3249 \newfontlanguage{Maithili}{MTH}
3250 \newfontlanguage{Maltese}{MTS}
3251 \newfontlanguage{Mundari}{MUN}
3252 \newfontlanguage{Naga-Assamese}{NAG}
3253 \newfontlanguage{Nanai}{NAN}
3254 \newfontlanguage{Naskapi}{NAS}
3255 \newfontlanguage{N-Cree}{NCR}
3256 \newfontlanguage{Ndebele}{NDB}
3257 \newfontlanguage{Ndonga}{NDG}
3258 \newfontlanguage{Nepali}{NEP}
3259 \newfontlanguage{Newari}{NEW}
3260 \newfontlanguage{Nagari}{NGR}
3261 \newfontlanguage{Norway~House~Cree}{NHC}
3262 \newfontlanguage{Nisi}{NIS}
3263 \newfontlanguage{Niuean}{NIU}
3264 \newfontlanguage{Nkole}{NKL}
3265 \newfontlanguage{N'ko}{NKO}
3266 \newfontlanguage{Dutch}{NLD}
3267 \newfontlanguage{Nogai}{NOG}
3268 \newfontlanguage{Norwegian}{NOR}
3269 \newfontlanguage{Northern~Sami}{NSM}
3270 \newfontlanguage{Northern~Tai}{NTA}
3271 \newfontlanguage{Esperanto}{NTO}
3272 \newfontlanguage{Nynorsk}{NYN}
3273 \newfontlanguage{Oji-Cree}{OCR}
3274 \newfontlanguage{Ojibway}{OJB}
3275 \newfontlanguage{Oriya}{ORI}
3276 \newfontlanguage{Oromo}{ORO}
3277 \newfontlanguage{Ossetian}{OSS}
3278 \newfontlanguage{Palestinian~Aramaic}{PAA}
3279 \newfontlanguage{Pali}{PAL}
3280 \newfontlanguage{Punjabi}{PAN}
3281 \newfontlanguage{Palpa}{PAP}
3282 \newfontlanguage{Pashto}{PAS}
3283 \newfontlanguage{Polytonic~Greek}{PGR}
3284 \newfontlanguage{Pilipino}{PIL}
3285 \newfontlanguage{Palaung}{PLG}
3286 \newfontlanguage{Polish}{PLK}
3287 \newfontlanguage{Provencal}{PRO}
3288 \newfontlanguage{Portuguese}{PTG}
3289 \newfontlanguage{Chin}{QIN}
3290 \newfontlanguage{Rajasthani}{RAJ}
3291 \newfontlanguage{R-Cree}{RCR}
3292 \newfontlanguage{Russian~Buriat}{RBU}
3293 \newfontlanguage{Riang}{RIA}
3294 \newfontlanguage{Rhaeto-Romanic}{RMS}
3295 \newfontlanguage{Romanian}{ROM}
3296 \newfontlanguage{Romany}{ROY}
3297 \newfontlanguage{Rusyn}{RSY}
3298 \newfontlanguage{Ruanda}{RUA}
3299 \newfontlanguage{Russian}{RUS}
3300 \newfontlanguage{Sadri}{SAD}
3301 \newfontlanguage{Sanskrit}{SAN}
3302 \newfontlanguage{Santali}{SAT}
3303 \newfontlanguage{Sayisi}{SAY}
3304 \newfontlanguage{Sekota}{SEK}
3305 \newfontlanguage{Selkup}{SEL}
3306 \newfontlanguage{Sango}{SGO}
3307 \newfontlanguage{Shan}{SHN}
3308 \newfontlanguage{Sibe}{SIB}
3309 \newfontlanguage{Sidamo}{SID}
3310 \newfontlanguage{Silte~Gurage}{SIG}
3311 \newfontlanguage{Skolt~Sami}{SKS}
3312 \newfontlanguage{Slovak}{SKY}
3313 \newfontlanguage{Slavey}{SLA}
3314 \newfontlanguage{Slovenian}{SLV}
3315 \newfontlanguage{Somali}{SML}
3316 \newfontlanguage{Samoan}{SMO}
3317 \newfontlanguage{Sena}{SNA}
3318 \newfontlanguage{Sindhi}{SND}
3319 \newfontlanguage{Sinhalese}{SNH}
3320 \newfontlanguage{Soninke}{SNK}
3321 \newfontlanguage{Sodo~Gurage}{SOG}
3322 \newfontlanguage{Sotho}{SOT}
3323 \newfontlanguage{Albanian}{SQI}
3324 \newfontlanguage{Serbian}{SRB}
3325 \newfontlanguage{Saraiki}{SRK}
3326 \newfontlanguage{Serer}{SRR}
3327 \newfontlanguage{South~Slavey}{SSL}
3328 \newfontlanguage{Southern~Sami}{SSM}
3329 \newfontlanguage{Suri}{SUR}
3330 \newfontlanguage{Svan}{SVA}
3331 \newfontlanguage{Swedish}{SVE}
3332 \newfontlanguage{Swadaya~Aramaic}{SWA}
3333 \newfontlanguage{Swahili}{SWK}
3334 \newfontlanguage{Swazi}{SWZ}
3335 \newfontlanguage{Sutu}{SXT}
3336 \newfontlanguage{Syriac}{SYR}
3337 \newfontlanguage{Tabasaran}{TAB}
3338 \newfontlanguage{Tajiki}{TAJ}
3339 \newfontlanguage{Tamil}{TAM}
3340 \newfontlanguage{Tatar}{TAT}
3341 \newfontlanguage{TH-Cree}{TCR}
3342 \newfontlanguage{Telugu}{TEL}
3343 \newfontlanguage{Tongan}{TGN}
3344 \newfontlanguage{Tigre}{TGR}
3345 \newfontlanguage{Tigrinya}{TGY}
3346 \newfontlanguage{Thai}{THA}
3347 \newfontlanguage{Tahitian}{THT}
3348 \newfontlanguage{Tibetan}{TIB}
3349 \newfontlanguage{Turkmen}{TKM}
3350 \newfontlanguage{Temne}{TMN}
3351 \newfontlanguage{Tswana}{TNA}
3352 \newfontlanguage{Tundra~Nenets}{TNE}
3353 \newfontlanguage{Tonga}{TNG}
3354 \newfontlanguage{Todo}{TOD}
3355 \newfontlanguage{Tsonga}{TSG}
3356 \newfontlanguage{Turoyo~Aramaic}{TUA}
3357 \newfontlanguage{Tulu}{TUL}
3358 \newfontlanguage{Tuvin}{TUV}
3359 \newfontlanguage{Twi}{TWI}
3360 \newfontlanguage{Udmurt}{UDM}
3361 \newfontlanguage{Ukrainian}{UKR}
3362 \newfontlanguage{Urdu}{URD}
3363 \newfontlanguage{Upper~Sorbian}{USB}
3364 \newfontlanguage{Uyghur}{UYG}
3365 \newfontlanguage{Uzbek}{UZB}
3366 \newfontlanguage{Venda}{VEN}
3367 \newfontlanguage{Vietnamese}{VIT}
3368 \newfontlanguage{Wa}{WA}
3369 \newfontlanguage{Wagdi}{WAG}
3370 \newfontlanguage{West-Cree}{WCR}
3371 \newfontlanguage{Welsh}{WEL}
3372 \newfontlanguage{Wolof}{WLF}
3373 \newfontlanguage{Tai~Lue}{XBD}
3374 \newfontlanguage{Xhosa}{XHS}
3375 \newfontlanguage{Yakut}{YAK}
3376 \newfontlanguage{Yoruba}{YBA}
3377 \newfontlanguage{Y-Cree}{YCR}
3378 \newfontlanguage{Yi~Classic}{YIC}
3379 \newfontlanguage{Yi~Modern}{YIM}
3380 \newfontlanguage{Chinese~Hong~Kong}{ZHH}
3381 \newfontlanguage{Chinese~Phonetic}{ZHP}
3382 \newfontlanguage{Chinese~Simplified}{ZHS}
3383 \newfontlanguage{Chinese~Traditional}{ZHT}
3384 \newfontlanguage{Zande}{ZND}
3385 \newfontlanguage{Zulu}{ZUL}
3388 \__fontspec_define_aat_feature_group:n {Ligatures}
3389 \__fontspec_define_aat_feature:nnnn {Ligatures} {Required} {1} {0}
3390 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoRequired} {1} {1}
3391 \__fontspec_define_aat_feature:nnnn {Ligatures} {Common} {1} {2}
3392 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoCommon} {1} {3}
3393 \__fontspec_define_aat_feature:nnnn {Ligatures} {Rare} {1} {4}
3394 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoRare} {1} {5}
3395 \__fontspec_define_aat_feature:nnnn {Ligatures} {Discretionary} {1} {4}
3396 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoDiscretionary} {1} {5}
3397 \__fontspec_define_aat_feature:nnnn {Ligatures} {Logos} {1} {6}
3398 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoLogos} {1} {7}
3399 \__fontspec_define_aat_feature:nnnn {Ligatures} {Rebus} {1} {8}
3400 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoRebus} {1} {9}
3401 \__fontspec_define_aat_feature:nnnn {Ligatures} {Diphthong} {1} {10}
3402 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoDiphthong} {1} {11}
3403 \__fontspec_define_aat_feature:nnnn {Ligatures} {Squared} {1} {12}
3404 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoSquared} {1} {13}
3405 \__fontspec_define_aat_feature:nnnn {Ligatures} {AbbrevSquared} {1} {14}
3406 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoAbbrevSquared} {1} {15}
3407 \__fontspec_define_aat_feature:nnnn {Ligatures} {Icelandic} {1} {32}
3408 \__fontspec_define_aat_feature:nnnn {Ligatures} {NoIcelandic} {1} {33}
3409 \keys_define:nn {fontspec-aat}
3411 Ligatures / TeX .code:n =
3413 \tl_set:Nn \l__fontspec_mapping_tl { tex-text }
3416 \__fontspec_define_aat_feature_group:n {Letters}
3417 \__fontspec_define_aat_feature:nnnn {Letters} {Normal} {3} {0}
3418 \__fontspec_define_aat_feature:nnnn {Letters} {Uppercase} {3} {1}
3419 \__fontspec_define_aat_feature:nnnn {Letters} {Lowercase} {3} {2}
3420 \__fontspec_define_aat_feature:nnnn {Letters} {SmallCaps} {3} {3}
3421 \__fontspec_define_aat_feature:nnnn {Letters} {InitialCaps} {3} {4}
3422 \__fontspec_define_aat_feature_group:n {Numbers}
3423 \__fontspec_define_aat_feature:nnnn {Numbers} {Monospaced} {6} {0}
3424 \__fontspec_define_aat_feature:nnnn {Numbers} {Proportional} {6} {1}
3425 \__fontspec_define_aat_feature:nnnn {Numbers} {Lowercase} {21} {0}
3426 \__fontspec_define_aat_feature:nnnn {Numbers} {OldStyle} {21} {0}
3427 \__fontspec_define_aat_feature:nnnn {Numbers} {Uppercase} {21} {1}
3428 \__fontspec_define_aat_feature:nnnn {Numbers} {Lining} {21} {1}
3429 \__fontspec_define_aat_feature:nnnn {Numbers} {SlashedZero} {14} {5}
3430 \__fontspec_define_aat_feature:nnnn {Numbers} {NoSlashedZero} {14} {4}
3431 \__fontspec_define_aat_feature_group:n {Contextuals}
3432 \__fontspec_define_aat_feature:nnnn {Contextuals} {WordInitial} {8} {0}
3433 \__fontspec_define_aat_feature:nnnn {Contextuals} {NoWordInitial} {8} {1}
3434 \__fontspec_define_aat_feature:nnnn {Contextuals} {WordFinal} {8} {2}
3435 \__fontspec_define_aat_feature:nnnn {Contextuals} {NoWordFinal} {8} {3}
3436 \__fontspec_define_aat_feature:nnnn {Contextuals} {LineInitial} {8} {4}
3437 \__fontspec_define_aat_feature:nnnn {Contextuals} {NoLineInitial} {8} {5}
3438 \__fontspec_define_aat_feature:nnnn {Contextuals} {LineFinal} {8} {6}
3439 \__fontspec_define_aat_feature:nnnn {Contextuals} {NoLineFinal} {8} {7}
3440 \__fontspec_define_aat_feature:nnnn {Contextuals} {Inner} {8} {8}
3441 \__fontspec_define_aat_feature:nnnn {Contextuals} {NoInner} {8} {9}
3442 \__fontspec_define_aat_feature_group:n {Diacritics}
3443 \__fontspec_define_aat_feature:nnnn {Diacritics} {Show} {9} {0}
3444 \__fontspec_define_aat_feature:nnnn {Diacritics} {Hide} {9} {1}
3445 \__fontspec_define_aat_feature:nnnn {Diacritics} {Decompose} {9} {2}
3446 \__fontspec_define_aat_feature_group:n {VerticalPosition}
3447 \__fontspec_define_aat_feature:nnnn {VerticalPosition} {Normal} {10} {0}
3448 \__fontspec_define_aat_feature:nnnn {VerticalPosition} {Superior} {10} {1}
3449 \__fontspec_define_aat_feature:nnnn {VerticalPosition} {Inferior} {10} {2}
3450 \__fontspec_define_aat_feature:nnnn {VerticalPosition} {Ordinal} {10} {3}
3451 \__fontspec_define_aat_feature_group:n {Fractions}
3452 \__fontspec_define_aat_feature:nnnn {Fractions} {On} {11} {1}
3453 \__fontspec_define_aat_feature:nnnn {Fractions} {Off} {11} {0}
3454 \__fontspec_define_aat_feature:nnnn {Fractions} {Diagonal} {11} {2}
3455 \__fontspec_define_aat_feature_group:n { Alternate }
3456 \keys_define:nn {fontspec-aat}
3458 Alternate .default:n = {0} ,
3459 Alternate / unknown .code:n =
3461 \clist_map_inline:nn {#1}
3463 \__fontspec_make_AAT_feature:nn {17}{##1}
3467 \__fontspec_define_aat_feature_group:n {Variant}
3468 \keys_define:nn {fontspec-aat}
3470 Variant .default:n = {0} ,
3471 Variant / unknown .code:n =
3473 \clist_map_inline:nn {#1}
3474 { \__fontspec_make_AAT_feature:nn {18}{##1} }
3477 \aliasfontfeature{Variant}{StylisticSet}
3478 \__fontspec_define_aat_feature_group:n {Vertical}
3479 \keys_define:nn {fontspec-aat}
3481 Vertical .choice: ,
3482 Vertical / RotatedGlyphs .code:n =
3484 \__fontspec_update_featstr:n {vertical}
3488 \__fontspec_define_aat_feature_group:n {Style}
3489 \__fontspec_define_aat_feature:nnnn {Style} {Italic} {32} {2}
3490 \__fontspec_define_aat_feature:nnnn {Style} {Ruby} {28} {2}
3491 \__fontspec_define_aat_feature:nnnn {Style} {Display} {19} {1}
3492 \__fontspec_define_aat_feature:nnnn {Style} {Engraved} {19} {2}
3493 \__fontspec_define_aat_feature:nnnn {Style} {TitlingCaps} {19} {4}
3494 \__fontspec_define_aat_feature:nnnn {Style} {TallCaps} {19} {5}
3495 \__fontspec_define_aat_feature_group:n {CJKShape}
3496 \__fontspec_define_aat_feature:nnnn {CJKShape} {Traditional} {20} {0}
3497 \__fontspec_define_aat_feature:nnnn {CJKShape} {Simplified} {20} {1}
3498 \__fontspec_define_aat_feature:nnnn {CJKShape} {JIS1978} {20} {2}
3499 \__fontspec_define_aat_feature:nnnn {CJKShape} {JIS1983} {20} {3}
3500 \__fontspec_define_aat_feature:nnnn {CJKShape} {JIS1990} {20} {4}
3501 \__fontspec_define_aat_feature:nnnn {CJKShape} {Expert} {20} {10}
3502 \__fontspec_define_aat_feature:nnnn {CJKShape} {NLC} {20} {13}
3503 \__fontspec_define_aat_feature_group:n {CharacterWidth}
3504 \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Proportional} {22} {0}
3505 \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Full} {22} {1}
3506 \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Half} {22} {2}
3507 \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Third} {22} {3}
3508 \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Quarter} {22} {4}
3509 \__fontspec_define_aat_feature:nnnn {CharacterWidth} {AlternateProportional} {22} {5}
3510 \__fontspec_define_aat_feature:nnnn {CharacterWidth} {AlternateHalf} {22} {6}
3511 \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Default} {22} {7}
3512 \__fontspec_define_aat_feature_group:n {Annotation}
3513 \__fontspec_define_aat_feature:nnnn {Annotation} {Off} {24} {0}
3514 \__fontspec_define_aat_feature:nnnn {Annotation} {Box} {24} {1}
3515 \__fontspec_define_aat_feature:nnnn {Annotation} {RoundedBox} {24} {2}
3516 \__fontspec_define_aat_feature:nnnn {Annotation} {Circle} {24} {3}
3517 \__fontspec_define_aat_feature:nnnn {Annotation} {BlackCircle} {24} {4}
3518 \__fontspec_define_aat_feature:nnnn {Annotation} {Parenthesis} {24} {5}
3519 \__fontspec_define_aat_feature:nnnn {Annotation} {Period} {24} {6}
3520 \__fontspec_define_aat_feature:nnnn {Annotation} {RomanNumerals} {24} {7}
3521 \__fontspec_define_aat_feature:nnnn {Annotation} {Diamond} {24} {8}
3522 \__fontspec_define_aat_feature:nnnn {Annotation} {BlackSquare} {24} {9}
3523 \__fontspec_define_aat_feature:nnnn {Annotation} {BlackRoundSquare} {24} {10}
3524 \__fontspec_define_aat_feature:nnnn {Annotation} {DoubleCircle} {24} {11}
3526 \providecommand\UnicodeFontFile[2]{"[#1]:#2"}
3527 \providecommand\UnicodeFontName[2]{"#1:#2"}
3528 \providecommand\UnicodeFontTeXLigatures{mapping=tex-text;}
3529 \providecommand\add@unicode@accent[2]{#2\char#1\relax}
3530 \providecommand\DeclareUnicodeAccent[3]{%
3531 \DeclareTextCommand{#1}{#2}{\add@unicode@accent{#3}}%
3533 \DeclareDocumentCommand \EncodingCommand {mO{}m}
3535 \bool_if:NF \l__fontspec_defining_encoding_bool
3536 { \__fontspec_error:nn {only-inside-encdef} \EncodingCommand }
3537 \DeclareTextCommand{#1}{\UnicodeEncodingName}[#2]{#3}
3539 \DeclareDocumentCommand \EncodingAccent {mm}
3541 \bool_if:NF \l__fontspec_defining_encoding_bool
3542 { \__fontspec_error:nn {only-inside-encdef} \EncodingAccent }
3543 \DeclareTextCommand{#1}{\UnicodeEncodingName}{\add@unicode@accent{#2}}
3545 \DeclareDocumentCommand \EncodingSymbol {mm}
3547 \bool_if:NF \l__fontspec_defining_encoding_bool
3548 { \__fontspec_error:nn {only-inside-encdef} \EncodingSymbol }
3549 \DeclareTextSymbol{#1}{\UnicodeEncodingName}{#2}
3551 \DeclareDocumentCommand \EncodingComposite {mmm}
3553 \bool_if:NF \l__fontspec_defining_encoding_bool
3554 { \__fontspec_error:nn {only-inside-encdef} \EncodingComposite }
3555 \DeclareTextComposite{#1}{\UnicodeEncodingName}{#2}{#3}
3557 \DeclareDocumentCommand \EncodingCompositeCommand {mmm}
3559 \bool_if:NF \l__fontspec_defining_encoding_bool
3560 { \__fontspec_error:nn {only-inside-encdef} \EncodingCompositeCommand }
3561 \DeclareTextCompositeCommand{#1}{\UnicodeEncodingName}{#2}{#3}
3563 \DeclareDocumentCommand \DeclareUnicodeEncoding {mm}
3565 \DeclareFontEncoding{#1}{}{}
3566 \DeclareErrorFont{#1}{lmr}{m}{n}{10}
3567 \DeclareFontSubstitution{#1}{lmr}{m}{n}
3568 \DeclareFontFamily{#1}{lmr}{}
3570 \DeclareFontShape{#1}{lmr}{m}{n}
3571 {<->\UnicodeFontFile{lmroman10-regular}{\UnicodeFontTeXLigatures}}{}
3572 \DeclareFontShape{#1}{lmr}{m}{it}
3573 {<->\UnicodeFontFile{lmroman10-italic}{\UnicodeFontTeXLigatures}}{}
3574 \DeclareFontShape{#1}{lmr}{m}{sc}
3575 {<->\UnicodeFontFile{lmromancaps10-regular}{\UnicodeFontTeXLigatures}}{}
3576 \DeclareFontShape{#1}{lmr}{bx}{n}
3577 {<->\UnicodeFontFile{lmroman10-bold}{\UnicodeFontTeXLigatures}}{}
3578 \DeclareFontShape{#1}{lmr}{bx}{it}
3579 {<->\UnicodeFontFile{lmroman10-bolditalic}{\UnicodeFontTeXLigatures}}{}
3581 \tl_set_eq:NN \l__fontspec_prev_unicode_name_tl \UnicodeEncodingName
3582 \tl_set:Nn \UnicodeEncodingName {#1}
3583 \bool_set_true:N \l__fontspec_defining_encoding_bool
3585 \bool_set_false:N \l__fontspec_defining_encoding_bool
3586 \tl_set_eq:NN \UnicodeEncodingName \l__fontspec_prev_unicode_name_tl
3588 \DeclareDocumentCommand \UndeclareSymbol {m}
3590 \bool_if:NF \l__fontspec_defining_encoding_bool
3591 { \__fontspec_error:nn {only-inside-encdef} \UndeclareSymbol }
3592 \UndeclareTextCommand {#1} {\UnicodeEncodingName}
3595 \DeclareDocumentCommand \UndeclareComposite {mm}
3597 \bool_if:NF \l__fontspec_defining_encoding_bool
3598 { \__fontspec_error:nn {only-inside-encdef} \UndeclareComposite }
3599 \cs_undefine:c
3600 { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} }
3602 \@ifpackageloaded{euler}
3604 \bool_set_true:N \g__fontspec_pkg_euler_loaded_bool
3607 \bool_set_false:N \g__fontspec_pkg_euler_loaded_bool
3609 \cs_set:Nn \fontspec_setup_maths:
3611 \@ifpackageloaded{euler}
3613 \bool_if:NTF \g__fontspec_pkg_euler_loaded_bool
3614 { \bool_set_true:N \g__fontspec_math_euler_bool }
3615 { \__fontspec_error:n {euler-too-late} }
3618 \@ifpackageloaded{lucbmath}{\bool_set_true:N \g__fontspec_math_lucida_bool}{}
3619 \@ifpackageloaded{lucidabr}{\bool_set_true:N \g__fontspec_math_lucida_bool}{}
3620 \@ifpackageloaded{lucimatx}{\bool_set_true:N \g__fontspec_math_lucida_bool}{}
3621 \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n}
3622 \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n}
3623 \DeclareMathAccent{\acute} {\mathalpha}{legacymaths}{19}
3624 \DeclareMathAccent{\grave} {\mathalpha}{legacymaths}{18}
3625 \DeclareMathAccent{\ddot} {\mathalpha}{legacymaths}{127}
3626 \DeclareMathAccent{\tilde} {\mathalpha}{legacymaths}{126}
3627 \DeclareMathAccent{\bar} {\mathalpha}{legacymaths}{22}
3628 \DeclareMathAccent{\breve} {\mathalpha}{legacymaths}{21}
3629 \DeclareMathAccent{\check} {\mathalpha}{legacymaths}{20}
3630 \DeclareMathAccent{\hat} {\mathalpha}{legacymaths}{94} % too bad, euler
3631 \DeclareMathAccent{\dot} {\mathalpha}{legacymaths}{95}
3632 \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths}{23}
3633 \group_begin:
3634 \mathchardef\@tempa="603A \relax
3635 \ifx\colon\@tempa
3636 \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58}
3638 \group_end:
3639 \bool_if:NF \g__fontspec_math_euler_bool
3641 \DeclareMathSymbol{!}{\mathclose}{legacymaths}{33}
3642 \DeclareMathSymbol{:}{\mathrel} {legacymaths}{58}
3643 \DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59}
3644 \DeclareMathSymbol{?}{\mathclose}{legacymaths}{63}
3645 \bool_if:NF \g__fontspec_math_lucida_bool
3647 \DeclareMathSymbol{0}{\mathalpha}{legacymaths}{`0}
3648 \DeclareMathSymbol{1}{\mathalpha}{legacymaths}{`1}
3649 \DeclareMathSymbol{2}{\mathalpha}{legacymaths}{`2}
3650 \DeclareMathSymbol{3}{\mathalpha}{legacymaths}{`3}
3651 \DeclareMathSymbol{4}{\mathalpha}{legacymaths}{`4}
3652 \DeclareMathSymbol{5}{\mathalpha}{legacymaths}{`5}
3653 \DeclareMathSymbol{6}{\mathalpha}{legacymaths}{`6}
3654 \DeclareMathSymbol{7}{\mathalpha}{legacymaths}{`7}
3655 \DeclareMathSymbol{8}{\mathalpha}{legacymaths}{`8}
3656 \DeclareMathSymbol{9}{\mathalpha}{legacymaths}{`9}
3657 \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths}{0}
3658 \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths}{1}
3659 \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths}{2}
3660 \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths}{3}
3661 \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths}{4}
3662 \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths}{5}
3663 \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths}{6}
3664 \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths}{7}
3665 \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths}{8}
3666 \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths}{9}
3667 \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths}{10}
3668 \DeclareMathSymbol{+}{\mathbin}{legacymaths}{43}
3669 \DeclareMathSymbol{=}{\mathrel}{legacymaths}{61}
3670 \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0}
3671 \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1}
3672 \DeclareMathDelimiter{[}{\mathopen} {legacymaths}{91}{largesymbols}{2}
3673 \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3}
3674 \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14}
3675 \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36}
3678 \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\updefault
3679 \SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\updefault
3680 \DeclareSymbolFontAlphabet\mathrm{operators}
3681 \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\itdefault
3682 \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\updefault
3683 \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\mddefault\updefault
3684 \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\mddefault\updefault
3685 \SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\updefault
3686 \tl_if_empty:NTF \g__fontspec_bfmathrm_tl
3688 \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\itdefault
3691 \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\updefault
3692 \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\bfdefault\updefault
3693 \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\itdefault
3695 \SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\bfdefault\updefault
3696 \SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\bfdefault\updefault
3698 \cs_new:Nn \fontspec_maybe_setup_maths:
3700 \@ifpackageloaded{anttor}
3702 \ifx\define@antt@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi
3704 \@ifpackageloaded{arevmath}{\bool_set_false:N \g__fontspec_math_bool}{}
3705 \@ifpackageloaded{eulervm}{\bool_set_false:N \g__fontspec_math_bool}{}
3706 \@ifpackageloaded{mathdesign}{\bool_set_false:N \g__fontspec_math_bool}{}
3707 \@ifpackageloaded{concmath}{\bool_set_false:N \g__fontspec_math_bool}{}
3708 \@ifpackageloaded{cmbright}{\bool_set_false:N \g__fontspec_math_bool}{}
3709 \@ifpackageloaded{mathesf}{\bool_set_false:N \g__fontspec_math_bool}{}
3710 \@ifpackageloaded{gfsartemisia}{\bool_set_false:N \g__fontspec_math_bool}{}
3711 \@ifpackageloaded{gfsneohellenic}{\bool_set_false:N \g__fontspec_math_bool}{}
3712 \@ifpackageloaded{iwona}
3714 \ifx\define@iwona@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi
3716 \@ifpackageloaded{kpfonts}{\bool_set_false:N \g__fontspec_math_bool}{}
3717 \@ifpackageloaded{kmath}{\bool_set_false:N \g__fontspec_math_bool}{}
3718 \@ifpackageloaded{kurier}
3720 \ifx\define@kurier@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi
3722 \@ifpackageloaded{fouriernc}{\bool_set_false:N \g__fontspec_math_bool}{}
3723 \@ifpackageloaded{fourier}{\bool_set_false:N \g__fontspec_math_bool}{}
3724 \@ifpackageloaded{lmodern}{\bool_set_false:N \g__fontspec_math_bool}{}
3725 \@ifpackageloaded{mathpazo}{\bool_set_false:N \g__fontspec_math_bool}{}
3726 \@ifpackageloaded{mathptmx}{\bool_set_false:N \g__fontspec_math_bool}{}
3727 \@ifpackageloaded{MinionPro}{\bool_set_false:N \g__fontspec_math_bool}{}
3728 \@ifpackageloaded{unicode-math}{\bool_set_false:N \g__fontspec_math_bool}{}
3729 \@ifpackageloaded{breqn}{\bool_set_false:N \g__fontspec_math_bool}{}
3730 \bool_if:NT \g__fontspec_math_bool
3732 \__fontspec_info:n {setup-math}
3733 \fontspec_setup_maths:
3736 \AtBeginDocument{\fontspec_maybe_setup_maths:}
3737 \tl_set:Nn \zf@enc { \g_fontspec_encoding_tl }
3738 \cs_set:Npn \zf@fontspec #1 #2
3740 \__fontspec_select_font_family:nn {#1} {#2}
3741 \tl_set:Nn \zf@family { \l_fontspec_family_tl }
3742 \tl_set:Nn \zf@basefont { \l_fontspec_font }
3744 \bool_if:NT \g__fontspec_cfg_bool
3746 \InputIfFileExists{fontspec.cfg}
3748 {\typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.}}
3750 \providecommand*\itscdefault{\itdefault\scdefault}
3751 \providecommand*\slscdefault{\sldefault\scdefault}
3752 \DeclareRobustCommand{\sishape}
3754 \not@math@alphabet\sishape\relax
3755 \fontshape{\itscdefault}\selectfont
3757 \DeclareTextFontCommand{\textsi}{\sishape}
3758 \cs_new:Nn \__fontspec_shape_merge:nn { c__fontspec_shape_#1_#2_tl }
3759 \tl_const:cn { \__fontspec_shape_merge:nn \itdefault \scdefault } {\itscdefault}
3760 \tl_const:cn { \__fontspec_shape_merge:nn \sldefault \scdefault } {\slscdefault}
3761 \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \itdefault } {\itscdefault}
3762 \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \sldefault } {\slscdefault}
3763 \tl_const:cn { \__fontspec_shape_merge:nn \slscdefault \itdefault } {\itscdefault}
3764 \tl_const:cn { \__fontspec_shape_merge:nn \itscdefault \sldefault } {\slscdefault}
3765 \tl_const:cn { \__fontspec_shape_merge:nn \itscdefault \updefault } {\scdefault}
3766 \tl_const:cn { \__fontspec_shape_merge:nn \slscdefault \updefault } {\scdefault}
3767 \cs_new:Nn \fontspec_merge_shape:n
3769 \__fontspec_if_merge_shape:nTF {#1}
3770 { \fontshape { \tl_use:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } } \selectfont }
3771 { \fontshape {#1} \selectfont }
3773 \prg_new_conditional:Nnn \__fontspec_if_merge_shape:n {TF}
3775 \bool_lazy_and:nnTF
3776 { \tl_if_exist_p:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } }
3778 \cs_if_exist_p:c
3780 \f@encoding/\f@family/\f@series/
3781 \tl_use:c { \__fontspec_shape_merge:nn {\f@shape} {#1} }
3784 \prg_return_true: \prg_return_false:
3786 \DeclareRobustCommand \itshape
3788 \not@math@alphabet\itshape\mathit
3789 \fontspec_merge_shape:n\itdefault
3791 \DeclareRobustCommand \slshape
3793 \not@math@alphabet\slshape\relax
3794 \fontspec_merge_shape:n\sldefault
3796 \DeclareRobustCommand \scshape
3798 \not@math@alphabet\scshape\relax
3799 \fontspec_merge_shape:n\scdefault
3801 \DeclareRobustCommand \upshape
3803 \not@math@alphabet\upshape\relax
3804 \fontspec_merge_shape:n\updefault
3806 \cs_new_protected:Npn \emfontdeclare #1
3808 \prop_clear:N \g__fontspec_em_prop
3809 \int_zero:N \l__fontspec_emdef_int
3810 \bool_set_true:N \g__fontspec_em_normalise_slant_bool
3812 \tl_if_in:nnT {#1} {\slshape}
3814 \tl_if_in:nnT {#1} {\itshape}
3816 \bool_set_false:N \g__fontspec_em_normalise_slant_bool
3820 \group_begin:
3821 \normalfont
3822 \clist_map_inline:nn {\emreset,#1}
3825 \prop_gput_if_new:NxV \g__fontspec_em_prop { \f@shape } { \l__fontspec_emdef_int }
3826 \prop_gput:Nxn \g__fontspec_em_prop { switch-\int_use:N \l__fontspec_emdef_int } { ##1 }
3827 \int_incr:N \l__fontspec_emdef_int
3829 \group_end:
3831 \DeclareRobustCommand \em
3833 \@nomath\em
3834 \tl_set:Nx \l__fontspec_emshape_query_tl { \f@shape }
3836 \bool_if:NT \g__fontspec_em_normalise_slant_bool
3838 \tl_replace_all:Nnn \l__fontspec_emshape_query_tl {/sl} {/it}
3841 \prop_get:NxNT \g__fontspec_em_prop { \l__fontspec_emshape_query_tl } \l__fontspec_em_tmp_tl
3843 \int_set:Nn \l__fontspec_em_int { \l__fontspec_em_tmp_tl }
3846 \int_incr:N \l__fontspec_em_int
3848 \prop_get:NxNTF \g__fontspec_em_prop { switch-\int_use:N \l__fontspec_em_int } \l__fontspec_em_switch_tl
3849 { \l__fontspec_em_switch_tl }
3851 \int_zero:N \l__fontspec_em_int
3852 \emreset
3856 \DeclareTextFontCommand{\emph}{\em}
3857 \cs_set:Npn \emreset { \upshape }
3858 \cs_set:Npn \emshape { \itshape }
3859 \cs_set:Npn \eminnershape { \upshape }
3860 \cs_new_protected:Npn \strongfontdeclare #1
3862 \prop_clear:N \g__fontspec_strong_prop
3863 \int_zero:N \l__fontspec_strongdef_int
3865 \group_begin:
3866 \normalfont
3867 \clist_map_inline:nn {\strongreset,#1}
3870 \prop_gput_if_new:NxV \g__fontspec_strong_prop { \f@series } { \l__fontspec_strongdef_int }
3871 \prop_gput:Nxn \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strongdef_int } { ##1 }
3872 \int_incr:N \l__fontspec_strongdef_int
3874 \group_end:
3876 \DeclareRobustCommand \strongenv
3878 \@nomath\strongenv
3880 \prop_get:NxNT \g__fontspec_strong_prop { \f@series } \l__fontspec_strong_tmp_tl
3882 \int_set:Nn \l__fontspec_strong_int { \l__fontspec_strong_tmp_tl }
3885 \int_incr:N \l__fontspec_strong_int
3887 \prop_get:NxNTF \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strong_int } \l__fontspec_strong_switch_tl
3888 { \l__fontspec_strong_switch_tl }
3890 \int_zero:N \l__fontspec_strong_int
3891 \strongreset
3895 \DeclareTextFontCommand{\strong}{\strongenv}
3896 \cs_set:Npn \strongreset {}
3897 \cs_set:Npn \reset@font
3899 \normalfont
3900 \int_zero:N \l__fontspec_em_int
3901 \int_zero:N \l__fontspec_strong_int
3903 \cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l__fontspec_em_int {#1} }
3904 \cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l__fontspec_strong_int {#1} }
3905 \strongfontdeclare{ \bfseries }
3906 \emfontdeclare{ \emshape, \eminnershape }
3907 \DeclareRobustCommand{\-}
3909 \discretionary
3911 \char\ifnum\hyphenchar\font<\z@
3912 \xlx@defaulthyphenchar
3913 \else
3914 \hyphenchar\font
3916 }{}{}
3918 \def\xlx@defaulthyphenchar{`\-}
3919 \cs_new:Nn \fontspec_visible_space:
3921 \__fontspec_primitive_font_glyph_if_exist:NnTF \font {"2423}
3922 { \char"2423\scan_stop: }
3923 { \fontspec_visible_space_fallback: }
3925 \cs_new:Nn \fontspec_visible_space_fallback:
3928 \usefont{\g_fontspec_encoding_tl}{lmtt}{\f@series}{\f@shape}
3929 \textvisiblespace
3932 \group_begin:
3933 \char_set_catcode_active:n{"20}%
3934 \cs_gset:Npn\fontspec_print_visible_spaces:{%
3935 \char_set_catcode_active:n{"20}%
3936 \cs_set_eq:NN^^20\fontspec_visible_space:%
3938 \group_end:
3939 \def\verb
3941 \relax\ifmmode\hbox\else\leavevmode\null\fi
3942 \bgroup
3943 \verb@eol@error \let\do\@makeother \dospecials
3944 \verbatim@font\@noligs
3945 \@ifstar\__fontspecsverb\@verb
3947 \def\__fontspecsverb{\fontspec_print_visible_spaces:\@sverb}
3948 \AtBeginDocument
3950 \fontspec_patch_verbatim:
3951 \fontspec_patch_moreverb:
3952 \fontspec_patch_fancyvrb:
3953 \fontspec_patch_listings:
3955 \cs_set:Npn \fontspec_patch_verbatim:
3957 \@ifpackageloaded{verbatim}
3959 \cs_set:cpn {verbatim*}
3961 \group_begin: \@verbatim \fontspec_print_visible_spaces: \verbatim@start
3965 \cs_set:cpn {verbatim*}
3967 \@verbatim \fontspec_print_visible_spaces: \@sxverbatim
3971 \cs_set:Npn \fontspec_patch_moreverb:
3973 \@ifpackageloaded{moreverb}{
3974 \cs_set:cpn {listingcont*}
3976 \cs_set:Npn \verbatim@processline
3978 \thelisting@line \global\advance\listing@line\c_one
3979 \the\verbatim@line\par
3981 \@verbatim \fontspec_print_visible_spaces: \verbatim@start
3985 \cs_set:Npn \fontspec_patch_fancyvrb:
3987 \@ifpackageloaded{fancyvrb}
3989 \cs_set_eq:NN \FancyVerbSpace \fontspec_visible_space:
3992 \cs_set:Npn \fontspec_patch_listings:
3994 \@ifpackageloaded{listings}
3996 \cs_set_eq:NN \lst@visiblespace \fontspec_visible_space:
3999 \RenewDocumentCommand \oldstylenums {m}
4001 { \addfontfeature{Numbers=OldStyle} #1 }
4003 \NewDocumentCommand \liningnums {m}
4005 { \addfontfeature{Numbers=Lining} #1 }
4007 %% ------------------------------------------------
4008 %% Copyright 2004--2017 Will Robertson <will.robertson@latex-project.org>
4009 %% Copyright 2009--2013 Khaled Hosny <khaledhosny@eglug.org>
4011 %% Distributable under the LaTeX Project Public License, version 1.3c or higher.
4012 %% The latest version of this license is at: http://www.latex-project.org/lppl.txt
4014 %% This work is "maintained" by Will Robertson.
4015 %% It consists of the files: fontspec*.dtx, fontspec.cfg, fontspec*.tex.
4016 %% And the derived files: fontspec*.sty,fontspec.lua, fontspec.pdf.
4017 %% ------------------------------------------------
4019 %% End of file `fontspec-xetex.sty'.