bzr branch
http://golem.ph.utexas.edu/~distler/code/itexToMML/
|
1
by Jacques Distler
Initial commit. |
1 |
/* itex2MML 1.1.8 |
2 |
* itex2MML.l last modified 6/15/2006 |
|
3 |
*/ |
|
4 |
||
5 |
%{
|
|
6 |
%} |
|
7 |
%option noyywrap |
|
8 |
%x MATH ATTRIBUTELIST BBOLD FRAKTUR CALLIGRAPHIC ROMAN PLAINTEXT INT1 INT2 INT3 MATHENV |
|
9 |
%{
|
|
10 |
#include <string.h> |
|
11 |
||
12 |
#define YYSTYPE char * |
|
13 |
||
14 |
#include "y.tab.h" |
|
15 |
#include "itex2MML.h" |
|
16 |
||
17 |
#define YY_NEVER_INTERACTIVE 1 |
|
18 |
#define YY_INPUT(buffer,result,max_size) result = s_itex2MML_read (buffer, max_size) |
|
19 |
||
20 |
static int s_itex2MML_read (char * buffer, int max_size); |
|
21 |
||
22 |
#define yylval itex2MML_yylval |
|
23 |
||
24 |
extern char * yylval; |
|
25 |
||
26 |
int itex2MML_lineno = 1; |
|
27 |
||
28 |
int itex2MML_rowposn = 0; |
|
29 |
int itex2MML_displaymode = 0; |
|
30 |
%} |
|
31 |
%% |
|
32 |
%{ if (itex2MML_rowposn==1) itex2MML_rowposn=0;
|
|
33 |
if (itex2MML_rowposn==2) itex2MML_rowposn=1; |
|
34 |
%} |
|
35 |
||
36 |
<INITIAL>"$"{1,2} BEGIN(MATH); itex2MML_rowposn=2; if (yyleng==2) { itex2MML_displaymode=1; return STARTDMATH;}; itex2MML_displaymode=0; return STARTMATH;
|
|
37 |
<INITIAL>"\\[" BEGIN(MATH); itex2MML_rowposn=2; itex2MML_displaymode=1; return STARTDMATH; |
|
38 |
<INITIAL>EOF return 0; |
|
39 |
<INITIAL>"\n" {itex2MML_lineno++; yylval=itex2MML_copy_string(yytext); return CHAR;}
|
|
40 |
<INITIAL>. {yylval=itex2MML_copy_string(yytext); return CHAR;}
|
|
41 |
||
42 |
||
43 |
<MATH>{
|
|
44 |
||
45 |
||
46 |
||
47 |
"$"{1,2} |
|
|
48 |
"\\]" {BEGIN(INITIAL); return ENDMATH;}
|
|
49 |
||
50 |
"^" return SUP; |
|
51 |
"_" return SUB; |
|
52 |
"{"[\t\r\n ]*"}" return EMPTYMROW;
|
|
53 |
"{" {itex2MML_rowposn = 2; return MROWOPEN;}
|
|
54 |
"}" return MROWCLOSE; |
|
55 |
||
56 |
"\\left" itex2MML_rowposn=2; return LEFT; |
|
57 |
"\\right" return RIGHT; |
|
58 |
||
59 |
"\\big" | |
|
60 |
"\\bigr" {return BIG;}
|
|
61 |
"\\Big" | |
|
62 |
"\\Bigr" {return BBIG;}
|
|
63 |
"\\bigg" | |
|
64 |
"\\biggr" {return BIGG;}
|
|
65 |
"\\Bigg" | |
|
66 |
"\\Biggr" {return BBIGG;}
|
|
67 |
||
68 |
"\\bigl" {return BIGL;}
|
|
69 |
"\\Bigl" {return BBIGL;}
|
|
70 |
"\\biggl" {return BIGGL;}
|
|
71 |
"\\Biggl" {return BBIGGL;}
|
|
72 |
||
73 |
"\\rlap" | |
|
74 |
"\\llap" | |
|
75 |
"\\ulap" | |
|
76 |
"\\dlap" {/* Ignore */ ;}
|
|
77 |
||
78 |
||
79 |
"&" | |
|
80 |
"&" {itex2MML_rowposn=2; return COLSEP;}
|
|
81 |
||
82 |
"\\&" {yylval=itex2MML_copy_string("&"); return MI;}
|
|
83 |
||
84 |
"\\$" {yylval=itex2MML_copy_string("$"); return MI;}
|
|
85 |
"\\%" {yylval=itex2MML_copy_string("%"); return MI;}
|
|
86 |
||
87 |
"\\\\" itex2MML_rowposn=2; return ROWSEP; |
|
88 |
||
89 |
[a-zA-Z]+ {yylval=itex2MML_copy_string(yytext); return MI;}
|
|
90 |
||
91 |
[0-9,.]*[0-9]+ {yylval=itex2MML_copy2(yytext, " "); return MN;}
|
|
92 |
"\\infty" | |
|
93 |
"\\infinity" {yylval=itex2MML_copy_string("∞"); return MN;}
|
|
94 |
||
95 |
"(" |
|
|
96 |
"[" {yylval=itex2MML_copy_string(yytext); return LEFTDELIM;}
|
|
97 |
||
98 |
")" | |
|
99 |
"]" {yylval=itex2MML_copy_string(yytext); return RIGHTDELIM;}
|
|
100 |
||
101 |
"\\lbrace" | |
|
102 |
"\\{" {yylval=itex2MML_copy_string("{"); return LEFTDELIM;}
|
|
103 |
"\\rbrace" | |
|
104 |
"\\}" {yylval=itex2MML_copy_string("}"); return RIGHTDELIM;}
|
|
105 |
||
106 |
"\\vert" | |
|
107 |
"|" {yylval=itex2MML_copy_string("∣"); return OTHERDELIM;}
|
|
108 |
"\\Vert" | |
|
109 |
"\\|" {yylval=itex2MML_copy_string("∥"); return OTHERDELIM;}
|
|
110 |
||
111 |
"\\setminus" {yylval=itex2MML_copy_string("∖"); return MO;}
|
|
112 |
"\\backslash" {yylval=itex2MML_copy_string("\"); return MO;}
|
|
113 |
"\\smallsetminus" {yylval=itex2MML_copy_string("﹨"); return MOF;}
|
|
114 |
||
115 |
"\\lfloor" | |
|
116 |
"\\lceil" | |
|
117 |
"\\lang" | |
|
118 |
"\\langle" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return LEFTDELIM;}
|
|
119 |
||
120 |
"\\rfloor" | |
|
121 |
"\\rceil" | |
|
122 |
"\\rang" | |
|
123 |
"\\rangle" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return RIGHTDELIM;}
|
|
124 |
||
125 |
"/" {yylval=itex2MML_copy_string(yytext); return OTHERDELIM;}
|
|
126 |
||
127 |
"\\uparrow" | |
|
128 |
"\\downarrow" | |
|
129 |
"\\updownarrow" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return OTHERDELIM;}
|
|
130 |
||
131 |
"." {yylval=itex2MML_copy_string(yytext); return PERIODDELIM;}
|
|
132 |
||
133 |
"-" {if (itex2MML_rowposn==1) return UNARYMINUS; else {yylval=itex2MML_copy_string("−"); return MO;}}
|
|
134 |
||
135 |
"+" {if (itex2MML_rowposn==1) return UNARYPLUS; else {yylval=itex2MML_copy_string("+"); return MO;}}
|
|
136 |
||
137 |
"," | |
|
138 |
":" | |
|
139 |
"!" | |
|
140 |
"=" | |
|
141 |
"~" | |
|
142 |
";" | |
|
143 |
"'" | |
|
144 |
"?" | |
|
145 |
"#" | |
|
146 |
"`" | |
|
147 |
"*" {yylval=itex2MML_copy_string(yytext); return MOL;}
|
|
148 |
||
149 |
"\\alpha" | |
|
150 |
"\\beta" | |
|
151 |
"\\gamma" | |
|
152 |
"\\delta" | |
|
153 |
"\\zeta" | |
|
154 |
"\\eta" | |
|
155 |
"\\theta" | |
|
156 |
"\\iota" | |
|
157 |
"\\kappa" | |
|
158 |
"\\lambda" | |
|
159 |
"\\mu" | |
|
160 |
"\\nu" | |
|
161 |
"\\xi" | |
|
162 |
"\\pi" | |
|
163 |
"\\rho" | |
|
164 |
"\\sigma" | |
|
165 |
"\\tau" | |
|
166 |
"\\upsilon" | |
|
167 |
"\\chi" | |
|
168 |
"\\psi" | |
|
169 |
"\\omega" | |
|
170 |
"\\backepsilon" | |
|
171 |
"\\varepsilon" | |
|
172 |
"\\varkappa" | |
|
173 |
"\\varpi" | |
|
174 |
"\\varrho" | |
|
175 |
"\\varsigma" | |
|
176 |
"\\vartheta" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
|
|
177 |
||
178 |
"\\phi" {yylval=itex2MML_copy_string("ϕ"); return MI;}
|
|
179 |
"\\varphi" {yylval=itex2MML_copy_string("φ"); return MI;}
|
|
180 |
||
181 |
"\\arccos" | |
|
182 |
"\\arcsin" | |
|
183 |
"\\arctan" | |
|
184 |
"\\arg" | |
|
185 |
"\\cos" | |
|
186 |
"\\cosh" | |
|
187 |
"\\cot" | |
|
188 |
"\\coth" | |
|
189 |
"\\csc" | |
|
190 |
"\\deg" | |
|
191 |
"\\dim" | |
|
192 |
"\\exp" | |
|
193 |
"\\hom" | |
|
194 |
"\\ker" | |
|
195 |
"\\lg" | |
|
196 |
"\\ln" | |
|
197 |
"\\log" | |
|
198 |
"\\sec" | |
|
199 |
"\\sin" | |
|
200 |
"\\sinh" | |
|
201 |
"\\tan" | |
|
202 |
"\\tanh" {yylval=itex2MML_copy_string(yytext+1); return MI;}
|
|
203 |
||
204 |
"\\det" | |
|
205 |
"\\gcd" | |
|
206 |
"\\inf" | |
|
207 |
"\\lim" | |
|
208 |
"\\liminf" | |
|
209 |
"\\limsup" | |
|
210 |
"\\max" | |
|
211 |
"\\min" | |
|
212 |
"\\Pr" | |
|
213 |
"\\sup" {yylval=itex2MML_copy_string(yytext+1); return MIB;}
|
|
214 |
||
215 |
"\\omicron" {yylval=itex2MML_copy_string("ℴ"); return MI;}
|
|
216 |
||
217 |
"\\epsilon" {yylval=itex2MML_copy_string("ε"); return MI;}
|
|
218 |
||
219 |
"\\cdot" {yylval=itex2MML_copy_string("⋅"); return MO;}
|
|
220 |
||
221 |
"\\Alpha" | |
|
222 |
"\\Beta" | |
|
223 |
"\\Delta" | |
|
224 |
"\\Gamma" | |
|
225 |
"\\digamma" | |
|
226 |
"\\Lambda" | |
|
227 |
"\\Pi" | |
|
228 |
"\\Phi" | |
|
229 |
"\\Psi" | |
|
230 |
"\\Sigma" | |
|
231 |
"\\Theta" | |
|
232 |
"\\Xi" | |
|
233 |
"\\Zeta" | |
|
234 |
"\\Eta" | |
|
235 |
"\\Iota" | |
|
236 |
"\\Kappa" | |
|
237 |
"\\Mu" | |
|
238 |
"\\Nu" | |
|
239 |
"\\Rho" | |
|
240 |
"\\Tau" | |
|
241 |
"\\mho" | |
|
242 |
"\\Omega" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
|
|
243 |
||
244 |
"\\Upsilon" | |
|
245 |
"\\Upsi" {yylval=itex2MML_copy_string("ϒ"); return MI;}
|
|
246 |
||
247 |
"\\iff" | |
|
248 |
"\\Longleftrightarrow" {yylval=itex2MML_copy_string("⇔"); return MOL;}
|
|
249 |
||
250 |
"\\Leftrightarrow" {yylval=itex2MML_copy_string("⇔"); return MOL;}
|
|
251 |
||
252 |
"\\impliedby" | |
|
253 |
"\\Leftarrow" {yylval=itex2MML_copy_string("⇐"); return MOL;}
|
|
254 |
||
255 |
"\\implies" | |
|
256 |
"\\Rightarrow" {yylval=itex2MML_copy_string("⇒"); return MOL;}
|
|
257 |
||
258 |
"\\hookleftarrow" {yylval=itex2MML_copy_string("↩"); return MOL;}
|
|
259 |
||
260 |
"\\embedsin" | |
|
261 |
"\\hookrightarrow" {yylval=itex2MML_copy_string("↪"); return MOL;}
|
|
262 |
||
263 |
"\\longleftarrow" {yylval=itex2MML_copy_string("⟵"); return MOL;}
|
|
264 |
||
265 |
"\\longrightarrow" {yylval=itex2MML_copy_string("⟶"); return MOL;}
|
|
266 |
||
267 |
"\\leftarrow" {yylval=itex2MML_copy_string("←"); return MOL;}
|
|
268 |
||
269 |
"\\to" | |
|
270 |
"\\rightarrow" {yylval=itex2MML_copy_string("→"); return MOL;}
|
|
271 |
||
272 |
"\\leftrightarrow" {yylval=itex2MML_copy_string("↔"); return MOL;}
|
|
273 |
||
274 |
"\\mapsto" | |
|
275 |
"\\map" {yylval=itex2MML_copy_string("↦"); return MOL;}
|
|
276 |
||
277 |
"\\nearrow" | |
|
278 |
"\\nearr" {yylval=itex2MML_copy_string("↗"); return MOL;}
|
|
279 |
||
280 |
"\\nwarrow" | |
|
281 |
"\\nwarr" {yylval=itex2MML_copy_string("↖"); return MOL;}
|
|
282 |
||
283 |
"\\searrow" | |
|
284 |
"\\searr" {yylval=itex2MML_copy_string("↘"); return MOL;}
|
|
285 |
||
286 |
"\\swarrow" | |
|
287 |
"\\swarr" {yylval=itex2MML_copy_string("↙"); return MOL;}
|
|
288 |
||
289 |
"\\neArrow" | |
|
290 |
"\\neArr" {yylval=itex2MML_copy_string("⇗"); return MOL;}
|
|
291 |
||
292 |
"\\nwArrow" | |
|
293 |
"\\nwArr" {yylval=itex2MML_copy_string("⇖"); return MOL;}
|
|
294 |
||
295 |
"\\seArrow" | |
|
296 |
"\\seArr" {yylval=itex2MML_copy_string("⇘"); return MOL;}
|
|
297 |
||
298 |
"\\swArrow" | |
|
299 |
"\\swArr" {yylval=itex2MML_copy_string("⇙"); return MOL;}
|
|
300 |
||
301 |
"\\darr" {yylval=itex2MML_copy_string("↓"); return MOL;}
|
|
302 |
||
303 |
"\\Downarrow" {yylval=itex2MML_copy_string("⇓"); return MOL;}
|
|
304 |
||
305 |
"\\uparr" {yylval=itex2MML_copy_string("↑"); return MOL;}
|
|
306 |
||
307 |
"\\Uparrow" {yylval=itex2MML_copy_string("⇑"); return MOL;}
|
|
308 |
||
309 |
"\\downuparrow" | |
|
310 |
"\\duparr" | |
|
311 |
"\\updarr" {yylval=itex2MML_copy_string("↕"); return MOL;}
|
|
312 |
||
313 |
"\\Updownarrow" {yylval=itex2MML_copy_string("⇕"); return MOL;}
|
|
314 |
||
315 |
"\\dots" | |
|
316 |
"\\ldots" {yylval=itex2MML_copy_string("…"); return MO;}
|
|
317 |
"\\cdots" {yylval=itex2MML_copy_string("⋯"); return MO;}
|
|
318 |
"\\ddots" {yylval=itex2MML_copy_string("⋱"); return MO;}
|
|
319 |
"\\udots" {yylval=itex2MML_copy_string("⋰"); return MO;}
|
|
320 |
"\\vdots" {yylval=itex2MML_copy_string("⋮"); return MO;}
|
|
321 |
||
322 |
"\\cup" | |
|
323 |
"\&union;" | |
|
324 |
"\\union" {yylval=itex2MML_copy_string("∪"); return MOL;}
|
|
325 |
||
326 |
"\\bigcup" | |
|
327 |
"\\Union" | |
|
328 |
"\⋃" {yylval=itex2MML_copy_string("⋃"); return MOB;}
|
|
329 |
||
330 |
"\\cap" | |
|
331 |
"\\intersection" {yylval=itex2MML_copy_string("∩"); return MOL;}
|
|
332 |
||
333 |
"\\bigcap" | |
|
334 |
"\\Intersection" {yylval=itex2MML_copy_string("⋂"); return MOB;}
|
|
335 |
||
336 |
"\\in" {yylval=itex2MML_copy_string("∈"); return MOL;}
|
|
337 |
||
338 |
"\\gt" | |
|
339 |
"\\lt" | |
|
340 |
"\\approxeq" | |
|
341 |
"\\backsim" | |
|
342 |
"\\backsimeq" | |
|
343 |
"\\subset" | |
|
344 |
"\\subseteq" | |
|
345 |
"\\subseteqq" | |
|
346 |
"\\subsetneq" | |
|
347 |
"\\subsetneqq" | |
|
348 |
"\\varsubsetneq" | |
|
349 |
"\\varsubsetneqq" | |
|
350 |
"\\prec" | |
|
351 |
"\\parallel" | |
|
352 |
"\\nparallel" | |
|
353 |
"\\shortparallel" | |
|
354 |
"\\nshortparallel" | |
|
355 |
"\\perp" | |
|
356 |
"\\eqslantgtr" | |
|
357 |
"\\eqslantless" | |
|
358 |
"\\gg" | |
|
359 |
"\\ggg" | |
|
360 |
"\\geq" | |
|
361 |
"\\geqq" | |
|
362 |
"\\geqslant" | |
|
363 |
"\\gneq" | |
|
364 |
"\\gneqq" | |
|
365 |
"\\gnapprox" | |
|
366 |
"\\gnsim" | |
|
367 |
"\\gtrapprox" | |
|
368 |
"\\ge" | |
|
369 |
"\\le" | |
|
370 |
"\\leq" | |
|
371 |
"\\leqq" | |
|
372 |
"\\leqslant" | |
|
373 |
"\\lessapprox" | |
|
374 |
"\\lessdot" | |
|
375 |
"\\lesseqgtr" | |
|
376 |
"\\lesseqqgtr" | |
|
377 |
"\\lessgtr" | |
|
378 |
"\\lneq" | |
|
379 |
"\\lneqq" | |
|
380 |
"\\lnsim" | |
|
381 |
"\\lvertneqq" | |
|
382 |
"\\gtrsim" | |
|
383 |
"\\gtrdot" | |
|
384 |
"\\gtreqless" | |
|
385 |
"\\gtreqqless" | |
|
386 |
"\\gtrless" | |
|
387 |
"\\gvertneqq" | |
|
388 |
"\\lesssim" | |
|
389 |
"\\lnapprox" | |
|
390 |
"\\nsubset" | |
|
391 |
"\\nsubseteq" | |
|
392 |
"\\nsubseteqq" | |
|
393 |
"\\notin" | |
|
394 |
"\\ni" | |
|
395 |
"\\notni" | |
|
396 |
"\\nmid" | |
|
397 |
"\\nshortmid" | |
|
398 |
"\\preceq" | |
|
399 |
"\\npreceq" | |
|
400 |
"\\ll" | |
|
401 |
"\\ngeq" | |
|
402 |
"\\ngeqq" | |
|
403 |
"\\ngeqslant" | |
|
404 |
"\\nleq" | |
|
405 |
"\\nleqq" | |
|
406 |
"\\nleqslant" | |
|
407 |
"\\nless" | |
|
408 |
"\\supset" | |
|
409 |
"\\supseteq" | |
|
410 |
"\\supseteqq" | |
|
411 |
"\\supsetneq" | |
|
412 |
"\\supsetneqq" | |
|
413 |
"\\varsupsetneq" | |
|
414 |
"\\varsupsetneqq" | |
|
415 |
"\\approx" | |
|
416 |
"\\asymp" | |
|
417 |
"\\bowtie" | |
|
418 |
"\\dashv" | |
|
419 |
"\\Vdash" | |
|
420 |
"\\vDash" | |
|
421 |
"\\VDash" | |
|
422 |
"\\vdash" | |
|
423 |
"\\Vvdash" | |
|
424 |
"\\models" | |
|
425 |
"\\sim" | |
|
426 |
"\\simeq" | |
|
427 |
"\\nsim" | |
|
428 |
"\\smile" | |
|
429 |
"\\triangle" | |
|
430 |
"\\triangledown" | |
|
431 |
"\\triangleleft" | |
|
432 |
"\\cong" | |
|
433 |
"\\succ" | |
|
434 |
"\\nsucc" | |
|
435 |
"\\ngtr" | |
|
436 |
"\\nsupset" | |
|
437 |
"\\nsupseteq" | |
|
438 |
"\\propto" | |
|
439 |
"\\equiv" | |
|
440 |
"\\frown" | |
|
441 |
"\\triangleright" | |
|
442 |
"\\ncong" | |
|
443 |
"\\succeq" | |
|
444 |
"\\succapprox" | |
|
445 |
"\\succnapprox" | |
|
446 |
"\\succcurlyeq" | |
|
447 |
"\\succsim" | |
|
448 |
"\\succnsim" | |
|
449 |
"\\nsucceq" | |
|
450 |
"\\nvDash" | |
|
451 |
"\\nvdash" | |
|
452 |
"\\nVDash" | |
|
453 |
"\\amalg" | |
|
454 |
"\\pm" | |
|
455 |
"\\mp" | |
|
456 |
"\\bigcirc" | |
|
457 |
"\\wr" | |
|
458 |
"\\odot" | |
|
459 |
"\\uplus" | |
|
460 |
"\\clubsuit" | |
|
461 |
"\\spadesuit" | |
|
462 |
"\\Diamond" | |
|
463 |
"\\diamond" | |
|
464 |
"\\sqcup" | |
|
465 |
"\\sqcap" | |
|
466 |
"\\sqsubset" | |
|
467 |
"\\sqsubseteq" | |
|
468 |
"\\sqsupset" | |
|
469 |
"\\sqsupseteq" | |
|
470 |
"\\Subset" | |
|
471 |
"\\Supset" | |
|
472 |
"\\ltimes" | |
|
473 |
"\\div" | |
|
474 |
"\\rtimes" | |
|
475 |
"\\bot" | |
|
476 |
"\\prime" | |
|
477 |
"\\therefore" | |
|
478 |
"\\thickapprox" | |
|
479 |
"\\thicksim" | |
|
480 |
"\\varpropto" | |
|
481 |
"\\varnothing" | |
|
482 |
"\\flat" | |
|
483 |
"\\vee" | |
|
484 |
"\\because" | |
|
485 |
"\\between" | |
|
486 |
"\\Bumpeq" | |
|
487 |
"\\bumpeq" | |
|
488 |
"\\circeq" | |
|
489 |
"\\curlyeqprec" | |
|
490 |
"\\curlyeqsucc" | |
|
491 |
"\\doteq" | |
|
492 |
"\\doteqdot" | |
|
493 |
"\\eqcirc" | |
|
494 |
"\\fallingdotseq" | |
|
495 |
"\\multimap" | |
|
496 |
"\\pitchfork" | |
|
497 |
"\\precapprox" | |
|
498 |
"\\precnapprox" | |
|
499 |
"\\preccurlyeq" | |
|
500 |
"\\precsim" | |
|
501 |
"\\precnsim" | |
|
502 |
"\\risingdotseq" | |
|
503 |
"\\sharp" | |
|
504 |
"\\bullet" | |
|
505 |
"\\nexists" | |
|
506 |
"\\dagger" | |
|
507 |
"\\ddagger" | |
|
508 |
"\\not" | |
|
509 |
"\\top" | |
|
510 |
"\\natural" | |
|
511 |
"\\angle" | |
|
512 |
"\\measuredangle" | |
|
513 |
"\\backprime" | |
|
514 |
"\\bigstar" | |
|
515 |
"\\blacklozenge" | |
|
516 |
"\\lozenge" | |
|
517 |
"\\blacksquare" | |
|
518 |
"\\blacktriangle" | |
|
519 |
"\\blacktriangledown" | |
|
520 |
"\\forall" | |
|
521 |
"\\bigtriangleup" | |
|
522 |
"\\bigtriangledown" | |
|
523 |
"\\nprec" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MOL;}
|
|
524 |
||
525 |
"\\aleph" | |
|
526 |
"\\beth" | |
|
527 |
"\\eth" | |
|
528 |
"\\ell" | |
|
529 |
"\\hbar" | |
|
530 |
"\\Im" | |
|
531 |
"\\imath" | |
|
532 |
"\\jmath" | |
|
533 |
"\\wp" | |
|
534 |
"\\Re" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
|
|
535 |
||
536 |
"\\Box" | |
|
537 |
"\\square" {yylval=itex2MML_copy_string("□"); return MOL;}
|
|
538 |
"\\emptyset" | |
|
539 |
"\\empty" {yylval=itex2MML_copy_string("∅"); return MI;}
|
|
540 |
"\\exists" {yylval=itex2MML_copy_string("∃"); return MOL;}
|
|
541 |
"\\circ" {yylval=itex2MML_copy_string("∘"); return MOL;}
|
|
542 |
"\\rhd" {yylval=itex2MML_copy_string("⊳"); return MOL;}
|
|
543 |
"\\lhd" {yylval=itex2MML_copy_string("⊲"); return MOL;}
|
|
544 |
"\\lll" {yylval=itex2MML_copy_string("⋘"); return MOL;}
|
|
545 |
"\\unrhd" {yylval=itex2MML_copy_string("⊵"); return MOL;}
|
|
546 |
"\\unlhd" {yylval=itex2MML_copy_string("⊴"); return MOL;}
|
|
547 |
"\\Del" | |
|
548 |
"\\nabla" {yylval=itex2MML_copy_string("∇"); return MOL;}
|
|
549 |
"\\sphericalangle" {yylval=itex2MML_copy_string("∢"); return MOL;}
|
|
550 |
||
551 |
"\\heartsuit" {yylval=itex2MML_copy_string("♡"); return MOL;}
|
|
552 |
"\\diamondsuit" {yylval=itex2MML_copy_string("♢"); return MOL;}
|
|
553 |
||
554 |
"\\partial" {yylval=itex2MML_copy_string("∂"); return MOL;}
|
|
555 |
||
556 |
"\\qed" {yylval=itex2MML_copy_string("▪"); return MO;}
|
|
557 |
||
558 |
"\\mod" {yylval=itex2MML_copy_string("mod"); return MOS;}
|
|
559 |
"\\pmod" {return PMOD;}
|
|
560 |
||
561 |
"\\bottom" {yylval=itex2MML_copy_string("⊥"); return MOL;}
|
|
562 |
||
563 |
"\\neg" {yylval=itex2MML_copy_string("¬"); return MOL;}
|
|
564 |
||
565 |
"\\neq" | |
|
566 |
"\\ne" {yylval=itex2MML_copy_string("≠"); return MOL;}
|
|
567 |
||
568 |
"\\shortmid" | |
|
569 |
"\\mid" {yylval=itex2MML_copy_string("∣"); return MOS;}
|
|
570 |
||
571 |
"\\int" | |
|
572 |
"\\integral" {yylval=itex2MML_copy_string("∫"); return MOL;}
|
|
573 |
||
574 |
"\\iint" | |
|
575 |
"\\doubleintegral" {yylval=itex2MML_copy_string("∬"); return MOL;}
|
|
576 |
||
577 |
"\\iiint" | |
|
578 |
"\\tripleintegral" {yylval=itex2MML_copy_string("∭"); return MOL;}
|
|
579 |
||
580 |
"\\iiiint" | |
|
581 |
"\\quadrupleintegral" {yylval=itex2MML_copy_string("⨌"); return MOL;}
|
|
582 |
||
583 |
"\\oint" | |
|
584 |
"\\conint" | |
|
585 |
"\\contourintegral" {yylval=itex2MML_copy_string("∮"); return MOL;}
|
|
586 |
||
587 |
"\\times" {yylval=itex2MML_copy_string("×"); return MOL;}
|
|
588 |
"\\star" {yylval=itex2MML_copy_string("⋆"); return MOL;}
|
|
589 |
"\\circleddash" | |
|
590 |
"\\odash" {yylval=itex2MML_copy_string("⊝"); return MOL;}
|
|
591 |
||
592 |
"\\boxminus" | |
|
593 |
"\\minusb" {yylval=itex2MML_copy_string("⊟"); return MOL;}
|
|
594 |
"\\boxplus" | |
|
595 |
"\\plusb" {yylval=itex2MML_copy_string("⊞"); return MOL;}
|
|
596 |
"\\boxtimes" | |
|
597 |
"\\timesb" {yylval=itex2MML_copy_string("⊠"); return MOL;}
|
|
598 |
||
599 |
"\\sum" {yylval=itex2MML_copy_string("∑"); return MOB;}
|
|
600 |
||
601 |
"\\prod" | |
|
602 |
"\\product" {yylval=itex2MML_copy_string("∏"); return MOB;}
|
|
603 |
||
604 |
"\\coprod" | |
|
605 |
"\\coproduct" {yylval=itex2MML_copy_string("∐"); return MOB;}
|
|
606 |
||
607 |
"\\otimes" {yylval=itex2MML_copy_string("⊗"); return MOL;}
|
|
608 |
"\\Otimes" {yylval=itex2MML_copy_string("⨷"); return MOL;}
|
|
609 |
"\\bigotimes" {yylval=itex2MML_copy_string("⨂"); return MOL;}
|
|
610 |
||
611 |
||
612 |
"\\oplus" {yylval=itex2MML_copy_string("⊕"); return MOL;}
|
|
613 |
"\\Oplus" | |
|
614 |
"\\bigoplus" {yylval=itex2MML_copy_string("⨁"); return MOB;}
|
|
615 |
||
616 |
"\\bigodot" {yylval=itex2MML_copy_string("⨀"); return MOB;}
|
|
617 |
"\\bigsqcup" {yylval=itex2MML_copy_string("⨆"); return MOB;}
|
|
618 |
"\\bigsuplus" {yylval=itex2MML_copy_string("⨄"); return MOB;}
|
|
619 |
||
620 |
"\\wedge" {yylval=itex2MML_copy_string("∧"); return MOL;}
|
|
621 |
"\\Wedge" | |
|
622 |
"\\bigwedge" {yylval=itex2MML_copy_string("⋀"); return MOB;}
|
|
623 |
||
624 |
"\\Vee" | |
|
625 |
"\\bigvee" {yylval=itex2MML_copy_string("⋁"); return MOB;}
|
|
626 |
||
627 |
"\\frac" {return FRAC;}
|
|
628 |
"\\tfrac" {return TFRAC;}
|
|
629 |
||
630 |
"\\binom" {return BINOM;}
|
|
631 |
||
632 |
"\\tensor" {return TENSOR;}
|
|
633 |
||
634 |
"\\multiscripts" {return MULTI;}
|
|
635 |
||
636 |
"\\overbrace" {return OVERBRACE;}
|
|
637 |
||
638 |
"\\underbrace" {return UNDERBRACE;}
|
|
639 |
||
640 |
"\\bar" {return BAR;}
|
|
641 |
"\\overline" | |
|
642 |
"\\closure" | |
|
643 |
"\\widebar" {return WIDEBAR;}
|
|
644 |
||
645 |
"\\vec" {return VEC;}
|
|
646 |
"\\widevec" {return WIDEVEC;}
|
|
647 |
||
648 |
"\\dot" {return DOT;}
|
|
649 |
||
650 |
"\\ddot" {return DDOT;}
|
|
651 |
||
652 |
"\\tilde" {return TILDE;}
|
|
653 |
"\\widetilde" {return WIDETILDE;}
|
|
654 |
||
655 |
||
656 |
"\\check" {return CHECK;}
|
|
657 |
"\\widecheck" {return WIDECHECK;}
|
|
658 |
||
659 |
||
660 |
"\\hat" {return HAT;}
|
|
661 |
"\\widehat" {return WIDEHAT;}
|
|
662 |
||
663 |
"\\underset" {return UNDER;}
|
|
664 |
||
665 |
"\\stackrel" | |
|
666 |
"\\overset" {return OVER;}
|
|
667 |
||
668 |
"\\over" {return TEXOVER;}
|
|
669 |
||
670 |
"\\underoverset" {return UNDEROVER;}
|
|
671 |
||
672 |
"\\sqrt" {return SQRT;}
|
|
673 |
||
674 |
"\\root" {return ROOT;}
|
|
675 |
||
676 |
"\\space" {BEGIN(INT1); return SPACE;}
|
|
677 |
||
678 |
"\\text" {BEGIN(PLAINTEXT); return TEXTBOX;}
|
|
679 |
||
680 |
"\\statusline" {BEGIN(PLAINTEXT); return STATLINE;}
|
|
681 |
||
682 |
"\\toggle" {return TOGGLE;}
|
|
683 |
||
684 |
"\\fghilight" | |
|
685 |
"\\fghighlight" {BEGIN(ATTRIBUTELIST); return FGHIGHLIGHT;}
|
|
686 |
||
687 |
"\\bghilight" | |
|
688 |
"\\bghighlight" {BEGIN(ATTRIBUTELIST); return BGHIGHLIGHT;}
|
|
689 |
||
690 |
"\\color" {BEGIN(ATTRIBUTELIST); return COLOR;}
|
|
691 |
"\\bgcolor" {BEGIN(ATTRIBUTELIST); return BGCOLOR;}
|
|
692 |
||
693 |
"\\displaystyle" {itex2MML_rowposn=2; return DISPLAY;}
|
|
694 |
||
695 |
"\\textstyle" {itex2MML_rowposn=2; return TEXTSTY;}
|
|
696 |
||
697 |
"\\textsize" {return TEXTSIZE;}
|
|
698 |
||
699 |
"\\scriptsize" {return SCSIZE;}
|
|
700 |
||
701 |
"\\scriptscriptsize" {return SCSCSIZE;}
|
|
702 |
||
703 |
"\\mathit" {return ITALICS;}
|
|
704 |
||
705 |
"\\mathbf" {return BOLD;}
|
|
706 |
||
707 |
"\\mathrm" {BEGIN(ROMAN); return RM;}
|
|
708 |
||
709 |
"\\mathbb" {BEGIN(BBOLD); return BB;}
|
|
710 |
||
711 |
"\\mathfrak" | |
|
712 |
"\\mathfr" {BEGIN(FRAKTUR); return FRAK;}
|
|
713 |
||
714 |
"\\mathcal" {BEGIN(CALLIGRAPHIC); return CAL;}
|
|
715 |
||
716 |
"\\begin" {BEGIN(MATHENV); return BEGINENV;}
|
|
717 |
"\\end" {BEGIN(MATHENV); return ENDENV;}
|
|
718 |
||
719 |
"\\substack" {return SUBSTACK;}
|
|
720 |
||
721 |
"\\array" {return ARRAY;}
|
|
722 |
||
723 |
"\\arrayopts" {return ARRAYOPTS;}
|
|
724 |
||
725 |
"\\colalign" {BEGIN(ATTRIBUTELIST); return COLALIGN;}
|
|
726 |
||
727 |
"\\collayout" {BEGIN(ATTRIBUTELIST); return COLLAYOUT;}
|
|
728 |
||
729 |
"\\rowalign" {BEGIN(ATTRIBUTELIST); return ROWALIGN;}
|
|
730 |
||
731 |
"\\align" {BEGIN(ATTRIBUTELIST); return ALIGN;}
|
|
732 |
||
733 |
"\\equalrows" {BEGIN(ATTRIBUTELIST); return EQROWS;}
|
|
734 |
||
735 |
"\\equalcols" {BEGIN(ATTRIBUTELIST); return EQCOLS;}
|
|
736 |
||
737 |
"\\rowlines" {BEGIN(ATTRIBUTELIST); return ROWLINES;}
|
|
738 |
||
739 |
"\\collines" {BEGIN(ATTRIBUTELIST); return COLLINES;}
|
|
740 |
||
741 |
"\\frame" {BEGIN(ATTRIBUTELIST); return FRAME;}
|
|
742 |
||
743 |
"\\padding" {BEGIN(ATTRIBUTELIST); return PADDING;}
|
|
744 |
||
745 |
"\\rowopts" {return ROWOPTS;}
|
|
746 |
||
747 |
"\\cellopts" {return CELLOPTS;}
|
|
748 |
||
749 |
"\\rowspan" {BEGIN(ATTRIBUTELIST); return ROWSPAN;}
|
|
750 |
||
751 |
"\\colspan" {BEGIN(ATTRIBUTELIST); return COLSPAN;}
|
|
752 |
||
753 |
||
754 |
"\\," | |
|
755 |
"\\thinspace" {return THINSPACE;}
|
|
756 |
||
757 |
"\\:" | |
|
758 |
"\\medspace" {return MEDSPACE;}
|
|
759 |
||
760 |
"\\;" | |
|
761 |
"\\thickspace" {return THICKSPACE;}
|
|
762 |
||
763 |
"\\quad" {return QUAD;}
|
|
764 |
"\\qquad" {return QQUAD;}
|
|
765 |
||
766 |
"\\!" | |
|
767 |
"\\negspace" {return NEGSPACE;}
|
|
768 |
||
769 |
"\\phantom" {return PHANTOM;}
|
|
770 |
||
771 |
"\\href" {BEGIN(PLAINTEXT); return HREF;}
|
|
772 |
||
773 |
||
774 |
"\\mathop" {BEGIN(PLAINTEXT); return MATHOP;}
|
|
775 |
||
776 |
"\\"[a-zA-Z]+ {yylval=itex2MML_copy_string(yytext+1); return MOP;}
|
|
777 |
||
778 |
"\&"[a-zA-Z_][a-zA-Z0-9_]*";" | |
|
779 |
"\&#"[0-9]+";" | |
|
780 |
"\&#x"[a-fA-F0-9]+";" {yylval=itex2MML_copy_string(yytext); return MI;}
|
|
781 |
||
782 |
"\n" itex2MML_lineno++; |
|
783 |
[\t ]+ ; |
|
784 |
||
785 |
||
786 |
. {return UNKNOWNCHAR;}
|
|
787 |
} |
|
788 |
||
789 |
<ATTRIBUTELIST>"{"[ \t\n\r #a-zA-Z0-9.\-]*"}" {BEGIN(MATH); yylval=itex2MML_copy_string(yytext); if (yylval != itex2MML_empty_string) { yylval[0]='"'; yylval[yyleng-1]='"'; } return ATTRLIST;}
|
|
790 |
||
791 |
<MATHENV>{
|
|
792 |
"\{matrix\}" {BEGIN(MATH); return MATRIX;}
|
|
793 |
"\{pmatrix\}" {BEGIN(MATH); return PMATRIX;}
|
|
794 |
"\{bmatrix\}" {BEGIN(MATH); return BMATRIX;}
|
|
795 |
"\{Bmatrix\}" {BEGIN(MATH); return BBMATRIX;}
|
|
796 |
"\{vmatrix\}" {BEGIN(MATH); return VMATRIX;}
|
|
797 |
"\{Vmatrix\}" {BEGIN(MATH); return VVMATRIX;}
|
|
798 |
"\{smallmatrix\}" {BEGIN(MATH); return SMALLMATRIX;}
|
|
799 |
"\{cases\}" {BEGIN(MATH); return CASES;}
|
|
800 |
"\{aligned\}" {BEGIN(MATH); return ALIGNED;}
|
|
801 |
} |
|
802 |
||
803 |
<ROMAN>{
|
|
804 |
"\{" {return ST;}
|
|
805 |
"\}" {BEGIN(MATH); return END;}
|
|
806 |
[a-zA-Z] {yylval=itex2MML_copy_string(yytext); return RMCHAR;}
|
|
807 |
[\t\n\r ]+ ; |
|
808 |
. {return yytext[0];}
|
|
809 |
} |
|
810 |
||
811 |
<BBOLD>{
|
|
812 |
"\{" {return ST;}
|
|
813 |
"\}" {BEGIN(MATH); return END;}
|
|
814 |
[a-z] {yylval=itex2MML_copy_string(yytext); return BBLOWERCHAR;}
|
|
815 |
[A-Z] {yylval=itex2MML_copy_string(yytext); return BBUPPERCHAR;}
|
|
816 |
[\t\n\r ]+ ; |
|
817 |
. {return yytext[0];}
|
|
818 |
} |
|
819 |
||
820 |
<CALLIGRAPHIC>{
|
|
821 |
"\{" {return ST;}
|
|
822 |
"\}" {BEGIN(MATH); return END;}
|
|
823 |
[a-zA-Z] {yylval=itex2MML_copy_string(yytext); return CALCHAR;}
|
|
824 |
[\t\n\r ]+ ; |
|
825 |
. {return yytext[0];}
|
|
826 |
} |
|
827 |
||
828 |
<FRAKTUR>{
|
|
829 |
"\{" {return ST;}
|
|
830 |
"\}" {BEGIN(MATH); return END;}
|
|
831 |
[a-zA-Z] {yylval=itex2MML_copy_string(yytext); return FRAKCHAR;}
|
|
832 |
[\t\n\r ]+ ; |
|
833 |
. {return yytext[0];}
|
|
834 |
} |
|
835 |
||
836 |
<PLAINTEXT>{
|
|
837 |
\{[^\}]*\} {yylval=itex2MML_copy_string(yytext+1); if ((yyleng > 1) && (yylval != itex2MML_empty_string)) yylval[yyleng-2]='\0'; BEGIN(MATH); return TEXTSTRING;}
|
|
838 |
} |
|
839 |
||
840 |
<INT1>{
|
|
841 |
"\{" {return ST;}
|
|
842 |
"\}" {BEGIN(INT2); return END;}
|
|
843 |
[0-9]+ {yylval=itex2MML_copy_string_extra(yytext, 1); if (yyleng && (yylval != itex2MML_empty_string)) { yylval[yyleng]=yylval[yyleng-1]; yylval[yyleng-1]='.'; yylval[yyleng+1]='\0'; } return INTONE;}
|
|
844 |
[\t\n\r ]+ ; |
|
845 |
. {return yytext[0];}
|
|
846 |
} |
|
847 |
||
848 |
<INT2>{
|
|
849 |
"\{" {return ST;}
|
|
850 |
"\}" {BEGIN(INT3); return END;}
|
|
851 |
[0-9]+ {yylval=itex2MML_copy_string_extra(yytext, 1); if (yyleng && (yylval != itex2MML_empty_string)) { yylval[yyleng]=yylval[yyleng-1]; yylval[yyleng-1]='.'; yylval[yyleng+1]='\0'; } return INTTWO;}
|
|
852 |
[\t\n\r ]+ ; |
|
853 |
. {return yytext[0];}
|
|
854 |
} |
|
855 |
||
856 |
<INT3>{
|
|
857 |
"\{" {return ST;}
|
|
858 |
"\}" {BEGIN(MATH); return END;}
|
|
859 |
[0-9]+ {yylval=itex2MML_copy_string_extra(yytext, 1); if (yyleng && (yylval != itex2MML_empty_string)) { yylval[yyleng]=yylval[yyleng-1]; yylval[yyleng-1]='.'; yylval[yyleng+1]='\0'; } return INTTHREE;}
|
|
860 |
[\t\n\r ]+ ; |
|
861 |
. {return yytext[0];}
|
|
862 |
} |
|
863 |
||
864 |
||
865 |
||
866 |
%% |
|
867 |
||
868 |
void itex2MML_restart () |
|
869 |
{
|
|
870 |
BEGIN(INITIAL); |
|
871 |
} |
|
872 |
||
873 |
static const char * s_itex2MML_buffer = 0; |
|
874 |
static unsigned long s_itex2MML_length = 0; |
|
875 |
||
876 |
void itex2MML_setup (const char * buffer, unsigned long length) |
|
877 |
{
|
|
878 |
yy_flush_buffer( YY_CURRENT_BUFFER ); |
|
879 |
||
880 |
s_itex2MML_buffer = buffer; |
|
881 |
s_itex2MML_length = length; |
|
882 |
} |
|
883 |
||
884 |
static int s_itex2MML_read (char * buffer, int max_size) |
|
885 |
{
|
|
886 |
int result = 0; |
|
887 |
||
888 |
if (max_size < s_itex2MML_length) |
|
889 |
{
|
|
890 |
result = max_size; |
|
891 |
||
892 |
memcpy (buffer, s_itex2MML_buffer, max_size); |
|
893 |
||
894 |
s_itex2MML_buffer += max_size; |
|
895 |
s_itex2MML_length -= max_size; |
|
896 |
} |
|
897 |
else |
|
898 |
{
|
|
899 |
result = s_itex2MML_length; |
|
900 |
||
901 |
memcpy (buffer, s_itex2MML_buffer, s_itex2MML_length); |
|
902 |
||
903 |
s_itex2MML_buffer = 0; |
|
904 |
s_itex2MML_length = 0; |
|
905 |
} |
|
906 |
return result; |
|
907 |
} |