blob: abeb91097f4cc475a370cf7f28833e7e924d0d98 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
\RequirePackage{xparse}
\ProvidesExplPackage {combofont} {2017/07/03} {0.2}
{An EXPERIMENTAL package to add nfss-declaration of combo fonts to a luaLaTeX document}
% highly experimental! Comments to Ulrike Fischer. fischer@troubleshooting-tex.de
\msg_new:nnn {combo} {need-luatex}
{
The~ combofont~package~requires~LuaLaTeX.~Quitting.
}
\msg_new:nnn {combo} {combofont-already-exists}
{
The~combofont~#1~has~already~been~set~up.~I~won't~overwrite~it
}
\sys_if_engine_luatex:F
{
\msg_fatal:nn {combo} {need-luatex}
\endinput
}
\RequirePackage{xfp}
\cs_generate_variant:Nn \seq_set_split:Nnn {cnV}
\NewDocumentCommand\setupcombofont { m m m } %name, basefonts, combofont declaration
{
\tl_set:Nn\l_tmpa_tl { #2 }
\regex_replace_all:nnN {\#1} {\c{f@size}} \l_tmpa_tl
% \tl_show:N\l_tmpa_tl
\seq_if_exist:cTF { l__combo_#1_basefonts_seq }
{
\msg_warning:nnn { combo} {combofont-already-exists} { #1 }
}
{
\seq_new:c { l__combo_#1_basefonts_seq }
\seq_set_split:cnV { l__combo_#1_basefonts_seq } { , }\l_tmpa_tl
%%\seq_show:c {l__combo_#1_basefonts_seq }
\seq_new:c { l__combo_#1_combodesc_seq }
\seq_set_from_clist:cn { l__combo_#1_combodesc_seq } { #3 }
%%\seq_show:c { l__combo_#1_combodesc_seq }
\__combo_build_combodesc:n { #1 }
}
}
\cs_new:Nn \__combo_call_basefonts:n
{
\int_zero:N \l_tmpa_int
\seq_map_inline:cn {l__combo_#1_basefonts_seq}
{
\int_incr:N \l_tmpa_int
\exp_args:Nc \font { l_combo_tmpfont_\int_to_roman:n{\l_tmpa_int}_tl } = ##1
}
}
\cs_new:Nn \__combo_build_combodesc:n
{
\tl_new:c { l__combo_#1_combodesc_tl }
\tl_set:cx { l__combo_#1_combodesc_tl } { \tl_to_str:n { " } combo \tl_to_str:n { : }~ }
\int_step_inline:nnnn { 1 } { 1 } { \seq_count:c { l__combo_#1_basefonts_seq } }
{
\tl_put_right:cn { l__combo_#1_combodesc_tl } { ##1~->~\fontid }
\exp_args:Nnc \tl_put_right:cn { l__combo_#1_combodesc_tl }
{
l_combo_tmpfont_\int_to_roman:n{##1}_tl
}
\tl_set:Nx\l_tmpa_tl { \seq_item:cn {l__combo_#1_combodesc_seq } {##1} }
\tl_if_empty:NF \l_tmpa_tl
{
\tl_put_right:cx { l__combo_#1_combodesc_tl}
{
,~ \seq_item:cn {l__combo_#1_combodesc_seq } {##1}
}
}
\tl_put_right:cx { l__combo_#1_combodesc_tl} {\tl_to_str:n{;}}
}
\tl_put_right:cx { l__combo_#1_combodesc_tl } { \tl_to_str:n { " } }
%% \tl_show:c { l__combo_#1_combodesc_tl }
}
\DeclareSizeFunction{combo}{\__combo_sfcnt:}
\cs_new:Nn\__combo_sfcnt:
{
% \tl_show:c {l__combo_\use:c{mandatory@arg}_combodesc_tl}
\__combo_call_basefonts:n { \mandatory@arg }
\tl_set_eq:Nc \external@font { l__combo_\use:c{mandatory@arg}_combodesc_tl}
}%
\tl_new:N\combodefaultfeat
\tl_set:Nn\combodefaultfeat{mode=node;script=latn;language=DFLT;+tlig;}
\endinput
|