mult-dim.mklx /size: 5822 b    last modification: 2023-12-21 09:44
1%D \module
2%D   [       file=core-gen,
3%D        version=1995.10.10,
4%D          title=\CONTEXT\ Core Macros,
5%D       subtitle=General,
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\writestatus{loading}{ConTeXt Core Macros / General}
15
16% we could write a proper parser now in lua
17
18\unprotect
19
20%D \macros
21%D   {assigndimension,assignalfadimension}
22%D
23%D The following commands are used to process keyword based dimension setters.
24%D
25%D \starttyping
26%D \assigndimension
27%D   {<value>|small|medium|big|-small|-medium|-big|none}
28%D   {\dimension}
29%D   {value small}
30%D   {value medium}
31%D   {value big}
32%D \stoptyping
33%D
34%D The given keyword determines the result.
35
36\installcorenamespace{dimensionnormal}
37
38\def\assign_dimension_direct#value#dimension#small#medium#big{#dimension=#value\relax}
39
40\immutable\setvalue{\??dimensionnormal \v!none  }#value#dimension#small#medium#big{#dimension\zeropoint}
41\immutable\setvalue{\??dimensionnormal \empty   }#value#dimension#small#medium#big{#dimension\zeropoint}
42\immutable\setvalue{\??dimensionnormal \v!small }#value#dimension#small#medium#big{#dimension=#small\relax}
43\immutable\setvalue{\??dimensionnormal \v!medium}#value#dimension#small#medium#big{#dimension=#medium\relax}
44\immutable\setvalue{\??dimensionnormal \v!big   }#value#dimension#small#medium#big{#dimension=#big\relax}
45\immutable\setvalue{\??dimensionnormal-\v!small }#value#dimension#small#medium#big{#dimension=-#small\relax}
46\immutable\setvalue{\??dimensionnormal-\v!medium}#value#dimension#small#medium#big{#dimension=-#medium\relax}
47\immutable\setvalue{\??dimensionnormal-\v!big   }#value#dimension#small#medium#big{#dimension=-#big\relax}
48\immutable\letvalue{\??dimensionnormal\s!unknown}\assign_dimension_direct
49
50\permanent\protected\def\assigndimension#value%
51  {\ifcsname\??dimensionnormal#value\endcsname
52     \expandafter\lastnamedcs
53   \else
54     \expandafter\assign_dimension_direct
55   \fi{#value}}
56
57%D The next variant assigns to a macro instead of a dimension.
58%D
59%D \starttyping
60%D \assignalfadimension
61%D   {<value>|small|medium|big|none}
62%D   {\macro}
63%D   {value small}
64%D   {value medium}
65%D   {value big}
66%D \stoptyping
67%D
68%D This one is used for factors.
69
70\installcorenamespace{dimensionalfa}
71
72\def\assign_alpha_dimension_direct#value#macro#small#medium#big{\edef#macro{#value}}
73
74\immutable\setvalue{\??dimensionalfa\v!none   }#value#macro#small#medium#big{\let #macro\!!zerocount}
75\immutable\setvalue{\??dimensionalfa\v!small  }#value#macro#small#medium#big{\edef#macro{#small}}
76\immutable\setvalue{\??dimensionalfa\v!medium }#value#macro#small#medium#big{\edef#macro{#medium}}
77\immutable\setvalue{\??dimensionalfa\v!big    }#value#macro#small#medium#big{\edef#macro{#big}}
78\immutable\letvalue{\??dimensionalfa\s!unknown}\assign_alpha_dimension_direct
79
80\permanent\protected\def\assignalfadimension#value%
81  {\ifcsname\??dimensionalfa#value\endcsname
82     \expandafter\lastnamedcs
83   \else
84     \expandafter\assign_alpha_dimension_direct
85   \fi
86   {#value}}
87
88%D \macros
89%D   {assignvalue}
90%D
91%D A variant that does not assume dimenions is the following:
92%D
93%D \starttyping
94%D \assignvalue
95%D   {<value>|small|medium|big}
96%D   {\macro}
97%D   {value small}
98%D   {value medium}
99%D   {value big}
100%D \stoptyping
101
102\installcorenamespace{dimensionvalue}
103
104\def\assign_value_direct#value#macro#small#medium#big{\edef#macro{#value}}
105
106\immutable\setvalue{\??dimensionvalue\v!small  }#value#macro#small#medium#big{\edef#macro{#small}}
107\immutable\setvalue{\??dimensionvalue\v!medium }#value#macro#small#medium#big{\edef#macro{#medium}}
108\immutable\setvalue{\??dimensionvalue\v!big    }#value#macro#small#medium#big{\edef#macro{#big}}
109\immutable\letvalue{\??dimensionvalue\s!unknown}\assign_value_direct
110
111\permanent\protected\def\assignvalue#value%
112  {\ifcsname\??dimensionvalue#value\endcsname
113     \expandafter\lastnamedcs
114   \else
115     \expandafter\assign_value_direct
116  \fi{#value}}
117
118%D \macros
119%D   {assignwidth}
120%D
121%D This one is used a few times.
122%D
123%D \starttyping
124%D \assignwidth
125%D   {<value>|fit|broad}
126%D   {\dimension}
127%D   {text}
128%D   {extra}
129%D \stoptyping
130
131\installcorenamespace{dimensionwidth}
132
133\newbox\b_assign_width
134
135\def\assign_width_direct#value#dimension#content#extra{#dimension=#value\relax}
136
137% line is like fit but can be used later as signal for ...
138
139\immutable\setvalue{\??dimensionwidth          }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width
140                                                                               \setbox\b_assign_width\emptybox}
141\immutable\setvalue{\??dimensionwidth\v!fit    }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width
142                                                                               \setbox\b_assign_width\emptybox}
143\immutable\setvalue{\??dimensionwidth\v!broad  }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\dimexpr\wd\b_assign_width+#extra\relax
144                                                                               \setbox\b_assign_width\emptybox}
145\immutable\setvalue{\??dimensionwidth\v!line   }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width
146                                                                               \setbox\b_assign_width\emptybox}
147\immutable\letvalue{\??dimensionwidth\s!unknown}\assign_width_direct
148
149\permanent\protected\def\assignwidth#value%
150  {\ifcsname\??dimensionwidth#value\endcsname
151     \expandafter\lastnamedcs
152   \else
153     \expandafter\assign_width_direct
154   \fi{#value}}
155
156\protect \endinput
157