2 %% This is file `fontspec-xetex.sty',
3 %% generated with the docstrip utility.
5 %% The original source files were:
7 %% fontspec.dtx (with options: `fontspec,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
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.\\
323 \__fontspec_msg_new:nnn
{fontspec
} {font-index-needs-ttc
}
325 The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\
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
}
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
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
}
454 \prg_set_conditional:Nnn
\__fontspec_primitive_font_if_exist:n
{TF,T,F
}
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:
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 }
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 }
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 }
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 }
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}
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
}
613 { \__fontspec_set_default_features:nn
{#1} {#3} }
614 { \__fontspec_set_font_default_features:nnn
{#1} {#2} {#3} }
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} }
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
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
659 \__fontspec_select_font_family:nn
660 { \l__fontspec_options_tl ,
#1 } {\l__fontspec_fontname_tl}
663 \fontfamily\l_fontspec_family_tl\selectfont
666 \__fontspec_warning:nx
{addfontfeatures-ignored
} {#1}
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
}
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
808 \__fontspec_font_suppress_not_found_error:
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}
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:
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:
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:
}
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
}
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 }
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
1045 \__fontspec_font_suppress_not_found_error:
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}
1078 \cs_set_eq:NN
\fontspec_select:nn
\__fontspec_select_font_family:nn
1079 \cs_new:Nn
\__fontspec_sanitise_fontname:Nn
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}
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 }
1176 \str_if_eq_x:nnF
{#6}{} {:
#6} "
1178 \cs_set:Nn
\__fontspec_construct_font_call:nn
1180 \__fontspec_construct_font_call:nnnnnn
1182 \l__fontspec_extension_tl
1183 \l__fontspec_ttc_index_tl
1184 \l_fontspec_renderer_tl
1185 \l__fontspec_optical_size_tl
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
1235 \keys_set:nV
{fontspec-opentype
} \l__fontspec_keys_leftover_clist
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
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}
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
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}
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
} }
1450 \__fontspec_load_fontname:n
{\l__fontspec_sizedfont_tl}
1451 \__fontspec_setup_nfss:Nnnn
\l__fontspec_nfss_tl {#1} {\l__fontspec_sizing_leftover_clist} {}
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 }
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} } }
1509 \cs_new:Nn
\__fontspec_DeclareFontShape:nnnnnn
1513 \cs_undefine:c
{#1/
#2/
#3/
#4/
\f@size
}
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
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
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'~
}
1545 \l__fontspec_nfss_tl
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} )~
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
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
}
1670 { \__fontspec_remove_clashing_featstr:n
{#5} }
1674 \keys_define:nn
{fontspec-opentype
}
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}
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}
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}
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 }
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,
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
}
2179 \__fontspec_keys_define_code:nnn
{fontspec
} {Font
}
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
}
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
2233 \fontencoding { \encodingdefault }
2234 \fontfamily { \rmdefault }
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
}
2249 \cs_new:Nn
\__fontspec_set_font_dimen:NnN
2251 \dim_set:Nn
#1 { \fontdimen #2 #3 }
2252 \dim_compare:nNnT
#1 =
{0pt
}
2256 \str_if_eq:nnTF
{#3} {\font} \rmfamily #3
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}
2297 \tl_set:Nn
\l__fontspec_punctspace_adjust_tl
2298 { \fontdimen 7 \font =
0 \fontdimen 2 \font }
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
}
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
}
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,
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
} {} {}
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
} {} {}
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
} {} {}
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
} {} {}
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
} {} {}
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
} {} {}
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
} {} {}
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
} {} {}
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
} {} {}
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
}
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 }
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
}
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 }
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}
3634 \mathchardef\@tempa="
603A
\relax
3636 \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths
}{58}
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
}
3776 { \tl_if_exist_p:c
{ \__fontspec_shape_merge:nn
{\f@shape
} {#1} } }
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
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
3831 \DeclareRobustCommand \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
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
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
3876 \DeclareRobustCommand \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
3895 \DeclareTextFontCommand{\strong}{\strongenv}
3896 \cs_set:Npn
\strongreset {}
3897 \cs_set:Npn
\reset@font
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{\-
}
3911 \char\ifnum\hyphenchar\font<
\z@
3912 \xlx@defaulthyphenchar
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
}
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:
%
3941 \relax\ifmmode\hbox\else\leavevmode\null\fi
3943 \verb@eol@error
\let\do\@makeother
\dospecials
3944 \verbatim@font\@noligs
3945 \@ifstar
\__fontspecsverb\@verb
3947 \def\__fontspecsverb{\fontspec_print_visible_spaces:\@sverb
}
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'.