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 "&" | 96 "&" {itex2MML_rowposn=2; return COLSEP;} 97 98 "\\&" {yylval=itex2MML_copy_string("&"); 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("∞"); 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("|"); return OTHERDELIM;} 126 "\\Vert" | 127 "\\|" {yylval=itex2MML_copy_string("‖"); return OTHERDELIM;} 128 129 "\\setminus" {yylval=itex2MML_copy_string("∖"); return MO;} 130 "\\backslash" {yylval=itex2MML_copy_string("\"); return MO;} 131 "\\smallsetminus" {yylval=itex2MML_copy_string("﹨"); return MOF;} 132 133 "\\sslash" {yylval=itex2MML_copy_string("⫽"); 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("⟪"); 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("⟫"); 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("−"); 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("′"); return MOLL;} 175 "'" {yylval=itex2MML_copy_string("′"); return MOL;} 176 "''" {yylval=itex2MML_copy_string("″"); return MOL;} 177 "'''" {yylval=itex2MML_copy_string("‴"); return MOL;} 178 "''''" {yylval=itex2MML_copy_string("⁗"); 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("ε"); return MI;} 209 "\\phi" {yylval=itex2MML_copy_string("ϕ"); return MI;} 210 "\\varphi" {yylval=itex2MML_copy_string("φ"); 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("ℴ"); return MI;} 247 248 "\\epsilon" {yylval=itex2MML_copy_string("ε"); return MI;} 249 250 "\\cdot" {yylval=itex2MML_copy_string("⋅"); 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("ϒ"); return MI;} 277 278 "\\iff" | 279 "\\Longleftrightarrow" {yylval=itex2MML_copy_string("⇔"); return MOL;} 280 281 "\\Leftrightarrow" {yylval=itex2MML_copy_string("⇔"); return MOL;} 282 283 "\\impliedby" | 284 "\\Leftarrow" {yylval=itex2MML_copy_string("⇐"); return MOL;} 285 286 "\\implies" | 287 "\\Rightarrow" {yylval=itex2MML_copy_string("⇒"); return MOL;} 288 289 "\\hookleftarrow" {yylval=itex2MML_copy_string("↩"); return MOL;} 290 291 "\\embedsin" | 292 "\\hookrightarrow" {yylval=itex2MML_copy_string("↪"); return MOL;} 293 294 "\\longleftarrow" {yylval=itex2MML_copy_string("⟵"); return MOL;} 295 296 "\\longrightarrow" {yylval=itex2MML_copy_string("⟶"); return MOL;} 297 298 "\\leftarrow" {yylval=itex2MML_copy_string("←"); return MOL;} 299 300 "\\to" | 301 "\\rightarrow" {yylval=itex2MML_copy_string("→"); return MOL;} 302 303 "\\leftrightarrow" {yylval=itex2MML_copy_string("↔"); return MOL;} 304 305 "\\mapsto" | 306 "\\map" {yylval=itex2MML_copy_string("↦"); return MOL;} 307 308 "\\nearrow" | 309 "\\nearr" {yylval=itex2MML_copy_string("↗"); return MOL;} 310 311 "\\nwarrow" | 312 "\\nwarr" {yylval=itex2MML_copy_string("↖"); return MOL;} 313 314 "\\searrow" | 315 "\\searr" {yylval=itex2MML_copy_string("↘"); return MOL;} 316 317 "\\swarrow" | 318 "\\swarr" {yylval=itex2MML_copy_string("↙"); return MOL;} 319 320 "\\neArrow" | 321 "\\neArr" {yylval=itex2MML_copy_string("⇗"); return MOL;} 322 323 "\\nwArrow" | 324 "\\nwArr" {yylval=itex2MML_copy_string("⇖"); return MOL;} 325 326 "\\seArrow" | 327 "\\seArr" {yylval=itex2MML_copy_string("⇘"); return MOL;} 328 329 "\\swArrow" | 330 "\\swArr" {yylval=itex2MML_copy_string("⇙"); return MOL;} 331 332 "\\darr" {yylval=itex2MML_copy_string("↓"); return MOL;} 333 334 "\\Downarrow" {yylval=itex2MML_copy_string("⇓"); return MOL;} 335 336 "\\uparr" {yylval=itex2MML_copy_string("↑"); return MOL;} 337 338 "\\Uparrow" {yylval=itex2MML_copy_string("⇑"); return MOL;} 339 340 "\\downuparrow" | 341 "\\duparr" | 342 "\\updarr" {yylval=itex2MML_copy_string("↕"); return MOL;} 343 344 "\\Updownarrow" {yylval=itex2MML_copy_string("⇕"); return MOL;} 345 346 "\\leftsquigarrow" {yylval=itex2MML_copy_string("⇜"); return MOL;} 347 "\\rightsquigarrow" {yylval=itex2MML_copy_string("⇝"); return MOL;} 348 "\\dashleftarrow" {yylval=itex2MML_copy_string("⤎"); return MOL;} 349 "\\dashrightarrow" {yylval=itex2MML_copy_string("⤏"); return MOL;} 350 "\\curvearrowbotright" {yylval=itex2MML_copy_string("⤻"); return MOL;} 351 "\\righttoleftarrow" {yylval=itex2MML_copy_string("⟲"); return MOL;} 352 "\\lefttorightarrow" {yylval=itex2MML_copy_string("⟳"); 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("…"); return MI;} 405 "\\cdots" {yylval=itex2MML_copy_string("⋯"); return MI;} 406 "\\ddots" {yylval=itex2MML_copy_string("⋱"); return MI;} 407 "\\udots" {yylval=itex2MML_copy_string("⋰"); return MI;} 408 "\\vdots" {yylval=itex2MML_copy_string("⋮"); return MI;} 409 "\\colon" {yylval=itex2MML_copy_string(":"); return MOR;} 410 411 "\\cup" | 412 "\&union;" | 413 "\\union" {yylval=itex2MML_copy_string("∪"); return MOL;} 414 415 "\\bigcup" | 416 "\\Union" | 417 "\⋃" {yylval=itex2MML_copy_string("⋃"); return MOB;} 418 419 "\\cap" | 420 "\\intersection" {yylval=itex2MML_copy_string("∩"); return MOL;} 421 422 "\\bigcap" | 423 "\\Intersection" {yylval=itex2MML_copy_string("⋂"); return MOB;} 424 425 "\\in" {yylval=itex2MML_copy_string("∈"); 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("≔"); return MOL;} 431 "\\Coloneqq" {yylval=itex2MML_copy_string("⩴"); return MOS;} 432 "\\coloneq" {yylval=itex2MML_copy_string("∶−"); return MOS;} 433 "\\Coloneq" {yylval=itex2MML_copy_string("∷−"); return MOS;} 434 "\\eqqcolon" {yylval=itex2MML_copy_string("≕"); return MOS;} 435 "\\Eqqcolon" {yylval=itex2MML_copy_string("=∷"); return MOS;} 436 "\\eqcolon" {yylval=itex2MML_copy_string("∹"); return MOS;} 437 "\\Eqcolon" {yylval=itex2MML_copy_string("−∷"); return MOS;} 438 "\\colonapprox" {yylval=itex2MML_copy_string("∶≈"); return MOS;} 439 "\\Colonapprox" {yylval=itex2MML_copy_string("∷≈"); return MOS;} 440 "\\colonsim" {yylval=itex2MML_copy_string("∶∼"); return MOS;} 441 "\\Colonsim" {yylval=itex2MML_copy_string("∷∼"); return MOS;} 442 "\\dblcolon" {yylval=itex2MML_copy_string("∷"); 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("⫫"); return MOL;} 669 "\\boxdot" {yylval=itex2MML_copy_string("⊡"); return MOL;} 670 "\\Box" | 671 "\\square" {yylval=itex2MML_copy_string("□"); return MOL;} 672 "\\emptyset" | 673 "\\empty" {yylval=itex2MML_copy_string("∅"); return MI;} 674 "\\exists" {yylval=itex2MML_copy_string("∃"); return MOL;} 675 "\\circ" {yylval=itex2MML_copy_string("∘"); return MOL;} 676 "\\rhd" {yylval=itex2MML_copy_string("⊳"); return MOL;} 677 "\\lhd" {yylval=itex2MML_copy_string("⊲"); return MOL;} 678 "\\lll" {yylval=itex2MML_copy_string("⋘"); return MOL;} 679 "\\unrhd" {yylval=itex2MML_copy_string("⊵"); return MOL;} 680 "\\unlhd" {yylval=itex2MML_copy_string("⊴"); return MOL;} 681 "\\Del" | 682 "\\nabla" {yylval=itex2MML_copy_string("∇"); return MOL;} 683 "\\sphericalangle" {yylval=itex2MML_copy_string("∢"); return MOL;} 684 685 "\\heartsuit" {yylval=itex2MML_copy_string("♡"); return MOL;} 686 "\\diamondsuit" {yylval=itex2MML_copy_string("♢"); return MOL;} 687 688 "\\partial" {yylval=itex2MML_copy_string("∂"); return MOL;} 689 690 "\\qed" {yylval=itex2MML_copy_string("▪"); return MO;} 691 692 "\\mod" {yylval=itex2MML_copy_string("mod"); return MOS;} 693 "\\pmod" {return PMOD;} 694 695 "\\bottom" {yylval=itex2MML_copy_string("⊥"); return MOL;} 696 697 "\\neg" {yylval=itex2MML_copy_string("¬"); return MOL;} 698 699 "\\neq" | 700 "\\ne" {yylval=itex2MML_copy_string("≠"); return MOL;} 701 702 "\\shortmid" | 703 "\\mid" {yylval=itex2MML_copy_string("∣"); return MOS;} 704 705 "\\int" | 706 "\\integral" {yylval=itex2MML_copy_string("∫"); return MOL;} 707 708 "\\iint" | 709 "\\doubleintegral" {yylval=itex2MML_copy_string("∬"); return MOL;} 710 711 "\\iiint" | 712 "\\tripleintegral" {yylval=itex2MML_copy_string("∭"); return MOL;} 713 714 "\\iiiint" | 715 "\\quadrupleintegral" {yylval=itex2MML_copy_string("⨌"); return MOL;} 716 717 "\\oint" | 718 "\\conint" | 719 "\\contourintegral" {yylval=itex2MML_copy_string("∮"); return MOL;} 720 721 "\\times" | 722 "\\*" {yylval=itex2MML_copy_string("×"); return MOL;} 723 "\\star" {yylval=itex2MML_copy_string("⋆"); return MOL;} 724 "\\circleddash" | 725 "\\odash" {yylval=itex2MML_copy_string("⊝"); return MOL;} 726 727 "\\intercal" {yylval=itex2MML_copy_string("⊺"); return MOL;} 728 "\\smallfrown" {yylval=itex2MML_copy_string("⌢"); return MOL;} 729 "\\smallsmile" {yylval=itex2MML_copy_string("⌣"); return MOL;} 730 731 "\\boxminus" | 732 "\\minusb" {yylval=itex2MML_copy_string("⊟"); return MOL;} 733 "\\boxplus" | 734 "\\plusb" {yylval=itex2MML_copy_string("⊞"); return MOL;} 735 "\\boxtimes" | 736 "\\timesb" {yylval=itex2MML_copy_string("⊠"); return MOL;} 737 738 "\\sum" {yylval=itex2MML_copy_string("∑"); return MOB;} 739 740 "\\prod" | 741 "\\product" {yylval=itex2MML_copy_string("∏"); return MOB;} 742 743 "\\coprod" | 744 "\\coproduct" {yylval=itex2MML_copy_string("∐"); return MOB;} 745 746 "\\otimes" {yylval=itex2MML_copy_string("⊗"); return MOL;} 747 "\\Otimes" {yylval=itex2MML_copy_string("⨷"); return MOL;} 748 "\\bigotimes" {yylval=itex2MML_copy_string("⨂"); return MOL;} 749 750 "\\ominus" {yylval=itex2MML_copy_string("⊖"); return MOL;} 751 "\\oslash" {yylval=itex2MML_copy_string("⊘"); return MOL;} 752 753 "\\oplus" {yylval=itex2MML_copy_string("⊕"); return MOL;} 754 "\\Oplus" | 755 "\\bigoplus" {yylval=itex2MML_copy_string("⨁"); return MOB;} 756 757 "\\bigodot" {yylval=itex2MML_copy_string("⨀"); return MOB;} 758 "\\bigsqcup" {yylval=itex2MML_copy_string("⨆"); return MOB;} 759 "\\bigsqcap" {yylval=itex2MML_copy_string("⨅"); return MOB;} 760 "\\biginterleave" {yylval=itex2MML_copy_string("⫼"); return MOB;} 761 "\\biguplus" {yylval=itex2MML_copy_string("⨄"); return MOB;} 762 763 "\\wedge" {yylval=itex2MML_copy_string("∧"); return MOL;} 764 "\\Wedge" | 765 "\\bigwedge" {yylval=itex2MML_copy_string("⋀"); return MOB;} 766 767 "\\Vee" | 768 "\\bigvee" {yylval=itex2MML_copy_string("⋁"); return MOB;} 769 770 "\\invamp" | 771 "\\parr" {yylval=itex2MML_copy_string("⅋"); 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