/itexToMML

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