/itexToMML

To download this project, use:
bzr branch http://golem.ph.utexas.edu/~distler/code/itexToMML/

« back to all changes in this revision

Viewing changes to itex-src/itex2MML.l

  • Committer: Jacques Distler
  • Date: 2010-09-07 16:54:25 UTC
  • Revision ID: distler@golem.ph.utexas.edu-20100907165425-wpbhtvqkn75av4qo
Tags: 1.4.0
itex2MML 1.4.0: Extensible Arrows

We now support extensible arrows,
with LaTeX-style optional arguments.

\xrightarrow[a]{b}

is (in MathML, though not in LaTeX)
equivalent to

\underoverset{a}{b}{\rightarrow}

while

\xrightarrow{b}

is (in MathML, though not in LaTeX)
equivalent to

\overset{b}{\rightarrow}

The supported arrows are

\xrightarrow
\xleftarrow
\xleftrightarrow
\xLeftarrow
\xRightarrow
\xLeftrightarrow
\xleftrightharpoons
\xrightleftharpoons
\xhookleftarrow
\xhookrightarrow
\xmapsto

Show diffs side-by-side

added added

removed removed

1
 
/*             itex2MML 1.3.27
2
 
 *   itex2MML.l last modified 9/3/2010
 
1
/*             itex2MML 1.4.0
 
2
 *   itex2MML.l last modified 9/7/2010
3
3
 */
4
4
 
5
5
%{
6
6
%}
7
7
%option noyywrap
8
 
%x MATH ATTRIBUTELIST BBOLD FRAKTUR CALLIGRAPHIC ROMAN PLAINTEXT INT1 INT2 INT3 MATHENV SVGENV SVGEND
 
8
%x MATH ATTRIBUTELIST BBOLD FRAKTUR CALLIGRAPHIC ROMAN PLAINTEXT INT1 INT2 INT3 MATHENV SVGENV SVGEND OPTARG
9
9
%{
10
10
#include <string.h>
11
11
 
24
24
extern char * yylval;
25
25
 
26
26
int itex2MML_lineno = 1;
 
27
int itex2MML_inoptarg = 0;
27
28
 
28
29
int itex2MML_rowposn = 0;
29
30
int itex2MML_displaymode = 0;
99
100
"("   |
100
101
"["             {yylval=itex2MML_copy_string(yytext); return LEFTDELIM;}
101
102
 
102
 
")"   |
103
 
"]"             {yylval=itex2MML_copy_string(yytext); return RIGHTDELIM;}
 
103
")"   {yylval=itex2MML_copy_string(yytext); return RIGHTDELIM;}
 
104
"]"             {if(itex2MML_inoptarg==1) {itex2MML_inoptarg=0; return OPTARGCLOSE;} else {yylval=itex2MML_copy_string(yytext); return RIGHTDELIM;}}
104
105
 
105
106
"\\lbrace" |
106
107
"\\{"           {yylval=itex2MML_copy_string("{"); return LEFTDELIM;}
366
367
"\\upharpoonleft"       |
367
368
"\\upharpoonright"   {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MOL;}
368
369
 
 
370
"\\xrightarrow"        |
 
371
"\\xleftarrow"         |
 
372
"\\xleftrightarrow"    |
 
373
"\\xLeftarrow"         |
 
374
"\\xRightarrow"        |
 
375
"\\xLeftrightarrow"    |
 
376
"\\xleftrightharpoons" |
 
377
"\\xrightleftharpoons" |
 
378
"\\xhookleftarrow"     |
 
379
"\\xhookrightarrow"    |
 
380
"\\xmapsto" {BEGIN(OPTARG); yylval=itex2MML_copy_string(yytext+1); if (yylval != itex2MML_empty_string) {yylval[0]='&'; yylval[yyleng-1]=';'; yylval[yyleng]='\0';} return XARROW;}
369
381
 
370
382
"\\dots" |
371
383
"\\ldots"  {yylval=itex2MML_copy_string("&hellip;"); return MI;}
912
924
 
913
925
<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;}
914
926
 
 
927
<OPTARG>{
 
928
"[" {itex2MML_inoptarg=1; BEGIN(MATH); return OPTARGOPEN;}
 
929
.   {BEGIN(MATH); unput(yytext[0]);}
 
930
}
 
931
 
915
932
<MATHENV>{
916
933
"\{matrix\}" {BEGIN(MATH); return MATRIX;}
917
934
"\{pmatrix\}" {BEGIN(MATH); return PMATRIX;}