/itexToMML

To download this project, use:
bzr branch http://golem.ph.utexas.edu/~distler/code/itexToMML/
46 by Jacques Distler
itex2MML 1.3.22: New License
1
/*             itex2MML 1.3.22
2
 *   itex2MML.l last modified 4/18/2010
1 by Jacques Distler
Initial commit.
3
 */
4
5
%{
6
%}
7
%option noyywrap
22 by Jacques Distler
SVG Environment
8
%x MATH ATTRIBUTELIST BBOLD FRAKTUR CALLIGRAPHIC ROMAN PLAINTEXT INT1 INT2 INT3 MATHENV SVGENV
1 by Jacques Distler
Initial commit.
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
18 by Jacques Distler
Minor Tweaks
50
1 by Jacques Distler
Initial commit.
51
"^"            return SUP;
52
"_"            return SUB; 
53
"{"[\t\r\n ]*"}"   return EMPTYMROW;
54
"{"            {itex2MML_rowposn = 2; return MROWOPEN;}
55
"}"            return MROWCLOSE;
56
57
"\\left"       itex2MML_rowposn=2; return LEFT;
58
"\\right"      return RIGHT;
59
60
"\\big"   |
61
"\\bigr"  {return BIG;}
62
"\\Big"   |
63
"\\Bigr"  {return BBIG;}
64
"\\bigg"  |
65
"\\biggr" {return BIGG;}
66
"\\Bigg"  |
67
"\\Biggr" {return BBIGG;}
68
69
"\\bigl"  {return BIGL;}
70
"\\Bigl"  {return BBIGL;}
71
"\\biggl" {return BIGGL;}
72
"\\Biggl" {return BBIGGL;}
73
37 by Jacques Distler
itex2MML 1.3.13
74
"\\mathrlap"  {return RLAP;}
75
"\\mathllap"  {return LLAP;}
76
"\\mathclap"  {return CLAP;}
77
"\\rlap" |
1 by Jacques Distler
Initial commit.
78
"\\llap" |
79
"\\ulap" |
80
"\\dlap"               {/* Ignore */ ;}
81
82
83
"&amp;" |
84
"&"         {itex2MML_rowposn=2; return COLSEP;}
85
86
"\\&"           {yylval=itex2MML_copy_string("&amp;"); return MI;}
87
88
"\\$"           {yylval=itex2MML_copy_string("$"); return MI;}
89
"\\%"           {yylval=itex2MML_copy_string("%"); return MI;}
90
91
"\\\\"          itex2MML_rowposn=2; return ROWSEP;
92
93
[a-zA-Z]+       {yylval=itex2MML_copy_string(yytext); return MI;}
94
34 by Jacques Distler
itex2MML 1.3.10
95
[0-9,.]*[0-9]+          {yylval=itex2MML_copy_string(yytext); return MN;}
1 by Jacques Distler
Initial commit.
96
"\\infty"   |
97
"\\infinity"     {yylval=itex2MML_copy_string("&infin;"); return MN;}
98
99
"("   |
100
"["             {yylval=itex2MML_copy_string(yytext); return LEFTDELIM;}
101
102
")"   |
103
"]"             {yylval=itex2MML_copy_string(yytext); return RIGHTDELIM;}
104
105
"\\lbrace" |
106
"\\{"           {yylval=itex2MML_copy_string("{"); return LEFTDELIM;}
107
"\\rbrace" |
108
"\\}"           {yylval=itex2MML_copy_string("}"); return RIGHTDELIM;}
109
110
"\\vert" |
111
"|"             {yylval=itex2MML_copy_string("&VerticalBar;"); return OTHERDELIM;}
112
"\\Vert" |
113
"\\|"           {yylval=itex2MML_copy_string("&DoubleVerticalBar;"); return OTHERDELIM;}
114
115
"\\setminus"   {yylval=itex2MML_copy_string("&setminus;"); return MO;}
116
"\\backslash"   {yylval=itex2MML_copy_string("&bsol;"); return MO;}
117
"\\smallsetminus"   {yylval=itex2MML_copy_string("&#xFE68;"); return MOF;}
118
30 by Jacques Distler
Version 1.3.6: \sslash
119
"\\sslash" {yylval=itex2MML_copy_string("&#x20EB;"); return MO;}
120
1 by Jacques Distler
Initial commit.
121
"\\lfloor" |
122
"\\lceil"  |
123
"\\lang"   |
124
"\\langle"      {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return LEFTDELIM;}
125
126
"\\rfloor" |
127
"\\rceil"  |
128
"\\rang"   |
129
"\\rangle"      {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return RIGHTDELIM;}
130
131
"/"             {yylval=itex2MML_copy_string(yytext); return OTHERDELIM;}
132
133
"\\uparrow"   |
134
"\\downarrow" |
135
"\\updownarrow" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return OTHERDELIM;}
136
137
"."             {yylval=itex2MML_copy_string(yytext); return PERIODDELIM;}
138
139
"-"    {if (itex2MML_rowposn==1) return UNARYMINUS; else {yylval=itex2MML_copy_string("&minus;"); return MO;}}
140
141
"+"    {if (itex2MML_rowposn==1) return UNARYPLUS; else {yylval=itex2MML_copy_string("+"); return MO;}}
142
17 by Jacques Distler
itex2MML 1.2.3
143
"\\#" {yylval=itex2MML_copy_string("#"); return MOL;}
144
1 by Jacques Distler
Initial commit.
145
","   |
146
":"   |
147
"!"   |
148
"="   |
149
"~"   |
150
";"   |
151
"?"   |
152
"#"   |
153
"`"   |
154
"*"        {yylval=itex2MML_copy_string(yytext); return MOL;}
155
18 by Jacques Distler
Minor Tweaks
156
"\\prime"  {yylval=itex2MML_copy_string("&prime;"); return MOLL;}
12 by Jacques Distler
Fixed TeX primes.
157
"'"        {yylval=itex2MML_copy_string("&prime;"); return MOL;}
158
"''"     {yylval=itex2MML_copy_string("&Prime;"); return MOL;}
159
"'''"  {yylval=itex2MML_copy_string("&#8244;"); return MOL;}
15 by Jacques Distler
Quadruple Prime
160
"''''"  {yylval=itex2MML_copy_string("&#8279;"); return MOL;}
12 by Jacques Distler
Fixed TeX primes.
161
1 by Jacques Distler
Initial commit.
162
"\\alpha"   |
163
"\\beta" |
164
"\\gamma" |
165
"\\delta" |
166
"\\zeta" |
167
"\\eta"  |
168
"\\theta" |
169
"\\iota"  |
170
"\\kappa" |
171
"\\lambda" |
172
"\\mu"     |
173
"\\nu"    |
174
"\\xi"   |
175
"\\pi"     |
176
"\\rho"   |
177
"\\sigma"  |
178
"\\tau"   |
179
"\\upsilon" |
180
"\\chi"  |
181
"\\psi"  |
182
"\\omega" |
183
"\\backepsilon"   |
184
"\\varkappa" |
185
"\\varpi" |
186
"\\varrho" |
187
"\\varsigma" |
188
"\\vartheta"      {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
189
41 by Jacques Distler
itex2MML 1.3.17
190
"\\varepsilon" {yylval=itex2MML_copy_string("&#x03B5;"); return MI;}
1 by Jacques Distler
Initial commit.
191
"\\phi"  {yylval=itex2MML_copy_string("&#x03D5;"); return MI;}
192
"\\varphi"  {yylval=itex2MML_copy_string("&#x03C6;"); return MI;}
193
194
"\\arccos"  |
195
"\\arcsin"  |
196
"\\arctan"  |
197
"\\arg"     |
198
"\\cos"     |
199
"\\cosh"    |
200
"\\cot"     |
201
"\\coth"    |
202
"\\csc"     |
203
"\\deg"     |
204
"\\dim"     |
205
"\\exp"     |
206
"\\hom"     |
207
"\\ker"     |
208
"\\lg"      |
209
"\\ln"      |
210
"\\log"     |
211
"\\sec"     |
212
"\\sin"     |
213
"\\sinh"    |
214
"\\tan"     |
215
"\\tanh"    {yylval=itex2MML_copy_string(yytext+1); return MI;}
216
217
"\\det"     |
218
"\\gcd"     |
219
"\\inf"     |
220
"\\lim"     |
221
"\\liminf"  |
222
"\\limsup"  |
223
"\\max"     |
224
"\\min"     |
225
"\\Pr"      |
226
"\\sup"    {yylval=itex2MML_copy_string(yytext+1); return MIB;}
227
228
"\\omicron"  {yylval=itex2MML_copy_string("&oscr;"); return MI;}
229
230
"\\epsilon"  {yylval=itex2MML_copy_string("&epsi;"); return MI;}
231
232
"\\cdot"   {yylval=itex2MML_copy_string("&sdot;"); return MO;}
233
234
"\\Alpha"   |
235
"\\Beta" |
236
"\\Delta"  |
237
"\\Gamma"  |
238
"\\digamma"  |
239
"\\Lambda" |
240
"\\Pi"     |
241
"\\Phi"    |
242
"\\Psi"    |
243
"\\Sigma"  |
244
"\\Theta"  |
245
"\\Xi"     |
246
"\\Zeta" |
247
"\\Eta"  |
248
"\\Iota"  |
249
"\\Kappa" |
250
"\\Mu"     |
251
"\\Nu"    |
252
"\\Rho"   |
253
"\\Tau"  | 
254
"\\mho"  | 
255
"\\Omega"     {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
256
257
"\\Upsilon" |
258
"\\Upsi" {yylval=itex2MML_copy_string("&Upsi;"); return MI;}
259
260
"\\iff" |
261
"\\Longleftrightarrow"  {yylval=itex2MML_copy_string("&iff;"); return MOL;}
262
263
"\\Leftrightarrow"  {yylval=itex2MML_copy_string("&Leftrightarrow;"); return MOL;}
264
265
"\\impliedby" |
266
"\\Leftarrow"   {yylval=itex2MML_copy_string("&Leftarrow;"); return MOL;}
267
268
"\\implies" |
269
"\\Rightarrow"   {yylval=itex2MML_copy_string("&Rightarrow;"); return MOL;}
270
271
"\\hookleftarrow" {yylval=itex2MML_copy_string("&hookleftarrow;"); return MOL;}
272
273
"\\embedsin" |
274
"\\hookrightarrow"  {yylval=itex2MML_copy_string("&hookrightarrow;"); return MOL;}
275
276
"\\longleftarrow"   {yylval=itex2MML_copy_string("&longleftarrow;"); return MOL;}
277
278
"\\longrightarrow"  {yylval=itex2MML_copy_string("&longrightarrow;"); return MOL;}
279
280
"\\leftarrow"   {yylval=itex2MML_copy_string("&leftarrow;"); return MOL;}
281
282
"\\to"    |
283
"\\rightarrow"  {yylval=itex2MML_copy_string("&rightarrow;"); return MOL;}
284
285
"\\leftrightarrow"  {yylval=itex2MML_copy_string("&leftrightarrow;"); return MOL;}
286
287
"\\mapsto"  |
288
"\\map"       {yylval=itex2MML_copy_string("&map;"); return MOL;}
289
290
"\\nearrow" |
291
"\\nearr"    {yylval=itex2MML_copy_string("&nearr;"); return MOL;}
292
293
"\\nwarrow" |
294
"\\nwarr"     {yylval=itex2MML_copy_string("&nwarr;"); return MOL;}
295
296
"\\searrow" |
297
"\\searr"     {yylval=itex2MML_copy_string("&searr;"); return MOL;}
298
299
"\\swarrow" |
300
"\\swarr"     {yylval=itex2MML_copy_string("&swarr;"); return MOL;}
301
302
"\\neArrow" |
303
"\\neArr"    {yylval=itex2MML_copy_string("&neArr;"); return MOL;}
304
305
"\\nwArrow" |
306
"\\nwArr"     {yylval=itex2MML_copy_string("&nwArr;"); return MOL;}
307
308
"\\seArrow" |
309
"\\seArr"     {yylval=itex2MML_copy_string("&seArr;"); return MOL;}
310
311
"\\swArrow" |
312
"\\swArr"     {yylval=itex2MML_copy_string("&swArr;"); return MOL;}
313
314
"\\darr"     {yylval=itex2MML_copy_string("&darr;"); return MOL;}
315
316
"\\Downarrow" {yylval=itex2MML_copy_string("&dArr;"); return MOL;}
317
318
"\\uparr"    {yylval=itex2MML_copy_string("&uarr;"); return MOL;}
319
320
"\\Uparrow" {yylval=itex2MML_copy_string("&uArr;"); return MOL;}
321
322
"\\downuparrow" |
323
"\\duparr" |
324
"\\updarr"  {yylval=itex2MML_copy_string("&updownarrow;"); return MOL;}
325
326
"\\Updownarrow"  {yylval=itex2MML_copy_string("&Updownarrow;"); return MOL;}
327
14 by Jacques Distler
itex2MML 1.2
328
"\\leftsquigarrow"       {yylval=itex2MML_copy_string("&#x21DC;"); return MOL;}
13 by Jacques Distler
itex2MML 1.2
329
"\\rightsquigarrow"      {yylval=itex2MML_copy_string("&zigrarr;"); return MOL;}
330
"\\dashleftarrow"        {yylval=itex2MML_copy_string("&#x290E;"); return MOL;}
331
"\\dashrightarrow"       {yylval=itex2MML_copy_string("&#x290F;"); return MOL;}
332
"\\curvearrowbotright"   {yylval=itex2MML_copy_string("&#x293B;"); return MOL;}
333
"\\righttoleftarrow"     {yylval=itex2MML_copy_string("&#x27F2;"); return MOL;}
334
"\\lefttorightarrow"     {yylval=itex2MML_copy_string("&#x27F3;"); return MOL;}
35 by Jacques Distler
itex2MML 1.3.11: A Quiverful of Arrows
335
"\\leftrightsquigarrow" |
336
"\\upuparrows"          |
337
"\\rightleftarrows"     |
338
"\\rightrightarrows"    |
339
"\\curvearrowleft"      |
340
"\\curvearrowright"     |
341
"\\downdownarrows"      |
342
"\\leftarrowtail"       |
343
"\\rightarrowtail"      |
344
"\\leftleftarrows"      |
345
"\\leftrightarrows"     |
346
"\\Lleftarrow"          |
347
"\\Rrightarrow"         |
348
"\\looparrowleft"       |
349
"\\looparrowright"      |
350
"\\Lsh"                 |
351
"\\Rsh"                 |
352
"\\circlearrowleft"     |
353
"\\circlearrowright"    |
354
"\\twoheadleftarrow"    |
355
"\\twoheadrightarrow"   |
356
"\\nLeftarrow"          |
357
"\\nleftarrow"          |
358
"\\nLeftrightarrow"     |
359
"\\nleftrightarrow"     |
360
"\\nRightarrow"         |
361
"\\nrightarrow"         |
362
"\\downharpoonleft"     |
363
"\\downharpoonright"    |
364
"\\leftrightharpoons"   |
365
"\\rightleftharpoons"   |
366
"\\upharpoonleft"       |
367
"\\upharpoonright"   {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MOL;}
368
13 by Jacques Distler
itex2MML 1.2
369
1 by Jacques Distler
Initial commit.
370
"\\dots" |
371
"\\ldots"  {yylval=itex2MML_copy_string("&hellip;"); return MO;}
372
"\\cdots"   {yylval=itex2MML_copy_string("&ctdot;"); return MO;}
373
"\\ddots"   {yylval=itex2MML_copy_string("&dtdot;"); return MO;}
374
"\\udots"   {yylval=itex2MML_copy_string("&utdot;"); return MO;}
375
"\\vdots"   {yylval=itex2MML_copy_string("&vellip;"); return MO;}
37 by Jacques Distler
itex2MML 1.3.13
376
"\\colon"   {yylval=itex2MML_copy_string("&colon;"); return MOR;}
1 by Jacques Distler
Initial commit.
377
378
"\\cup"  |
379
"\&union;" |
380
"\\union"          {yylval=itex2MML_copy_string("&cup;"); return MOL;}
381
382
"\\bigcup" |
383
"\\Union"  |
384
"\&Union;"      {yylval=itex2MML_copy_string("&Union;"); return MOB;}
385
386
"\\cap"  |
387
"\\intersection"          {yylval=itex2MML_copy_string("&cap;"); return MOL;}
388
389
"\\bigcap" |
390
"\\Intersection"       {yylval=itex2MML_copy_string("&Intersection;"); return MOB;}
391
392
"\\in"           {yylval=itex2MML_copy_string("&Element;"); return MOL;}
393
36 by Jacques Distler
itex2MML 1.3.12: \coloneqq and its cousins
394
 /* For some reason, Firefox does not put in the right spacing around some of these operators
395
  * unless we ask for it, explicitly.
396
  */
397
"\\coloneqq"     {yylval=itex2MML_copy_string("&colone;"); return MOL;}
398
"\\Coloneqq"     {yylval=itex2MML_copy_string("&Colone;"); return MOS;}
399
"\\coloneq"      {yylval=itex2MML_copy_string("&#x2236;&#x2212;"); return MOS;}
400
"\\Coloneq"      {yylval=itex2MML_copy_string("&#x2237;&#x2212;"); return MOS;}
401
"\\eqqcolon"     {yylval=itex2MML_copy_string("&ecolon;"); return MOS;}
402
"\\Eqqcolon"     {yylval=itex2MML_copy_string("&#x003d;&#x2237;"); return MOS;}
403
"\\eqcolon"      {yylval=itex2MML_copy_string("&#x2239;"); return MOS;}
404
"\\Eqcolon"      {yylval=itex2MML_copy_string("&#x2212;&#x2237;"); return MOS;}
405
"\\colonapprox"  {yylval=itex2MML_copy_string("&#x2236;&#x2248;"); return MOS;}
406
"\\Colonapprox"  {yylval=itex2MML_copy_string("&#x2237;&#x2248;"); return MOS;}
407
"\\colonsim"     {yylval=itex2MML_copy_string("&#x2236;&#x223C;"); return MOS;}
408
"\\Colonsim"     {yylval=itex2MML_copy_string("&#x2237;&#x223C;"); return MOS;}
409
"\\dblcolon"     {yylval=itex2MML_copy_string("&Colon;"); return MOL;}
410
46 by Jacques Distler
itex2MML 1.3.22: New License
411
"\\ast"  |
412
"\\Cap"  |
413
"\\Cup"  |
414
"\\circledast"  |
415
"\\circledcirc" |
416
"\\curlyvee"    |
417
"\\curlywedge"  |
418
"\\divideontimes" |
419
"\\dotplus" |
420
"\\leftthreetimes" |
421
"\\rightthreetimes" |
422
"\\veebar" |
1 by Jacques Distler
Initial commit.
423
"\\gt"   |
424
"\\lt"   |
425
"\\approxeq"   |
426
"\\backsim"   |
427
"\\backsimeq"   |
46 by Jacques Distler
itex2MML 1.3.22: New License
428
"\\barwedge"    |
429
"\\doublebarwedge" |
1 by Jacques Distler
Initial commit.
430
"\\subset"  |
431
"\\subseteq" |
432
"\\subseteqq" |
433
"\\subsetneq" |
434
"\\subsetneqq" |
435
"\\varsubsetneq" |
436
"\\varsubsetneqq" |
437
"\\prec"     |
438
"\\parallel"  |
439
"\\nparallel" |
440
"\\shortparallel" |
441
"\\nshortparallel" |
442
"\\perp"  |
443
"\\eqslantgtr" |
444
"\\eqslantless" |
445
"\\gg" |
446
"\\ggg" |
447
"\\geq" |
448
"\\geqq" |
449
"\\geqslant" |
450
"\\gneq" |
451
"\\gneqq" |
452
"\\gnapprox" |
453
"\\gnsim" |
454
"\\gtrapprox" |
455
"\\ge"  |
456
"\\le"  |
457
"\\leq" |
458
"\\leqq" |
459
"\\leqslant" |
460
"\\lessapprox" |
461
"\\lessdot" |
462
"\\lesseqgtr" |
463
"\\lesseqqgtr" |
464
"\\lessgtr" |
465
"\\lneq" |
466
"\\lneqq" |
467
"\\lnsim" |
468
"\\lvertneqq" |
469
"\\gtrsim" |
470
"\\gtrdot" |
471
"\\gtreqless" |
472
"\\gtreqqless" |
473
"\\gtrless" |
474
"\\gvertneqq" |
475
"\\lesssim" |
476
"\\lnapprox" |
477
"\\nsubset" |
478
"\\nsubseteq" |
479
"\\nsubseteqq" |
480
"\\notin" |
481
"\\ni" |
482
"\\notni" |
483
"\\nmid" |
484
"\\nshortmid" |
485
"\\preceq" |
486
"\\npreceq" |
487
"\\ll" |
488
"\\ngeq" |
489
"\\ngeqq" |
490
"\\ngeqslant" |
491
"\\nleq" |
492
"\\nleqq" |
493
"\\nleqslant" |
494
"\\nless" |
495
"\\supset" |
496
"\\supseteq" |
497
"\\supseteqq" |
498
"\\supsetneq" |
499
"\\supsetneqq" |
500
"\\varsupsetneq" |
501
"\\varsupsetneqq" |
502
"\\approx" |
503
"\\asymp" |
504
"\\bowtie" |
505
"\\dashv" |
506
"\\Vdash" |
507
"\\vDash" |
508
"\\VDash" |
509
"\\vdash" |
510
"\\Vvdash" |
511
"\\models" |
512
"\\sim" |
513
"\\simeq" |
514
"\\nsim" |
515
"\\smile" |
516
"\\triangle" |
517
"\\triangledown" |
518
"\\triangleleft" |
519
"\\cong" |
520
"\\succ" |
521
"\\nsucc" |
522
"\\ngtr" |
523
"\\nsupset" |
524
"\\nsupseteq" |
525
"\\propto" |
526
"\\equiv" |
24 by Jacques Distler
Another Symbol: \nequiv
527
"\\nequiv" |
1 by Jacques Distler
Initial commit.
528
"\\frown" |
529
"\\triangleright" |
530
"\\ncong" |
531
"\\succeq" |
532
"\\succapprox" |
533
"\\succnapprox" |
534
"\\succcurlyeq" |
535
"\\succsim" |
536
"\\succnsim" |
537
"\\nsucceq" |
538
"\\nvDash" |
539
"\\nvdash" |
540
"\\nVDash" |
541
"\\amalg" |
542
"\\pm" |
543
"\\mp" |
544
"\\bigcirc" |
545
"\\wr" |
546
"\\odot" |
547
"\\uplus" |
548
"\\clubsuit" |
549
"\\spadesuit" |
550
"\\Diamond" |
551
"\\diamond" |
552
"\\sqcup" |
553
"\\sqcap" |
554
"\\sqsubset" |
555
"\\sqsubseteq" |
556
"\\sqsupset" |
557
"\\sqsupseteq" |
558
"\\Subset" |
559
"\\Supset" |
560
"\\ltimes" |
561
"\\div" |
562
"\\rtimes" |
563
"\\bot" |
564
"\\therefore" |
565
"\\thickapprox" |
566
"\\thicksim" |
567
"\\varpropto" |
568
"\\varnothing" |
569
"\\flat" |
570
"\\vee" |
571
"\\because" |
572
"\\between" |
573
"\\Bumpeq" |
574
"\\bumpeq" |
575
"\\circeq" |
576
"\\curlyeqprec" |
577
"\\curlyeqsucc" |
578
"\\doteq" |
579
"\\doteqdot" |
580
"\\eqcirc" |
581
"\\fallingdotseq" |
582
"\\multimap" |
583
"\\pitchfork" |
584
"\\precapprox" |
585
"\\precnapprox" |
586
"\\preccurlyeq" |
587
"\\precsim" |
588
"\\precnsim" |
589
"\\risingdotseq" |
590
"\\sharp" |
591
"\\bullet" |
592
"\\nexists" |
593
"\\dagger" |
594
"\\ddagger" |
595
"\\not" |
596
"\\top" |
597
"\\natural" |
598
"\\angle" |
599
"\\measuredangle" |
600
"\\backprime" |
601
"\\bigstar" |
602
"\\blacklozenge" |
603
"\\lozenge" |
604
"\\blacksquare" |
605
"\\blacktriangle" |
46 by Jacques Distler
itex2MML 1.3.22: New License
606
"\\blacktriangleleft" |
607
"\\blacktriangleright" |
1 by Jacques Distler
Initial commit.
608
"\\blacktriangledown" |
46 by Jacques Distler
itex2MML 1.3.22: New License
609
"\\ntriangleleft" |
610
"\\ntriangleright" |
611
"\\ntrianglelefteq" |
612
"\\ntrianglerighteq" |
613
"\\trianglelefteq" |
614
"\\trianglerighteq" |
615
"\\triangleq" |
616
"\\vartriangleleft" |
617
"\\vartriangleright" |
1 by Jacques Distler
Initial commit.
618
"\\forall" |
619
"\\bigtriangleup" |
620
"\\bigtriangledown" |
621
"\\nprec"  {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MOL;}
622
623
"\\aleph" |
624
"\\beth" |
625
"\\eth" |
626
"\\ell" |
627
"\\hbar" |
628
"\\Im" |
629
"\\imath" |
630
"\\jmath" |
631
"\\wp" |
632
"\\Re" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
633
29 by Jacques Distler
itex2MML 1.3.5
634
"\\Perp" |
635
"\\Vbar" {yylval=itex2MML_copy_string("&Vbar;"); return MOL;}
46 by Jacques Distler
itex2MML 1.3.22: New License
636
"\\boxdot" {yylval=itex2MML_copy_string("&sdotb;"); return MOL;}
1 by Jacques Distler
Initial commit.
637
"\\Box" |
638
"\\square" {yylval=itex2MML_copy_string("&square;"); return MOL;}
639
"\\emptyset" |
640
"\\empty" {yylval=itex2MML_copy_string("&emptyv;"); return MI;}
641
"\\exists" {yylval=itex2MML_copy_string("&Exists;"); return MOL;}
642
"\\circ" {yylval=itex2MML_copy_string("&SmallCircle;"); return MOL;}
643
"\\rhd" {yylval=itex2MML_copy_string("&RightTriangle;"); return MOL;}
644
"\\lhd" {yylval=itex2MML_copy_string("&LeftTriangle;"); return MOL;}
645
"\\lll" {yylval=itex2MML_copy_string("&Ll;"); return MOL;}
646
"\\unrhd" {yylval=itex2MML_copy_string("&RightTriangleEqual;"); return MOL;}
647
"\\unlhd" {yylval=itex2MML_copy_string("&LeftTriangleEqual;"); return MOL;}
648
"\\Del" |
649
"\\nabla" {yylval=itex2MML_copy_string("&Del;"); return MOL;}
650
"\\sphericalangle" {yylval=itex2MML_copy_string("&angsph;"); return MOL;}
651
652
"\\heartsuit" {yylval=itex2MML_copy_string("&#x2661;"); return MOL;}
653
"\\diamondsuit" {yylval=itex2MML_copy_string("&#x2662;"); return MOL;}
654
655
"\\partial" {yylval=itex2MML_copy_string("&PartialD;"); return MOL;}
656
657
"\\qed" {yylval=itex2MML_copy_string("&squf;"); return MO;}
658
659
"\\mod" {yylval=itex2MML_copy_string("mod"); return MOS;}
660
"\\pmod" {return PMOD;}
661
662
"\\bottom" {yylval=itex2MML_copy_string("&perp;"); return MOL;}
663
664
"\\neg" {yylval=itex2MML_copy_string("&not;"); return MOL;}
665
666
"\\neq" |
667
"\\ne"   {yylval=itex2MML_copy_string("&ne;"); return MOL;}
668
669
"\\shortmid" |
670
"\\mid"  {yylval=itex2MML_copy_string("&VerticalBar;"); return MOS;}
671
672
"\\int"    |
673
"\\integral"     {yylval=itex2MML_copy_string("&Integral;"); return MOL;}
674
675
"\\iint"   |
676
"\\doubleintegral" {yylval=itex2MML_copy_string("&Int;"); return MOL;}
677
678
"\\iiint"   |
679
"\\tripleintegral" {yylval=itex2MML_copy_string("&tint;"); return MOL;}
680
681
"\\iiiint"   |
682
"\\quadrupleintegral" {yylval=itex2MML_copy_string("&qint;"); return MOL;}
683
684
"\\oint"    |
685
"\\conint"  |
686
"\\contourintegral"   {yylval=itex2MML_copy_string("&conint;"); return MOL;}
687
688
"\\times"   {yylval=itex2MML_copy_string("&times;"); return MOL;}
689
"\\star"   {yylval=itex2MML_copy_string("&sstarf;"); return MOL;}
690
"\\circleddash" |
691
"\\odash"   {yylval=itex2MML_copy_string("&odash;"); return MOL;}
692
46 by Jacques Distler
itex2MML 1.3.22: New License
693
"\\intercal"   {yylval=itex2MML_copy_string("&intcal;"); return MOL;}
694
"\\smallfrown"   {yylval=itex2MML_copy_string("&sfrown;"); return MOL;}
695
"\\smallsmile"   {yylval=itex2MML_copy_string("&ssmile;"); return MOL;}
696
1 by Jacques Distler
Initial commit.
697
"\\boxminus" |
698
"\\minusb"   {yylval=itex2MML_copy_string("&boxminus;"); return MOL;}
699
"\\boxplus" |
700
"\\plusb"   {yylval=itex2MML_copy_string("&boxplus;"); return MOL;}
701
"\\boxtimes" |
702
"\\timesb"   {yylval=itex2MML_copy_string("&boxtimes;"); return MOL;}
703
704
"\\sum"          {yylval=itex2MML_copy_string("&Sum;"); return MOB;}
705
706
"\\prod" |
707
"\\product"      {yylval=itex2MML_copy_string("&prod;"); return MOB;}
708
709
"\\coprod"  |
710
"\\coproduct"    {yylval=itex2MML_copy_string("&coprod;"); return MOB;}
711
712
"\\otimes"       {yylval=itex2MML_copy_string("&otimes;"); return MOL;}
713
"\\Otimes"       {yylval=itex2MML_copy_string("&Otimes;"); return MOL;}
714
"\\bigotimes"     {yylval=itex2MML_copy_string("&bigotimes;"); return MOL;}
715
46 by Jacques Distler
itex2MML 1.3.22: New License
716
"\\ominus"       {yylval=itex2MML_copy_string("&ominus;"); return MOL;}
717
"\\oslash"       {yylval=itex2MML_copy_string("&osol;"); return MOL;}
1 by Jacques Distler
Initial commit.
718
719
"\\oplus"       {yylval=itex2MML_copy_string("&oplus;"); return MOL;}
720
"\\Oplus"   |
721
"\\bigoplus"    {yylval=itex2MML_copy_string("&bigoplus;"); return MOB;}
722
723
"\\bigodot"    {yylval=itex2MML_copy_string("&bigodot;"); return MOB;}
724
"\\bigsqcup"    {yylval=itex2MML_copy_string("&bigsqcup;"); return MOB;}
20 by Jacques Distler
Typo Corrected (from Jason Blevins)
725
"\\biguplus"    {yylval=itex2MML_copy_string("&biguplus;"); return MOB;}
1 by Jacques Distler
Initial commit.
726
727
"\\wedge"       {yylval=itex2MML_copy_string("&wedge;"); return MOL;}
728
"\\Wedge"  |
729
"\\bigwedge"       {yylval=itex2MML_copy_string("&xwedge;"); return MOB;}
730
731
"\\Vee"  |
732
"\\bigvee"       {yylval=itex2MML_copy_string("&bigvee;"); return MOB;}
733
31 by Jacques Distler
itex2MML 1.3.7
734
"\\invamp"  |
735
"\\parr"       {yylval=itex2MML_copy_string("&#8523;"); return MOL;}
736
1 by Jacques Distler
Initial commit.
737
"\\frac"         {return FRAC;}
738
"\\tfrac"         {return TFRAC;}
739
740
"\\binom"        {return BINOM;}
741
742
"\\tensor"       {return TENSOR;}
743
744
"\\multiscripts" {return MULTI;}
745
746
"\\overbrace"     {return OVERBRACE;}
747
748
"\\underbrace"   {return UNDERBRACE;}
749
34 by Jacques Distler
itex2MML 1.3.10
750
"\\underline"   {return UNDERLINE;}
751
1 by Jacques Distler
Initial commit.
752
"\\bar"          {return BAR;}
753
"\\overline" |
754
"\\closure" |
755
"\\widebar"      {return WIDEBAR;}
756
757
"\\vec"       {return VEC;} 
758
"\\widevec"   {return WIDEVEC;}
759
760
"\\dot"       {return DOT;}
761
"\\ddot"      {return DDOT;}
38 by Jacques Distler
itex2MML 1.3.14: \dddot{} and \ddddot{}
762
"\\dddot"      {return DDDOT;}
763
"\\ddddot"      {return DDDDOT;}
1 by Jacques Distler
Initial commit.
764
765
"\\tilde"       {return TILDE;} 
766
"\\widetilde"   {return WIDETILDE;}
767
768
769
"\\check"       {return CHECK;} 
770
"\\widecheck"   {return WIDECHECK;}
771
772
773
"\\hat"       {return HAT;} 
774
"\\widehat"   {return WIDEHAT;}
775
776
"\\underset"     {return UNDER;}
777
778
"\\stackrel" |
779
"\\overset"      {return OVER;}
780
781
"\\over"         {return TEXOVER;}
21 by Jacques Distler
\binom
782
"\\atop"         {return TEXATOP;}
1 by Jacques Distler
Initial commit.
783
784
"\\underoverset"  {return UNDEROVER;}
785
786
"\\sqrt"         {return SQRT;}
787
788
"\\root"         {return ROOT;}
789
790
"\\space"        {BEGIN(INT1); return SPACE;}
791
792
"\\text"          {BEGIN(PLAINTEXT); return TEXTBOX;}
793
794
"\\statusline"    {BEGIN(PLAINTEXT); return STATLINE;}
40 by Jacques Distler
itex2MML 1.3.16: \tooltip{}{}
795
"\\tooltip"       {BEGIN(PLAINTEXT); return TOOLTIP;}
1 by Jacques Distler
Initial commit.
796
797
"\\toggle"        {return TOGGLE;}
798
799
"\\fghilight" |
800
"\\fghighlight"   {BEGIN(ATTRIBUTELIST); return FGHIGHLIGHT;}
801
802
"\\bghilight" |
803
"\\bghighlight"   {BEGIN(ATTRIBUTELIST); return BGHIGHLIGHT;}
804
805
"\\color"        {BEGIN(ATTRIBUTELIST); return COLOR;}
806
"\\bgcolor"        {BEGIN(ATTRIBUTELIST); return BGCOLOR;}
807
808
"\\displaystyle"  {itex2MML_rowposn=2; return DISPLAY;}
809
810
"\\textstyle"     {itex2MML_rowposn=2; return TEXTSTY;}
811
812
"\\textsize"     {return TEXTSIZE;}
813
814
"\\scriptsize"     {return SCSIZE;}
815
816
"\\scriptscriptsize"     {return SCSCSIZE;}
817
818
"\\mathit"       {return ITALICS;}
819
10 by Jacques Distler
Add \boldsymbol, for Tony Pantev.
820
"\\boldsymbol" |
1 by Jacques Distler
Initial commit.
821
"\\mathbf"       {return BOLD;}
822
823
"\\mathrm"       {BEGIN(ROMAN); return RM;}
824
825
"\\mathbb"       {BEGIN(BBOLD); return BB;}
826
827
"\\mathfrak" |
828
"\\mathfr"       {BEGIN(FRAKTUR); return FRAK;}
829
16 by Jacques Distler
Slashed letters
830
"\\slash"       {return SLASHED;}
831
1 by Jacques Distler
Initial commit.
832
"\\mathcal"       {BEGIN(CALLIGRAPHIC); return CAL;}
833
834
"\\begin"        {BEGIN(MATHENV); return BEGINENV;}
835
"\\end"        {BEGIN(MATHENV); return ENDENV;}
836
837
"\\substack"     {return SUBSTACK;}
838
839
"\\array"        {return ARRAY;}
840
841
"\\arrayopts"    {return ARRAYOPTS;}
842
843
"\\colalign"     {BEGIN(ATTRIBUTELIST); return COLALIGN;}
844
845
"\\collayout"   {BEGIN(ATTRIBUTELIST); return COLLAYOUT;}
846
847
"\\rowalign"     {BEGIN(ATTRIBUTELIST); return ROWALIGN;}
848
849
"\\align"     {BEGIN(ATTRIBUTELIST); return ALIGN;}
850
851
"\\equalrows"     {BEGIN(ATTRIBUTELIST); return EQROWS;}
852
853
"\\equalcols"     {BEGIN(ATTRIBUTELIST); return EQCOLS;}
854
855
"\\rowlines"     {BEGIN(ATTRIBUTELIST); return ROWLINES;}
856
857
"\\collines"     {BEGIN(ATTRIBUTELIST); return COLLINES;}
858
859
"\\frame"     {BEGIN(ATTRIBUTELIST); return FRAME;}
860
861
"\\padding"     {BEGIN(ATTRIBUTELIST); return PADDING;}
862
863
"\\rowopts"    {return ROWOPTS;}
864
865
"\\cellopts"   {return CELLOPTS;} 
866
867
"\\rowspan"     {BEGIN(ATTRIBUTELIST); return ROWSPAN;}
868
869
"\\colspan"     {BEGIN(ATTRIBUTELIST); return COLSPAN;}
870
871
872
"\\," |
873
"\\thinspace"   {return THINSPACE;}
874
875
"\\:" |
876
"\\medspace"    {return MEDSPACE;}
877
878
"\\;" |
879
"\\thickspace"  {return THICKSPACE;}
880
881
"\\quad"        {return QUAD;}
882
"\\qquad"       {return QQUAD;}
883
884
"\\!" |
885
"\\negspace"    {return NEGSPACE;}
886
887
"\\phantom"     {return PHANTOM;}
888
889
"\\href"        {BEGIN(PLAINTEXT); return HREF;}
890
39 by Jacques Distler
itex2MML 1.3.15: \mathrel and its cousins
891
"\\operatorname"  {BEGIN(PLAINTEXT); return OPERATORNAME;}
892
"\\mathop"        {BEGIN(PLAINTEXT); return MATHOP;}
893
"\\mathbin"       {BEGIN(PLAINTEXT); return MATHBIN;}
894
"\\mathrel"       {BEGIN(PLAINTEXT); return MATHREL;}
1 by Jacques Distler
Initial commit.
895
22 by Jacques Distler
SVG Environment
896
"\\includegraphics"(\[[^\]]*\])?\{[^}]*\}	;
897
1 by Jacques Distler
Initial commit.
898
"\\"[a-zA-Z]+    {yylval=itex2MML_copy_string(yytext+1); return MOP;}
899
900
"\&"[a-zA-Z_][a-zA-Z0-9_]*";" |
901
"\&#"[0-9]+";" |
902
"\&#x"[a-fA-F0-9]+";"  {yylval=itex2MML_copy_string(yytext); return MI;}
903
904
"\n"             itex2MML_lineno++;
40 by Jacques Distler
itex2MML 1.3.16: \tooltip{}{}
905
[\r\t ]+           ;
1 by Jacques Distler
Initial commit.
906
907
908
.              {return UNKNOWNCHAR;}
909
}
910
911
<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;}
912
913
<MATHENV>{
914
"\{matrix\}" {BEGIN(MATH); return MATRIX;}
915
"\{pmatrix\}" {BEGIN(MATH); return PMATRIX;}
916
"\{bmatrix\}" {BEGIN(MATH); return BMATRIX;}
917
"\{Bmatrix\}" {BEGIN(MATH); return BBMATRIX;}
918
"\{vmatrix\}" {BEGIN(MATH); return VMATRIX;}
919
"\{Vmatrix\}" {BEGIN(MATH); return VVMATRIX;}
920
"\{smallmatrix\}" {BEGIN(MATH); return SMALLMATRIX;}
921
"\{cases\}" {BEGIN(MATH); return CASES;}
922
"\{aligned\}" {BEGIN(MATH); return ALIGNED;}
8 by Jacques Distler
itex2MML 1.1.9;
923
"\{gathered\}" {BEGIN(MATH); return GATHERED;}
924
"\{split\}" {BEGIN(MATH); return ALIGNED;}
22 by Jacques Distler
SVG Environment
925
"\{svg\}" {BEGIN(SVGENV); return SVG;}
926
}
927
928
<SVGENV>{
929
"\\end\{svg\}" {BEGIN(MATH); return ENDSVG;}
930
[^\\]* {yylval=itex2MML_copy_string(yytext); BEGIN(SVGENV); return XMLSTRING;}
1 by Jacques Distler
Initial commit.
931
}
932
933
<ROMAN>{
934
"\{"  {return ST;}
935
"\}"  {BEGIN(MATH); return END;}
936
[a-zA-Z]   {yylval=itex2MML_copy_string(yytext); return RMCHAR;}
937
[\t\n\r ]+       ;
938
.           {return yytext[0];}
939
}
940
941
<BBOLD>{
942
"\{"  {return ST;}
943
"\}"  {BEGIN(MATH); return END;}
944
[a-z] {yylval=itex2MML_copy_string(yytext); return BBLOWERCHAR;}
945
[A-Z]   {yylval=itex2MML_copy_string(yytext); return BBUPPERCHAR;}
32 by Jacques Distler
itex2MML 1.38: Support for Blackboard Bold Digits
946
[0-9]   {yylval=itex2MML_copy_string(yytext); return BBDIGIT;}
1 by Jacques Distler
Initial commit.
947
[\t\n\r ]+       ;
948
.           {return yytext[0];}
949
}
950
951
<CALLIGRAPHIC>{
952
"\{"  {return ST;}
953
"\}"  {BEGIN(MATH); return END;}
954
[a-zA-Z]   {yylval=itex2MML_copy_string(yytext); return CALCHAR;}
955
[\t\n\r ]+       ;
956
.           {return yytext[0];}
957
}
958
959
<FRAKTUR>{
960
"\{"  {return ST;}
961
"\}"  {BEGIN(MATH); return END;}
962
[a-zA-Z]   {yylval=itex2MML_copy_string(yytext); return FRAKCHAR;}
963
[\t\n\r ]+       ;
964
.           {return yytext[0];}
965
}
966
967
<PLAINTEXT>{
39 by Jacques Distler
itex2MML 1.3.15: \mathrel and its cousins
968
\{[^\}]*?\}  {yylval=itex2MML_copy_string(yytext+1); if ((yyleng > 1) && (yylval != itex2MML_empty_string)) yylval[yyleng-2]='\0'; BEGIN(MATH); return TEXTSTRING;}
1 by Jacques Distler
Initial commit.
969
}
970
971
<INT1>{ 
972
"\{"      {return ST;}
973
"\}"      {BEGIN(INT2); return END;}
974
[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;}
975
[\t\n\r ]+   ;
976
.         {return yytext[0];}
977
}
978
979
<INT2>{
980
"\{"      {return ST;}
981
"\}"      {BEGIN(INT3); return END;}
982
[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;}
983
[\t\n\r ]+   ;
984
.         {return yytext[0];}
985
}
986
987
<INT3>{
988
"\{"      {return ST;}
989
"\}"      {BEGIN(MATH); return END;}
990
[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;}
991
[\t\n\r ]+   ;
992
.         {return yytext[0];}
993
}
994
995
996
997
%%
998
999
void itex2MML_restart ()
1000
{
1001
	BEGIN(INITIAL);
1002
}
1003
1004
static const char *  s_itex2MML_buffer = 0;
1005
static unsigned long s_itex2MML_length = 0;
1006
1007
void itex2MML_setup (const char * buffer, unsigned long length)
1008
{
1009
	yy_flush_buffer( YY_CURRENT_BUFFER );
1010
1011
	s_itex2MML_buffer = buffer;
1012
	s_itex2MML_length = length;
1013
}
1014
1015
static int s_itex2MML_read (char * buffer, int max_size)
1016
{
1017
	int result = 0;
1018
1019
	if (max_size < s_itex2MML_length)
1020
	{
1021
		result = max_size;
1022
1023
		memcpy (buffer, s_itex2MML_buffer, max_size);
1024
1025
		s_itex2MML_buffer += max_size;
1026
		s_itex2MML_length -= max_size;
1027
	}
1028
	else
1029
	{
1030
		result = s_itex2MML_length;
1031
1032
		memcpy (buffer, s_itex2MML_buffer, s_itex2MML_length);
1033
1034
		s_itex2MML_buffer = 0;
1035
		s_itex2MML_length = 0;
1036
	}
1037
	return result;
1038
}