/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: 2009-03-24 06:15:34 UTC
  • Revision ID: distler@golem.ph.utexas.edu-20090324061534-eeyryfz25x45p6uc
Tags: 1.3.8
itex2MML 1.38: Support for Blackboard Bold Digits

Thanks to Jason Blevins.

Show diffs side-by-side

added added

removed removed

1
 
/*             itex2MML 1.3.2
2
 
 *   itex2MML.y last modified 11/10/2007
 
1
/*             itex2MML 1.3.8
 
2
 *   itex2MML.y last modified 3/23/2009
3
3
 */
4
4
 
5
5
%{
258
258
     return copy ? copy : itex2MML_empty_string;
259
259
   }
260
260
 
 
261
 /* Create a hex character reference string corresponding to code
 
262
  */
 
263
 char * itex2MML_character_reference (unsigned long int code)
 
264
   {
 
265
#define ENTITY_LENGTH 10
 
266
     char * entity = (char *) malloc(ENTITY_LENGTH);
 
267
     sprintf(entity, "&#x%05x;", code);
 
268
     return entity;
 
269
   }
 
270
 
261
271
 void itex2MML_free_string (char * str)
262
272
   {
263
273
     if (str && str != itex2MML_empty_string)
267
277
%}
268
278
 
269
279
%left TEXOVER TEXATOP
270
 
%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 MATHOP MOP MOL MOLL MOF PERIODDELIM OTHERDELIM LEFTDELIM RIGHTDELIM MOS MOB SQRT ROOT BINOM UNDER OVER OVERBRACE UNDERBRACE UNDEROVER TENSOR MULTI ARRAY COLSEP ROWSEP ARRAYOPTS COLLAYOUT COLALIGN ROWALIGN ALIGN EQROWS EQCOLS ROWLINES COLLINES FRAME PADDING ATTRLIST ITALICS BOLD SLASHED RM BB ST END BBLOWERCHAR BBUPPERCHAR CALCHAR FRAKCHAR CAL FRAK ROWOPTS TEXTSIZE SCSIZE SCSCSIZE DISPLAY TEXTSTY TEXTBOX TEXTSTRING XMLSTRING CELLOPTS ROWSPAN COLSPAN THINSPACE MEDSPACE THICKSPACE QUAD QQUAD NEGSPACE PHANTOM HREF UNKNOWNCHAR EMPTYMROW STATLINE TOGGLE FGHIGHLIGHT BGHIGHLIGHT SPACE INTONE INTTWO INTTHREE BAR WIDEBAR VEC WIDEVEC HAT WIDEHAT CHECK WIDECHECK TILDE WIDETILDE DOT DDOT UNARYMINUS UNARYPLUS BEGINENV ENDENV MATRIX PMATRIX BMATRIX BBMATRIX VMATRIX VVMATRIX SVG ENDSVG SMALLMATRIX CASES ALIGNED GATHERED SUBSTACK PMOD RMCHAR COLOR BGCOLOR
 
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 MATHOP MOP MOL MOLL MOF PERIODDELIM OTHERDELIM LEFTDELIM RIGHTDELIM MOS MOB SQRT ROOT BINOM UNDER OVER OVERBRACE UNDERBRACE UNDEROVER TENSOR MULTI ARRAY COLSEP ROWSEP ARRAYOPTS COLLAYOUT COLALIGN ROWALIGN ALIGN EQROWS EQCOLS ROWLINES COLLINES FRAME PADDING ATTRLIST ITALICS BOLD SLASHED RM BB ST END BBLOWERCHAR BBUPPERCHAR BBDIGIT CALCHAR FRAKCHAR CAL FRAK ROWOPTS TEXTSIZE SCSIZE SCSCSIZE DISPLAY TEXTSTY TEXTBOX TEXTSTRING XMLSTRING CELLOPTS ROWSPAN COLSPAN THINSPACE MEDSPACE THICKSPACE QUAD QQUAD NEGSPACE PHANTOM HREF UNKNOWNCHAR EMPTYMROW STATLINE TOGGLE FGHIGHLIGHT BGHIGHLIGHT SPACE INTONE INTTWO INTTHREE BAR WIDEBAR VEC WIDEVEC HAT WIDEHAT CHECK WIDECHECK TILDE WIDETILDE DOT DDOT UNARYMINUS UNARYPLUS BEGINENV ENDENV MATRIX PMATRIX BMATRIX BBMATRIX VMATRIX VVMATRIX SVG ENDSVG SMALLMATRIX CASES ALIGNED GATHERED SUBSTACK PMOD RMCHAR COLOR BGCOLOR
271
281
 
272
282
%%
273
283
 
909
919
  itex2MML_free_string($2);
910
920
};
911
921
 
912
 
bbold: BB ST bbletters END {
 
922
bbold: BB ST bbchars END {
913
923
  $$ = itex2MML_copy3("<mi>", $3, "</mi>");
914
924
  itex2MML_free_string($3);
915
925
};
916
926
 
917
 
bbletters: bbletter {
 
927
bbchars: bbchar {
918
928
  $$ = itex2MML_copy_string($1);
919
929
  itex2MML_free_string($1);
920
930
}
921
 
| bbletters bbletter {
 
931
| bbchars bbchar {
922
932
  $$ = itex2MML_copy2($1, $2);
923
933
  itex2MML_free_string($1);
924
934
  itex2MML_free_string($2);
925
935
};
926
936
 
927
 
bbletter: BBLOWERCHAR {
 
937
bbchar: BBLOWERCHAR {
928
938
  $$ = itex2MML_copy3("&", $1, "opf;");
929
939
  itex2MML_free_string($1);
930
940
}
931
941
| BBUPPERCHAR {
932
942
  $$ = itex2MML_copy3("&", $1, "opf;");
933
943
  itex2MML_free_string($1);
 
944
}
 
945
| BBDIGIT {
 
946
  /* Blackboard digits 0-9 correspond to Unicode characters 0x1D7D8-0x1D7E1 */
 
947
  char * end = $1 + 1;
 
948
  int code = 0x1D7D8 + strtoul($1, &end, 10);
 
949
  $$ = itex2MML_character_reference(code);
 
950
  itex2MML_free_string($1);
934
951
};
935
952
 
936
953
frak: FRAK ST frakletters END {