/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: 2017-05-17 21:38:32 UTC
  • Revision ID: distler@golem.ph.utexas.edu-20170517213832-c8ss72aelc1fa8jm
Tags: 1.5.6
itex2MML 1.5.6

Support for:

  \overrightarrow{abc}
  \overleftarrow{abc}
  \␣
  inline equations delimited by \(...\)

Fixed bug in parsing

  \$

Show diffs side-by-side

added added

removed removed

1
 
/*             itex2MML 1.5.5
2
 
 *   itex2MML.y last modified 12/10/2016
 
1
/*             itex2MML 1.5.6
 
2
 *   itex2MML.y last modified 05/17/2017
3
3
 */
4
4
 
5
5
%parse-param {char **ret_str}
280
280
%}
281
281
 
282
282
%left TEXOVER TEXATOP
283
 
%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 SANS TT BOLD BOXED SLASHED RM BB ST END BBLOWERCHAR BBUPPERCHAR BBDIGIT CALCHAR FRAKCHAR CAL SCR FRAK CLAP LLAP RLAP ROWOPTS TEXTSIZE SCSIZE SCSCSIZE DISPLAY TEXTSTY TEXTBOX TEXTSTRING XMLSTRING CELLOPTS ROWSPAN COLSPAN THINSPACE MEDSPACE THICKSPACE QUAD QQUAD NEGSPACE NEGMEDSPACE NEGTHICKSPACE PHANTOM HREF UNKNOWNCHAR EMPTYMROW STATLINE TOOLTIP TOGGLE TOGGLESTART TOGGLEEND 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 RAISEBOX NEG
 
283
%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 SANS TT BOLD BOXED SLASHED RM BB ST END BBLOWERCHAR BBUPPERCHAR BBDIGIT CALCHAR FRAKCHAR CAL SCR FRAK CLAP LLAP RLAP ROWOPTS TEXTSIZE SCSIZE SCSCSIZE DISPLAY TEXTSTY TEXTBOX TEXTSTRING XMLSTRING CELLOPTS ROWSPAN COLSPAN THINSPACE MEDSPACE THICKSPACE QUAD QQUAD NEGSPACE NEGMEDSPACE NEGTHICKSPACE PHANTOM HREF UNKNOWNCHAR EMPTYMROW STATLINE TOOLTIP TOGGLE TOGGLESTART TOGGLEEND FGHIGHLIGHT BGHIGHLIGHT SPACE INTONE INTTWO INTTHREE BAR WIDEBAR VEC WIDEVEC WIDELVEC 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 RAISEBOX NEG
284
284
 
285
285
%%
286
286
 
543
543
| mover
544
544
| bar
545
545
| vec
 
546
| lvec
546
547
| hat
547
548
| dot
548
549
| ddot
1300
1301
};
1301
1302
 
1302
1303
vec: VEC closedTerm {
1303
 
  $$ = itex2MML_copy3("<mover>", $2, "<mo stretchy=\"false\">&RightVector;</mo></mover>");
 
1304
  $$ = itex2MML_copy3("<mover>", $2, "<mo stretchy=\"false\">&rightarrow;</mo></mover>");
1304
1305
  itex2MML_free_string($2);
1305
1306
}
1306
1307
| WIDEVEC closedTerm {
1307
 
  $$ = itex2MML_copy3("<mover>", $2, "<mo>&RightVector;</mo></mover>");
 
1308
  $$ = itex2MML_copy3("<mover>", $2, "<mo>&rightarrow;</mo></mover>");
 
1309
  itex2MML_free_string($2);
 
1310
};
 
1311
 
 
1312
lvec: WIDELVEC closedTerm {
 
1313
  $$ = itex2MML_copy3("<mover>", $2, "<mo>&leftarrow;</mo></mover>");
1308
1314
  itex2MML_free_string($2);
1309
1315
};
1310
1316
 
1830
1836
#define ITEX_DELIMITER_DOLLAR 0
1831
1837
#define ITEX_DELIMITER_DOUBLE 1
1832
1838
#define ITEX_DELIMITER_SQUARE 2
 
1839
#define ITEX_DELIMITER_PAREN  3
1833
1840
 
1834
1841
static char * itex2MML_last_error = 0;
1835
1842
 
1880
1887
      if (*ptr2 == '$') break;
1881
1888
      if ((*ptr2 == '\\') && (ptr2 + 1 < end))
1882
1889
        {
1883
 
          if (*(ptr2+1) == '[') break;
 
1890
          if (*(ptr2+1) == '[' || *(ptr2+1) == '(') break;
1884
1891
        }
1885
1892
      ++ptr2;
1886
1893
    }
1899
1906
          type = ITEX_DELIMITER_SQUARE;
1900
1907
          ptr2 += 2;
1901
1908
        }
 
1909
      else if ((*ptr2 == '\\') && (*(ptr2+1) == '('))
 
1910
        {
 
1911
          type = ITEX_DELIMITER_PAREN;
 
1912
          ptr2 += 2;
 
1913
        }
1902
1914
      else if ((*ptr2 == '$') && (*(ptr2+1) == '$'))
1903
1915
        {
1904
1916
          type = ITEX_DELIMITER_DOUBLE;
1927
1939
        case '\\':
1928
1940
          if (ptr2 + 1 < end)
1929
1941
            {
1930
 
              if (*(ptr2 + 1) == '[')
 
1942
              if (*(ptr2 + 1) == '[' || *(ptr2 + 1) == '(')
1931
1943
                {
1932
1944
                  skip = 1;
1933
1945
                }
1943
1955
                      skip = 1;
1944
1956
                    }
1945
1957
                }
 
1958
              else if (*(ptr2 + 1) == ')')
 
1959
                {
 
1960
                  if (type == ITEX_DELIMITER_PAREN)
 
1961
                    {
 
1962
                      ptr2 += 2;
 
1963
                      match = 1;
 
1964
                    }
 
1965
          else
 
1966
            {
 
1967
              skip = 1;
 
1968
            }
 
1969
        }
 
1970
 
1946
1971
            }
1947
1972
          break;
1948
1973
 
1949
1974
        case '$':
1950
 
          if (type == ITEX_DELIMITER_SQUARE)
 
1975
          if (*(ptr2-1) == '\\')
 
1976
            {
 
1977
              skip = 0;
 
1978
            }
 
1979
          else if (type == ITEX_DELIMITER_SQUARE || type == ITEX_DELIMITER_PAREN)
1951
1980
            {
1952
1981
              skip = 1;
1953
1982
            }