summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/scrp-ini.mkiv
blob: dccea2ee0bc19efd8f2024001e452f43629204b4 (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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
%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}{}
\registerctxluafile{scrp-cjk}{}
\registerctxluafile{scrp-eth}{}
\registerctxluafile{scrp-tha}{}
\registerctxluafile{scrp-tib}{}

\ifcase \contextlmtxmode
    \definesystemattribute[script][public,pickup]
\fi

%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

\let\setupscripts\setupscript % be nice

% presets are global and are currently defined in lua

\appendtoks
    \setuevalue\currentscript{\setscript[\currentscript]}%
\to \everydefinescript

\unexpanded\def\scripts_basics_set
  {\clf_setscript{\currentscript}{\scriptparameter\c!method}{\scriptparameter\c!preset}}

\unexpanded\def\setglobalscript[#1]%
  {\edef\currentscript{#1}%
   \scripts_basics_set
   \pickupscriptattribute}

\unexpanded\def\setlocalscript[#1]%
  {\edef\currentscript{#1}%
   \scripts_basics_set}

\let\setscript\setlocalscript

\unexpanded\def\resetscript
  {\clf_resetscript}

\unexpanded\def\startscript[#1]%
  {\begingroup
   \edef\currentscript{#1}%
   \scripts_basics_set}

\unexpanded\def\stopscript
  {\endgroup}

% % todo:
%
% \unexpanded\def\setscriptsplitterlist
%   {\dodoubleargument\scripts_basics_set_splitter_list}
%
% \def\scripts_basics_set_splitter_list[#1][#2]%
%   {\ctxcommand{setscriptsplitterlist("#1","#2")}

% \setscript[hangul] \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
    \ifx\currentscript\empty
        \doifelse{\scriptparameter\s!features}\v!auto\enableautofontscript\disableautofontscript
    \fi
\to \everysetupscript

\unexpanded\def\enableautofontscript {\clf_enableautofontscript }
\unexpanded\def\disableautofontscript{\clf_disableautofontscript}

\definefontfeature[latn][script=latn]
\definefontfeature[grek][script=grek]

\protect \endinput