/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.y

  • Committer: Jacques Distler
  • Date: 2011-07-07 14:47:43 UTC
  • Revision ID: distler@golem.ph.utexas.edu-20110707144743-3yb92952nkjti5ha
Tags: 1.4.6
itex2MML 1.4.6

* Emit MathML3  @href attribute (along with
MathML2 @xlink:href).
* More intelligent number parsing.
* New itex command: \itexnum{} (forces
itex2MML to interpret the argument as
a number)
* Some C fixes (in IFDEFed code, which is
*not* normally used) from Alexandre P.

Show diffs side-by-side

added added

removed removed

1
 
/*             itex2MML 1.4.5
2
 
 *   itex2MML.y last modified 10/2/2010
 
1
/*             itex2MML 1.4.6
 
2
 *   itex2MML.y last modified 7/7/2011
3
3
 */
4
4
 
5
5
%{
59
59
 
60
60
    const char * itex2MML_output ()
61
61
    {
62
 
        char * copy = (char *) malloc(strlen(itex2MML_output_string) +1);
 
62
        char * copy = (char *) malloc((itex2MML_output_string ? strlen(itex2MML_output_string) : 0) + 1);
63
63
        if (copy)
64
64
          {
65
65
           if (itex2MML_output_string)
66
66
             {
67
67
               strcpy(copy, itex2MML_output_string);
68
 
               if (itex2MML_output_string != "")
 
68
               if (*itex2MML_output_string != '\0')
69
69
                   free(itex2MML_output_string);
70
70
             }
71
71
           else
72
72
             copy[0] = 0;
 
73
           itex2MML_output_string = "";
73
74
          }
74
 
        itex2MML_output_string = "";
75
75
        return copy;
76
76
    }
77
77
 
88
88
                  if (itex2MML_output_string)
89
89
                    {
90
90
                       strcpy(copy, itex2MML_output_string);
91
 
                       if (itex2MML_output_string != "")
 
91
                       if (*itex2MML_output_string != '\0')
92
92
                          free(itex2MML_output_string);
93
93
                    }
94
94
                  else
95
95
                     copy[0] = 0;
96
96
                  strncat(copy, buffer, length);
 
97
                  itex2MML_output_string = copy;
97
98
                 }
98
 
              itex2MML_output_string = copy;
99
99
            }
100
100
         else
101
101
            {
102
102
              char * copy = itex2MML_copy2(itex2MML_output_string, buffer);
103
 
              if (itex2MML_output_string != "")
 
103
              if (*itex2MML_output_string != '\0')
104
104
                 free(itex2MML_output_string);
105
105
              itex2MML_output_string = copy;
106
106
            }
110
110
    static void itex2MML_capture_mathml (const char * buffer)
111
111
    {
112
112
       char * temp = itex2MML_copy2(itex2MML_output_string, buffer);
113
 
       if (itex2MML_output_string != "")
 
113
       if (*itex2MML_output_string != '\0')
114
114
         free(itex2MML_output_string);
115
115
       itex2MML_output_string = temp;
116
116
    }
277
277
%}
278
278
 
279
279
%left TEXOVER TEXATOP
280
 
%token CHAR STARTMATH STARTDMATH ENDMATH MI MIB MN MO SUP SUB MROWOPEN MROWCLOSE LEFT RIGHT BIG BBIG BIGG BBIGG BIGL BBIGL BIGGL BBIGGL FRAC TFRAC OPERATORNAME MATHOP MATHBIN MATHREL MOP MOL MOLL MOF MOR PERIODDELIM OTHERDELIM LEFTDELIM RIGHTDELIM MOS MOB SQRT ROOT BINOM TBINOM UNDER OVER OVERBRACE UNDERLINE UNDERBRACE UNDEROVER TENSOR MULTI ARRAYALIGN COLUMNALIGN ARRAY COLSEP ROWSEP ARRAYOPTS COLLAYOUT COLALIGN ROWALIGN ALIGN EQROWS EQCOLS ROWLINES COLLINES FRAME PADDING ATTRLIST ITALICS BOLD BOXED SLASHED RM BB ST END BBLOWERCHAR BBUPPERCHAR BBDIGIT CALCHAR FRAKCHAR CAL FRAK CLAP LLAP RLAP ROWOPTS TEXTSIZE SCSIZE SCSCSIZE DISPLAY TEXTSTY TEXTBOX TEXTSTRING XMLSTRING CELLOPTS ROWSPAN COLSPAN THINSPACE MEDSPACE THICKSPACE QUAD QQUAD NEGSPACE PHANTOM HREF UNKNOWNCHAR EMPTYMROW STATLINE TOOLTIP TOGGLE FGHIGHLIGHT BGHIGHLIGHT SPACE INTONE INTTWO INTTHREE BAR WIDEBAR VEC WIDEVEC HAT WIDEHAT CHECK WIDECHECK TILDE WIDETILDE DOT DDOT DDDOT DDDDOT UNARYMINUS UNARYPLUS BEGINENV ENDENV MATRIX PMATRIX BMATRIX BBMATRIX VMATRIX VVMATRIX SVG ENDSVG SMALLMATRIX CASES ALIGNED GATHERED SUBSTACK PMOD RMCHAR COLOR BGCOLOR XARROW OPTARGOPEN OPTARGCLOSE
 
