2
* itex2MML.l last modified 6/15/2006
8
%x MATH ATTRIBUTELIST BBOLD FRAKTUR CALLIGRAPHIC ROMAN PLAINTEXT INT1 INT2 INT3 MATHENV
12
#define YYSTYPE char *
17
#define YY_NEVER_INTERACTIVE 1
18
#define YY_INPUT(buffer,result,max_size) result = s_itex2MML_read (buffer, max_size)
20
static int s_itex2MML_read (char * buffer, int max_size);
22
#define yylval itex2MML_yylval
26
int itex2MML_lineno = 1;
28
int itex2MML_rowposn = 0;
29
int itex2MML_displaymode = 0;
32
%{ if (itex2MML_rowposn==1) itex2MML_rowposn=0;
33
if (itex2MML_rowposn==2) itex2MML_rowposn=1;
36
<INITIAL>"$"{1,2} BEGIN(MATH); itex2MML_rowposn=2; if (yyleng==2) { itex2MML_displaymode=1; return STARTDMATH;}; itex2MML_displaymode=0; return STARTMATH;
37
<INITIAL>"\\[" BEGIN(MATH); itex2MML_rowposn=2; itex2MML_displaymode=1; return STARTDMATH;
38
<INITIAL>EOF return 0;
39
<INITIAL>"\n" {itex2MML_lineno++; yylval=itex2MML_copy_string(yytext); return CHAR;}
40
<INITIAL>. {yylval=itex2MML_copy_string(yytext); return CHAR;}
48
"\\]" {BEGIN(INITIAL); return ENDMATH;}
52
"{"[\t\r\n ]*"}" return EMPTYMROW;
53
"{" {itex2MML_rowposn = 2; return MROWOPEN;}
56
"\\left" itex2MML_rowposn=2; return LEFT;
57
"\\right" return RIGHT;
60
"\\bigr" {return BIG;}
62
"\\Bigr" {return BBIG;}
64
"\\biggr" {return BIGG;}
66
"\\Biggr" {return BBIGG;}
68
"\\bigl" {return BIGL;}
69
"\\Bigl" {return BBIGL;}
70
"\\biggl" {return BIGGL;}
71
"\\Biggl" {return BBIGGL;}
76
"\\dlap" {/* Ignore */ ;}
80
"&" {itex2MML_rowposn=2; return COLSEP;}
82
"\\&" {yylval=itex2MML_copy_string("&"); return MI;}
84
"\\$" {yylval=itex2MML_copy_string("$"); return MI;}
85
"\\%" {yylval=itex2MML_copy_string("%"); return MI;}
87
"\\\\" itex2MML_rowposn=2; return ROWSEP;
89
[a-zA-Z]+ {yylval=itex2MML_copy_string(yytext); return MI;}
91
[0-9,.]*[0-9]+ {yylval=itex2MML_copy2(yytext, " "); return MN;}
93
"\\infinity" {yylval=itex2MML_copy_string("∞"); return MN;}
96
"[" {yylval=itex2MML_copy_string(yytext); return LEFTDELIM;}
99
"]" {yylval=itex2MML_copy_string(yytext); return RIGHTDELIM;}
102
"\\{" {yylval=itex2MML_copy_string("{"); return LEFTDELIM;}
104
"\\}" {yylval=itex2MML_copy_string("}"); return RIGHTDELIM;}
107
"|" {yylval=itex2MML_copy_string("∣"); return OTHERDELIM;}
109
"\\|" {yylval=itex2MML_copy_string("∥"); return OTHERDELIM;}
111
"\\setminus" {yylval=itex2MML_copy_string("∖"); return MO;}
112
"\\backslash" {yylval=itex2MML_copy_string("\"); return MO;}
113
"\\smallsetminus" {yylval=itex2MML_copy_string("﹨"); return MOF;}
118
"\\langle" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return LEFTDELIM;}
123
"\\rangle" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return RIGHTDELIM;}
125
"/" {yylval=itex2MML_copy_string(yytext); return OTHERDELIM;}
129
"\\updownarrow" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return OTHERDELIM;}
131
"." {yylval=itex2MML_copy_string(yytext); return PERIODDELIM;}
133
"-" {if (itex2MML_rowposn==1) return UNARYMINUS; else {yylval=itex2MML_copy_string("−"); return MO;}}
135
"+" {if (itex2MML_rowposn==1) return UNARYPLUS; else {yylval=itex2MML_copy_string("+"); return MO;}}
147
"*" {yylval=itex2MML_copy_string(yytext); return MOL;}
176
"\\vartheta" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
178
"\\phi" {yylval=itex2MML_copy_string("ϕ"); return MI;}
179
"\\varphi" {yylval=itex2MML_copy_string("φ"); return MI;}
202
"\\tanh" {yylval=itex2MML_copy_string(yytext+1); return MI;}
213
"\\sup" {yylval=itex2MML_copy_string(yytext+1); return MIB;}
215
"\\omicron" {yylval=itex2MML_copy_string("ℴ"); return MI;}
217
"\\epsilon" {yylval=itex2MML_copy_string("ε"); return MI;}
219
"\\cdot" {yylval=itex2MML_copy_string("⋅"); return MO;}
242
"\\Omega" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
245
"\\Upsi" {yylval=itex2MML_copy_string("ϒ"); return MI;}
248
"\\Longleftrightarrow" {yylval=itex2MML_copy_string("⇔"); return MOL;}
250
"\\Leftrightarrow" {yylval=itex2MML_copy_string("⇔"); return MOL;}
253
"\\Leftarrow" {yylval=itex2MML_copy_string("⇐"); return MOL;}
256
"\\Rightarrow" {yylval=itex2MML_copy_string("⇒"); return MOL;}
258
"\\hookleftarrow" {yylval=itex2MML_copy_string("↩"); return MOL;}
261
"\\hookrightarrow" {yylval=itex2MML_copy_string("↪"); return MOL;}
263
"\\longleftarrow" {yylval=itex2MML_copy_string("⟵"); return MOL;}
265
"\\longrightarrow" {yylval=itex2MML_copy_string("⟶"); return MOL;}
267
"\\leftarrow" {yylval=itex2MML_copy_string("←"); return MOL;}
270
"\\rightarrow" {yylval=itex2MML_copy_string("→"); return MOL;}
272
"\\leftrightarrow" {yylval=itex2MML_copy_string("↔"); return MOL;}
275
"\\map" {yylval=itex2MML_copy_string("↦"); return MOL;}
278
"\\nearr" {yylval=itex2MML_copy_string("↗"); return MOL;}
281
"\\nwarr" {yylval=itex2MML_copy_string("↖"); return MOL;}
284
"\\searr" {yylval=itex2MML_copy_string("↘"); return MOL;}
287
"\\swarr" {yylval=itex2MML_copy_string("↙"); return MOL;}
290
"\\neArr" {yylval=itex2MML_copy_string("⇗"); return MOL;}
293
"\\nwArr" {yylval=itex2MML_copy_string("⇖"); return MOL;}
296
"\\seArr" {yylval=itex2MML_copy_string("⇘"); return MOL;}
299
"\\swArr" {yylval=itex2MML_copy_string("⇙"); return MOL;}
301
"\\darr" {yylval=itex2MML_copy_string("↓"); return MOL;}
303
"\\Downarrow" {yylval=itex2MML_copy_string("⇓"); return MOL;}
305
"\\uparr" {yylval=itex2MML_copy_string("↑"); return MOL;}
307
"\\Uparrow" {yylval=itex2MML_copy_string("⇑"); return MOL;}
311
"\\updarr" {yylval=itex2MML_copy_string("↕"); return MOL;}
313
"\\Updownarrow" {yylval=itex2MML_copy_string("⇕"); return MOL;}
316
"\\ldots" {yylval=itex2MML_copy_string("…"); return MO;}
317
"\\cdots" {yylval=itex2MML_copy_string("⋯"); return MO;}
318
"\\ddots" {yylval=itex2MML_copy_string("⋱"); return MO;}
319
"\\udots" {yylval=itex2MML_copy_string("⋰"); return MO;}
320
"\\vdots" {yylval=itex2MML_copy_string("⋮"); return MO;}
324
"\\union" {yylval=itex2MML_copy_string("∪"); return MOL;}
328
"\⋃" {yylval=itex2MML_copy_string("⋃"); return MOB;}
331
"\\intersection" {yylval=itex2MML_copy_string("∩"); return MOL;}
334
"\\Intersection" {yylval=itex2MML_copy_string("⋂"); return MOB;}
336
"\\in" {yylval=itex2MML_copy_string("∈"); return MOL;}
519
"\\blacktriangledown" |
522
"\\bigtriangledown" |
523
"\\nprec" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MOL;}
534
"\\Re" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
537
"\\square" {yylval=itex2MML_copy_string("□"); return MOL;}
539
"\\empty" {yylval=itex2MML_copy_string("∅"); return MI;}
540
"\\exists" {yylval=itex2MML_copy_string("∃"); return MOL;}
541
"\\circ" {yylval=itex2MML_copy_string("∘"); return MOL;}
542
"\\rhd" {yylval=itex2MML_copy_string("⊳"); return MOL;}
543
"\\lhd" {yylval=itex2MML_copy_string("⊲"); return MOL;}
544
"\\lll" {yylval=itex2MML_copy_string("⋘"); return MOL;}
545
"\\unrhd" {yylval=itex2MML_copy_string("⊵"); return MOL;}
546
"\\unlhd" {yylval=itex2MML_copy_string("⊴"); return MOL;}
548
"\\nabla" {yylval=itex2MML_copy_string("∇"); return MOL;}
549
"\\sphericalangle" {yylval=itex2MML_copy_string("∢"); return MOL;}
551
"\\heartsuit" {yylval=itex2MML_copy_string("♡"); return MOL;}
552
"\\diamondsuit" {yylval=itex2MML_copy_string("♢"); return MOL;}
554
"\\partial" {yylval=itex2MML_copy_string("∂"); return MOL;}
556
"\\qed" {yylval=itex2MML_copy_string("▪"); return MO;}
558
"\\mod" {yylval=itex2MML_copy_string("mod"); return MOS;}
559
"\\pmod" {return PMOD;}
561
"\\bottom" {yylval=itex2MML_copy_string("⊥"); return MOL;}
563
"\\neg" {yylval=itex2MML_copy_string("¬"); return MOL;}
566
"\\ne" {yylval=itex2MML_copy_string("≠"); return MOL;}
569
"\\mid" {yylval=itex2MML_copy_string("∣"); return MOS;}
572
"\\integral" {yylval=itex2MML_copy_string("∫"); return MOL;}
575
"\\doubleintegral" {yylval=itex2MML_copy_string("∬"); return MOL;}
578
"\\tripleintegral" {yylval=itex2MML_copy_string("∭"); return MOL;}
581
"\\quadrupleintegral" {yylval=itex2MML_copy_string("⨌"); return MOL;}
585
"\\contourintegral" {yylval=itex2MML_copy_string("∮"); return MOL;}
587
"\\times" {yylval=itex2MML_copy_string("×"); return MOL;}
588
"\\star" {yylval=itex2MML_copy_string("⋆"); return MOL;}
590
"\\odash" {yylval=itex2MML_copy_string("⊝"); return MOL;}
593
"\\minusb" {yylval=itex2MML_copy_string("⊟"); return MOL;}
595
"\\plusb" {yylval=itex2MML_copy_string("⊞"); return MOL;}
597
"\\timesb" {yylval=itex2MML_copy_string("⊠"); return MOL;}
599
"\\sum" {yylval=itex2MML_copy_string("∑"); return MOB;}
602
"\\product" {yylval=itex2MML_copy_string("∏"); return MOB;}
605
"\\coproduct" {yylval=itex2MML_copy_string("∐"); return MOB;}
607
"\\otimes" {yylval=itex2MML_copy_string("⊗"); return MOL;}
608
"\\Otimes" {yylval=itex2MML_copy_string("⨷"); return MOL;}
609
"\\bigotimes" {yylval=itex2MML_copy_string("⨂"); return MOL;}
612
"\\oplus" {yylval=itex2MML_copy_string("⊕"); return MOL;}
614
"\\bigoplus" {yylval=itex2MML_copy_string("⨁"); return MOB;}
616
"\\bigodot" {yylval=itex2MML_copy_string("⨀"); return MOB;}
617
"\\bigsqcup" {yylval=itex2MML_copy_string("⨆"); return MOB;}
618
"\\bigsuplus" {yylval=itex2MML_copy_string("⨄"); return MOB;}
620
"\\wedge" {yylval=itex2MML_copy_string("∧"); return MOL;}
622
"\\bigwedge" {yylval=itex2MML_copy_string("⋀"); return MOB;}
625
"\\bigvee" {yylval=itex2MML_copy_string("⋁"); return MOB;}
627
"\\frac" {return FRAC;}
628
"\\tfrac" {return TFRAC;}
630
"\\binom" {return BINOM;}
632
"\\tensor" {return TENSOR;}
634
"\\multiscripts" {return MULTI;}
636
"\\overbrace" {return OVERBRACE;}
638
"\\underbrace" {return UNDERBRACE;}
640
"\\bar" {return BAR;}
643
"\\widebar" {return WIDEBAR;}
645
"\\vec" {return VEC;}
646
"\\widevec" {return WIDEVEC;}
648
"\\dot" {return DOT;}
650
"\\ddot" {return DDOT;}
652
"\\tilde" {return TILDE;}
653
"\\widetilde" {return WIDETILDE;}
656
"\\check" {return CHECK;}
657
"\\widecheck" {return WIDECHECK;}
660
"\\hat" {return HAT;}
661
"\\widehat" {return WIDEHAT;}
663
"\\underset" {return UNDER;}
666
"\\overset" {return OVER;}
668
"\\over" {return TEXOVER;}
670
"\\underoverset" {return UNDEROVER;}
672
"\\sqrt" {return SQRT;}
674
"\\root" {return ROOT;}
676
"\\space" {BEGIN(INT1); return SPACE;}
678
"\\text" {BEGIN(PLAINTEXT); return TEXTBOX;}
680
"\\statusline" {BEGIN(PLAINTEXT); return STATLINE;}
682
"\\toggle" {return TOGGLE;}
685
"\\fghighlight" {BEGIN(ATTRIBUTELIST); return FGHIGHLIGHT;}
688
"\\bghighlight" {BEGIN(ATTRIBUTELIST); return BGHIGHLIGHT;}
690
"\\color" {BEGIN(ATTRIBUTELIST); return COLOR;}
691
"\\bgcolor" {BEGIN(ATTRIBUTELIST); return BGCOLOR;}
693
"\\displaystyle" {itex2MML_rowposn=2; return DISPLAY;}
695
"\\textstyle" {itex2MML_rowposn=2; return TEXTSTY;}
697
"\\textsize" {return TEXTSIZE;}
699
"\\scriptsize" {return SCSIZE;}
701
"\\scriptscriptsize" {return SCSCSIZE;}
703
"\\mathit" {return ITALICS;}
705
"\\mathbf" {return BOLD;}
707
"\\mathrm" {BEGIN(ROMAN); return RM;}
709
"\\mathbb" {BEGIN(BBOLD); return BB;}
712
"\\mathfr" {BEGIN(FRAKTUR); return FRAK;}
714
"\\mathcal" {BEGIN(CALLIGRAPHIC); return CAL;}
716
"\\begin" {BEGIN(MATHENV); return BEGINENV;}
717
"\\end" {BEGIN(MATHENV); return ENDENV;}
719
"\\substack" {return SUBSTACK;}
721
"\\array" {return ARRAY;}
723
"\\arrayopts" {return ARRAYOPTS;}
725
"\\colalign" {BEGIN(ATTRIBUTELIST); return COLALIGN;}
727
"\\collayout" {BEGIN(ATTRIBUTELIST); return COLLAYOUT;}
729
"\\rowalign" {BEGIN(ATTRIBUTELIST); return ROWALIGN;}
731
"\\align" {BEGIN(ATTRIBUTELIST); return ALIGN;}
733
"\\equalrows" {BEGIN(ATTRIBUTELIST); return EQROWS;}
735
"\\equalcols" {BEGIN(ATTRIBUTELIST); return EQCOLS;}
737
"\\rowlines" {BEGIN(ATTRIBUTELIST); return ROWLINES;}
739
"\\collines" {BEGIN(ATTRIBUTELIST); return COLLINES;}
741
"\\frame" {BEGIN(ATTRIBUTELIST); return FRAME;}
743
"\\padding" {BEGIN(ATTRIBUTELIST); return PADDING;}
745
"\\rowopts" {return ROWOPTS;}
747
"\\cellopts" {return CELLOPTS;}
749
"\\rowspan" {BEGIN(ATTRIBUTELIST); return ROWSPAN;}
751
"\\colspan" {BEGIN(ATTRIBUTELIST); return COLSPAN;}
755
"\\thinspace" {return THINSPACE;}
758
"\\medspace" {return MEDSPACE;}
761
"\\thickspace" {return THICKSPACE;}
763
"\\quad" {return QUAD;}
764
"\\qquad" {return QQUAD;}
767
"\\negspace" {return NEGSPACE;}
769
"\\phantom" {return PHANTOM;}
771
"\\href" {BEGIN(PLAINTEXT); return HREF;}
774
"\\mathop" {BEGIN(PLAINTEXT); return MATHOP;}
776
"\\"[a-zA-Z]+ {yylval=itex2MML_copy_string(yytext+1); return MOP;}
778
"\&"[a-zA-Z_][a-zA-Z0-9_]*";" |
780
"\&#x"[a-fA-F0-9]+";" {yylval=itex2MML_copy_string(yytext); return MI;}
782
"\n" itex2MML_lineno++;
786
. {return UNKNOWNCHAR;}
789
<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;}
792
"\{matrix\}" {BEGIN(MATH); return MATRIX;}
793
"\{pmatrix\}" {BEGIN(MATH); return PMATRIX;}
794
"\{bmatrix\}" {BEGIN(MATH); return BMATRIX;}
795
"\{Bmatrix\}" {BEGIN(MATH); return BBMATRIX;}
796
"\{vmatrix\}" {BEGIN(MATH); return VMATRIX;}
797
"\{Vmatrix\}" {BEGIN(MATH); return VVMATRIX;}
798
"\{smallmatrix\}" {BEGIN(MATH); return SMALLMATRIX;}
799
"\{cases\}" {BEGIN(MATH); return CASES;}
800
"\{aligned\}" {BEGIN(MATH); return ALIGNED;}
805
"\}" {BEGIN(MATH); return END;}
806
[a-zA-Z] {yylval=itex2MML_copy_string(yytext); return RMCHAR;}
808
. {return yytext[0];}
813
"\}" {BEGIN(MATH); return END;}
814
[a-z] {yylval=itex2MML_copy_string(yytext); return BBLOWERCHAR;}
815
[A-Z] {yylval=itex2MML_copy_string(yytext); return BBUPPERCHAR;}
817
. {return yytext[0];}
822
"\}" {BEGIN(MATH); return END;}
823
[a-zA-Z] {yylval=itex2MML_copy_string(yytext); return CALCHAR;}
825
. {return yytext[0];}
830
"\}" {BEGIN(MATH); return END;}
831
[a-zA-Z] {yylval=itex2MML_copy_string(yytext); return FRAKCHAR;}
833
. {return yytext[0];}
837
\{[^\}]*\} {yylval=itex2MML_copy_string(yytext+1); if ((yyleng > 1) && (yylval != itex2MML_empty_string)) yylval[yyleng-2]='\0'; BEGIN(MATH); return TEXTSTRING;}
842
"\}" {BEGIN(INT2); return END;}
843
[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;}
845
. {return yytext[0];}
850
"\}" {BEGIN(INT3); return END;}
851
[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;}
853
. {return yytext[0];}
858
"\}" {BEGIN(MATH); return END;}
859
[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;}
861
. {return yytext[0];}
868
void itex2MML_restart ()
873
static const char * s_itex2MML_buffer = 0;
874
static unsigned long s_itex2MML_length = 0;
876
void itex2MML_setup (const char * buffer, unsigned long length)
878
yy_flush_buffer( YY_CURRENT_BUFFER );
880
s_itex2MML_buffer = buffer;
881
s_itex2MML_length = length;
884
static int s_itex2MML_read (char * buffer, int max_size)
888
if (max_size < s_itex2MML_length)
892
memcpy (buffer, s_itex2MML_buffer, max_size);
894
s_itex2MML_buffer += max_size;
895
s_itex2MML_length -= max_size;
899
result = s_itex2MML_length;
901
memcpy (buffer, s_itex2MML_buffer, s_itex2MML_length);
903
s_itex2MML_buffer = 0;
904
s_itex2MML_length = 0;