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 "&" | 89 "&" {itex2MML_rowposn=2; return COLSEP;} 90 91 "\\&" {yylval=itex2MML_copy_string("&"); 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("∞"); 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("∣"); return OTHERDELIM;} 119 "\\Vert" | 120 "\\|" {yylval=itex2MML_copy_string("∥"); return OTHERDELIM;} 121 122 "\\setminus" {yylval=itex2MML_copy_string("∖"); return MO;} 123 "\\backslash" {yylval=itex2MML_copy_string("\"); return MO;} 124 "\\smallsetminus" {yylval=itex2MML_copy_string("﹨"); return MOF;} 125 126 "\\sslash" {yylval=itex2MML_copy_string("⫽"); 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("−"); 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("′"); return MOLL;} 164 "'" {yylval=itex2MML_copy_string("′"); return MOL;} 165 "''" {yylval=itex2MML_copy_string("″"); return MOL;} 166 "'''" {yylval=itex2MML_copy_string("‴"); return MOL;} 167 "''''" {yylval=itex2MML_copy_string("⁗"); 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("ε"); return MI;} 198 "\\phi" {yylval=itex2MML_copy_string("ϕ"); return MI;} 199 "\\varphi" {yylval=itex2MML_copy_string("φ"); 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("ℴ"); return MI;} 236 237 "\\epsilon" {yylval=itex2MML_copy_string("ε"); return MI;} 238 239 "\\cdot" {yylval=itex2MML_copy_string("⋅"); 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("ϒ"); return MI;} 266 267 "\\iff" | 268 "\\Longleftrightarrow" {yylval=itex2MML_copy_string("⇔"); return MOL;} 269 270 "\\Leftrightarrow" {yylval=itex2MML_copy_string("⇔"); return MOL;} 271 272 "\\impliedby" | 273 "\\Leftarrow" {yylval=itex2MML_copy_string("⇐"); return MOL;} 274 275 "\\implies" | 276 "\\Rightarrow" {yylval=itex2MML_copy_string("⇒"); return MOL;} 277 278 "\\hookleftarrow" {yylval=itex2MML_copy_string("↩"); return MOL;} 279 280 "\\embedsin" | 281 "\\hookrightarrow" {yylval=itex2MML_copy_string("↪"); return MOL;} 282 283 "\\longleftarrow" {yylval=itex2MML_copy_string("⟵"); return MOL;} 284 285 "\\longrightarrow" {yylval=itex2MML_copy_string("⟶"); return MOL;} 286 287 "\\leftarrow" {yylval=itex2MML_copy_string("←"); return MOL;} 288 289 "\\to" | 290 "\\rightarrow" {yylval=itex2MML_copy_string("→"); return MOL;} 291 292 "\\leftrightarrow" {yylval=itex2MML_copy_string("↔"); return MOL;} 293 294 "\\mapsto" | 295 "\\map" {yylval=itex2MML_copy_string("↦"); return MOL;} 296 297 "\\nearrow" | 298 "\\nearr" {yylval=itex2MML_copy_string("↗"); return MOL;} 299 300 "\\nwarrow" | 301 "\\nwarr" {yylval=itex2MML_copy_string("↖"); return MOL;} 302 303 "\\searrow" | 304 "\\searr" {yylval=itex2MML_copy_string("↘"); return MOL;} 305 306 "\\swarrow" | 307 "\\swarr" {yylval=itex2MML_copy_string("↙"); return MOL;} 308 309 "\\neArrow" | 310 "\\neArr" {yylval=itex2MML_copy_string("⇗"); return MOL;} 311 312 "\\nwArrow" | 313 "\\nwArr" {yylval=itex2MML_copy_string("⇖"); return MOL;} 314 315 "\\seArrow" | 316 "\\seArr" {yylval=itex2MML_copy_string("⇘"); return MOL;} 317 318 "\\swArrow" | 319 "\\swArr" {yylval=itex2MML_copy_string("⇙"); return MOL;} 320 321 "\\darr" {yylval=itex2MML_copy_string("↓"); return MOL;} 322 323 "\\Downarrow" {yylval=itex2MML_copy_string("⇓"); return MOL;} 324 325 "\\uparr" {yylval=itex2MML_copy_string("↑"); return MOL;} 326 327 "\\Uparrow" {yylval=itex2MML_copy_string("⇑"); return MOL;} 328 329 "\\downuparrow" | 330 "\\duparr" | 331 "\\updarr" {yylval=itex2MML_copy_string("↕"); return MOL;} 332 333 "\\Updownarrow" {yylval=itex2MML_copy_string("⇕"); return MOL;} 334 335 "\\leftsquigarrow" {yylval=itex2MML_copy_string("⇜"); return MOL;} 336 "\\rightsquigarrow" {yylval=itex2MML_copy_string("⇝"); return MOL;} 337 "\\dashleftarrow" {yylval=itex2MML_copy_string("⤎"); return MOL;} 338 "\\dashrightarrow" {yylval=itex2MML_copy_string("⤏"); return MOL;} 339 "\\curvearrowbotright" {yylval=itex2MML_copy_string("⤻"); return MOL;} 340 "\\righttoleftarrow" {yylval=itex2MML_copy_string("⟲"); return MOL;} 341 "\\lefttorightarrow" {yylval=itex2MML_copy_string("⟳"); 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("…"); return MI;} 390 "\\cdots" {yylval=itex2MML_copy_string("⋯"); return MI;} 391 "\\ddots" {yylval=itex2MML_copy_string("⋱"); return MI;} 392 "\\udots" {yylval=itex2MML_copy_string("⋰"); return MI;} 393 "\\vdots" {yylval=itex2MML_copy_string("⋮"); return MI;} 394 "\\colon" {yylval=itex2MML_copy_string(":"); return MOR;} 395 396 "\\cup" | 397 "\&union;" | 398 "\\union" {yylval=itex2MML_copy_string("∪"); return MOL;} 399 400 "\\bigcup" | 401 "\\Union" | 402 "\⋃" {yylval=itex2MML_copy_string("⋃"); return MOB;} 403 404 "\\cap" | 405 "\\intersection" {yylval=itex2MML_copy_string("∩"); return MOL;} 406 407 "\\bigcap" | 408 "\\Intersection" {yylval=itex2MML_copy_string("⋂"); return MOB;} 409 410 "\\in" {yylval=itex2MML_copy_string("∈"); 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("≔"); return MOL;} 416 "\\Coloneqq" {yylval=itex2MML_copy_string("⩴"); return MOS;} 417 "\\coloneq" {yylval=itex2MML_copy_string("∶−"); return MOS;} 418 "\\Coloneq" {yylval=itex2MML_copy_string("∷−"); return MOS;} 419 "\\eqqcolon" {yylval=itex2MML_copy_string("≕"); return MOS;} 420 "\\Eqqcolon" {yylval=itex2MML_copy_string("=∷"); return MOS;} 421 "\\eqcolon" {yylval=itex2MML_copy_string("∹"); return MOS;} 422 "\\Eqcolon" {yylval=itex2MML_copy_string("−∷"); return MOS;} 423 "\\colonapprox" {yylval=itex2MML_copy_string("∶≈"); return MOS;} 424 "\\Colonapprox" {yylval=itex2MML_copy_string("∷≈"); return MOS;} 425 "\\colonsim" {yylval=itex2MML_copy_string("∶∼"); return MOS;} 426 "\\Colonsim" {yylval=itex2MML_copy_string("∷∼"); return MOS;} 427 "\\dblcolon" {yylval=itex2MML_copy_string("∷"); 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("⫫"); return MOL;} 654 "\\boxdot" {yylval=itex2MML_copy_string("⊡"); return MOL;} 655 "\\Box" | 656 "\\square" {yylval=itex2MML_copy_string("□"); return MOL;} 657 "\\emptyset" | 658 "\\empty" {yylval=itex2MML_copy_string("∅"); return MI;} 659 "\\exists" {yylval=itex2MML_copy_string("∃"); return MOL;} 660 "\\circ" {yylval=itex2MML_copy_string("∘"); return MOL;} 661 "\\rhd" {yylval=itex2MML_copy_string("⊳"); return MOL;} 662 "\\lhd" {yylval=itex2MML_copy_string("⊲"); return MOL;} 663 "\\lll" {yylval=itex2MML_copy_string("⋘"); return MOL;} 664 "\\unrhd" {yylval=itex2MML_copy_string("⊵"); return MOL;} 665 "\\unlhd" {yylval=itex2MML_copy_string("⊴"); return MOL;} 666 "\\Del" | 667 "\\nabla" {yylval=itex2MML_copy_string("∇"); return MOL;} 668 "\\sphericalangle" {yylval=itex2MML_copy_string("∢"); return MOL;} 669 670 "\\heartsuit" {yylval=itex2MML_copy_string("♡"); return MOL;} 671 "\\diamondsuit" {yylval=itex2MML_copy_string("♢"); return MOL;} 672 673 "\\partial" {yylval=itex2MML_copy_string("∂"); return MOL;} 674 675 "\\qed" {yylval=itex2MML_copy_string("▪"); return MO;} 676 677 "\\mod" {yylval=itex2MML_copy_string("mod"); return MOS;} 678 "\\pmod" {return PMOD;} 679 680 "\\bottom" {yylval=itex2MML_copy_string("⊥"); return MOL;} 681 682 "\\neg" {yylval=itex2MML_copy_string("¬"); return MOL;} 683 684 "\\neq" | 685 "\\ne" {yylval=itex2MML_copy_string("≠"); return MOL;} 686 687 "\\shortmid" | 688 "\\mid" {yylval=itex2MML_copy_string("∣"); return MOS;} 689 690 "\\int" | 691 "\\integral" {yylval=itex2MML_copy_string("∫"); return MOL;} 692 693 "\\iint" | 694 "\\doubleintegral" {yylval=itex2MML_copy_string("∬"); return MOL;} 695 696 "\\iiint" | 697 "\\tripleintegral" {yylval=itex2MML_copy_string("∭"); return MOL;} 698 699 "\\iiiint" | 700 "\\quadrupleintegral" {yylval=itex2MML_copy_string("⨌"); return MOL;} 701 702 "\\oint" | 703 "\\conint" | 704 "\\contourintegral" {yylval=itex2MML_copy_string("∮"); return MOL;} 705 706 "\\times" {yylval=itex2MML_copy_string("×"); return MOL;} 707 "\\star" {yylval=itex2MML_copy_string("⋆"); return MOL;} 708 "\\circleddash" | 709 "\\odash" {yylval=itex2MML_copy_string("⊝"); return MOL;} 710 711 "\\intercal" {yylval=itex2MML_copy_string("⊺"); return MOL;} 712 "\\smallfrown" {yylval=itex2MML_copy_string("⌢"); return MOL;} 713 "\\smallsmile" {yylval=itex2MML_copy_string("⌣"); return MOL;} 714 715 "\\boxminus" | 716 "\\minusb" {yylval=itex2MML_copy_string("⊟"); return MOL;} 717 "\\boxplus" | 718 "\\plusb" {yylval=itex2MML_copy_string("⊞"); return MOL;} 719 "\\boxtimes" | 720 "\\timesb" {yylval=itex2MML_copy_string("⊠"); return MOL;} 721 722 "\\sum" {yylval=itex2MML_copy_string("∑"); return MOB;} 723 724 "\\prod" | 725 "\\product" {yylval=itex2MML_copy_string("∏"); return MOB;} 726 727 "\\coprod" | 728 "\\coproduct" {yylval=itex2MML_copy_string("∐"); return MOB;} 729 730 "\\otimes" {yylval=itex2MML_copy_string("⊗"); return MOL;} 731 "\\Otimes" {yylval=itex2MML_copy_string("⨷"); return MOL;} 732 "\\bigotimes" {yylval=itex2MML_copy_string("⨂"); return MOL;} 733 734 "\\ominus" {yylval=itex2MML_copy_string("⊖"); return MOL;} 735 "\\oslash" {yylval=itex2MML_copy_string("⊘"); return MOL;} 736 737 "\\oplus" {yylval=itex2MML_copy_string("⊕"); return MOL;} 738 "\\Oplus" | 739 "\\bigoplus" {yylval=itex2MML_copy_string("⨁"); return MOB;} 740 741 "\\bigodot" {yylval=itex2MML_copy_string("⨀"); return MOB;} 742 "\\bigsqcup" {yylval=itex2MML_copy_string("⨆"); return MOB;} 743 "\\bigsqcap" {yylval=itex2MML_copy_string("⨅"); return MOB;} 744 "\\biginterleave" {yylval=itex2MML_copy_string("⫼"); return MOB;} 745 "\\biguplus" {yylval=itex2MML_copy_string("⨄"); return MOB;} 746 747 "\\wedge" {yylval=itex2MML_copy_string("∧"); return MOL;} 748 "\\Wedge" | 749 "\\bigwedge" {yylval=itex2MML_copy_string("⋀"); return MOB;} 750 751 "\\Vee" | 752 "\\bigvee" {yylval=itex2MML_copy_string("⋁"); return MOB;} 753 754 "\\invamp" | 755 "\\parr" {yylval=itex2MML_copy_string("⅋"); 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