/itexToMML

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