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