Blame


1 08708877 2003-11-25 devnull /* thanks to Caerwyn Jones <caerwyn@comcast.net> for this module */
2 08708877 2003-11-25 devnull #include <u.h>
3 08708877 2003-11-25 devnull #include <libc.h>
4 08708877 2003-11-25 devnull #include <bio.h>
5 08708877 2003-11-25 devnull #include "dict.h"
6 08708877 2003-11-25 devnull
7 08708877 2003-11-25 devnull enum {
8 08708877 2003-11-25 devnull Buflen=1000,
9 cbeb0b26 2006-04-01 devnull Maxaux=5
10 08708877 2003-11-25 devnull };
11 08708877 2003-11-25 devnull
12 08708877 2003-11-25 devnull /* Possible tags */
13 08708877 2003-11-25 devnull enum {
14 08708877 2003-11-25 devnull B, /* Bold */
15 08708877 2003-11-25 devnull Blockquote, /* Block quote */
16 08708877 2003-11-25 devnull Br, /* Break line */
17 08708877 2003-11-25 devnull Cd, /* ? coloquial data */
18 08708877 2003-11-25 devnull Col, /* ? Coloquial */
19 08708877 2003-11-25 devnull Def, /* Definition */
20 08708877 2003-11-25 devnull Hw, /* Head Word */
21 08708877 2003-11-25 devnull I, /* Italics */
22 08708877 2003-11-25 devnull P, /* Paragraph */
23 08708877 2003-11-25 devnull Pos, /* Part of Speach */
24 08708877 2003-11-25 devnull Sn, /* Sense */
25 08708877 2003-11-25 devnull U, /* ? cross reference*/
26 08708877 2003-11-25 devnull Wf, /* ? word form */
27 08708877 2003-11-25 devnull Ntag /* end of tags */
28 08708877 2003-11-25 devnull };
29 08708877 2003-11-25 devnull
30 08708877 2003-11-25 devnull /* Assoc tables must be sorted on first field */
31 08708877 2003-11-25 devnull
32 08708877 2003-11-25 devnull static Assoc tagtab[] = {
33 08708877 2003-11-25 devnull {"b", B},
34 08708877 2003-11-25 devnull {"blockquote", Blockquote},
35 08708877 2003-11-25 devnull {"BR", Br},
36 08708877 2003-11-25 devnull {"cd", Cd},
37 08708877 2003-11-25 devnull {"col", Col},
38 08708877 2003-11-25 devnull {"def", Def},
39 08708877 2003-11-25 devnull {"hw", Hw},
40 08708877 2003-11-25 devnull {"i", I},
41 08708877 2003-11-25 devnull {"p", P},
42 08708877 2003-11-25 devnull {"pos", Pos},
43 08708877 2003-11-25 devnull {"sn", Sn},
44 08708877 2003-11-25 devnull {"u", U},
45 cbeb0b26 2006-04-01 devnull {"wf", Wf}
46 08708877 2003-11-25 devnull };
47 08708877 2003-11-25 devnull
48 08708877 2003-11-25 devnull /* Possible tag auxilliary info */
49 08708877 2003-11-25 devnull enum {
50 08708877 2003-11-25 devnull Cols, /* number of columns in a table */
51 08708877 2003-11-25 devnull Num, /* letter or number, for a sense */
52 08708877 2003-11-25 devnull St, /* status (e.g., obs) */
53 08708877 2003-11-25 devnull Naux
54 08708877 2003-11-25 devnull };
55 08708877 2003-11-25 devnull
56 08708877 2003-11-25 devnull #if 0
57 08708877 2003-11-25 devnull static Assoc auxtab[] = {
58 08708877 2003-11-25 devnull {"cols", Cols},
59 08708877 2003-11-25 devnull {"num", Num},
60 08708877 2003-11-25 devnull {"st", St}
61 08708877 2003-11-25 devnull };
62 08708877 2003-11-25 devnull #endif
63 08708877 2003-11-25 devnull
64 08708877 2003-11-25 devnull static Assoc spectab[] = {
65 08708877 2003-11-25 devnull {"3on4", 0xbe},
66 08708877 2003-11-25 devnull {"AElig", 0xc6},
67 08708877 2003-11-25 devnull {"Aacute", 0xc1},
68 08708877 2003-11-25 devnull {"Aang", 0xc5},
69 08708877 2003-11-25 devnull {"Abarab", 0x100},
70 08708877 2003-11-25 devnull {"Acirc", 0xc2},
71 08708877 2003-11-25 devnull {"Agrave", 0xc0},
72 08708877 2003-11-25 devnull {"Alpha", 0x391},
73 08708877 2003-11-25 devnull {"Amacr", 0x100},
74 08708877 2003-11-25 devnull {"Asg", 0x1b7}, /* Unicyle. Cf "Sake" */
75 08708877 2003-11-25 devnull {"Auml", 0xc4},
76 08708877 2003-11-25 devnull {"Beta", 0x392},
77 08708877 2003-11-25 devnull {"Cced", 0xc7},
78 08708877 2003-11-25 devnull {"Chacek", 0x10c},
79 08708877 2003-11-25 devnull {"Chi", 0x3a7},
80 08708877 2003-11-25 devnull {"Chirho", 0x2627}, /* Chi Rho U+2627 */
81 08708877 2003-11-25 devnull {"Csigma", 0x3da},
82 08708877 2003-11-25 devnull {"Delta", 0x394},
83 08708877 2003-11-25 devnull {"Eacute", 0xc9},
84 08708877 2003-11-25 devnull {"Ecirc", 0xca},
85 08708877 2003-11-25 devnull {"Edh", 0xd0},
86 08708877 2003-11-25 devnull {"Epsilon", 0x395},
87 08708877 2003-11-25 devnull {"Eta", 0x397},
88 08708877 2003-11-25 devnull {"Gamma", 0x393},
89 08708877 2003-11-25 devnull {"Iacute", 0xcd},
90 08708877 2003-11-25 devnull {"Icirc", 0xce},
91 08708877 2003-11-25 devnull {"Imacr", 0x12a},
92 08708877 2003-11-25 devnull {"Integ", 0x222b},
93 08708877 2003-11-25 devnull {"Iota", 0x399},
94 08708877 2003-11-25 devnull {"Kappa", 0x39a},
95 08708877 2003-11-25 devnull {"Koppa", 0x3de},
96 08708877 2003-11-25 devnull {"Lambda", 0x39b},
97 08708877 2003-11-25 devnull {"Lbar", 0x141},
98 08708877 2003-11-25 devnull {"Mu", 0x39c},
99 08708877 2003-11-25 devnull {"Naira", 0x4e}, /* should have bar through */
100 08708877 2003-11-25 devnull {"Nplus", 0x4e}, /* should have plus above */
101 08708877 2003-11-25 devnull {"Ntilde", 0xd1},
102 08708877 2003-11-25 devnull {"Nu", 0x39d},
103 08708877 2003-11-25 devnull {"Oacute", 0xd3},
104 08708877 2003-11-25 devnull {"Obar", 0xd8},
105 08708877 2003-11-25 devnull {"Ocirc", 0xd4},
106 08708877 2003-11-25 devnull {"Oe", 0x152},
107 08708877 2003-11-25 devnull {"Omega", 0x3a9},
108 08708877 2003-11-25 devnull {"Omicron", 0x39f},
109 08708877 2003-11-25 devnull {"Ouml", 0xd6},
110 08708877 2003-11-25 devnull {"Phi", 0x3a6},
111 08708877 2003-11-25 devnull {"Pi", 0x3a0},
112 08708877 2003-11-25 devnull {"Psi", 0x3a8},
113 08708877 2003-11-25 devnull {"Rho", 0x3a1},
114 08708877 2003-11-25 devnull {"Sacute", 0x15a},
115 08708877 2003-11-25 devnull {"Sigma", 0x3a3},
116 08708877 2003-11-25 devnull {"Summ", 0x2211},
117 08708877 2003-11-25 devnull {"Tau", 0x3a4},
118 08708877 2003-11-25 devnull {"Th", 0xde},
119 08708877 2003-11-25 devnull {"Theta", 0x398},
120 08708877 2003-11-25 devnull {"Tse", 0x426},
121 08708877 2003-11-25 devnull {"Uacute", 0xda},
122 08708877 2003-11-25 devnull {"Ucirc", 0xdb},
123 08708877 2003-11-25 devnull {"Upsilon", 0x3a5},
124 08708877 2003-11-25 devnull {"Uuml", 0xdc},
125 08708877 2003-11-25 devnull {"Wyn", 0x1bf}, /* wynn U+01BF */
126 08708877 2003-11-25 devnull {"Xi", 0x39e},
127 08708877 2003-11-25 devnull {"Ygh", 0x1b7}, /* Yogh U+01B7 */
128 08708877 2003-11-25 devnull {"Zeta", 0x396},
129 08708877 2003-11-25 devnull {"Zh", 0x1b7}, /* looks like Yogh. Cf "Sake" */
130 08708877 2003-11-25 devnull {"a", 0x61}, /* ante */
131 08708877 2003-11-25 devnull {"aacute", 0xe1},
132 08708877 2003-11-25 devnull {"aang", 0xe5},
133 08708877 2003-11-25 devnull {"aasper", MAAS},
134 08708877 2003-11-25 devnull {"abreve", 0x103},
135 08708877 2003-11-25 devnull {"acirc", 0xe2},
136 08708877 2003-11-25 devnull {"acute", LACU},
137 08708877 2003-11-25 devnull {"aelig", 0xe6},
138 08708877 2003-11-25 devnull {"agrave", 0xe0},
139 08708877 2003-11-25 devnull {"ahook", 0x105},
140 08708877 2003-11-25 devnull {"alenis", MALN},
141 08708877 2003-11-25 devnull {"alpha", 0x3b1},
142 08708877 2003-11-25 devnull {"amacr", 0x101},
143 08708877 2003-11-25 devnull {"amp", 0x26},
144 08708877 2003-11-25 devnull {"and", MAND},
145 08708877 2003-11-25 devnull {"ang", LRNG},
146 08708877 2003-11-25 devnull {"angle", 0x2220},
147 08708877 2003-11-25 devnull {"ankh", 0x2625}, /* ankh U+2625 */
148 08708877 2003-11-25 devnull {"ante", 0x61}, /* before (year) */
149 08708877 2003-11-25 devnull {"aonq", MAOQ},
150 08708877 2003-11-25 devnull {"appreq", 0x2243},
151 08708877 2003-11-25 devnull {"aquar", 0x2652},
152 08708877 2003-11-25 devnull {"arDadfull", 0x636}, /* Dad U+0636 */
153 08708877 2003-11-25 devnull {"arHa", 0x62d}, /* haa U+062D */
154 08708877 2003-11-25 devnull {"arTa", 0x62a}, /* taa U+062A */
155 08708877 2003-11-25 devnull {"arain", 0x639}, /* ain U+0639 */
156 08708877 2003-11-25 devnull {"arainfull", 0x639}, /* ain U+0639 */
157 08708877 2003-11-25 devnull {"aralif", 0x627}, /* alef U+0627 */
158 08708877 2003-11-25 devnull {"arba", 0x628}, /* baa U+0628 */
159 08708877 2003-11-25 devnull {"arha", 0x647}, /* ha U+0647 */
160 08708877 2003-11-25 devnull {"aries", 0x2648},
161 08708877 2003-11-25 devnull {"arnun", 0x646}, /* noon U+0646 */
162 08708877 2003-11-25 devnull {"arnunfull", 0x646}, /* noon U+0646 */
163 08708877 2003-11-25 devnull {"arpa", 0x647}, /* ha U+0647 */
164 08708877 2003-11-25 devnull {"arqoph", 0x642}, /* qaf U+0642 */
165 08708877 2003-11-25 devnull {"arshinfull", 0x634}, /* sheen U+0634 */
166 08708877 2003-11-25 devnull {"arta", 0x62a}, /* taa U+062A */
167 08708877 2003-11-25 devnull {"artafull", 0x62a}, /* taa U+062A */
168 08708877 2003-11-25 devnull {"artha", 0x62b}, /* thaa U+062B */
169 08708877 2003-11-25 devnull {"arwaw", 0x648}, /* waw U+0648 */
170 08708877 2003-11-25 devnull {"arya", 0x64a}, /* ya U+064A */
171 08708877 2003-11-25 devnull {"aryafull", 0x64a}, /* ya U+064A */
172 08708877 2003-11-25 devnull {"arzero", 0x660}, /* indic zero U+0660 */
173 08708877 2003-11-25 devnull {"asg", 0x292}, /* unicycle character. Cf "hallow" */
174 08708877 2003-11-25 devnull {"asper", LASP},
175 08708877 2003-11-25 devnull {"assert", 0x22a2},
176 08708877 2003-11-25 devnull {"astm", 0x2042}, /* asterism: should be upside down */
177 08708877 2003-11-25 devnull {"at", 0x40},
178 08708877 2003-11-25 devnull {"atilde", 0xe3},
179 08708877 2003-11-25 devnull {"auml", 0xe4},
180 08708877 2003-11-25 devnull {"ayin", 0x639}, /* arabic ain U+0639 */
181 08708877 2003-11-25 devnull {"b1", 0x2d}, /* single bond */
182 08708877 2003-11-25 devnull {"b2", 0x3d}, /* double bond */
183 08708877 2003-11-25 devnull {"b3", 0x2261}, /* triple bond */
184 08708877 2003-11-25 devnull {"bbar", 0x180}, /* b with bar U+0180 */
185 08708877 2003-11-25 devnull {"beta", 0x3b2},
186 08708877 2003-11-25 devnull {"bigobl", 0x2f},
187 08708877 2003-11-25 devnull {"blC", 0x43}, /* should be black letter */
188 08708877 2003-11-25 devnull {"blJ", 0x4a}, /* should be black letter */
189 08708877 2003-11-25 devnull {"blU", 0x55}, /* should be black letter */
190 08708877 2003-11-25 devnull {"blb", 0x62}, /* should be black letter */
191 08708877 2003-11-25 devnull {"blozenge", 0x25ca}, /* U+25CA; should be black */
192 08708877 2003-11-25 devnull {"bly", 0x79}, /* should be black letter */
193 08708877 2003-11-25 devnull {"bra", MBRA},
194 08708877 2003-11-25 devnull {"brbl", LBRB},
195 08708877 2003-11-25 devnull {"breve", LBRV},
196 e2d62fb9 2005-07-13 devnull {"bslash",'\\'},
197 08708877 2003-11-25 devnull {"bsquare", 0x25a0}, /* black square U+25A0 */
198 08708877 2003-11-25 devnull {"btril", 0x25c0}, /* U+25C0 */
199 08708877 2003-11-25 devnull {"btrir", 0x25b6}, /* U+25B6 */
200 08708877 2003-11-25 devnull {"c", 0x63}, /* circa */
201 08708877 2003-11-25 devnull {"cab", 0x232a},
202 08708877 2003-11-25 devnull {"cacute", 0x107},
203 08708877 2003-11-25 devnull {"canc", 0x264b},
204 08708877 2003-11-25 devnull {"capr", 0x2651},
205 08708877 2003-11-25 devnull {"caret", 0x5e},
206 08708877 2003-11-25 devnull {"cb", 0x7d},
207 08708877 2003-11-25 devnull {"cbigb", 0x7d},
208 08708877 2003-11-25 devnull {"cbigpren", 0x29},
209 08708877 2003-11-25 devnull {"cbigsb", 0x5d},
210 08708877 2003-11-25 devnull {"cced", 0xe7},
211 08708877 2003-11-25 devnull {"cdil", LCED},
212 08708877 2003-11-25 devnull {"cdsb", 0x301b}, /* ]] U+301b */
213 08708877 2003-11-25 devnull {"cent", 0xa2},
214 08708877 2003-11-25 devnull {"chacek", 0x10d},
215 08708877 2003-11-25 devnull {"chi", 0x3c7},
216 08708877 2003-11-25 devnull {"circ", LRNG},
217 08708877 2003-11-25 devnull {"circa", 0x63}, /* about (year) */
218 08708877 2003-11-25 devnull {"circbl", 0x325}, /* ring below accent U+0325 */
219 08708877 2003-11-25 devnull {"circle", 0x25cb}, /* U+25CB */
220 08708877 2003-11-25 devnull {"circledot", 0x2299},
221 08708877 2003-11-25 devnull {"click", 0x296},
222 08708877 2003-11-25 devnull {"club", 0x2663},
223 08708877 2003-11-25 devnull {"comtime", 0x43},
224 08708877 2003-11-25 devnull {"conj", 0x260c},
225 08708877 2003-11-25 devnull {"cprt", 0xa9},
226 08708877 2003-11-25 devnull {"cq", '\''},
227 08708877 2003-11-25 devnull {"cqq", 0x201d},
228 08708877 2003-11-25 devnull {"cross", 0x2720}, /* maltese cross U+2720 */
229 08708877 2003-11-25 devnull {"crotchet", 0x2669},
230 08708877 2003-11-25 devnull {"csb", 0x5d},
231 08708877 2003-11-25 devnull {"ctilde", 0x63}, /* +tilde */
232 08708877 2003-11-25 devnull {"ctlig", MLCT},
233 08708877 2003-11-25 devnull {"cyra", 0x430},
234 08708877 2003-11-25 devnull {"cyre", 0x435},
235 08708877 2003-11-25 devnull {"cyrhard", 0x44a},
236 08708877 2003-11-25 devnull {"cyrjat", 0x463},
237 08708877 2003-11-25 devnull {"cyrm", 0x43c},
238 08708877 2003-11-25 devnull {"cyrn", 0x43d},
239 08708877 2003-11-25 devnull {"cyrr", 0x440},
240 08708877 2003-11-25 devnull {"cyrsoft", 0x44c},
241 08708877 2003-11-25 devnull {"cyrt", 0x442},
242 08708877 2003-11-25 devnull {"cyry", 0x44b},
243 08708877 2003-11-25 devnull {"dag", 0x2020},
244 08708877 2003-11-25 devnull {"dbar", 0x111},
245 08708877 2003-11-25 devnull {"dblar", 0x21cb},
246 08708877 2003-11-25 devnull {"dblgt", 0x226b},
247 08708877 2003-11-25 devnull {"dbllt", 0x226a},
248 08708877 2003-11-25 devnull {"dced", 0x64}, /* +cedilla */
249 08708877 2003-11-25 devnull {"dd", MDD},
250 08708877 2003-11-25 devnull {"ddag", 0x2021},
251 08708877 2003-11-25 devnull {"ddd", MDDD},
252 08708877 2003-11-25 devnull {"decr", 0x2193},
253 08708877 2003-11-25 devnull {"deg", 0xb0},
254 08708877 2003-11-25 devnull {"dele", 0x64}, /* should be dele */
255 08708877 2003-11-25 devnull {"delta", 0x3b4},
256 08708877 2003-11-25 devnull {"descnode", 0x260b}, /* descending node U+260B */
257 08708877 2003-11-25 devnull {"diamond", 0x2662},
258 08708877 2003-11-25 devnull {"digamma", 0x3dd},
259 08708877 2003-11-25 devnull {"div", 0xf7},
260 08708877 2003-11-25 devnull {"dlessi", 0x131},
261 08708877 2003-11-25 devnull {"dlessj1", 0x6a}, /* should be dotless */
262 08708877 2003-11-25 devnull {"dlessj2", 0x6a}, /* should be dotless */
263 08708877 2003-11-25 devnull {"dlessj3", 0x6a}, /* should be dotless */
264 08708877 2003-11-25 devnull {"dollar", 0x24},
265 08708877 2003-11-25 devnull {"dotab", LDOT},
266 08708877 2003-11-25 devnull {"dotbl", LDTB},
267 08708877 2003-11-25 devnull {"drachm", 0x292},
268 08708877 2003-11-25 devnull {"dubh", 0x2d},
269 08708877 2003-11-25 devnull {"eacute", 0xe9},
270 08708877 2003-11-25 devnull {"earth", 0x2641},
271 08708877 2003-11-25 devnull {"easper", MEAS},
272 08708877 2003-11-25 devnull {"ebreve", 0x115},
273 08708877 2003-11-25 devnull {"ecirc", 0xea},
274 08708877 2003-11-25 devnull {"edh", 0xf0},
275 08708877 2003-11-25 devnull {"egrave", 0xe8},
276 08708877 2003-11-25 devnull {"ehacek", 0x11b},
277 08708877 2003-11-25 devnull {"ehook", 0x119},
278 08708877 2003-11-25 devnull {"elem", 0x220a},
279 08708877 2003-11-25 devnull {"elenis", MELN},
280 08708877 2003-11-25 devnull {"em", 0x2014},
281 08708877 2003-11-25 devnull {"emacr", 0x113},
282 08708877 2003-11-25 devnull {"emem", MEMM},
283 08708877 2003-11-25 devnull {"en", 0x2013},
284 08708877 2003-11-25 devnull {"epsilon", 0x3b5},
285 08708877 2003-11-25 devnull {"equil", 0x21cb},
286 08708877 2003-11-25 devnull {"ergo", 0x2234},
287 08708877 2003-11-25 devnull {"es", MES},
288 08708877 2003-11-25 devnull {"eszett", 0xdf},
289 08708877 2003-11-25 devnull {"eta", 0x3b7},
290 08708877 2003-11-25 devnull {"eth", 0xf0},
291 08708877 2003-11-25 devnull {"euml", 0xeb},
292 08708877 2003-11-25 devnull {"expon", 0x2191},
293 08708877 2003-11-25 devnull {"fact", 0x21},
294 08708877 2003-11-25 devnull {"fata", 0x251},
295 08708877 2003-11-25 devnull {"fatpara", 0xb6}, /* should have fatter, filled in bowl */
296 08708877 2003-11-25 devnull {"female", 0x2640},
297 08708877 2003-11-25 devnull {"ffilig", MLFFI},
298 08708877 2003-11-25 devnull {"fflig", MLFF},
299 08708877 2003-11-25 devnull {"ffllig", MLFFL},
300 08708877 2003-11-25 devnull {"filig", MLFI},
301 08708877 2003-11-25 devnull {"flat", 0x266d},
302 08708877 2003-11-25 devnull {"fllig", MLFL},
303 08708877 2003-11-25 devnull {"frE", 0x45}, /* should be curly */
304 e2d62fb9 2005-07-13 devnull {"frL", 'L'}, /* should be curly */
305 08708877 2003-11-25 devnull {"frR", 0x52}, /* should be curly */
306 08708877 2003-11-25 devnull {"frakB", 0x42}, /* should have fraktur style */
307 08708877 2003-11-25 devnull {"frakG", 0x47},
308 08708877 2003-11-25 devnull {"frakH", 0x48},
309 08708877 2003-11-25 devnull {"frakI", 0x49},
310 08708877 2003-11-25 devnull {"frakM", 0x4d},
311 08708877 2003-11-25 devnull {"frakU", 0x55},
312 08708877 2003-11-25 devnull {"frakX", 0x58},
313 08708877 2003-11-25 devnull {"frakY", 0x59},
314 08708877 2003-11-25 devnull {"frakh", 0x68},
315 08708877 2003-11-25 devnull {"frbl", LFRB},
316 08708877 2003-11-25 devnull {"frown", LFRN},
317 08708877 2003-11-25 devnull {"fs", 0x20},
318 08708877 2003-11-25 devnull {"fsigma", 0x3c2},
319 08708877 2003-11-25 devnull {"gAacute", 0xc1}, /* should be Α+acute */
320 08708877 2003-11-25 devnull {"gaacute", 0x3b1}, /* +acute */
321 08708877 2003-11-25 devnull {"gabreve", 0x3b1}, /* +breve */
322 08708877 2003-11-25 devnull {"gafrown", 0x3b1}, /* +frown */
323 08708877 2003-11-25 devnull {"gagrave", 0x3b1}, /* +grave */
324 08708877 2003-11-25 devnull {"gamacr", 0x3b1}, /* +macron */
325 08708877 2003-11-25 devnull {"gamma", 0x3b3},
326 08708877 2003-11-25 devnull {"gauml", 0x3b1}, /* +umlaut */
327 08708877 2003-11-25 devnull {"ge", 0x2267},
328 08708877 2003-11-25 devnull {"geacute", 0x3b5}, /* +acute */
329 08708877 2003-11-25 devnull {"gegrave", 0x3b5}, /* +grave */
330 08708877 2003-11-25 devnull {"ghacute", 0x3b7}, /* +acute */
331 08708877 2003-11-25 devnull {"ghfrown", 0x3b7}, /* +frown */
332 08708877 2003-11-25 devnull {"ghgrave", 0x3b7}, /* +grave */
333 08708877 2003-11-25 devnull {"ghmacr", 0x3b7}, /* +macron */
334 08708877 2003-11-25 devnull {"giacute", 0x3b9}, /* +acute */
335 08708877 2003-11-25 devnull {"gibreve", 0x3b9}, /* +breve */
336 08708877 2003-11-25 devnull {"gifrown", 0x3b9}, /* +frown */
337 08708877 2003-11-25 devnull {"gigrave", 0x3b9}, /* +grave */
338 08708877 2003-11-25 devnull {"gimacr", 0x3b9}, /* +macron */
339 08708877 2003-11-25 devnull {"giuml", 0x3b9}, /* +umlaut */
340 08708877 2003-11-25 devnull {"glagjat", 0x467},
341 08708877 2003-11-25 devnull {"glots", 0x2c0},
342 08708877 2003-11-25 devnull {"goacute", 0x3bf}, /* +acute */
343 08708877 2003-11-25 devnull {"gobreve", 0x3bf}, /* +breve */
344 08708877 2003-11-25 devnull {"grave", LGRV},
345 08708877 2003-11-25 devnull {"gt", 0x3e},
346 08708877 2003-11-25 devnull {"guacute", 0x3c5}, /* +acute */
347 08708877 2003-11-25 devnull {"gufrown", 0x3c5}, /* +frown */
348 08708877 2003-11-25 devnull {"gugrave", 0x3c5}, /* +grave */
349 08708877 2003-11-25 devnull {"gumacr", 0x3c5}, /* +macron */
350 08708877 2003-11-25 devnull {"guuml", 0x3c5}, /* +umlaut */
351 08708877 2003-11-25 devnull {"gwacute", 0x3c9}, /* +acute */
352 08708877 2003-11-25 devnull {"gwfrown", 0x3c9}, /* +frown */
353 08708877 2003-11-25 devnull {"gwgrave", 0x3c9}, /* +grave */
354 08708877 2003-11-25 devnull {"hacek", LHCK},
355 08708877 2003-11-25 devnull {"halft", 0x2308},
356 08708877 2003-11-25 devnull {"hash", 0x23},
357 08708877 2003-11-25 devnull {"hasper", MHAS},
358 08708877 2003-11-25 devnull {"hatpath", 0x5b2}, /* hataf patah U+05B2 */
359 08708877 2003-11-25 devnull {"hatqam", 0x5b3}, /* hataf qamats U+05B3 */
360 08708877 2003-11-25 devnull {"hatseg", 0x5b1}, /* hataf segol U+05B1 */
361 08708877 2003-11-25 devnull {"hbar", 0x127},
362 08708877 2003-11-25 devnull {"heart", 0x2661},
363 08708877 2003-11-25 devnull {"hebaleph", 0x5d0}, /* aleph U+05D0 */
364 08708877 2003-11-25 devnull {"hebayin", 0x5e2}, /* ayin U+05E2 */
365 08708877 2003-11-25 devnull {"hebbet", 0x5d1}, /* bet U+05D1 */
366 08708877 2003-11-25 devnull {"hebbeth", 0x5d1}, /* bet U+05D1 */
367 08708877 2003-11-25 devnull {"hebcheth", 0x5d7}, /* bet U+05D7 */
368 08708877 2003-11-25 devnull {"hebdaleth", 0x5d3}, /* dalet U+05D3 */
369 08708877 2003-11-25 devnull {"hebgimel", 0x5d2}, /* gimel U+05D2 */
370 08708877 2003-11-25 devnull {"hebhe", 0x5d4}, /* he U+05D4 */
371 08708877 2003-11-25 devnull {"hebkaph", 0x5db}, /* kaf U+05DB */
372 08708877 2003-11-25 devnull {"heblamed", 0x5dc}, /* lamed U+05DC */
373 08708877 2003-11-25 devnull {"hebmem", 0x5de}, /* mem U+05DE */
374 08708877 2003-11-25 devnull {"hebnun", 0x5e0}, /* nun U+05E0 */
375 08708877 2003-11-25 devnull {"hebnunfin", 0x5df}, /* final nun U+05DF */
376 08708877 2003-11-25 devnull {"hebpe", 0x5e4}, /* pe U+05E4 */
377 08708877 2003-11-25 devnull {"hebpedag", 0x5e3}, /* final pe? U+05E3 */
378 08708877 2003-11-25 devnull {"hebqoph", 0x5e7}, /* qof U+05E7 */
379 08708877 2003-11-25 devnull {"hebresh", 0x5e8}, /* resh U+05E8 */
380 08708877 2003-11-25 devnull {"hebshin", 0x5e9}, /* shin U+05E9 */
381 08708877 2003-11-25 devnull {"hebtav", 0x5ea}, /* tav U+05EA */
382 08708877 2003-11-25 devnull {"hebtsade", 0x5e6}, /* tsadi U+05E6 */
383 08708877 2003-11-25 devnull {"hebwaw", 0x5d5}, /* vav? U+05D5 */
384 08708877 2003-11-25 devnull {"hebyod", 0x5d9}, /* yod U+05D9 */
385 08708877 2003-11-25 devnull {"hebzayin", 0x5d6}, /* zayin U+05D6 */
386 08708877 2003-11-25 devnull {"hgz", 0x292}, /* ??? Cf "alet" */
387 08708877 2003-11-25 devnull {"hireq", 0x5b4}, /* U+05B4 */
388 08708877 2003-11-25 devnull {"hlenis", MHLN},
389 08708877 2003-11-25 devnull {"hook", LOGO},
390 08708877 2003-11-25 devnull {"horizE", 0x45}, /* should be on side */
391 08708877 2003-11-25 devnull {"horizP", 0x50}, /* should be on side */
392 08708877 2003-11-25 devnull {"horizS", 0x223d},
393 08708877 2003-11-25 devnull {"horizT", 0x22a3},
394 08708877 2003-11-25 devnull {"horizb", 0x7b}, /* should be underbrace */
395 08708877 2003-11-25 devnull {"ia", 0x3b1},
396 08708877 2003-11-25 devnull {"iacute", 0xed},
397 08708877 2003-11-25 devnull {"iasper", MIAS},
398 08708877 2003-11-25 devnull {"ib", 0x3b2},
399 08708877 2003-11-25 devnull {"ibar", 0x268},
400 08708877 2003-11-25 devnull {"ibreve", 0x12d},
401 08708877 2003-11-25 devnull {"icirc", 0xee},
402 08708877 2003-11-25 devnull {"id", 0x3b4},
403 08708877 2003-11-25 devnull {"ident", 0x2261},
404 08708877 2003-11-25 devnull {"ie", 0x3b5},
405 08708877 2003-11-25 devnull {"ifilig", MLFI},
406 08708877 2003-11-25 devnull {"ifflig", MLFF},
407 08708877 2003-11-25 devnull {"ig", 0x3b3},
408 08708877 2003-11-25 devnull {"igrave", 0xec},
409 08708877 2003-11-25 devnull {"ih", 0x3b7},
410 08708877 2003-11-25 devnull {"ii", 0x3b9},
411 08708877 2003-11-25 devnull {"ik", 0x3ba},
412 08708877 2003-11-25 devnull {"ilenis", MILN},
413 08708877 2003-11-25 devnull {"imacr", 0x12b},
414 08708877 2003-11-25 devnull {"implies", 0x21d2},
415 08708877 2003-11-25 devnull {"index", 0x261e},
416 08708877 2003-11-25 devnull {"infin", 0x221e},
417 08708877 2003-11-25 devnull {"integ", 0x222b},
418 08708877 2003-11-25 devnull {"intsec", 0x2229},
419 08708877 2003-11-25 devnull {"invpri", 0x2cf},
420 08708877 2003-11-25 devnull {"iota", 0x3b9},
421 08708877 2003-11-25 devnull {"iq", 0x3c8},
422 08708877 2003-11-25 devnull {"istlig", MLST},
423 08708877 2003-11-25 devnull {"isub", 0x3f5}, /* iota below accent */
424 08708877 2003-11-25 devnull {"iuml", 0xef},
425 08708877 2003-11-25 devnull {"iz", 0x3b6},
426 08708877 2003-11-25 devnull {"jup", 0x2643},
427 08708877 2003-11-25 devnull {"kappa", 0x3ba},
428 08708877 2003-11-25 devnull {"koppa", 0x3df},
429 08708877 2003-11-25 devnull {"lambda", 0x3bb},
430 08708877 2003-11-25 devnull {"lar", 0x2190},
431 08708877 2003-11-25 devnull {"lbar", 0x142},
432 08708877 2003-11-25 devnull {"le", 0x2266},
433 08708877 2003-11-25 devnull {"lenis", LLEN},
434 08708877 2003-11-25 devnull {"leo", 0x264c},
435 08708877 2003-11-25 devnull {"lhalfbr", 0x2308},
436 08708877 2003-11-25 devnull {"lhshoe", 0x2283},
437 08708877 2003-11-25 devnull {"libra", 0x264e},
438 08708877 2003-11-25 devnull {"llswing", MLLS},
439 08708877 2003-11-25 devnull {"lm", 0x2d0},
440 08708877 2003-11-25 devnull {"logicand", 0x2227},
441 08708877 2003-11-25 devnull {"logicor", 0x2228},
442 08708877 2003-11-25 devnull {"longs", 0x283},
443 08708877 2003-11-25 devnull {"lrar", 0x2194},
444 08708877 2003-11-25 devnull {"lt", 0x3c},
445 08708877 2003-11-25 devnull {"ltappr", 0x227e},
446 08708877 2003-11-25 devnull {"ltflat", 0x2220},
447 08708877 2003-11-25 devnull {"lumlbl", 0x6c}, /* +umlaut below */
448 08708877 2003-11-25 devnull {"mac", LMAC},
449 08708877 2003-11-25 devnull {"male", 0x2642},
450 08708877 2003-11-25 devnull {"mc", 0x63}, /* should be raised */
451 08708877 2003-11-25 devnull {"merc", 0x263f}, /* mercury U+263F */
452 08708877 2003-11-25 devnull {"min", 0x2212},
453 08708877 2003-11-25 devnull {"moonfq", 0x263d}, /* first quarter moon U+263D */
454 08708877 2003-11-25 devnull {"moonlq", 0x263e}, /* last quarter moon U+263E */
455 08708877 2003-11-25 devnull {"msylab", 0x6d}, /* +sylab (ˌ) */
456 08708877 2003-11-25 devnull {"mu", 0x3bc},
457 08708877 2003-11-25 devnull {"nacute", 0x144},
458 08708877 2003-11-25 devnull {"natural", 0x266e},
459 08708877 2003-11-25 devnull {"neq", 0x2260},
460 08708877 2003-11-25 devnull {"nfacute", 0x2032},
461 08708877 2003-11-25 devnull {"nfasper", 0x2bd},
462 08708877 2003-11-25 devnull {"nfbreve", 0x2d8},
463 08708877 2003-11-25 devnull {"nfced", 0xb8},
464 08708877 2003-11-25 devnull {"nfcirc", 0x2c6},
465 08708877 2003-11-25 devnull {"nffrown", 0x2322},
466 08708877 2003-11-25 devnull {"nfgra", 0x2cb},
467 08708877 2003-11-25 devnull {"nfhacek", 0x2c7},
468 08708877 2003-11-25 devnull {"nfmac", 0xaf},
469 08708877 2003-11-25 devnull {"nftilde", 0x2dc},
470 08708877 2003-11-25 devnull {"nfuml", 0xa8},
471 08708877 2003-11-25 devnull {"ng", 0x14b},
472 08708877 2003-11-25 devnull {"not", 0xac},
473 08708877 2003-11-25 devnull {"notelem", 0x2209},
474 08708877 2003-11-25 devnull {"ntilde", 0xf1},
475 08708877 2003-11-25 devnull {"nu", 0x3bd},
476 08708877 2003-11-25 devnull {"oab", 0x2329},
477 08708877 2003-11-25 devnull {"oacute", 0xf3},
478 08708877 2003-11-25 devnull {"oasper", MOAS},
479 08708877 2003-11-25 devnull {"ob", 0x7b},
480 08708877 2003-11-25 devnull {"obar", 0xf8},
481 08708877 2003-11-25 devnull {"obigb", 0x7b}, /* should be big */
482 08708877 2003-11-25 devnull {"obigpren", 0x28},
483 08708877 2003-11-25 devnull {"obigsb", 0x5b}, /* should be big */
484 08708877 2003-11-25 devnull {"obreve", 0x14f},
485 08708877 2003-11-25 devnull {"ocirc", 0xf4},
486 08708877 2003-11-25 devnull {"odsb", 0x301a}, /* [[ U+301A */
487 08708877 2003-11-25 devnull {"oelig", 0x153},
488 08708877 2003-11-25 devnull {"oeamp", 0x26},
489 08708877 2003-11-25 devnull {"ograve", 0xf2},
490 08708877 2003-11-25 devnull {"ohook", 0x6f}, /* +hook */
491 08708877 2003-11-25 devnull {"olenis", MOLN},
492 08708877 2003-11-25 devnull {"omacr", 0x14d},
493 08708877 2003-11-25 devnull {"omega", 0x3c9},
494 08708877 2003-11-25 devnull {"omicron", 0x3bf},
495 08708877 2003-11-25 devnull {"ope", 0x25b},
496 08708877 2003-11-25 devnull {"opp", 0x260d},
497 08708877 2003-11-25 devnull {"oq", 0x60},
498 08708877 2003-11-25 devnull {"oqq", 0x201c},
499 08708877 2003-11-25 devnull {"or", MOR},
500 08708877 2003-11-25 devnull {"osb", 0x5b},
501 08708877 2003-11-25 devnull {"otilde", 0xf5},
502 08708877 2003-11-25 devnull {"ouml", 0xf6},
503 08708877 2003-11-25 devnull {"ounce", 0x2125}, /* ounce U+2125 */
504 08708877 2003-11-25 devnull {"ovparen", 0x2322}, /* should be sideways ( */
505 08708877 2003-11-25 devnull {"p", 0x2032},
506 08708877 2003-11-25 devnull {"pa", 0x2202},
507 08708877 2003-11-25 devnull {"page", 0x50},
508 08708877 2003-11-25 devnull {"pall", 0x28e},
509 08708877 2003-11-25 devnull {"paln", 0x272},
510 08708877 2003-11-25 devnull {"par", PAR},
511 08708877 2003-11-25 devnull {"para", 0xb6},
512 08708877 2003-11-25 devnull {"pbar", 0x70}, /* +bar */
513 08708877 2003-11-25 devnull {"per", 0x2118}, /* per U+2118 */
514 08708877 2003-11-25 devnull {"phi", 0x3c6},
515 08708877 2003-11-25 devnull {"phi2", 0x3d5},
516 08708877 2003-11-25 devnull {"pi", 0x3c0},
517 08708877 2003-11-25 devnull {"pisces", 0x2653},
518 08708877 2003-11-25 devnull {"planck", 0x127},
519 08708877 2003-11-25 devnull {"plantinJ", 0x4a}, /* should be script */
520 08708877 2003-11-25 devnull {"pm", 0xb1},
521 08708877 2003-11-25 devnull {"pmil", 0x2030},
522 08708877 2003-11-25 devnull {"pp", 0x2033},
523 08708877 2003-11-25 devnull {"ppp", 0x2034},
524 08708877 2003-11-25 devnull {"prop", 0x221d},
525 08708877 2003-11-25 devnull {"psi", 0x3c8},
526 08708877 2003-11-25 devnull {"pstlg", 0xa3},
527 08708877 2003-11-25 devnull {"q", 0x3f}, /* should be raised */
528 08708877 2003-11-25 devnull {"qamets", 0x5b3}, /* U+05B3 */
529 08708877 2003-11-25 devnull {"quaver", 0x266a},
530 08708877 2003-11-25 devnull {"rar", 0x2192},
531 08708877 2003-11-25 devnull {"rasper", MRAS},
532 08708877 2003-11-25 devnull {"rdot", 0xb7},
533 08708877 2003-11-25 devnull {"recipe", 0x211e}, /* U+211E */
534 08708877 2003-11-25 devnull {"reg", 0xae},
535 08708877 2003-11-25 devnull {"revC", 0x186}, /* open O U+0186 */
536 08708877 2003-11-25 devnull {"reva", 0x252},
537 08708877 2003-11-25 devnull {"revc", 0x254},
538 08708877 2003-11-25 devnull {"revope", 0x25c},
539 08708877 2003-11-25 devnull {"revr", 0x279},
540 08708877 2003-11-25 devnull {"revsc", 0x2d2}, /* upside-down semicolon */
541 08708877 2003-11-25 devnull {"revv", 0x28c},
542 08708877 2003-11-25 devnull {"rfa", 0x6f}, /* +hook (Cf "goal") */
543 08708877 2003-11-25 devnull {"rhacek", 0x159},
544 08708877 2003-11-25 devnull {"rhalfbr", 0x2309},
545 08708877 2003-11-25 devnull {"rho", 0x3c1},
546 08708877 2003-11-25 devnull {"rhshoe", 0x2282},
547 08708877 2003-11-25 devnull {"rlenis", MRLN},
548 08708877 2003-11-25 devnull {"rsylab", 0x72}, /* +sylab */
549 08708877 2003-11-25 devnull {"runash", 0x46}, /* should be runic 'ash' */
550 08708877 2003-11-25 devnull {"rvow", 0x2d4},
551 08708877 2003-11-25 devnull {"sacute", 0x15b},
552 08708877 2003-11-25 devnull {"sagit", 0x2650},
553 08708877 2003-11-25 devnull {"sampi", 0x3e1},
554 08708877 2003-11-25 devnull {"saturn", 0x2644},
555 08708877 2003-11-25 devnull {"sced", 0x15f},
556 08708877 2003-11-25 devnull {"schwa", 0x259},
557 08708877 2003-11-25 devnull {"scorpio", 0x264f},
558 08708877 2003-11-25 devnull {"scrA", 0x41}, /* should be script */
559 08708877 2003-11-25 devnull {"scrC", 0x43},
560 08708877 2003-11-25 devnull {"scrE", 0x45},
561 08708877 2003-11-25 devnull {"scrF", 0x46},
562 08708877 2003-11-25 devnull {"scrI", 0x49},
563 08708877 2003-11-25 devnull {"scrJ", 0x4a},
564 e2d62fb9 2005-07-13 devnull {"scrL",'L'},
565 08708877 2003-11-25 devnull {"scrO", 0x4f},
566 08708877 2003-11-25 devnull {"scrP", 0x50},
567 08708877 2003-11-25 devnull {"scrQ", 0x51},
568 08708877 2003-11-25 devnull {"scrS", 0x53},
569 08708877 2003-11-25 devnull {"scrT", 0x54},
570 08708877 2003-11-25 devnull {"scrb", 0x62},
571 08708877 2003-11-25 devnull {"scrd", 0x64},
572 08708877 2003-11-25 devnull {"scrh", 0x68},
573 08708877 2003-11-25 devnull {"scrl", 0x6c},
574 08708877 2003-11-25 devnull {"scruple", 0x2108}, /* U+2108 */
575 08708877 2003-11-25 devnull {"sdd", 0x2d0},
576 08708877 2003-11-25 devnull {"sect", 0xa7},
577 08708877 2003-11-25 devnull {"semE", 0x2203},
578 08708877 2003-11-25 devnull {"sh", 0x283},
579 08708877 2003-11-25 devnull {"shacek", 0x161},
580 08708877 2003-11-25 devnull {"sharp", 0x266f},
581 08708877 2003-11-25 devnull {"sheva", 0x5b0}, /* U+05B0 */
582 08708877 2003-11-25 devnull {"shti", 0x26a},
583 08708877 2003-11-25 devnull {"shtsyll", 0x222a},
584 08708877 2003-11-25 devnull {"shtu", 0x28a},
585 08708877 2003-11-25 devnull {"sidetri", 0x22b2},
586 08708877 2003-11-25 devnull {"sigma", 0x3c3},
587 08708877 2003-11-25 devnull {"since", 0x2235},
588 08708877 2003-11-25 devnull {"slge", 0x2265}, /* should have slanted line under */
589 08708877 2003-11-25 devnull {"slle", 0x2264}, /* should have slanted line under */
590 08708877 2003-11-25 devnull {"sm", 0x2c8},
591 08708877 2003-11-25 devnull {"smm", 0x2cc},
592 08708877 2003-11-25 devnull {"spade", 0x2660},
593 08708877 2003-11-25 devnull {"sqrt", 0x221a},
594 08708877 2003-11-25 devnull {"square", 0x25a1}, /* U+25A1 */
595 08708877 2003-11-25 devnull {"ssChi", 0x3a7}, /* should be sans serif */
596 08708877 2003-11-25 devnull {"ssIota", 0x399},
597 08708877 2003-11-25 devnull {"ssOmicron", 0x39f},
598 08708877 2003-11-25 devnull {"ssPi", 0x3a0},
599 08708877 2003-11-25 devnull {"ssRho", 0x3a1},
600 08708877 2003-11-25 devnull {"ssSigma", 0x3a3},
601 08708877 2003-11-25 devnull {"ssTau", 0x3a4},
602 08708877 2003-11-25 devnull {"star", 0x2a},
603 08708877 2003-11-25 devnull {"stlig", MLST},
604 08708877 2003-11-25 devnull {"sup2", 0x2072},
605 08708877 2003-11-25 devnull {"supgt", 0x2c3},
606 08708877 2003-11-25 devnull {"suplt", 0x2c2},
607 08708877 2003-11-25 devnull {"sur", 0x2b3},
608 08708877 2003-11-25 devnull {"swing", 0x223c},
609 08708877 2003-11-25 devnull {"tau", 0x3c4},
610 08708877 2003-11-25 devnull {"taur", 0x2649},
611 08708877 2003-11-25 devnull {"th", 0xfe},
612 08708877 2003-11-25 devnull {"thbar", 0xfe}, /* +bar */
613 08708877 2003-11-25 devnull {"theta", 0x3b8},
614 08708877 2003-11-25 devnull {"thinqm", 0x3f}, /* should be thinner */
615 08708877 2003-11-25 devnull {"tilde", LTIL},
616 08708877 2003-11-25 devnull {"times", 0xd7},
617 08708877 2003-11-25 devnull {"tri", 0x2206},
618 08708877 2003-11-25 devnull {"trli", 0x2016},
619 08708877 2003-11-25 devnull {"ts", 0x2009},
620 08708877 2003-11-25 devnull {"uacute", 0xfa},
621 08708877 2003-11-25 devnull {"uasper", MUAS},
622 08708877 2003-11-25 devnull {"ubar", 0x75}, /* +bar */
623 08708877 2003-11-25 devnull {"ubreve", 0x16d},
624 08708877 2003-11-25 devnull {"ucirc", 0xfb},
625 08708877 2003-11-25 devnull {"udA", 0x2200},
626 08708877 2003-11-25 devnull {"udT", 0x22a5},
627 08708877 2003-11-25 devnull {"uda", 0x250},
628 08708877 2003-11-25 devnull {"udh", 0x265},
629 08708877 2003-11-25 devnull {"udqm", 0xbf},
630 08708877 2003-11-25 devnull {"udpsi", 0x22d4},
631 08708877 2003-11-25 devnull {"udtr", 0x2207},
632 08708877 2003-11-25 devnull {"ugrave", 0xf9},
633 08708877 2003-11-25 devnull {"ulenis", MULN},
634 08708877 2003-11-25 devnull {"umacr", 0x16b},
635 08708877 2003-11-25 devnull {"uml", LUML},
636 08708877 2003-11-25 devnull {"undl", 0x2cd}, /* underline accent */
637 08708877 2003-11-25 devnull {"union", 0x222a},
638 08708877 2003-11-25 devnull {"upsilon", 0x3c5},
639 08708877 2003-11-25 devnull {"uuml", 0xfc},
640 08708877 2003-11-25 devnull {"vavpath", 0x5d5}, /* vav U+05D5 (+patah) */
641 08708877 2003-11-25 devnull {"vavsheva", 0x5d5}, /* vav U+05D5 (+sheva) */
642 08708877 2003-11-25 devnull {"vb", 0x7c},
643 08708877 2003-11-25 devnull {"vddd", 0x22ee},
644 08708877 2003-11-25 devnull {"versicle2", 0x2123}, /* U+2123 */
645 08708877 2003-11-25 devnull {"vinc", 0xaf},
646 08708877 2003-11-25 devnull {"virgo", 0x264d},
647 08708877 2003-11-25 devnull {"vpal", 0x25f},
648 08708877 2003-11-25 devnull {"vvf", 0x263},
649 08708877 2003-11-25 devnull {"wasper", MWAS},
650 08708877 2003-11-25 devnull {"wavyeq", 0x2248},
651 08708877 2003-11-25 devnull {"wlenis", MWLN},
652 08708877 2003-11-25 devnull {"wyn", 0x1bf}, /* wynn U+01BF */
653 08708877 2003-11-25 devnull {"xi", 0x3be},
654 08708877 2003-11-25 devnull {"yacute", 0xfd},
655 08708877 2003-11-25 devnull {"ycirc", 0x177},
656 08708877 2003-11-25 devnull {"ygh", 0x292},
657 08708877 2003-11-25 devnull {"ymacr", 0x79}, /* +macron */
658 08708877 2003-11-25 devnull {"yuml", 0xff},
659 08708877 2003-11-25 devnull {"zced", 0x7a}, /* +cedilla */
660 08708877 2003-11-25 devnull {"zeta", 0x3b6},
661 08708877 2003-11-25 devnull {"zh", 0x292},
662 cbeb0b26 2006-04-01 devnull {"zhacek", 0x17e}
663 08708877 2003-11-25 devnull };
664 08708877 2003-11-25 devnull /*
665 08708877 2003-11-25 devnull The following special characters don't have close enough
666 08708877 2003-11-25 devnull equivalents in Unicode, so aren't in the above table.
667 08708877 2003-11-25 devnull 22n 2^(2^n) Cf Fermat
668 08708877 2003-11-25 devnull 2on4 2/4
669 08708877 2003-11-25 devnull 3on8 3/8
670 08708877 2003-11-25 devnull Bantuo Bantu O. Cf Otshi-herero
671 08708877 2003-11-25 devnull Car C with circular arrow on top
672 08708877 2003-11-25 devnull albrtime cut-time: C with vertical line
673 08708877 2003-11-25 devnull ardal Cf dental
674 08708877 2003-11-25 devnull bantuo Bantu o. Cf Otshi-herero
675 08708877 2003-11-25 devnull bbc1 single chem bond below
676 08708877 2003-11-25 devnull bbc2 double chem bond below
677 08708877 2003-11-25 devnull bbl1 chem bond like /
678 08708877 2003-11-25 devnull bbl2 chem bond like //
679 08708877 2003-11-25 devnull bbr1 chem bond like \
680 08708877 2003-11-25 devnull bbr2 chem bond \\
681 08708877 2003-11-25 devnull bcop1 copper symbol. Cf copper
682 08708877 2003-11-25 devnull bcop2 copper symbol. Cf copper
683 08708877 2003-11-25 devnull benchm Cf benchmark
684 08708877 2003-11-25 devnull btc1 single chem bond above
685 08708877 2003-11-25 devnull btc2 double chem bond above
686 08708877 2003-11-25 devnull btl1 chem bond like \
687 08708877 2003-11-25 devnull btl2 chem bond like \\
688 08708877 2003-11-25 devnull btr1 chem bond like /
689 08708877 2003-11-25 devnull btr2 chem bond line //
690 08708877 2003-11-25 devnull burman Cf Burman
691 08708877 2003-11-25 devnull devph sanskrit letter. Cf ph
692 08708877 2003-11-25 devnull devrfls sanskrit letter. Cf cerebral
693 08708877 2003-11-25 devnull duplong[12] musical note
694 08708877 2003-11-25 devnull egchi early form of chi
695 08708877 2003-11-25 devnull eggamma[12] early form of gamma
696 08708877 2003-11-25 devnull egiota early form of iota
697 08708877 2003-11-25 devnull egkappa early form of kappa
698 08708877 2003-11-25 devnull eglambda early form of lambda
699 08708877 2003-11-25 devnull egmu[12] early form of mu
700 08708877 2003-11-25 devnull egnu[12] early form of nu
701 08708877 2003-11-25 devnull egpi[123] early form of pi
702 08708877 2003-11-25 devnull egrho[12] early form of rho
703 08708877 2003-11-25 devnull egsampi early form of sampi
704 08708877 2003-11-25 devnull egsan early form of san
705 08708877 2003-11-25 devnull egsigma[12] early form of sigma
706 08708877 2003-11-25 devnull egxi[123] early form of xi
707 08708877 2003-11-25 devnull elatS early form of S
708 08708877 2003-11-25 devnull elatc[12] early form of C
709 08708877 2003-11-25 devnull elatg[12] early form of G
710 08708877 2003-11-25 devnull glagjeri Slavonic Glagolitic jeri
711 08708877 2003-11-25 devnull glagjeru Slavonic Glagolitic jeru
712 08708877 2003-11-25 devnull hypolem hypolemisk (line with underdot)
713 08708877 2003-11-25 devnull lhrbr lower half }
714 08708877 2003-11-25 devnull longmord long mordent
715 08708877 2003-11-25 devnull mbwvow backwards scretched C. Cf retract.
716 08708877 2003-11-25 devnull mord music symbol. Cf mordent
717 08708877 2003-11-25 devnull mostra Cf direct
718 08708877 2003-11-25 devnull ohgcirc old form of circumflex
719 08708877 2003-11-25 devnull oldbeta old form of β. Cf perturbate
720 08708877 2003-11-25 devnull oldsemibr[12] old forms of semibreve. Cf prolation
721 08708877 2003-11-25 devnull ormg old form of g. Cf G
722 08708877 2003-11-25 devnull para[12345] form of ¶
723 08708877 2003-11-25 devnull pauseo musical pause sign
724 08708877 2003-11-25 devnull pauseu musical pause sign
725 08708877 2003-11-25 devnull pharyng Cf pharyngal
726 08708877 2003-11-25 devnull ragr Black letter ragged r
727 08708877 2003-11-25 devnull repetn musical repeat. Cf retort
728 08708877 2003-11-25 devnull segno musical segno sign
729 08708877 2003-11-25 devnull semain[12] semitic ain
730 08708877 2003-11-25 devnull semhe semitic he
731 08708877 2003-11-25 devnull semheth semitic heth
732 08708877 2003-11-25 devnull semkaph semitic kaph
733 08708877 2003-11-25 devnull semlamed[12] semitic lamed
734 08708877 2003-11-25 devnull semmem semitic mem
735 08708877 2003-11-25 devnull semnum semitic nun
736 08708877 2003-11-25 devnull sempe semitic pe
737 08708877 2003-11-25 devnull semqoph[123] semitic qoph
738 08708877 2003-11-25 devnull semresh semitic resh
739 08708877 2003-11-25 devnull semtav[1234] semitic tav
740 08708877 2003-11-25 devnull semyod semitic yod
741 08708877 2003-11-25 devnull semzayin[123] semitic zayin
742 08708877 2003-11-25 devnull shtlong[12] U with underbar. Cf glyconic
743 08708877 2003-11-25 devnull sigmatau σ,τ combination
744 08708877 2003-11-25 devnull squaver sixteenth note
745 08708877 2003-11-25 devnull sqbreve square musical breve note
746 08708877 2003-11-25 devnull swast swastika
747 08708877 2003-11-25 devnull uhrbr upper half of big }
748 08708877 2003-11-25 devnull versicle1 Cf versicle
749 08708877 2003-11-25 devnull */
750 08708877 2003-11-25 devnull
751 08708877 2003-11-25 devnull
752 08708877 2003-11-25 devnull static Rune normtab[128] = {
753 08708877 2003-11-25 devnull /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
754 08708877 2003-11-25 devnull /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
755 08708877 2003-11-25 devnull NONE, NONE, ' ', NONE, NONE, NONE, NONE, NONE,
756 08708877 2003-11-25 devnull /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
757 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
758 08708877 2003-11-25 devnull /*20*/ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, SPCS, '\'',
759 08708877 2003-11-25 devnull 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
760 08708877 2003-11-25 devnull /*30*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
761 08708877 2003-11-25 devnull 0x38, 0x39, 0x3a, 0x3b, TAGS, 0x3d, TAGE, 0x3f,
762 08708877 2003-11-25 devnull /*40*/ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
763 e2d62fb9 2005-07-13 devnull 0x48, 0x49, 0x4a, 0x4b,'L', 0x4d, 0x4e, 0x4f,
764 08708877 2003-11-25 devnull /*50*/ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
765 e2d62fb9 2005-07-13 devnull 0x58, 0x59, 0x5a, 0x5b,'\\', 0x5d, 0x5e, 0x5f,
766 08708877 2003-11-25 devnull /*60*/ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
767 08708877 2003-11-25 devnull 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
768 08708877 2003-11-25 devnull /*70*/ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
769 cbeb0b26 2006-04-01 devnull 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, NONE
770 08708877 2003-11-25 devnull };
771 08708877 2003-11-25 devnull #if 0
772 08708877 2003-11-25 devnull static Rune phtab[128] = {
773 08708877 2003-11-25 devnull /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
774 08708877 2003-11-25 devnull /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
775 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
776 08708877 2003-11-25 devnull /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
777 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
778 08708877 2003-11-25 devnull /*20*/ 0x20, 0x21, 0x2c8, 0x23, 0x24, 0x2cc, 0xe6, '\'',
779 08708877 2003-11-25 devnull 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
780 08708877 2003-11-25 devnull /*30*/ 0x30, 0x31, 0x32, 0x25c, 0x34, 0x35, 0x36, 0x37,
781 08708877 2003-11-25 devnull 0x38, 0xf8, 0x2d0, 0x3b, TAGS, 0x3d, TAGE, 0x3f,
782 08708877 2003-11-25 devnull /*40*/ 0x259, 0x251, 0x42, 0x43, 0xf0, 0x25b, 0x46, 0x47,
783 e2d62fb9 2005-07-13 devnull 0x48, 0x26a, 0x4a, 0x4b,'L', 0x4d, 0x14b, 0x254,
784 08708877 2003-11-25 devnull /*50*/ 0x50, 0x252, 0x52, 0x283, 0x3b8, 0x28a, 0x28c, 0x57,
785 e2d62fb9 2005-07-13 devnull 0x58, 0x59, 0x292, 0x5b,'\\', 0x5d, 0x5e, 0x5f,
786 08708877 2003-11-25 devnull /*60*/ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
787 08708877 2003-11-25 devnull 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
788 08708877 2003-11-25 devnull /*70*/ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
789 cbeb0b26 2006-04-01 devnull 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, NONE
790 08708877 2003-11-25 devnull };
791 08708877 2003-11-25 devnull static Rune grtab[128] = {
792 08708877 2003-11-25 devnull /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
793 08708877 2003-11-25 devnull /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
794 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
795 08708877 2003-11-25 devnull /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
796 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
797 08708877 2003-11-25 devnull /*20*/ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, SPCS, '\'',
798 08708877 2003-11-25 devnull 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
799 08708877 2003-11-25 devnull /*30*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
800 08708877 2003-11-25 devnull 0x38, 0x39, 0x3a, 0x3b, TAGS, 0x3d, TAGE, 0x3f,
801 08708877 2003-11-25 devnull /*40*/ 0x40, 0x391, 0x392, 0x39e, 0x394, 0x395, 0x3a6, 0x393,
802 08708877 2003-11-25 devnull 0x397, 0x399, 0x3da, 0x39a, 0x39b, 0x39c, 0x39d, 0x39f,
803 08708877 2003-11-25 devnull /*50*/ 0x3a0, 0x398, 0x3a1, 0x3a3, 0x3a4, 0x3a5, 0x56, 0x3a9,
804 e2d62fb9 2005-07-13 devnull 0x3a7, 0x3a8, 0x396, 0x5b,'\\', 0x5d, 0x5e, 0x5f,
805 08708877 2003-11-25 devnull /*60*/ 0x60, 0x3b1, 0x3b2, 0x3be, 0x3b4, 0x3b5, 0x3c6, 0x3b3,
806 08708877 2003-11-25 devnull 0x3b7, 0x3b9, 0x3c2, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3bf,
807 08708877 2003-11-25 devnull /*70*/ 0x3c0, 0x3b8, 0x3c1, 0x3c3, 0x3c4, 0x3c5, 0x76, 0x3c9,
808 cbeb0b26 2006-04-01 devnull 0x3c7, 0x3c8, 0x3b6, 0x7b, 0x7c, 0x7d, 0x7e, NONE
809 08708877 2003-11-25 devnull };
810 08708877 2003-11-25 devnull static Rune subtab[128] = {
811 08708877 2003-11-25 devnull /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
812 08708877 2003-11-25 devnull /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
813 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
814 08708877 2003-11-25 devnull /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
815 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
816 08708877 2003-11-25 devnull /*20*/ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, SPCS, '\'',
817 08708877 2003-11-25 devnull 0x208d, 0x208e, 0x2a, 0x208a, 0x2c, 0x208b, 0x2e, 0x2f,
818 08708877 2003-11-25 devnull /*30*/ 0x2080, 0x2081, 0x2082, 0x2083, 0x2084, 0x2085, 0x2086, 0x2087,
819 08708877 2003-11-25 devnull 0x2088, 0x2089, 0x3a, 0x3b, TAGS, 0x208c, TAGE, 0x3f,
820 08708877 2003-11-25 devnull /*40*/ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
821 e2d62fb9 2005-07-13 devnull 0x48, 0x49, 0x4a, 0x4b,'L', 0x4d, 0x4e, 0x4f,
822 08708877 2003-11-25 devnull /*50*/ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
823 e2d62fb9 2005-07-13 devnull 0x58, 0x59, 0x5a, 0x5b,'\\', 0x5d, 0x5e, 0x5f,
824 08708877 2003-11-25 devnull /*60*/ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
825 08708877 2003-11-25 devnull 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
826 08708877 2003-11-25 devnull /*70*/ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
827 cbeb0b26 2006-04-01 devnull 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, NONE
828 08708877 2003-11-25 devnull };
829 08708877 2003-11-25 devnull static Rune suptab[128] = {
830 08708877 2003-11-25 devnull /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
831 08708877 2003-11-25 devnull /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
832 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
833 08708877 2003-11-25 devnull /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
834 08708877 2003-11-25 devnull NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
835 08708877 2003-11-25 devnull /*20*/ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, SPCS, '\'',
836 08708877 2003-11-25 devnull 0x207d, 0x207e, 0x2a, 0x207a, 0x2c, 0x207b, 0x2e, 0x2f,
837 08708877 2003-11-25 devnull /*30*/ 0x2070, 0x2071, 0x2072, 0x2073, 0x2074, 0x2075, 0x2076, 0x2077,
838 08708877 2003-11-25 devnull 0x2078, 0x2079, 0x3a, 0x3b, TAGS, 0x207c, TAGE, 0x3f,
839 08708877 2003-11-25 devnull /*40*/ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
840 e2d62fb9 2005-07-13 devnull 0x48, 0x49, 0x4a, 0x4b,'L', 0x4d, 0x4e, 0x4f,
841 08708877 2003-11-25 devnull /*50*/ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
842 e2d62fb9 2005-07-13 devnull 0x58, 0x59, 0x5a, 0x5b,'\\', 0x5d, 0x5e, 0x5f,
843 08708877 2003-11-25 devnull /*60*/ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
844 08708877 2003-11-25 devnull 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
845 08708877 2003-11-25 devnull /*70*/ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
846 cbeb0b26 2006-04-01 devnull 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, NONE
847 08708877 2003-11-25 devnull };
848 08708877 2003-11-25 devnull #endif
849 08708877 2003-11-25 devnull
850 08708877 2003-11-25 devnull static int tagstarts;
851 08708877 2003-11-25 devnull static char tag[Buflen];
852 08708877 2003-11-25 devnull static char spec[Buflen];
853 08708877 2003-11-25 devnull static Entry curentry;
854 08708877 2003-11-25 devnull #define cursize (curentry.end-curentry.start)
855 08708877 2003-11-25 devnull
856 08708877 2003-11-25 devnull static char *getspec(char *, char *);
857 08708877 2003-11-25 devnull static char *gettag(char *, char *);
858 08708877 2003-11-25 devnull
859 08708877 2003-11-25 devnull /*
860 08708877 2003-11-25 devnull * cmd is one of:
861 08708877 2003-11-25 devnull * 'p': normal print
862 08708877 2003-11-25 devnull * 'h': just print headwords
863 08708877 2003-11-25 devnull * 'P': print raw
864 08708877 2003-11-25 devnull */
865 08708877 2003-11-25 devnull void
866 08708877 2003-11-25 devnull pgwprintentry(Entry e, int cmd)
867 08708877 2003-11-25 devnull {
868 08708877 2003-11-25 devnull char *p, *pe;
869 08708877 2003-11-25 devnull int t;
870 08708877 2003-11-25 devnull long r, rprev, rlig;
871 08708877 2003-11-25 devnull Rune *transtab;
872 08708877 2003-11-25 devnull
873 08708877 2003-11-25 devnull p = e.start;
874 08708877 2003-11-25 devnull pe = e.end;
875 08708877 2003-11-25 devnull transtab = normtab;
876 08708877 2003-11-25 devnull rprev = NONE;
877 08708877 2003-11-25 devnull changett(0, 0, 0);
878 08708877 2003-11-25 devnull curentry = e;
879 08708877 2003-11-25 devnull if(cmd == 'h')
880 08708877 2003-11-25 devnull outinhibit = 1;
881 08708877 2003-11-25 devnull while(p < pe) {
882 08708877 2003-11-25 devnull if(cmd == 'r') {
883 08708877 2003-11-25 devnull outchar(*p++);
884 08708877 2003-11-25 devnull continue;
885 08708877 2003-11-25 devnull }
886 08708877 2003-11-25 devnull r = transtab[(*p++)&0x7F];
887 08708877 2003-11-25 devnull if(r < NONE) {
888 08708877 2003-11-25 devnull /* Emit the rune, but buffer in case of ligature */
889 08708877 2003-11-25 devnull if(rprev != NONE)
890 08708877 2003-11-25 devnull outrune(rprev);
891 08708877 2003-11-25 devnull rprev = r;
892 08708877 2003-11-25 devnull } else if(r == SPCS) {
893 08708877 2003-11-25 devnull /* Start of special character name */
894 08708877 2003-11-25 devnull p = getspec(p, pe);
895 08708877 2003-11-25 devnull r = lookassoc(spectab, asize(spectab), spec);
896 08708877 2003-11-25 devnull if(r == -1) {
897 08708877 2003-11-25 devnull if(debug)
898 08708877 2003-11-25 devnull err("spec %ld %d %s",
899 08708877 2003-11-25 devnull e.doff, cursize, spec);
900 08708877 2003-11-25 devnull r = 0xfffd;
901 08708877 2003-11-25 devnull }
902 08708877 2003-11-25 devnull if(r >= LIGS && r < LIGE) {
903 08708877 2003-11-25 devnull /* handle possible ligature */
904 08708877 2003-11-25 devnull rlig = liglookup(r, rprev);
905 08708877 2003-11-25 devnull if(rlig != NONE)
906 08708877 2003-11-25 devnull rprev = rlig; /* overwrite rprev */
907 08708877 2003-11-25 devnull else {
908 08708877 2003-11-25 devnull /* could print accent, but let's not */
909 08708877 2003-11-25 devnull if(rprev != NONE) outrune(rprev);
910 08708877 2003-11-25 devnull rprev = NONE;
911 08708877 2003-11-25 devnull }
912 08708877 2003-11-25 devnull } else if(r >= MULTI && r < MULTIE) {
913 08708877 2003-11-25 devnull if(rprev != NONE) {
914 08708877 2003-11-25 devnull outrune(rprev);
915 08708877 2003-11-25 devnull rprev = NONE;
916 08708877 2003-11-25 devnull }
917 08708877 2003-11-25 devnull outrunes(multitab[r-MULTI]);
918 08708877 2003-11-25 devnull } else if(r == PAR) {
919 08708877 2003-11-25 devnull if(rprev != NONE) {
920 08708877 2003-11-25 devnull outrune(rprev);
921 08708877 2003-11-25 devnull rprev = NONE;
922 08708877 2003-11-25 devnull }
923 08708877 2003-11-25 devnull outnl(1);
924 08708877 2003-11-25 devnull } else {
925 08708877 2003-11-25 devnull if(rprev != NONE) outrune(rprev);
926 08708877 2003-11-25 devnull rprev = r;
927 08708877 2003-11-25 devnull }
928 08708877 2003-11-25 devnull } else if(r == TAGS) {
929 08708877 2003-11-25 devnull /* Start of tag name */
930 08708877 2003-11-25 devnull if(rprev != NONE) {
931 08708877 2003-11-25 devnull outrune(rprev);
932 08708877 2003-11-25 devnull rprev = NONE;
933 08708877 2003-11-25 devnull }
934 08708877 2003-11-25 devnull p = gettag(p, pe);
935 08708877 2003-11-25 devnull t = lookassoc(tagtab, asize(tagtab), tag);
936 08708877 2003-11-25 devnull if(t == -1) {
937 08708877 2003-11-25 devnull if(debug)
938 08708877 2003-11-25 devnull err("tag %ld %d %s",
939 08708877 2003-11-25 devnull e.doff, cursize, tag);
940 08708877 2003-11-25 devnull continue;
941 08708877 2003-11-25 devnull }
942 08708877 2003-11-25 devnull switch(t){
943 08708877 2003-11-25 devnull case Hw:
944 08708877 2003-11-25 devnull if(cmd == 'h') {
945 08708877 2003-11-25 devnull if(!tagstarts)
946 08708877 2003-11-25 devnull outchar(' ');
947 08708877 2003-11-25 devnull outinhibit = !tagstarts;
948 08708877 2003-11-25 devnull }
949 08708877 2003-11-25 devnull break;
950 08708877 2003-11-25 devnull case Sn:
951 08708877 2003-11-25 devnull if(tagstarts) {
952 08708877 2003-11-25 devnull outnl(2);
953 08708877 2003-11-25 devnull }
954 08708877 2003-11-25 devnull break;
955 08708877 2003-11-25 devnull case P:
956 08708877 2003-11-25 devnull outnl(tagstarts);
957 08708877 2003-11-25 devnull break;
958 08708877 2003-11-25 devnull case Col:
959 08708877 2003-11-25 devnull case Br:
960 08708877 2003-11-25 devnull case Blockquote:
961 08708877 2003-11-25 devnull if(tagstarts)
962 08708877 2003-11-25 devnull outnl(1);
963 08708877 2003-11-25 devnull break;
964 08708877 2003-11-25 devnull case U:
965 08708877 2003-11-25 devnull outchar('/');
966 08708877 2003-11-25 devnull }
967 08708877 2003-11-25 devnull }
968 08708877 2003-11-25 devnull }
969 08708877 2003-11-25 devnull if(cmd == 'h') {
970 08708877 2003-11-25 devnull outinhibit = 0;
971 08708877 2003-11-25 devnull outnl(0);
972 08708877 2003-11-25 devnull }
973 08708877 2003-11-25 devnull }
974 08708877 2003-11-25 devnull
975 08708877 2003-11-25 devnull /*
976 08708877 2003-11-25 devnull * Return offset into bdict where next webster entry after fromoff starts.
977 08708877 2003-11-25 devnull * Webster entries start with <p><hw>
978 08708877 2003-11-25 devnull */
979 08708877 2003-11-25 devnull long
980 08708877 2003-11-25 devnull pgwnextoff(long fromoff)
981 08708877 2003-11-25 devnull {
982 08708877 2003-11-25 devnull long a, n;
983 08708877 2003-11-25 devnull int c;
984 08708877 2003-11-25 devnull
985 08708877 2003-11-25 devnull a = Bseek(bdict, fromoff, 0);
986 08708877 2003-11-25 devnull if(a != fromoff)
987 08708877 2003-11-25 devnull return -1;
988 08708877 2003-11-25 devnull n = 0;
989 08708877 2003-11-25 devnull for(;;) {
990 08708877 2003-11-25 devnull c = Bgetc(bdict);
991 08708877 2003-11-25 devnull if(c < 0)
992 08708877 2003-11-25 devnull break;
993 08708877 2003-11-25 devnull if(c == '<' && Bgetc(bdict) == 'p' && Bgetc(bdict) == '>') {
994 08708877 2003-11-25 devnull c = Bgetc(bdict);
995 08708877 2003-11-25 devnull if(c == '<') {
996 fa325e9b 2020-01-10 cross if (Bgetc(bdict) == 'h' && Bgetc(bdict) == 'w'
997 08708877 2003-11-25 devnull && Bgetc(bdict) == '>')
998 08708877 2003-11-25 devnull n = 7;
999 08708877 2003-11-25 devnull }else if (c == '{')
1000 08708877 2003-11-25 devnull n = 4;
1001 08708877 2003-11-25 devnull if(n)
1002 08708877 2003-11-25 devnull break;
1003 08708877 2003-11-25 devnull }
1004 08708877 2003-11-25 devnull }
1005 08708877 2003-11-25 devnull return (Boffset(bdict)-n);
1006 08708877 2003-11-25 devnull }
1007 08708877 2003-11-25 devnull
1008 cbeb0b26 2006-04-01 devnull static char *prkey1 =
1009 08708877 2003-11-25 devnull "KEY TO THE PRONUNCIATION\n"
1010 08708877 2003-11-25 devnull "\n"
1011 08708877 2003-11-25 devnull "I. CONSONANTS\n"
1012 08708877 2003-11-25 devnull "b, d, f, k, l, m, n, p, t, v, z: usual English values\n"
1013 08708877 2003-11-25 devnull "\n"
1014 08708877 2003-11-25 devnull "g as in go (gəʊ)\n"
1015 08708877 2003-11-25 devnull "h ... ho! (həʊ)\n"
1016 08708877 2003-11-25 devnull "r ... run (rʌn), terrier (ˈtɛriə(r))\n"
1017 08708877 2003-11-25 devnull "(r)... her (hɜː(r))\n"
1018 08708877 2003-11-25 devnull "s ... see (siː), success (səkˈsɜs)\n"
1019 08708877 2003-11-25 devnull "w ... wear (wɛə(r))\n"
1020 08708877 2003-11-25 devnull "hw ... when (hwɛn)\n"
1021 08708877 2003-11-25 devnull "j ... yes (jɛs)\n"
1022 08708877 2003-11-25 devnull "θ ... thin (θin), bath (bɑːθ)\n"
1023 08708877 2003-11-25 devnull "ð ... then (ðɛn), bathe (beɪð)\n"
1024 08708877 2003-11-25 devnull "ʃ ... shop (ʃɒp), dish (dɪʃ)\n"
1025 08708877 2003-11-25 devnull "tʃ ... chop (tʃɒp), ditch (dɪtʃ)\n"
1026 08708877 2003-11-25 devnull "ʒ ... vision (ˈvɪʒən), déjeuner (deʒøne)\n"
1027 cbeb0b26 2006-04-01 devnull ;
1028 fa325e9b 2020-01-10 cross static char *prkey2 =
1029 08708877 2003-11-25 devnull "dʒ ... judge (dʒʌdʒ)\n"
1030 08708877 2003-11-25 devnull "ŋ ... singing (ˈsɪŋɪŋ), think (θiŋk)\n"
1031 08708877 2003-11-25 devnull "ŋg ... finger (ˈfiŋgə(r))\n"
1032 08708877 2003-11-25 devnull "\n"
1033 08708877 2003-11-25 devnull "Foreign\n"
1034 08708877 2003-11-25 devnull "ʎ as in It. seraglio (serˈraʎo)\n"
1035 08708877 2003-11-25 devnull "ɲ ... Fr. cognac (kɔɲak)\n"
1036 08708877 2003-11-25 devnull "x ... Ger. ach (ax), Sc. loch (lɒx)\n"
1037 08708877 2003-11-25 devnull "ç ... Ger. ich (ɪç), Sc. nicht (nɪçt)\n"
1038 08708877 2003-11-25 devnull "ɣ ... North Ger. sagen (ˈzaːɣən)\n"
1039 08708877 2003-11-25 devnull "c ... Afrikaans baardmannetjie (ˈbaːrtmanəci)\n"
1040 08708877 2003-11-25 devnull "ɥ ... Fr. cuisine (kɥizin)\n"
1041 08708877 2003-11-25 devnull "\n"
1042 cbeb0b26 2006-04-01 devnull ;
1043 fa325e9b 2020-01-10 cross static char *prkey3 =
1044 08708877 2003-11-25 devnull "II. VOWELS AND DIPTHONGS\n"
1045 08708877 2003-11-25 devnull "\n"
1046 08708877 2003-11-25 devnull "Short\n"
1047 08708877 2003-11-25 devnull "ɪ as in pit (pɪt), -ness (-nɪs)\n"
1048 08708877 2003-11-25 devnull "ɛ ... pet (pɛt), Fr. sept (sɛt)\n"
1049 08708877 2003-11-25 devnull "æ ... pat (pæt)\n"
1050 08708877 2003-11-25 devnull "ʌ ... putt (pʌt)\n"
1051 08708877 2003-11-25 devnull "ɒ ... pot (pɒt)\n"
1052 08708877 2003-11-25 devnull "ʊ ... put (pʊt)\n"
1053 08708877 2003-11-25 devnull "ə ... another (əˈnʌðə(r))\n"
1054 08708877 2003-11-25 devnull "(ə)... beaten (ˈbiːt(ə)n)\n"
1055 08708877 2003-11-25 devnull "i ... Fr. si (si)\n"
1056 08708877 2003-11-25 devnull "e ... Fr. bébé (bebe)\n"
1057 08708877 2003-11-25 devnull "a ... Fr. mari (mari)\n"
1058 08708877 2003-11-25 devnull "ɑ ... Fr. bâtiment (bɑtimã)\n"
1059 08708877 2003-11-25 devnull "ɔ ... Fr. homme (ɔm)\n"
1060 08708877 2003-11-25 devnull "o ... Fr. eau (o)\n"
1061 08708877 2003-11-25 devnull "ø ... Fr. peu (pø)\n"
1062 cbeb0b26 2006-04-01 devnull ;
1063 cbeb0b26 2006-04-01 devnull static char *prkey4 =
1064 08708877 2003-11-25 devnull "œ ... Fr. boeuf (bœf), coeur (kœr)\n"
1065 08708877 2003-11-25 devnull "u ... Fr. douce (dus)\n"
1066 08708877 2003-11-25 devnull "ʏ ... Ger. Müller (ˈmʏlər)\n"
1067 08708877 2003-11-25 devnull "y ... Fr. du (dy)\n"
1068 08708877 2003-11-25 devnull "\n"
1069 08708877 2003-11-25 devnull "Long\n"
1070 08708877 2003-11-25 devnull "iː as in bean (biːn)\n"
1071 08708877 2003-11-25 devnull "ɑː ... barn (bɑːn)\n"
1072 08708877 2003-11-25 devnull "ɔː ... born (bɔːn)\n"
1073 08708877 2003-11-25 devnull "uː ... boon (buːn)\n"
1074 08708877 2003-11-25 devnull "ɜː ... burn (bɜːn)\n"
1075 08708877 2003-11-25 devnull "eː ... Ger. Schnee (ʃneː)\n"
1076 08708877 2003-11-25 devnull "ɛː ... Ger. Fähre (ˈfɛːrə)\n"
1077 08708877 2003-11-25 devnull "aː ... Ger. Tag (taːk)\n"
1078 08708877 2003-11-25 devnull "oː ... Ger. Sohn (zoːn)\n"
1079 08708877 2003-11-25 devnull "øː ... Ger. Goethe (gøːtə)\n"
1080 08708877 2003-11-25 devnull "yː ... Ger. grün (gryːn)\n"
1081 08708877 2003-11-25 devnull "\n"
1082 cbeb0b26 2006-04-01 devnull ;
1083 fa325e9b 2020-01-10 cross static char *prkey5 =
1084 08708877 2003-11-25 devnull "Nasal\n"
1085 08708877 2003-11-25 devnull "ɛ˜, æ˜ as in Fr. fin (fɛ˜, fæ˜)\n"
1086 08708877 2003-11-25 devnull "ã ... Fr. franc (frã)\n"
1087 08708877 2003-11-25 devnull "ɔ˜ ... Fr. bon (bɔ˜n)\n"
1088 08708877 2003-11-25 devnull "œ˜ ... Fr. un (œ˜)\n"
1089 08708877 2003-11-25 devnull "\n"
1090 08708877 2003-11-25 devnull "Dipthongs, etc.\n"
1091 08708877 2003-11-25 devnull "eɪ as in bay (beɪ)\n"
1092 08708877 2003-11-25 devnull "aɪ ... buy (baɪ)\n"
1093 08708877 2003-11-25 devnull "ɔɪ ... boy (bɔɪ)\n"
1094 08708877 2003-11-25 devnull "əʊ ... no (nəʊ)\n"
1095 08708877 2003-11-25 devnull "aʊ ... now (naʊ)\n"
1096 08708877 2003-11-25 devnull "ɪə ... peer (pɪə(r))\n"
1097 08708877 2003-11-25 devnull "ɛə ... pair (pɛə(r))\n"
1098 08708877 2003-11-25 devnull "ʊə ... tour (tʊə(r))\n"
1099 08708877 2003-11-25 devnull "ɔə ... boar (bɔə(r))\n"
1100 08708877 2003-11-25 devnull "\n"
1101 cbeb0b26 2006-04-01 devnull ;
1102 fa325e9b 2020-01-10 cross static char *prkey6 =
1103 08708877 2003-11-25 devnull "III. STRESS\n"
1104 08708877 2003-11-25 devnull "\n"
1105 08708877 2003-11-25 devnull "Main stress: ˈ preceding stressed syllable\n"
1106 08708877 2003-11-25 devnull "Secondary stress: ˌ preceding stressed syllable\n"
1107 08708877 2003-11-25 devnull "\n"
1108 08708877 2003-11-25 devnull "E.g.: pronunciation (prəˌnʌnsɪˈeɪʃ(ə)n)\n";
1109 08708877 2003-11-25 devnull /* TODO: find transcriptions of foreign consonents, œ, ʏ, nasals */
1110 08708877 2003-11-25 devnull
1111 08708877 2003-11-25 devnull void
1112 08708877 2003-11-25 devnull pgwprintkey(void)
1113 08708877 2003-11-25 devnull {
1114 cbeb0b26 2006-04-01 devnull Bprint(bout, "%s%s%s%s%s%s",
1115 cbeb0b26 2006-04-01 devnull prkey1, prkey2, prkey3, prkey4, prkey5, prkey6);
1116 08708877 2003-11-25 devnull }
1117 08708877 2003-11-25 devnull
1118 08708877 2003-11-25 devnull /*
1119 08708877 2003-11-25 devnull * f points just after a '&', fe points at end of entry.
1120 08708877 2003-11-25 devnull * Accumulate the special name, starting after the &
1121 08708877 2003-11-25 devnull * and continuing until the next ';', in spec[].
1122 08708877 2003-11-25 devnull * Return pointer to char after ';'.
1123 08708877 2003-11-25 devnull */
1124 08708877 2003-11-25 devnull static char *
1125 08708877 2003-11-25 devnull getspec(char *f, char *fe)
1126 08708877 2003-11-25 devnull {
1127 08708877 2003-11-25 devnull char *t;
1128 08708877 2003-11-25 devnull int c, i;
1129 08708877 2003-11-25 devnull
1130 08708877 2003-11-25 devnull t = spec;
1131 08708877 2003-11-25 devnull i = sizeof spec;
1132 08708877 2003-11-25 devnull while(--i > 0) {
1133 08708877 2003-11-25 devnull c = *f++;
1134 08708877 2003-11-25 devnull if(c == ';' || f == fe)
1135 08708877 2003-11-25 devnull break;
1136 08708877 2003-11-25 devnull *t++ = c;
1137 08708877 2003-11-25 devnull }
1138 08708877 2003-11-25 devnull *t = 0;
1139 08708877 2003-11-25 devnull return f;
1140 08708877 2003-11-25 devnull }
1141 08708877 2003-11-25 devnull
1142 08708877 2003-11-25 devnull /*
1143 08708877 2003-11-25 devnull * f points just after '<'; fe points at end of entry.
1144 08708877 2003-11-25 devnull * Expect next characters from bin to match:
1145 08708877 2003-11-25 devnull * [/][^ >]+( [^>=]+=[^ >]+)*>
1146 08708877 2003-11-25 devnull * tag auxname auxval
1147 08708877 2003-11-25 devnull * Accumulate the tag and its auxilliary information in
1148 08708877 2003-11-25 devnull * tag[], auxname[][] and auxval[][].
1149 08708877 2003-11-25 devnull * Set tagstarts=1 if the tag is 'starting' (has no '/'), else 0.
1150 08708877 2003-11-25 devnull * Set naux to the number of aux pairs found.
1151 08708877 2003-11-25 devnull * Return pointer to after final '>'.
1152 08708877 2003-11-25 devnull */
1153 08708877 2003-11-25 devnull static char *
1154 08708877 2003-11-25 devnull gettag(char *f, char *fe)
1155 08708877 2003-11-25 devnull {
1156 08708877 2003-11-25 devnull char *t;
1157 08708877 2003-11-25 devnull int c, i;
1158 08708877 2003-11-25 devnull
1159 08708877 2003-11-25 devnull t = tag;
1160 08708877 2003-11-25 devnull c = *f++;
1161 08708877 2003-11-25 devnull if(c == '/')
1162 08708877 2003-11-25 devnull tagstarts = 0;
1163 08708877 2003-11-25 devnull else {
1164 08708877 2003-11-25 devnull tagstarts = 1;
1165 08708877 2003-11-25 devnull *t++ = c;
1166 08708877 2003-11-25 devnull }
1167 08708877 2003-11-25 devnull i = Buflen;
1168 08708877 2003-11-25 devnull while(--i > 0) {
1169 08708877 2003-11-25 devnull c = *f++;
1170 08708877 2003-11-25 devnull if(c == '>' || f == fe)
1171 08708877 2003-11-25 devnull break;
1172 08708877 2003-11-25 devnull *t++ = c;
1173 08708877 2003-11-25 devnull }
1174 08708877 2003-11-25 devnull *t = 0;
1175 08708877 2003-11-25 devnull return f;
1176 08708877 2003-11-25 devnull }