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