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
99
100
101
102
103
104
105
106
107
108
109
110
111
|
%D \module
%D [ file=scrp-ini,
%D version=2009.02.06,
%D title=\CONTEXT\ Script Macros,
%D subtitle=Initialization,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
%D The script handler has been upgraded mid June 2020 so there might be issues as I
%D didn't test everything (yet). It should all be a bit more efficient now in
%D \LUAMETATEX, although not spectacular. We use no attributes in \LUAMETATEX\ and
%D only one in \LUATEX\ now.
%D
%D A glyph can have (an dget) all kind of properties. Except from the state, these
%D are assigned within \TEX's grouping model!
%D
%D \startitemize
%D \startitem font \stopitem
%D \startitem character \stopitem
%D \startitem language (4 properties packed in an unsigned integer) \stopitem
%D \startitem data (used for dynamics) \stopitem
%D \startitem script (used for special script processing) \stopitem
%D \startitem state (used for analyzing, related to font features) \stopitem
%D \stopitemize
%D
%D Additional properties are set via node list handlers. The state is stored in the
%D glyph, but additional properties are stored in a node's property table. In the
%D future the state might get used for something else, in which case we will stire
%D the state in the property table too. On the other hand, we can now (if we want)
%D influence the state at the\TEX\ end (not that we do that yet).
%D Todo: as in bidi mode we need a way to globally keep the setting.
\registerctxluafile{scrp-ini}{autosuffix}
\registerctxluafile{scrp-cjk}{}
\registerctxluafile{scrp-eth}{}
\registerctxluafile{scrp-tha}{}
\registerctxluafile{scrp-tib}{}
\definesystemattribute[script][public,pickup]
%D Since scripts need specific \LUA\ code we use hard coded attribute values, but we
%D might have more tricks at some time, so we use a proper define macro too.
\unprotect
\installcorenamespace{script}
\installcommandhandler \??script {script} \??script
\aliased\let\setupscripts\setupscript % be nice
% presets are global and are currently defined in lua
% \appendtoks
% \setuevalue\currentscript{\setscript[\currentscript]}%
% \to \everydefinescript
\permanent\protected\def\setlocalscript[#1]%
{\edef\currentscript{#1}%
\clf_setscript{\currentscript}{\scriptparameter\c!method}{\scriptparameter\c!preset}}
\permanent\protected\def\setglobalscript[#1]%
{\setlocalscript[#1]%
\pickupscriptattribute} % pagebuilder
\aliased\let\setscript\setlocalscript
\permanent\protected\def\resetscript
{\clf_resetscript}
\permanent\protected\def\startscript[#1]%
{\begingroup
\setlocalscript[#1]}
\permanent\protected\def\stopscript
{\endgroup}
% \setscript[hangul] \startscript[hangul]
\definescript [hangul] [\c!method=hangul]
\definescript [hanzi] [\c!method=hanzi]
\definescript [nihongo] [\c!method=nihongo]
\definescript [ethiopic] [\c!method=ethiopic]
\definescript [thai] [\c!method=thai]
\definescript [tibetan] [\c!method=tibetan]
\definescript [latin] [\c!method=] % resets the attribute (also currentscript)
\definescript [test] [\c!method=test]
% a new trick (at some point we will predefine more scripts and consider a link with the above)
\appendtoks
\ifempty\currentscript
\doifelse{\scriptparameter\s!features}\v!auto\enableautofontscript\disableautofontscript
\fi
\to \everysetupscript
\permanent\protected\def\enableautofontscript {\clf_enableautofontscript } % can be public implementor
\permanent\protected\def\disableautofontscript{\clf_disableautofontscript} % can be public implementor
\definefontfeature[latn][script=latn]
\definefontfeature[grek][script=grek]
\protect \endinput
|