280
%token CHAR STARTMATH STARTDMATH ENDMATH MI MIB MN MO SUP SUB MROWOPEN MROWCLOSE LEFT RIGHT BIG BBIG BIGG BBIGG BIGL BBIGL BIGGL BBIGGL FRAC TFRAC OPERATORNAME MATHOP MATHBIN MATHREL MOP MOL MOLL MOF MOR PERIODDELIM OTHERDELIM LEFTDELIM RIGHTDELIM MOS MOB SQRT ROOT BINOM TBINOM UNDER OVER OVERBRACE UNDERLINE UNDERBRACE UNDEROVER TENSOR MULTI ARRAYALIGN COLUMNALIGN ARRAY COLSEP ROWSEP ARRAYOPTS COLLAYOUT COLALIGN ROWALIGN ALIGN EQROWS EQCOLS ROWLINES COLLINES FRAME PADDING ATTRLIST ITALICS BOLD BOXED SLASHED RM BB ST END BBLOWERCHAR BBUPPERCHAR BBDIGIT CALCHAR FRAKCHAR CAL FRAK CLAP LLAP RLAP ROWOPTS TEXTSIZE SCSIZE SCSCSIZE DISPLAY TEXTSTY TEXTBOX TEXTSTRING XMLSTRING CELLOPTS ROWSPAN COLSPAN THINSPACE MEDSPACE THICKSPACE QUAD QQUAD NEGSPACE PHANTOM HREF UNKNOWNCHAR EMPTYMROW STATLINE TOOLTIP TOGGLE FGHIGHLIGHT BGHIGHLIGHT SPACE INTONE INTTWO INTTHREE BAR WIDEBAR VEC WIDEVEC HAT WIDEHAT CHECK WIDECHECK TILDE WIDETILDE DOT DDOT DDDOT DDDDOT UNARYMINUS UNARYPLUS BEGINENV ENDENV MATRIX PMATRIX BMATRIX BBMATRIX VMATRIX VVMATRIX SVG ENDSVG SMALLMATRIX CASES ALIGNED GATHERED SUBSTACK PMOD RMCHAR COLOR BGCOLOR XARROW OPTARGOPEN OPTARGCLOSE ITEXNUM
281
281
 
282
282
%%
283
283
 
743
743
  itex2MML_free_string($1);
744
744
};
745
745
 
746
 
mn: MN;
 
746
mn: MN
 
747
| ITEXNUM TEXTSTRING {
 
748
  itex2MML_rowposn = 2;
 
749
  $$ = itex2MML_copy_string($2);
 
750
  itex2MML_free_string($2);
 
751
};
747
752
 
748
753
mob: MOB {
749
754
  itex2MML_rowposn = 2;
1072
1077
};
1073
1078
 
1074
1079
href: HREF TEXTSTRING closedTerm {
1075
 
  char * s1 = itex2MML_copy3("<mrow xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"", $2, "\">");
1076
 
  $$ = itex2MML_copy3(s1, $3, "</mrow>");
 
1080
  char * s1 = itex2MML_copy3("<mrow href=\"", $2, "\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"");
 
1081
  char * s2 = itex2MML_copy3(s1, $2, "\">");
 
1082
  $$ = itex2MML_copy3(s2, $3, "</mrow>");
1077
1083
  itex2MML_free_string(s1);
 
1084
  itex2MML_free_string(s2);
1078
1085
  itex2MML_free_string($2);
1079
1086
  itex2MML_free_string($3);
1080
1087
};