/itexToMML

To download this project, use:
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
"&amp;" |
80
"&"         {itex2MML_rowposn=2; return COLSEP;}
81
82
"\\&"           {yylval=itex2MML_copy_string("&amp;"); 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("&infin;"); 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("&VerticalBar;"); return OTHERDELIM;}
108
"\\Vert" |
109
"\\|"           {yylval=itex2MML_copy_string("&DoubleVerticalBar;"); return OTHERDELIM;}
110
111
"\\setminus"   {yylval=itex2MML_copy_string("&setminus;"); return MO;}
112
"\\backslash"   {yylval=itex2MML_copy_string("&bsol;"); return MO;}
113
"\\smallsetminus"   {yylval=itex2MML_copy_string("&#xFE68;"); 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("&minus;"); 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("&#x03D5;"); return MI;}
179
"\\varphi"  {yylval=itex2MML_copy_string("&#x03C6;"); 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("&oscr;"); return MI;}
216
217
"\\epsilon"  {yylval=itex2MML_copy_string("&epsi;"); return MI;}
218
219
"\\cdot"   {yylval=itex2MML_copy_string("&sdot;"); 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("&Upsi;"); return MI;}
246
247
"\\iff" |
248
"\\Longleftrightarrow"  {yylval=itex2MML_copy_string("&iff;"); return MOL;}
249
250
"\\Leftrightarrow"  {yylval=itex2MML_copy_string("&Leftrightarrow;"); return MOL;}
251
252
"\\impliedby" |
253
"\\Leftarrow"   {yylval=itex2MML_copy_string("&Leftarrow;"); return MOL;}
254
255
"\\implies" |
256
"\\Rightarrow"   {yylval=itex2MML_copy_string("&Rightarrow;"); return MOL;}
257
258
"\\hookleftarrow" {yylval=itex2MML_copy_string("&hookleftarrow;"); return MOL;}
259
260
"\\embedsin" |
261
"\\hookrightarrow"  {yylval=itex2MML_copy_string("&hookrightarrow;"); return MOL;}
262
263
"\\longleftarrow"   {yylval=itex2MML_copy_string("&longleftarrow;"); return MOL;}
264
265
"\\longrightarrow"  {yylval=itex2MML_copy_string("&longrightarrow;"); return MOL;}
266
267
"\\leftarrow"   {yylval=itex2MML_copy_string("&leftarrow;"); return MOL;}
268
269
"\\to"    |
270
"\\rightarrow"  {yylval=itex2MML_copy_string("&rightarrow;"); return MOL;}
271
272
"\\leftrightarrow"  {yylval=itex2MML_copy_string("&leftrightarrow;"); return MOL;}
273
274
"\\mapsto"  |
275
"\\map"       {yylval=itex2MML_copy_string("&map;"); return MOL;}
276
277
"\\nearrow" |
278
"\\nearr"    {yylval=itex2MML_copy_string("&nearr;"); return MOL;}
279
280
"\\nwarrow" |
281
"\\nwarr"     {yylval=itex2MML_copy_string("&nwarr;"); return MOL;}
282
283
"\\searrow" |
284
"\\searr"     {yylval=itex2MML_copy_string("&searr;"); return MOL;}
285
286
"\\swarrow" |
287
"\\swarr"     {yylval=itex2MML_copy_string("&swarr;"); return MOL;}
288
289
"\\neArrow" |
290
"\\neArr"    {yylval=itex2MML_copy_string("&neArr;"); return MOL;}
291
292
"\\nwArrow" |
293
"\\nwArr"     {yylval=itex2MML_copy_string("&nwArr;"); return MOL;}
294
295
"\\seArrow" |
296
"\\seArr"     {yylval=itex2MML_copy_string("&seArr;"); return MOL;}
297
298
"\\swArrow" |
299
"\\swArr"     {yylval=itex2MML_copy_string("&swArr;"); return MOL;}
300
301
"\\darr"     {yylval=itex2MML_copy_string("&darr;"); return MOL;}
302
303
"\\Downarrow" {yylval=itex2MML_copy_string("&dArr;"); return MOL;}
304
305
"\\uparr"    {yylval=itex2MML_copy_string("&uarr;"); return MOL;}
306
307
"\\Uparrow" {yylval=itex2MML_copy_string("&uArr;"); return MOL;}
308
309
"\\downuparrow" |
310
"\\duparr" |
311
"\\updarr"  {yylval=itex2MML_copy_string("&updownarrow;"); return MOL;}
312
313
"\\Updownarrow"  {yylval=itex2MML_copy_string("&Updownarrow;"); return MOL;}
314
315
"\\dots" |
316
"\\ldots"  {yylval=itex2MML_copy_string("&hellip;"); return MO;}
317
"\\cdots"   {yylval=itex2MML_copy_string("&ctdot;"); return MO;}
318
"\\ddots"   {yylval=itex2MML_copy_string("&dtdot;"); return MO;}
319
"\\udots"   {yylval=itex2MML_copy_string("&utdot;"); return MO;}
320
"\\vdots"   {yylval=itex2MML_copy_string("&vellip;"); return MO;}
321
322
"\\cup"  |
323
"\&union;" |
324
"\\union"          {yylval=itex2MML_copy_string("&cup;"); return MOL;}
325
326
"\\bigcup" |
327
"\\Union"  |
328
"\&Union;"      {yylval=itex2MML_copy_string("&Union;"); return MOB;}
329
330
"\\cap"  |
331
"\\intersection"          {yylval=itex2MML_copy_string("&cap;"); return MOL;}
332
333
"\\bigcap" |
334
"\\Intersection"       {yylval=itex2MML_copy_string("&Intersection;"); return MOB;}
335
336
"\\in"           {yylval=itex2MML_copy_string("&Element;"); 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("&square;"); return MOL;}
538
"\\emptyset" |
539
"\\empty" {yylval=itex2MML_copy_string("&emptyv;"); return MI;}
540
"\\exists" {yylval=itex2MML_copy_string("&Exists;"); return MOL;}
541
"\\circ" {yylval=itex2MML_copy_string("&SmallCircle;"); return MOL;}
542
"\\rhd" {yylval=itex2MML_copy_string("&RightTriangle;"); return MOL;}
543
"\\lhd" {yylval=itex2MML_copy_string("&LeftTriangle;"); return MOL;}
544
"\\lll" {yylval=itex2MML_copy_string("&Ll;"); return MOL;}
545
"\\unrhd" {yylval=itex2MML_copy_string("&RightTriangleEqual;"); return MOL;}
546
"\\unlhd" {yylval=itex2MML_copy_string("&LeftTriangleEqual;"); return MOL;}
547
"\\Del" |
548
"\\nabla" {yylval=itex2MML_copy_string("&Del;"); return MOL;}
549
"\\sphericalangle" {yylval=itex2MML_copy_string("&angsph;"); return MOL;}
550
551
"\\heartsuit" {yylval=itex2MML_copy_string("&#x2661;"); return MOL;}
552
"\\diamondsuit" {yylval=itex2MML_copy_string("&#x2662;"); return MOL;}
553
554
"\\partial" {yylval=itex2MML_copy_string("&PartialD;"); return MOL;}
555
556
"\\qed" {yylval=itex2MML_copy_string("&squf;"); return MO;}
557
558
"\\mod" {yylval=itex2MML_copy_string("mod"); return MOS;}
559
"\\pmod" {return PMOD;}
560
561
"\\bottom" {yylval=itex2MML_copy_string("&perp;"); return MOL;}
562
563
"\\neg" {yylval=itex2MML_copy_string("&not;"); return MOL;}
564
565
"\\neq" |
566
"\\ne"   {yylval=itex2MML_copy_string("&ne;"); return MOL;}
567
568
"\\shortmid" |
569
"\\mid"  {yylval=itex2MML_copy_string("&VerticalBar;"); return MOS;}
570
571
"\\int"    |
572
"\\integral"     {yylval=itex2MML_copy_string("&Integral;"); return MOL;}
573
574
"\\iint"   |
575
"\\doubleintegral" {yylval=itex2MML_copy_string("&Int;"); return MOL;}
576
577
"\\iiint"   |
578
"\\tripleintegral" {yylval=itex2MML_copy_string("&tint;"); return MOL;}
579
580
"\\iiiint"   |
581
"\\quadrupleintegral" {yylval=itex2MML_copy_string("&qint;"); return MOL;}
582
583
"\\oint"    |
584
"\\conint"  |
585
"\\contourintegral"   {yylval=itex2MML_copy_string("&conint;"); return MOL;}
586
587
"\\times"   {yylval=itex2MML_copy_string("&times;"); return MOL;}
588
"\\star"   {yylval=itex2MML_copy_string("&sstarf;"); return MOL;}
589
"\\circleddash" |
590
"\\odash"   {yylval=itex2MML_copy_string("&odash;"); return MOL;}
591
592
"\\boxminus" |
593
"\\minusb"   {yylval=itex2MML_copy_string("&boxminus;"); return MOL;}
594
"\\boxplus" |
595
"\\plusb"   {yylval=itex2MML_copy_string("&boxplus;"); return MOL;}
596
"\\boxtimes" |
597
"\\timesb"   {yylval=itex2MML_copy_string("&boxtimes;"); return MOL;}
598
599
"\\sum"          {yylval=itex2MML_copy_string("&Sum;"); return MOB;}
600
601
"\\prod" |
602
"\\product"      {yylval=itex2MML_copy_string("&prod;"); return MOB;}
603
604
"\\coprod"  |
605
"\\coproduct"    {yylval=itex2MML_copy_string("&coprod;"); return MOB;}
606
607
"\\otimes"       {yylval=itex2MML_copy_string("&otimes;"); return MOL;}
608
"\\Otimes"       {yylval=itex2MML_copy_string("&Otimes;"); return MOL;}
609
"\\bigotimes"     {yylval=itex2MML_copy_string("&bigotimes;"); return MOL;}
610
611
612
"\\oplus"       {yylval=itex2MML_copy_string("&oplus;"); return MOL;}
613
"\\Oplus"   |
614
"\\bigoplus"    {yylval=itex2MML_copy_string("&bigoplus;"); return MOB;}
615
616
"\\bigodot"    {yylval=itex2MML_copy_string("&bigodot;"); return MOB;}
617
"\\bigsqcup"    {yylval=itex2MML_copy_string("&bigsqcup;"); return MOB;}
618
"\\bigsuplus"    {yylval=itex2MML_copy_string("&biguplus;"); return MOB;}
619
620
"\\wedge"       {yylval=itex2MML_copy_string("&wedge;"); return MOL;}
621
"\\Wedge"  |
622
"\\bigwedge"       {yylval=itex2MML_copy_string("&xwedge;"); return MOB;}
623
624
"\\Vee"  |
625
"\\bigvee"       {yylval=itex2MML_copy_string("&bigvee;"); 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
}