📄 itex2mml.l
字号:
%{%}%option noyywrap%x MATH ATTRIBUTELIST BBOLD FRAKTUR CALLIGRAPHIC PLAINTEXT INT1 INT2 INT3 %{typedef char* string;#define YYSTYPE string#include "y.tab.h"extern char* yylval;int rowposn=0;int lineno=1;int displaymode=0;%} %%%{ if (rowposn==1) rowposn=0; if (rowposn==2) rowposn=1;%}<INITIAL>"$" BEGIN(MATH); rowposn=2; displaymode=0; return STARTMATH;<INITIAL>"\\[" BEGIN(MATH); rowposn=2; displaymode=1; return STARTDMATH;<INITIAL>EOF return 0;<INITIAL>"\n" {lineno++; yylval=(char *)strdup(yytext); return CHAR;}<INITIAL>"\\$" {yylval=(char *)strdup("$"); return CHAR;}<INITIAL>. {yylval=(char *)strdup(yytext); return CHAR;}<MATH>{"$" |"\\]" {BEGIN(INITIAL); return ENDMATH;}" " |"<br>" {;}"^" return SUP;"_" return SUB; "{"[\t\r\n ]*"}" return EMPTYMROW;"{" {rowposn = 2; return MROWOPEN;}"}" return MROWCLOSE;"\\left" rowposn=2; return LEFT;"\\right" return RIGHT;"\\rlap" |"\\llap" |"\\ulap" |"\\dlap" {/* Ignore */ ;}"&" |"&" {rowposn=2; return COLSEP;}"\\\\" rowposn=2; return ROWSEP;[a-zA-Z]+ {yylval=(char *)strdup(yytext); return MI;}[0-9]+ {yylval=(char *)strdup(yytext); return MN;}"\\infty" |"\\infinity" {yylval=(char *)strdup("∞"); return MN;}"-" {if (rowposn==1) return UNARYMINUS; else {yylval=(char *)strdup(yytext); return MO;}}"(" |"[" |"+" |"." |"," |"/" |":" |"!" |"=" |"~" |";" |"'" |"?" |"#" |"`" |"|" |"%" |"*" {yylval=(char *)strdup(yytext); return MOL;}")" |"]" {yylval=(char *)strdup(yytext); return MO;}"\\alpha" |"\\beta" |"\\gamma" |"\\delta" |"\\zeta" |"\\eta" |"\\theta" |"\\iota" |"\\kappa" |"\\lambda" |"\\mu" |"\\nu" |"\\xi" |"\\pi" |"\\rho" |"\\sigma" |"\\tau" |"\\upsilon" |"\\phi" |"\\chi" |"\\psi" |"\\omega" {yylval=(char *)strdup(yytext); yylval[0]='&'; yylval[yyleng]=';'; yylval[yyleng+1]='\0'; return MI;}"\\omicron" {yylval=(char *)strdup("ℴ"); return MI;}"\\epsilon" {yylval=(char *)strdup("ε"); return MI;}"\\varepsilon" {yylval=(char *)strdup("ϵ"); return MI;}"\\vartheta" {yylval=(char *)strdup("ϑ"); return MI;}"\\varpi" {yylval=(char *)strdup("π"); return MI;}"\\varrho" {yylval=(char *)strdup("ϱ"); return MI;}"\\varsigma" {yylval=(char *)strdup("ς"); return MI;}"\\varphi" {yylval=(char *)strdup("ϕ"); return MI;}"\\cdot" {yylval=(char *)strdup("⋅"); return MO;}"\\Delta" |"\\Gamma" |"\\Lambda" |"\\Pi" |"\\Phi" |"\\Psi" |"\\Sigma" |"\\Theta" |"\\Xi" |"\\Upsilon" |"\\Omega" {yylval=(char *)strdup(yytext); yylval[0]='&'; yylval[yyleng]=';'; yylval[yyleng+1]='\0'; return MI;}"\\Alpha" |"\\Beta" |"\\Zeta" |"\\Eta" |"\\Iota" |"\\Kappa" |"\\Mu" |"\\Nu" |"\\Rho" |"\\Tau" {yylval=(char *)strdup(yytext+1); yylval[1]='\0'; return MI;}"\\iff" |"\\Longleftrightarrow" {yylval=(char *)strdup("⇔"); return MOL;}"\\Leftrightarrow" {yylval=(char *)strdup("⇔"); return MOL;}"\\impliedby" |"\\Leftarrow" {yylval=(char *)strdup("⇐"); return MOL;}"\\implies" |"\\Rightarrow" {yylval=(char *)strdup("⇒"); return MOL;}"\\hookleftarrow" {yylval=(char *)strdup("↩"); return MOL;}"\\embedsin" |"\\hookrightarrow" {yylval=(char *)strdup("↪"); return MOL;}"\\longleftarrow" {yylval=(char *)strdup("⟵"); return MOL;}"\\longrightarrow" {yylval=(char *)strdup("⟶"); return MOL;}"\\leftarrow" {yylval=(char *)strdup("←"); return MOL;}"\\to" |"\\rightarrow" {yylval=(char *)strdup("→"); return MOL;}"\\leftrightarrow" {yylval=(char *)strdup("↔"); return MOL;}"\\mapsto" |"\\map" {yylval=(char *)strdup("↦"); return MOL;}"\\nearrow" |"\\nearr" {yylval=(char *)strdup("↗"); return MOL;}"\\nwarrow" |"\\nwarr" {yylval=(char *)strdup("↖"); return MOL;}"\\searrow" |"\\searr" {yylval=(char *)strdup("↘"); return MOL;}"\\swarrow" |"\\swarr" {yylval=(char *)strdup("↙"); return MOL;}"\\neArrow" |"\\neArr" {yylval=(char *)strdup("⇗"); return MOL;}"\\nwArrow" |"\\nwArr" {yylval=(char *)strdup("⇖"); return MOL;}"\\seArrow" |"\\seArr" {yylval=(char *)strdup("⇘"); return MOL;}"\\swArrow" |"\\swArr" {yylval=(char *)strdup("⇙"); return MOL;}"\\downarrow" |"\\darr" {yylval=(char *)strdup("↓"); return MOL;}"\\uparrow" |"\\uparr" {yylval=(char *)strdup("↑"); return MOL;}"\\downuparrow" |"\\updownarrow" |"\\duparr" |"\\updarr" {yylval=(char *)strdup("↕"); return MOL;}"\\cdots" {yylval=(char *)strdup("⋅ ⋅ ⋅"); return MO;}"\\ddots" {yylval=(char *)strdup("⋱"); return MO;}"\\ldots" {yylval=(char *)strdup("⋖"); return MO;}"\\vdots" {yylval=(char *)strdup("⋮"); return MO;}"\\cup" |"\&union;" |"\\union" {yylval=(char *)strdup("∪"); return MOL;}"\\bigcup" |"\\Union" |"\⋃" {yylval=(char *)strdup("⋃"); return MOB;}"\\{" {yylval=(char *)strdup("{"); return MOL;}"\\}" {yylval=(char *)strdup("}"); return MO;}"\\in" {yylval=(char *)strdup("∈"); return MOL;}"\\|" {yylval=(char *)strdup("∥"); return MOL;}"\\rfloor" |"\\rceil" |"\\rang" |"\\rangle" {yylval=(char *)strdup(yytext); yylval[0]='&'; yylval[yyleng]=';'; yylval[yyleng+1]='\0'; return MO;}"\\lfloor" |"\\lceil" |"\\lang" |"\\langle" |"\\gt" |"\\lt" |"\\subset" |"\\subseteq" |"\\prec" |"\\parallel" |"\\nparallel" |"\\perp" |"\\gg" |"\\geq" |"\\ge" |"\\le" |"\\leq" |"\\nsubset" |"\\nsubseteq" |"\\notin" |"\\ni" |"\\nmid" |"\\preceq" |"\\npreceq" |"\\ll" |"\\ngeq" |"\\nleq" |"\\supset" |"\\supseteq" |"\\approx" |"\\sim" |"\\triangleleft" |"\\cong" |"\\succ" |"\\nsucc" |"\\ngtr" |"\\nsupset" |"\\nsupseteq" |"\\propto" |"\\equiv" |"\\triangleright" |"\\ncong" |"\\succeq" |"\\nsucceq" |"\\amalg" |"\\setminus" |"\\smallsetminus" |"\\pm" |"\\mp" |"\\cap" |"\\uplus" |"\\sqcap" |"\\sqcup" |"\\ominus" |"\\ast" |"\\oslash" |"\\star" |"\\diamond" |"\\wr" |"\\dagger" |"\\ddagger" |"\\ltimes" |"\\div" |"\\rtimes" |"\\Im" |"\\bot" |"\\emptyset" |"\\prime" |"\\therefore" |"\\flat" |"\\vee" |"\\Re" |"\\hbar" |"\\because" |"\\sharp" |"\\bullet" |"\\aleph" |"\\nexists" |"\\imath" |"\\not" |"\\top" |"\\wp" |"\\natural" |"\\square" |"\\angle" |"\\forall" |"\\jmath" |"\\ell" |"\\bigtriangleup" |"\\bigtriangledown" |"\\beth" |"\\clubsuit" |"\\diamondsuit" |"\\heartsuit" |"\\nabla" |"\\triangle" |"\\nprec" {yylval=(char *)strdup(yytext); yylval[0]='&'; yylval[yyleng]=';'; yylval[yyleng+1]='\0'; return MOL;}"\\partial" {yylval=(char *)strdup("∂"); return MOL;}"\\land" {yylval=(char *)strdup("∧"); return MOL;}"\\circ" {yylval=(char *)strdup("∘"); return MO;}"\\qed" {yylval=(char *)strdup("▪"); return MO;}"\\pmod" {yylval=(char *)strdup(" mod "); return MO;}"\\bottom" {yylval=(char *)strdup("⊥"); return MOL;}"\\exists" {yylval=(char *)strdup("∃"); return MOL;}"\\neg" {yylval=(char *)strdup("¬"); return MOL;}"\\neq" |"\\ne" {yylval=(char *)strdup("≠"); return MOL;}"\\mid" {yylval=(char *)strdup("∣"); return MOL;}"\\int" |"\\integral" {yylval=(char *)strdup("∫"); return MOL;}"\\iint" |"\\doubleintegral" {yylval=(char *)strdup("∬"); return MOL;}"\\iiint" |"\\tripleintegral" {yylval=(char *)strdup("∭"); return MOL;}"\\iiiint" |"\\quadrupleintegral" {yylval=(char *)strdup("⨌"); return MOL;}"\\oint" |"\\conint" |"\\contourintegral" {yylval=(char *)strdup("∮"); return MOL;}"\\times" {yylval=(char *)strdup("×"); return MOL;}"\\sum" {yylval=(char *)strdup("∑"); return MOB;}"\\prod" |"\\product" {yylval=(char *)strdup("∏"); return MOB;}"\\coprod" |"\\coproduct" {yylval=(char *)strdup("∐"); return MOB;}"\\otimes" {yylval=(char *)strdup("⊗"); return MOL;}"\\Otimes" |"\\bigotimes" {yylval=(char *)strdup("⊗"); return MOB;}"\\oplus" {yylval=(char *)strdup("⊕"); return MOL;}"\\Oplus" |"\\bigoplus" {yylval=(char *)strdup("⊕"); return MOB;}"\\wedge" {yylval=(char *)strdup("∧"); return MOL;}"\\Wedge" |"\\bigwedge" {yylval=(char *)strdup("⋀"); return MOB;}"\\lim" {yylval=(char *)strdup(yytext); ++yylval; return MOB;}"\\frac" {return FRAC;}"\\binom" {return BINOM;}"\\tensor" {return TENSOR;}"\\multiscripts" {return MULTI;}"\\overbrace" {return OVERBRACE;}"\\underbrace" {return UNDERBRACE;}"\\overline" |"\\closure" |"\\bar" |"\\widebar" {return BAR;}"\\vec" |"\\widevec" {return VEC;}"\\dot" {return DOT;}"\\ddot" {return DDOT;}"\\tilde" |"\\widetilde" {return TILDE;}"\\check" |"\\widecheck" {return CHECK;}"\\hat" |"\\widehat" {return HAT;}"\\underset" {return UNDER;}"\\overset" {return OVER;}"\\underoverset" {return UNDEROVER;}"\\sqrt" {return SQRT;}"\\root" {return ROOT;}"\\space" {BEGIN(INT1); return SPACE;}"\\text" {BEGIN(PLAINTEXT); return TEXTBOX;}"\\statusline" {BEGIN(PLAINTEXT); return STATLINE;}"\\toggle" {return TOGGLE;}"\\fghilight" |"\\fghighlight" {BEGIN(ATTRIBUTELIST); return FGHIGHLIGHT;}"\\bghilight" |"\\bghighlight" {BEGIN(ATTRIBUTELIST); return BGHIGHLIGHT;}"\\displaystyle" {rowposn=2; return DISPLAY;}"\\textstyle" {rowposn=2; return TEXTSTY;}"\\textsize" {return TEXTSIZE;}"\\scriptsize" {return SCSIZE;}"\\scriptscriptsize" {return SCSCSIZE;}"\\mathit" {return ITALICS;}"\\mathbf" {return BOLD;}"\\mathrm" {return RM;}"\\mathbb" {BEGIN(BBOLD); return BB;}"\\mathfr" {BEGIN(FRAKTUR); return FRAK;}"\\mathcal" {BEGIN(CALLIGRAPHIC); return CAL;}"\\array" {return ARRAY;}"\\arrayopts" {return ARRAYOPTS;}"\\colalign" {BEGIN(ATTRIBUTELIST); return COLALIGN;}"\\collayout" {BEGIN(ATTRIBUTELIST); return COLLAYOUT;}"\\rowalign" {BEGIN(ATTRIBUTELIST); return ROWALIGN;}"\\align" {BEGIN(ATTRIBUTELIST); return ALIGN;}"\\equalrows" {BEGIN(ATTRIBUTELIST); return EQROWS;}"\\equalcols" {BEGIN(ATTRIBUTELIST); return EQCOLS;}"\\rowlines" {BEGIN(ATTRIBUTELIST); return ROWLINES;}"\\collines" {BEGIN(ATTRIBUTELIST); return COLLINES;}"\\frame" {BEGIN(ATTRIBUTELIST); return FRAME;}"\\padding" {BEGIN(ATTRIBUTELIST); return PADDING;}"\\rowopts" {return ROWOPTS;}"\\cellopts" {return CELLOPTS;} "\\rowspan" {BEGIN(ATTRIBUTELIST); return ROWSPAN;}"\\colspan" {BEGIN(ATTRIBUTELIST); return COLSPAN;}"\\," |"\\thinspace" {return THINSPACE;}"\\medspace" {return MEDSPACE;}"\\thickspace" {return THICKSPACE;}"\\quad" {return QUAD;}"\\!" |"\\negspace" {return NEGSPACE;}"\\phantom" {return PHANTOM;}"\\href" {BEGIN(PLAINTEXT); return HREF;}"\\mathop" {BEGIN(PLAINTEXT); return MATHOP;}"\\"[a-zA-Z]+ {yylval=(char *)strdup(yytext); ++yylval; return MOP;}"\&"[a-zA-Z]+";" {yylval=(char *)strdup(yytext); return MI;}"\n" lineno++;[\t ]+ ;. {return UNKNOWNCHAR;}}<ATTRIBUTELIST>"{"[ \t\n\r #a-zA-Z0-9.\-]*"}" {BEGIN(MATH); yylval=(char *)strdup(yytext); yylval[0]='"'; yylval[yyleng-1]='"'; return ATTRLIST;}<BBOLD>{"\{" {return ST;}"\}" {BEGIN(MATH); return END;}[a-z] {yylval=(char *)strdup(yytext); return BBLOWERCHAR;}[A-Z] {yylval=(char *)strdup(yytext); return BBUPPERCHAR;}[\t\n\r ]+ ;. {return yytext[0];}}<CALLIGRAPHIC>{"\{" {return ST;}"\}" {BEGIN(MATH); return END;}[a-zA-Z] {yylval=(char *)strdup(yytext); return CALCHAR;}[\t\n\r ]+ ;. {return yytext[0];}}<FRAKTUR>{"\{" {return ST;}"\}" {BEGIN(MATH); return END;}[a-zA-Z] {yylval=(char *)strdup(yytext); return FRAKCHAR;}[\t\n\r ]+ ;. {return yytext[0];}}<PLAINTEXT>{\{[^\}]*\} {yylval=(char *)strdup(yytext+1); yylval[yyleng-2]='\0'; BEGIN(MATH); return TEXTSTRING;}}<INT1>{ "\{" {return ST;}"\}" {BEGIN(INT2); return END;}[0-9]+ {yylval=malloc(yyleng +2); yylval=(char *)strdup(yytext); yylval[yyleng]=yylval[yyleng-1]; yylval[yyleng-1]='.'; yylval[yyleng+1]='\0'; return INTONE;}[\t\n\r ]+ ;. {return yytext[0];}}<INT2>{"\{" {return ST;}"\}" {BEGIN(INT3); return END;}[0-9]+ {yylval=malloc(yyleng +2); yylval=(char *)strdup(yytext); yylval[yyleng]=yylval[yyleng-1]; yylval[yyleng-1]='.'; yylval[yyleng+1]='\0'; return INTTWO;}[\t\n\r ]+ ;. {return yytext[0];}}<INT3>{"\{" {return ST;}"\}" {BEGIN(MATH); return END;}[0-9]+ {yylval=malloc(yyleng +2); yylval=(char *)strdup(yytext); yylval[yyleng]=yylval[yyleng-1]; yylval[yyleng-1]='.'; yylval[yyleng+1]='\0'; return INTTHREE;}[\t\n\r ]+ ;. {return yytext[0];}}%%void yyerror(s)char *s;{ fprintf(stderr, "Line: %d Error: %s at token %s\n",lineno, s, yytext);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -