/itexToMML

To download this project, use:
bzr branch http://golem.ph.utexas.edu/~distler/code/itexToMML/

« back to all changes in this revision

Viewing changes to itex-src/itex2MML.l

  • Committer: Jacques Distler
  • Date: 2007-01-11 07:17:18 UTC
  • Revision ID: distler@golem.ph.utexas.edu-20070111071718-3azxrr5b29d00h26
Initial commit.

Show diffs side-by-side

added added

removed removed

 
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
}