font-col.mkvi /size: 6231 b    last modification: 2020-07-01 14:35
1
%D \module
2
%D [ file=font-col,
3
%D version=2008.06.11,
4
%D title=\CONTEXT\ Font Macros,
5
%D subtitle=Fallbacks (collections),
6
%D author=Hans Hagen,
7
%D date=\currentdate,
8
%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9
%C
10
%C This module is part of the \CONTEXT\ macro||package and is
11
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12
%C details.
13 14
% ! EXPERIMENTAL ! code will be made more nice
15
%
16
% actually we can now do more at the lua end
17 18
% todo : missing only, force always, multiple fallbacks with test, scale
19
% beware : only english key/values
20
%
21
% \resetfontfallback [whatever]
22
%
23
% \definefontfallback [whatever] [Slanted] [0x0060-0x007F] [force=yes]
24
% \definefontfallback [whatever] [Bold] [0x0080-0x00FF,0x00A0-0x00AF] [rscale=1.2]
25
% \definefontfallback [whatever] [BoldSlanted] [0x00C0-0x00C7] [check=yes,force=yes]
26
%
27
% \definefontfeature [emboldened] [effect={width=0.1,delta=0.4,factor=0.3}]
28
% \definefontsynonym [SansEmboldened] [Sans] [features=emboldened]
29
% \definefontfallback[FakeSansCaps] [SansEmboldened] [0x0000-0xFFFF] [rscale=.8,method=uppercase]
30
% \definefontsynonym [SansCaps] [file:MyriadPro-Regular.otf] [fallbacks=FakeSansCaps]
31 32
\writestatus
{
loading
}{
ConTeXt
Font
Macros
/
Collections
}
33 34
\registerctxluafile
{
font
-
col
}{}
35 36
\unprotect
37 38
\unexpanded
\def
\definefontfallback
{
\doquadrupleempty
\font_fallbacks_define
}
39
\unexpanded
\def
\resetfontfallback
{
\dodoubleempty
\font_fallbacks_reset
}
40 41
\def
\font_fallbacks_define
[#
name
][#
font
][#
ranges
][#
settings
]
%
42
{
\let
\mathsizesuffix
\relax
43
\clf_fontcollectiondefine
{
#
name
}{
#
font
}{
#
ranges
}{
#
settings
}
%
44
\let
\mathsizesuffix\empty
}
45 46
\def
\font_fallbacks_reset
[#
name
][#
font
]
%
47
{
\clf_fontcollectionreset
{
#
name
}{
#
font
}}
48 49
\def
\font_fallbacks_prepare
#
name
%
50
{
\clf_fontcollectionprepare
{
#
name
}}
% add fallbacks to last font
51 52
% we might as well move the handling to lua but then we need to pass the
53
% fallbacks, skewchar etc.
54 55
\newconditional
\c_font_fallbacks_in_progress
56 57
\def
\font_fallbacks_prepare_indeed
#
fallbacks
%
58
{
\begingroup
59
\settrue
\c_font_fallbacks_in_progress
60
\lastrawfontcall
% sets current font id
61
\font_fallbacks_prepare
#
fallbacks
%
62
\endgroup
}
63 64
\let
\m_font_fallbacks
\empty
% set in the font-ini
65 66
\appendtoks
67
\ifconditional
\c_font_fallbacks_in_progress
\else
68
\ifx
\m_font_fallbacks
\empty
69
\ifx
\m_font_class_fallbacks
\empty
70
\else
71
\font_fallbacks_prepare_indeed
\m_font_class_fallbacks
72
\fi
73
\else
74
\font_fallbacks_prepare_indeed
\m_font_fallbacks
75
\fi
76
\fi
77
\to
\everydefinefont
78 79
\def
\font_fallbacks_start_cloning
80
{
\begingroup
81
\let
\savedfontspec
\somefontspec
}
82 83
\def
\font_fallbacks_stop_cloning
84
{
\endgroup
}
85 86
\def
\font_fallbacks_clone_unique
#
specification
#
scale
% kind of dododefinefont
87
{
\clf_fontcollectionreport
{
defining
#
specification
(
relative
scale
:
#
scale
)
}
% brrr
88
\setfalse
\c_font_auto_size
89
\let
\lastfontidentifier
\s!dummy
90
\def
\v_font_size_relative
{
#
scale
}
%
91
\let
\v_font_size_absolute
\fontbody
92
\font_helpers_low_level_define
{
#
specification
}
\v_font_identifier_basic
93
\csname
\v_font_identifier_basic
\endcsname
94
\setfalse
\c_font_auto_size
}
% no \setfontcharacteristics and \the\everyfontswitch needed
95 96
\def
\font_fallbacks_clone_inherited
#
font
% also a second argument
97
{
\font_fallbacks_clone_unique
{
#
font
\savedfontspec
}}
98 99
\def
\font_fallbacks_register_main
#
name
{
\clf_fontcollectionregister
{
#
name
}}
100
\def
\font_fallbacks_prepare_clone_vectors
#
name
{
\clf_fontcollectionclone
{
#
name
}}
101 102
% math (experiment, todo clf_)
103 104
\def
\font_fallbacks_register_math
#
1
#
2
#
3
#
4
%
105
{
\doifelsenothing
{
#
3
}
%
106
{
\definedfont
[#
2
at
#
4
sp
]
}
%
107
{
\definedfont
[#
2
*
#
3
\space
at
#
4
\scaledpoint
]
}
%
108
\clf_registerfontfallbackid
#
1
\space
\fontid\font
\space
{
#
2
}}
109 110
% \def\font_fallbacks_finish_math
111
% {\ctxlua{mathematics.finishfallbacks()}}
112 113
% check : only replace when present in replacement font (default: no)
114
% force : force replacent even when basefont has glyph (default: yes)
115 116
% \definefontfallback [whatever] [Slanted] [0x0060-0x007F] [force=yes]
117
% \definefontfallback [whatever] [Bold] [0x0080:0x00FF,0x00A0:0x00AF] [rscale=2.0]
118
% \definefontfallback [whatever] [BoldSlanted] ["00C0-"00C7] [check=yes,force=yes]
119
% \definefontfallback [whatever] [Mono] [latinextendeda] [force=yes] % 0x0100:0x017F
120
% \definefontfallback [whatever] [Mono] [latin extended a] [force=yes] % 0x0100:0x017F
121
%
122
% \definefontsynonym[SerifPlus][Serif][fallbacks=whatever]
123
%
124
% \showfont[SerifPlus][all]
125 126
% \definefontfeature[zh][mode=node,script=hang,lang=zhs]
127
% \definefontfallback[serifwhatever] [lmroman10-regular] [0x0000-0x0400][force=yes]
128
% \definefontfallback[serifboldwhatever] [lmroman10-bold] [0x0000-0x0400][force=yes]
129
% \definefontfallback[serifitalicwhatever] [lmroman10-italic] [0x0000-0x0400][force=yes]
130
% \definefontfallback[serifbolditalicwhatever][lmroman10-bolditalic][0x0000-0x0400][force=yes]
131
%
132
% \starttypescript [serif] [zhfont]
133
% \definefontsynonym [zhserif] [AdobeSongStd-Light] [features=zh,fallbacks=serifwhatever]
134
% \definefontsynonym [zhserifbold] [AdobeHeitiStd-Regular][features=zh,fallbacks=serifboldwhatever]
135
% \definefontsynonym [zhserifitalic] [AdobeKaitiStd-Regular][features=zh,fallbacks=serifitalicwhatever]
136
% \definefontsynonym [zhserifbolditalic][AdobeHeitiStd-Regular][features=zh,fallbacks=serifbolditalicwhatever]
137
% \stoptypescript
138
%
139
% \starttypescript [serif][zhfont][name]
140
% \definefontsynonym[Serif] [zhserif] % [fallbacks=serifwhatever]
141
% \definefontsynonym[SerifBold] [zhserifbold] % [fallbacks=serifboldwhatever]
142
% \definefontsynonym[SerifItalic] [zhserifitalic] % [fallbacks=serifitalicwhatever]
143
% \definefontsynonym[SerifBoldItalic] [zhserifbolditalic] % [fallbacks=serifbolditalicwhatever]
144
% \stoptypescript
145
%
146
% \starttypescript[myfont]
147
% \definetypeface[myfont][rm][serif][zhfont]
148
% \stoptypescript
149
%
150
% \usetypescript[myfont] \setupbodyfont[myfont,rm,12pt]
151
%
152
% \starttext
153
% fonts {\bf fonts} {\bi fonts} {\it fonts}
154
% \stoptext
155 156
\protect
\endinput
157