/itexToMML

To download this project, use:
bzr branch http://golem.ph.utexas.edu/~distler/code/itexToMML/
66 by Jacques Distler
itex2MML 1.5.0beta
1
/*             itex2MML 1.5.0
2
 *   itex2MML.l last modified 12/8/2013
1 by Jacques Distler
Initial commit.
3
 */
4
5
%{
6
%}
7
%option noyywrap
61 by Jacques Distler
itex2MML 1.4.7: \mathraisebox{voffset}[height][depth]{content}
8
%x MATH ATTRIBUTELIST BBOLD FRAKTUR CALLIGRAPHIC ROMAN PLAINTEXT INT1 INT2 INT3 MATHENV SVGENV SVGEND OPTARG ARRAYOPTIONS COLOPTS TEXTOPTARG TEXTOPTARG1 RAISEBOX1 RAISEBOX2
1 by Jacques Distler
Initial commit.
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 int s_itex2MML_read (char * buffer, int max_size);
21
22
#define yylval itex2MML_yylval
58 by Jacques Distler
Nested Extensible Arrows
23
#define itex2MML_optarg_depth 100
1 by Jacques Distler
Initial commit.
24
25
extern char * yylval;
26
27
int itex2MML_lineno = 1;
58 by Jacques Distler
Nested Extensible Arrows
28
int itex2MML_inoptarg[itex2MML_optarg_depth];
29
int itex2MML_optarg_ind = 0;
59 by Jacques Distler
itex2MML 1.4.5: Array Environment
30
int itex2MML_env_start = 0;
1 by Jacques Distler
Initial commit.
31
66 by Jacques Distler
itex2MML 1.5.0beta
32
#define YY_USER_ACTION itex2MML_capture_eqn_src();
33
# define itex2MML_eqn_bufsize 131072
70 by Jacques Distler
itex2MML 1.5.0
34
char itex2MML_eqn_src[itex2MML_eqn_bufsize];
35
char * itex2MML_eqn_end = itex2MML_eqn_src;
66 by Jacques Distler
itex2MML 1.5.0beta
36
1 by Jacques Distler
Initial commit.
37
int itex2MML_rowposn = 0;
38
int itex2MML_displaymode = 0;
58 by Jacques Distler
Nested Extensible Arrows
39
1 by Jacques Distler
Initial commit.
40
%} 
41
%%
42
%{ if (itex2MML_rowposn==1) itex2MML_rowposn=0;
43
   if (itex2MML_rowposn==2) itex2MML_rowposn=1;
44
%}
45
58 by Jacques Distler
Nested Extensible Arrows
46
<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;
47
<INITIAL>"\\[" BEGIN(MATH); itex2MML_inoptarg[0] = 0; itex2MML_rowposn=2; itex2MML_displaymode=1; return STARTDMATH;
1 by Jacques Distler
Initial commit.
48
<INITIAL>EOF    return 0;
49
<INITIAL>"\n" {itex2MML_lineno++; yylval=itex2MML_copy_string(yytext); return CHAR;}
50
<INITIAL>.     {yylval=itex2MML_copy_string(yytext); return CHAR;}
51
52
53
<MATH>{
54
55
56
57
"$"{1,2} |
70 by Jacques Distler
itex2MML 1.5.0
58
"\\]"           {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;}
1 by Jacques Distler
Initial commit.
59
18 by Jacques Distler
Minor Tweaks
60
1 by Jacques Distler
Initial commit.
61
"^"            return SUP;
62
"_"            return SUB; 
63
"{"[\t\r\n ]*"}"   return EMPTYMROW;
59 by Jacques Distler
itex2MML 1.4.5: Array Environment
64
"{"            {itex2MML_rowposn = 2; if(itex2MML_inoptarg[itex2MML_optarg_ind] != 0) itex2MML_inoptarg[itex2MML_optarg_ind]++; return MROWOPEN;}
65
"}"            {if(itex2MML_inoptarg[itex2MML_optarg_ind] != 0) itex2MML_inoptarg[itex2MML_optarg_ind]--; return MROWCLOSE;}
1 by Jacques Distler
Initial commit.
66
67
"\\left"       itex2MML_rowposn=2; return LEFT;
68
"\\right"      return RIGHT;
69
70
"\\big"   |
71
"\\bigr"  {return BIG;}
72
"\\Big"   |
73
"\\Bigr"  {return BBIG;}
74
"\\bigg"  |
75
"\\biggr" {return BIGG;}
76
"\\Bigg"  |
77
"\\Biggr" {return BBIGG;}
78
79
"\\bigl"  {return BIGL;}
80
"\\Bigl"  {return BBIGL;}
81
"\\biggl" {return BIGGL;}
82
"\\Biggl" {return BBIGGL;}
83
37 by Jacques Distler
itex2MML 1.3.13
84
"\\mathrlap"  {return RLAP;}
85
"\\mathllap"  {return LLAP;}
86
"\\mathclap"  {return CLAP;}
87
"\\rlap" |
1 by Jacques Distler
Initial commit.
88
"\\llap" |
89
"\\ulap" |
90
"\\dlap"               {/* Ignore */ ;}
91
92
93
"&amp;" |
94
"&"         {itex2MML_rowposn=2; return COLSEP;}
95
96
"\\&"           {yylval=itex2MML_copy_string("&amp;"); return MI;}
97
98
"\\$"           {yylval=itex2MML_copy_string("$"); return MI;}
99
"\\%"           {yylval=itex2MML_copy_string("%"); return MI;}
100
101
"\\\\"          itex2MML_rowposn=2; return ROWSEP;
102
103
[a-zA-Z]+       {yylval=itex2MML_copy_string(yytext); return MI;}
104
60 by Jacques Distler
itex2MML 1.4.6
105
[0-9]{1,3}(,[0-9]{3,3})*(\.[0-9]+)? |
106
[0-9]*[\.][0-9]+                   |
107
[0-9]+           {yylval=itex2MML_copy_string(yytext); return MN;}
1 by Jacques Distler
Initial commit.
108
"\\infty"   |
109
"\\infinity"     {yylval=itex2MML_copy_string("&infin;"); return MN;}
110
111
"("   |
112
"["             {yylval=itex2MML_copy_string(yytext); return LEFTDELIM;}
113
54 by Jacques Distler
itex2MML 1.4.0: Extensible Arrows
114
")"   {yylval=itex2MML_copy_string(yytext); return RIGHTDELIM;}
58 by Jacques Distler
Nested Extensible Arrows
115
"]"   {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;}}
1 by Jacques Distler
Initial commit.
116
117
"\\lbrace" |
118
"\\{"           {yylval=itex2MML_copy_string("{"); return LEFTDELIM;}
119
"\\rbrace" |
120
"\\}"           {yylval=itex2MML_copy_string("}"); return RIGHTDELIM;}
121
122
"\\vert" |
123
"|"             {yylval=itex2MML_copy_string("&VerticalBar;"); return OTHERDELIM;}
124
"\\Vert" |
125
"\\|"           {yylval=itex2MML_copy_string("&DoubleVerticalBar;"); return OTHERDELIM;}
126
127
"\\setminus"   {yylval=itex2MML_copy_string("&setminus;"); return MO;}
128
"\\backslash"   {yylval=itex2MML_copy_string("&bsol;"); return MO;}
129
"\\smallsetminus"   {yylval=itex2MML_copy_string("&#xFE68;"); return MOF;}
130
52 by Jacques Distler
itex2MML 1.3.26
131
"\\sslash" {yylval=itex2MML_copy_string("&parsl;"); return MO;}
30 by Jacques Distler
Version 1.3.6: \sslash
132
1 by Jacques Distler
Initial commit.
133
"\\lfloor" |
134
"\\lceil"  |
65 by Jacques Distler
itex2MML 1.4.11
135
"\\lmoustache" |
1 by Jacques Distler
Initial commit.
136
"\\lang"   |
137
"\\langle"      {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return LEFTDELIM;}
65 by Jacques Distler
itex2MML 1.4.11
138
"\\llangle"     {yylval=itex2MML_copy_string("&Lang;"); return LEFTDELIM;}
1 by Jacques Distler
Initial commit.
139
140
"\\rfloor" |
141
"\\rceil"  |
65 by Jacques Distler
itex2MML 1.4.11
142
"\\rmoustache" |
1 by Jacques Distler
Initial commit.
143
"\\rang"   |
144
"\\rangle"      {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return RIGHTDELIM;}
65 by Jacques Distler
itex2MML 1.4.11
145
"\\rrangle"     {yylval=itex2MML_copy_string("&Rang;"); return RIGHTDELIM;}
1 by Jacques Distler
Initial commit.
146
147
"/"             {yylval=itex2MML_copy_string(yytext); return OTHERDELIM;}
148
149
"\\uparrow"   |
150
"\\downarrow" |
151
"\\updownarrow" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return OTHERDELIM;}
152
153
"."             {yylval=itex2MML_copy_string(yytext); return PERIODDELIM;}
154
155
"-"    {if (itex2MML_rowposn==1) return UNARYMINUS; else {yylval=itex2MML_copy_string("&minus;"); return MO;}}
156
157
"+"    {if (itex2MML_rowposn==1) return UNARYPLUS; else {yylval=itex2MML_copy_string("+"); return MO;}}
158
17 by Jacques Distler
itex2MML 1.2.3
159
"\\#" {yylval=itex2MML_copy_string("#"); return MOL;}
160
1 by Jacques Distler
Initial commit.
161
","   |
162
":"   |
163
"!"   |
164
"="   |
165
"~"   |
166
";"   |
167
"?"   |
168
"#"   |
169
"`"   |
170
"*"        {yylval=itex2MML_copy_string(yytext); return MOL;}
171
18 by Jacques Distler
Minor Tweaks
172
"\\prime"  {yylval=itex2MML_copy_string("&prime;"); return MOLL;}
12 by Jacques Distler
Fixed TeX primes.
173
"'"        {yylval=itex2MML_copy_string("&prime;"); return MOL;}
174
"''"     {yylval=itex2MML_copy_string("&Prime;"); return MOL;}
175
"'''"  {yylval=itex2MML_copy_string("&#8244;"); return MOL;}
15 by Jacques Distler
Quadruple Prime
176
"''''"  {yylval=itex2MML_copy_string("&#8279;"); return MOL;}
12 by Jacques Distler
Fixed TeX primes.
177
1 by Jacques Distler
Initial commit.
178
"\\alpha"   |
179
"\\beta" |
180
"\\gamma" |
181
"\\delta" |
182
"\\zeta" |
183
"\\eta"  |
184
"\\theta" |
185
"\\iota"  |
186
"\\kappa" |
187
"\\lambda" |
188
"\\mu"     |
189
"\\nu"    |
190
"\\xi"   |
191
"\\pi"     |
192
"\\rho"   |
193
"\\sigma"  |
194
"\\tau"   |
195
"\\upsilon" |
196
"\\chi"  |
197
"\\psi"  |
198
"\\omega" |
199
"\\backepsilon"   |
200
"\\varkappa" |
201
"\\varpi" |
202
"\\varrho" |
203
"\\varsigma" |
204
"\\vartheta"      {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
205
41 by Jacques Distler
itex2MML 1.3.17
206
"\\varepsilon" {yylval=itex2MML_copy_string("&#x03B5;"); return MI;}
1 by Jacques Distler
Initial commit.
207
"\\phi"  {yylval=itex2MML_copy_string("&#x03D5;"); return MI;}
208
"\\varphi"  {yylval=itex2MML_copy_string("&#x03C6;"); return MI;}
209
210
"\\arccos"  |
211
"\\arcsin"  |
212
"\\arctan"  |
213
"\\arg"     |
214
"\\cos"     |
215
"\\cosh"    |
216
"\\cot"     |
217
"\\coth"    |
218
"\\csc"     |
219
"\\deg"     |
220
"\\dim"     |
221
"\\exp"     |
222
"\\hom"     |
223
"\\ker"     |
224
"\\lg"      |
225
"\\ln"      |
226
"\\log"     |
227
"\\sec"     |
228
"\\sin"     |
229
"\\sinh"    |
230
"\\tan"     |
231
"\\tanh"    {yylval=itex2MML_copy_string(yytext+1); return MI;}
232
233
"\\det"     |
234
"\\gcd"     |
235
"\\inf"     |
236
"\\lim"     |
237
"\\liminf"  |
238
"\\limsup"  |
239
"\\max"     |
240
"\\min"     |
241
"\\Pr"      |
242
"\\sup"    {yylval=itex2MML_copy_string(yytext+1); return MIB;}
243
244
"\\omicron"  {yylval=itex2MML_copy_string("&oscr;"); return MI;}
245
246
"\\epsilon"  {yylval=itex2MML_copy_string("&epsi;"); return MI;}
247
248
"\\cdot"   {yylval=itex2MML_copy_string("&sdot;"); return MO;}
249
250
"\\Alpha"   |
251
"\\Beta" |
252
"\\Delta"  |
253
"\\Gamma"  |
254
"\\digamma"  |
255
"\\Lambda" |
256
"\\Pi"     |
257
"\\Phi"    |
258
"\\Psi"    |
259
"\\Sigma"  |
260
"\\Theta"  |
261
"\\Xi"     |
262
"\\Zeta" |
263
"\\Eta"  |
264
"\\Iota"  |
265
"\\Kappa" |
266
"\\Mu"     |
267
"\\Nu"    |
268
"\\Rho"   |
269
"\\Tau"  | 
270
"\\mho"  | 
271
"\\Omega"     {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
272
273
"\\Upsilon" |
274
"\\Upsi" {yylval=itex2MML_copy_string("&Upsi;"); return MI;}
275
276
"\\iff" |
277
"\\Longleftrightarrow"  {yylval=itex2MML_copy_string("&iff;"); return MOL;}
278
279
"\\Leftrightarrow"  {yylval=itex2MML_copy_string("&Leftrightarrow;"); return MOL;}
280
281
"\\impliedby" |
282
"\\Leftarrow"   {yylval=itex2MML_copy_string("&Leftarrow;"); return MOL;}
283
284
"\\implies" |
285
"\\Rightarrow"   {yylval=itex2MML_copy_string("&Rightarrow;"); return MOL;}
286
287
"\\hookleftarrow" {yylval=itex2MML_copy_string("&hookleftarrow;"); return MOL;}
288
289
"\\embedsin" |
290
"\\hookrightarrow"  {yylval=itex2MML_copy_string("&hookrightarrow;"); return MOL;}
291
292
"\\longleftarrow"   {yylval=itex2MML_copy_string("&longleftarrow;"); return MOL;}
293
294
"\\longrightarrow"  {yylval=itex2MML_copy_string("&longrightarrow;"); return MOL;}
295
296
"\\leftarrow"   {yylval=itex2MML_copy_string("&leftarrow;"); return MOL;}
297
298
"\\to"    |
299
"\\rightarrow"  {yylval=itex2MML_copy_string("&rightarrow;"); return MOL;}
300
301
"\\leftrightarrow"  {yylval=itex2MML_copy_string("&leftrightarrow;"); return MOL;}
302
303
"\\mapsto"  |
304
"\\map"       {yylval=itex2MML_copy_string("&map;"); return MOL;}
305
306
"\\nearrow" |
307
"\\nearr"    {yylval=itex2MML_copy_string("&nearr;"); return MOL;}
308
309
"\\nwarrow" |
310
"\\nwarr"     {yylval=itex2MML_copy_string("&nwarr;"); return MOL;}
311
312
"\\searrow" |
313
"\\searr"     {yylval=itex2MML_copy_string("&searr;"); return MOL;}
314
315
"\\swarrow" |
316
"\\swarr"     {yylval=itex2MML_copy_string("&swarr;"); return MOL;}
317
318
"\\neArrow" |
319
"\\neArr"    {yylval=itex2MML_copy_string("&neArr;"); return MOL;}
320
321
"\\nwArrow" |
322
"\\nwArr"     {yylval=itex2MML_copy_string("&nwArr;"); return MOL;}
323
324
"\\seArrow" |
325
"\\seArr"     {yylval=itex2MML_copy_string("&seArr;"); return MOL;}
326
327
"\\swArrow" |
328
"\\swArr"     {yylval=itex2MML_copy_string("&swArr;"); return MOL;}
329
330
"\\darr"     {yylval=itex2MML_copy_string("&darr;"); return MOL;}
331
332
"\\Downarrow" {yylval=itex2MML_copy_string("&dArr;"); return MOL;}
333
334
"\\uparr"    {yylval=itex2MML_copy_string("&uarr;"); return MOL;}
335
336
"\\Uparrow" {yylval=itex2MML_copy_string("&uArr;"); return MOL;}
337
338
"\\downuparrow" |
339
"\\duparr" |
340
"\\updarr"  {yylval=itex2MML_copy_string("&updownarrow;"); return MOL;}
341
342
"\\Updownarrow"  {yylval=itex2MML_copy_string("&Updownarrow;"); return MOL;}
343
14 by Jacques Distler
itex2MML 1.2
344
"\\leftsquigarrow"       {yylval=itex2MML_copy_string("&#x21DC;"); return MOL;}
13 by Jacques Distler
itex2MML 1.2
345
"\\rightsquigarrow"      {yylval=itex2MML_copy_string("&zigrarr;"); return MOL;}
346
"\\dashleftarrow"        {yylval=itex2MML_copy_string("&#x290E;"); return MOL;}
347
"\\dashrightarrow"       {yylval=itex2MML_copy_string("&#x290F;"); return MOL;}
348
"\\curvearrowbotright"   {yylval=itex2MML_copy_string("&#x293B;"); return MOL;}
349
"\\righttoleftarrow"     {yylval=itex2MML_copy_string("&#x27F2;"); return MOL;}
350
"\\lefttorightarrow"     {yylval=itex2MML_copy_string("&#x27F3;"); return MOL;}
35 by Jacques Distler
itex2MML 1.3.11: A Quiverful of Arrows
351
"\\leftrightsquigarrow" |
352
"\\upuparrows"          |
353
"\\rightleftarrows"     |
354
"\\rightrightarrows"    |
355
"\\curvearrowleft"      |
356
"\\curvearrowright"     |
357
"\\downdownarrows"      |
358
"\\leftarrowtail"       |
359
"\\rightarrowtail"      |
360
"\\leftleftarrows"      |
361
"\\leftrightarrows"     |
362
"\\Lleftarrow"          |
363
"\\Rrightarrow"         |
364
"\\looparrowleft"       |
365
"\\looparrowright"      |
366
"\\Lsh"                 |
367
"\\Rsh"                 |
368
"\\circlearrowleft"     |
369
"\\circlearrowright"    |
370
"\\twoheadleftarrow"    |
371
"\\twoheadrightarrow"   |
372
"\\nLeftarrow"          |
373
"\\nleftarrow"          |
374
"\\nLeftrightarrow"     |
375
"\\nleftrightarrow"     |
376
"\\nRightarrow"         |
377
"\\nrightarrow"         |
65 by Jacques Distler
itex2MML 1.4.11
378
"\\rightharpoonup"      |
379
"\\rightharpoondown"    |
380
"\\leftharpoonup"       |
381
"\\leftharpoondown"     |
35 by Jacques Distler
itex2MML 1.3.11: A Quiverful of Arrows
382
"\\downharpoonleft"     |
383
"\\downharpoonright"    |
384
"\\leftrightharpoons"   |
385
"\\rightleftharpoons"   |
386
"\\upharpoonleft"       |
387
"\\upharpoonright"   {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MOL;}
388
54 by Jacques Distler
itex2MML 1.4.0: Extensible Arrows
389
"\\xrightarrow"        |
390
"\\xleftarrow"         |
391
"\\xleftrightarrow"    |
392
"\\xLeftarrow"         |
393
"\\xRightarrow"        |
394
"\\xLeftrightarrow"    |
395
"\\xleftrightharpoons" |
396
"\\xrightleftharpoons" |
397
"\\xhookleftarrow"     |
398
"\\xhookrightarrow"    |
55 by Jacques Distler
itex2MML 1.4.1: Memory issue
399
"\\xmapsto" {BEGIN(OPTARG); char * s1 = itex2MML_copy_string(yytext+2); yylval = itex2MML_copy3("&", s1, ";"); itex2MML_free_string(s1); return XARROW;}
13 by Jacques Distler
itex2MML 1.2
400
1 by Jacques Distler
Initial commit.
401
"\\dots" |
53 by Jacques Distler
itex2MML 1.3.27: Fixed \dots
402
"\\ldots"  {yylval=itex2MML_copy_string("&hellip;"); return MI;}
403
"\\cdots"   {yylval=itex2MML_copy_string("&ctdot;"); return MI;}
404
"\\ddots"   {yylval=itex2MML_copy_string("&dtdot;"); return MI;}
405
"\\udots"   {yylval=itex2MML_copy_string("&utdot;"); return MI;}
406
"\\vdots"   {yylval=itex2MML_copy_string("&vellip;"); return MI;}
37 by Jacques Distler
itex2MML 1.3.13
407
"\\colon"   {yylval=itex2MML_copy_string("&colon;"); return MOR;}
1 by Jacques Distler
Initial commit.
408
409
"\\cup"  |
410
"\&union;" |
411
"\\union"          {yylval=itex2MML_copy_string("&cup;"); return MOL;}
412
413
"\\bigcup" |
414
"\\Union"  |
415
"\&Union;"      {yylval=itex2MML_copy_string("&Union;"); return MOB;}
416
417
"\\cap"  |
418
"\\intersection"          {yylval=itex2MML_copy_string("&cap;"); return MOL;}
419
420
"\\bigcap" |
421
"\\Intersection"       {yylval=itex2MML_copy_string("&Intersection;"); return MOB;}
422
423
"\\in"           {yylval=itex2MML_copy_string("&Element;"); return MOL;}
424
36 by Jacques Distler
itex2MML 1.3.12: \coloneqq and its cousins
425
 /* For some reason, Firefox does not put in the right spacing around some of these operators
426
  * unless we ask for it, explicitly.
427
  */
428
"\\coloneqq"     {yylval=itex2MML_copy_string("&colone;"); return MOL;}
429
"\\Coloneqq"     {yylval=itex2MML_copy_string("&Colone;"); return MOS;}
430
"\\coloneq"      {yylval=itex2MML_copy_string("&#x2236;&#x2212;"); return MOS;}
431
"\\Coloneq"      {yylval=itex2MML_copy_string("&#x2237;&#x2212;"); return MOS;}
432
"\\eqqcolon"     {yylval=itex2MML_copy_string("&ecolon;"); return MOS;}
433
"\\Eqqcolon"     {yylval=itex2MML_copy_string("&#x003d;&#x2237;"); return MOS;}
434
"\\eqcolon"      {yylval=itex2MML_copy_string("&#x2239;"); return MOS;}
435
"\\Eqcolon"      {yylval=itex2MML_copy_string("&#x2212;&#x2237;"); return MOS;}
436
"\\colonapprox"  {yylval=itex2MML_copy_string("&#x2236;&#x2248;"); return MOS;}
437
"\\Colonapprox"  {yylval=itex2MML_copy_string("&#x2237;&#x2248;"); return MOS;}
438
"\\colonsim"     {yylval=itex2MML_copy_string("&#x2236;&#x223C;"); return MOS;}
439
"\\Colonsim"     {yylval=itex2MML_copy_string("&#x2237;&#x223C;"); return MOS;}
440
"\\dblcolon"     {yylval=itex2MML_copy_string("&Colon;"); return MOL;}
441
46 by Jacques Distler
itex2MML 1.3.22: New License
442
"\\ast"  |
443
"\\Cap"  |
444
"\\Cup"  |
445
"\\circledast"  |
446
"\\circledcirc" |
447
"\\curlyvee"    |
448
"\\curlywedge"  |
449
"\\divideontimes" |
450
"\\dotplus" |
451
"\\leftthreetimes" |
452
"\\rightthreetimes" |
453
"\\veebar" |
1 by Jacques Distler
Initial commit.
454
"\\gt"   |
455
"\\lt"   |
456
"\\approxeq"   |
457
"\\backsim"   |
458
"\\backsimeq"   |
46 by Jacques Distler
itex2MML 1.3.22: New License
459
"\\barwedge"    |
460
"\\doublebarwedge" |
1 by Jacques Distler
Initial commit.
461
"\\subset"  |
462
"\\subseteq" |
463
"\\subseteqq" |
464
"\\subsetneq" |
465
"\\subsetneqq" |
466
"\\varsubsetneq" |
467
"\\varsubsetneqq" |
468
"\\prec"     |
469
"\\parallel"  |
470
"\\nparallel" |
471
"\\shortparallel" |
472
"\\nshortparallel" |
473
"\\perp"  |
474
"\\eqslantgtr" |
475
"\\eqslantless" |
476
"\\gg" |
477
"\\ggg" |
478
"\\geq" |
479
"\\geqq" |
480
"\\geqslant" |
481
"\\gneq" |
482
"\\gneqq" |
483
"\\gnapprox" |
484
"\\gnsim" |
485
"\\gtrapprox" |
486
"\\ge"  |
487
"\\le"  |
488
"\\leq" |
489
"\\leqq" |
490
"\\leqslant" |
491
"\\lessapprox" |
492
"\\lessdot" |
493
"\\lesseqgtr" |
494
"\\lesseqqgtr" |
495
"\\lessgtr" |
496
"\\lneq" |
497
"\\lneqq" |
498
"\\lnsim" |
499
"\\lvertneqq" |
500
"\\gtrsim" |
501
"\\gtrdot" |
502
"\\gtreqless" |
503
"\\gtreqqless" |
504
"\\gtrless" |
505
"\\gvertneqq" |
506
"\\lesssim" |
507
"\\lnapprox" |
508
"\\nsubset" |
509
"\\nsubseteq" |
510
"\\nsubseteqq" |
511
"\\notin" |
512
"\\ni" |
513
"\\notni" |
514
"\\nmid" |
515
"\\nshortmid" |
516
"\\preceq" |
517
"\\npreceq" |
518
"\\ll" |
519
"\\ngeq" |
520
"\\ngeqq" |
521
"\\ngeqslant" |
522
"\\nleq" |
523
"\\nleqq" |
524
"\\nleqslant" |
525
"\\nless" |
526
"\\supset" |
527
"\\supseteq" |
528
"\\supseteqq" |
529
"\\supsetneq" |
530
"\\supsetneqq" |
531
"\\varsupsetneq" |
532
"\\varsupsetneqq" |
533
"\\approx" |
534
"\\asymp" |
535
"\\bowtie" |
536
"\\dashv" |
537
"\\Vdash" |
538
"\\vDash" |
539
"\\VDash" |
540
"\\vdash" |
541
"\\Vvdash" |
542
"\\models" |
543
"\\sim" |
544
"\\simeq" |
545
"\\nsim" |
546
"\\smile" |
547
"\\triangle" |
548
"\\triangledown" |
549
"\\triangleleft" |
550
"\\cong" |
551
"\\succ" |
552
"\\nsucc" |
553
"\\ngtr" |
554
"\\nsupset" |
555
"\\nsupseteq" |
556
"\\propto" |
557
"\\equiv" |
24 by Jacques Distler
Another Symbol: \nequiv
558
"\\nequiv" |
1 by Jacques Distler
Initial commit.
559
"\\frown" |
560
"\\triangleright" |
561
"\\ncong" |
562
"\\succeq" |
563
"\\succapprox" |
564
"\\succnapprox" |
565
"\\succcurlyeq" |
566
"\\succsim" |
567
"\\succnsim" |
568
"\\nsucceq" |
569
"\\nvDash" |
570
"\\nvdash" |
571
"\\nVDash" |
572
"\\amalg" |
573
"\\pm" |
574
"\\mp" |
575
"\\bigcirc" |
576
"\\wr" |
577
"\\odot" |
578
"\\uplus" |
579
"\\clubsuit" |
580
"\\spadesuit" |
581
"\\Diamond" |
582
"\\diamond" |
583
"\\sqcup" |
584
"\\sqcap" |
585
"\\sqsubset" |
586
"\\sqsubseteq" |
587
"\\sqsupset" |
588
"\\sqsupseteq" |
589
"\\Subset" |
590
"\\Supset" |
591
"\\ltimes" |
592
"\\div" |
593
"\\rtimes" |
594
"\\bot" |
595
"\\therefore" |
596
"\\thickapprox" |
597
"\\thicksim" |
598
"\\varpropto" |
599
"\\varnothing" |
600
"\\flat" |
601
"\\vee" |
602
"\\because" |
603
"\\between" |
604
"\\Bumpeq" |
605
"\\bumpeq" |
606
"\\circeq" |
607
"\\curlyeqprec" |
608
"\\curlyeqsucc" |
609
"\\doteq" |
610
"\\doteqdot" |
611
"\\eqcirc" |
612
"\\fallingdotseq" |
613
"\\multimap" |
614
"\\pitchfork" |
615
"\\precapprox" |
616
"\\precnapprox" |
617
"\\preccurlyeq" |
618
"\\precsim" |
619
"\\precnsim" |
620
"\\risingdotseq" |
621
"\\sharp" |
622
"\\bullet" |
623
"\\nexists" |
624
"\\dagger" |
625
"\\ddagger" |
626
"\\not" |
627
"\\top" |
628
"\\natural" |
629
"\\angle" |
630
"\\measuredangle" |
631
"\\backprime" |
632
"\\bigstar" |
633
"\\blacklozenge" |
634
"\\lozenge" |
635
"\\blacksquare" |
636
"\\blacktriangle" |
46 by Jacques Distler
itex2MML 1.3.22: New License
637
"\\blacktriangleleft" |
638
"\\blacktriangleright" |
1 by Jacques Distler
Initial commit.
639
"\\blacktriangledown" |
46 by Jacques Distler
itex2MML 1.3.22: New License
640
"\\ntriangleleft" |
641
"\\ntriangleright" |
642
"\\ntrianglelefteq" |
643
"\\ntrianglerighteq" |
644
"\\trianglelefteq" |
645
"\\trianglerighteq" |
646
"\\triangleq" |
647
"\\vartriangleleft" |
648
"\\vartriangleright" |
1 by Jacques Distler
Initial commit.
649
"\\forall" |
650
"\\bigtriangleup" |
651
"\\bigtriangledown" |
652
"\\nprec"  {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MOL;}
653
654
"\\aleph" |
655
"\\beth" |
656
"\\eth" |
657
"\\ell" |
658
"\\hbar" |
659
"\\Im" |
660
"\\imath" |
661
"\\jmath" |
662
"\\wp" |
663
"\\Re" {yylval=itex2MML_copy2(yytext, ";"); if (yylval != itex2MML_empty_string) yylval[0]='&'; return MI;}
664
29 by Jacques Distler
itex2MML 1.3.5
665
"\\Perp" |
666
"\\Vbar" {yylval=itex2MML_copy_string("&Vbar;"); return MOL;}
46 by Jacques Distler
itex2MML 1.3.22: New License
667
"\\boxdot" {yylval=itex2MML_copy_string("&sdotb;"); return MOL;}
1 by Jacques Distler
Initial commit.
668
"\\Box" |
669
"\\square" {yylval=itex2MML_copy_string("&square;"); return MOL;}
670
"\\emptyset" |
671
"\\empty" {yylval=itex2MML_copy_string("&emptyv;"); return MI;}
672
"\\exists" {yylval=itex2MML_copy_string("&Exists;"); return MOL;}
673
"\\circ" {yylval=itex2MML_copy_string("&SmallCircle;"); return MOL;}
674
"\\rhd" {yylval=itex2MML_copy_string("&RightTriangle;"); return MOL;}
675
"\\lhd" {yylval=itex2MML_copy_string("&LeftTriangle;"); return MOL;}
676
"\\lll" {yylval=itex2MML_copy_string("&Ll;"); return MOL;}
677
"\\unrhd" {yylval=itex2MML_copy_string("&RightTriangleEqual;"); return MOL;}
678
"\\unlhd" {yylval=itex2MML_copy_string("&LeftTriangleEqual;"); return MOL;}
679
"\\Del" |
680
"\\nabla" {yylval=itex2MML_copy_string("&Del;"); return MOL;}
681
"\\sphericalangle" {yylval=itex2MML_copy_string("&angsph;"); return MOL;}
682
683
"\\heartsuit" {yylval=itex2MML_copy_string("&#x2661;"); return MOL;}
684
"\\diamondsuit" {yylval=itex2MML_copy_string("&#x2662;"); return MOL;}
685
686
"\\partial" {yylval=itex2MML_copy_string("&PartialD;"); return MOL;}
687
688
"\\qed" {yylval=itex2MML_copy_string("&squf;"); return MO;}
689
690
"\\mod" {yylval=itex2MML_copy_string("mod"); return MOS;}
691
"\\pmod" {return PMOD;}
692
693
"\\bottom" {yylval=itex2MML_copy_string("&perp;"); return MOL;}
694
695
"\\neg" {yylval=itex2MML_copy_string("&not;"); return MOL;}
696
697
"\\neq" |
698
"\\ne"   {yylval=itex2MML_copy_string("&ne;"); return MOL;}
699
700
"\\shortmid" |
701
"\\mid"  {yylval=itex2MML_copy_string("&VerticalBar;"); return MOS;}
702
703
"\\int"    |
704
"\\integral"     {yylval=itex2MML_copy_string("&Integral;"); return MOL;}
705
706
"\\iint"   |
707
"\\doubleintegral" {yylval=itex2MML_copy_string("&Int;"); return MOL;}
708
709
"\\iiint"   |
710
"\\tripleintegral" {yylval=itex2MML_copy_string("&tint;"); return MOL;}
711
712
"\\iiiint"   |
713
"\\quadrupleintegral" {yylval=itex2MML_copy_string("&qint;"); return MOL;}
714
715
"\\oint"    |
716
"\\conint"  |
717
"\\contourintegral"   {yylval=itex2MML_copy_string("&conint;"); return MOL;}
718
719
"\\times"   {yylval=itex2MML_copy_string("&times;"); return MOL;}
720
"\\star"   {yylval=itex2MML_copy_string("&sstarf;"); return MOL;}
721
"\\circleddash" |
722
"\\odash"   {yylval=itex2MML_copy_string("&odash;"); return MOL;}
723
46 by Jacques Distler
itex2MML 1.3.22: New License
724
"\\intercal"   {yylval=itex2MML_copy_string("&intcal;"); return MOL;}
725
"\\smallfrown"   {yylval=itex2MML_copy_string("&sfrown;"); return MOL;}
726
"\\smallsmile"   {yylval=itex2MML_copy_string("&ssmile;"); return MOL;}
727
1 by Jacques Distler
Initial commit.
728
"\\boxminus" |
729
"\\minusb"   {yylval=itex2MML_copy_string("&boxminus;"); return MOL;}
730
"\\boxplus" |
731
"\\plusb"   {yylval=itex2MML_copy_string("&boxplus;"); return MOL;}
732
"\\boxtimes" |
733
"\\timesb"   {yylval=itex2MML_copy_string("&boxtimes;"); return MOL;}
734
735
"\\sum"          {yylval=itex2MML_copy_string("&Sum;"); return MOB;}
736
737
"\\prod" |
738
"\\product"      {yylval=itex2MML_copy_string("&prod;"); return MOB;}
739
740
"\\coprod"  |
741
"\\coproduct"    {yylval=itex2MML_copy_string("&coprod;"); return MOB;}
742
743
"\\otimes"       {yylval=itex2MML_copy_string("&otimes;"); return MOL;}
744
"\\Otimes"       {yylval=itex2MML_copy_string("&Otimes;"); return MOL;}
745
"\\bigotimes"     {yylval=itex2MML_copy_string("&bigotimes;"); return MOL;}
746
46 by Jacques Distler
itex2MML 1.3.22: New License
747
"\\ominus"       {yylval=itex2MML_copy_string("&ominus;"); return MOL;}
748
"\\oslash"       {yylval=itex2MML_copy_string("&osol;"); return MOL;}
1 by Jacques Distler
Initial commit.
749
750
"\\oplus"       {yylval=itex2MML_copy_string("&oplus;"); return MOL;}
751
"\\Oplus"   |
752
"\\bigoplus"    {yylval=itex2MML_copy_string("&bigoplus;"); return MOB;}
753
754
"\\bigodot"    {yylval=itex2MML_copy_string("&bigodot;"); return MOB;}
755
"\\bigsqcup"    {yylval=itex2MML_copy_string("&bigsqcup;"); return MOB;}
64 by Jacques Distler
itex2MML 1.4.10
756
"\\bigsqcap"    {yylval=itex2MML_copy_string("&#x2A05;"); return MOB;}
757
"\\biginterleave" {yylval=itex2MML_copy_string("&#x2AFC;"); return MOB;}
20 by Jacques Distler
Typo Corrected (from Jason Blevins)
758
"\\biguplus"    {yylval=itex2MML_copy_string("&biguplus;"); return MOB;}
1 by Jacques Distler
Initial commit.
759
760
"\\wedge"       {yylval=itex2MML_copy_string("&wedge;"); return MOL;}
761
"\\Wedge"  |
762
"\\bigwedge"       {yylval=itex2MML_copy_string("&xwedge;"); return MOB;}
763
764
"\\Vee"  |
765
"\\bigvee"       {yylval=itex2MML_copy_string("&bigvee;"); return MOB;}
766
31 by Jacques Distler
itex2MML 1.3.7
767
"\\invamp"  |
768
"\\parr"       {yylval=itex2MML_copy_string("&#8523;"); return MOL;}
769
1 by Jacques Distler
Initial commit.
770
"\\frac"         {return FRAC;}
771
"\\tfrac"         {return TFRAC;}
772
773
"\\binom"        {return BINOM;}
59 by Jacques Distler
itex2MML 1.4.5: Array Environment
774
"\\tbinom"        {return TBINOM;}
1 by Jacques Distler
Initial commit.
775
776
"\\tensor"       {return TENSOR;}
777
778
"\\multiscripts" {return MULTI;}
779
780
"\\overbrace"     {return OVERBRACE;}
781
782
"\\underbrace"   {return UNDERBRACE;}
783
34 by Jacques Distler
itex2MML 1.3.10
784
"\\underline"   {return UNDERLINE;}
785
1 by Jacques Distler
Initial commit.
786
"\\bar"          {return BAR;}
787
"\\overline" |
788
"\\closure" |
789
"\\widebar"      {return WIDEBAR;}
790
791
"\\vec"       {return VEC;} 
792
"\\widevec"   {return WIDEVEC;}
793
794
"\\dot"       {return DOT;}
795
"\\ddot"      {return DDOT;}
38 by Jacques Distler
itex2MML 1.3.14: \dddot{} and \ddddot{}
796
"\\dddot"      {return DDDOT;}
797
"\\ddddot"      {return DDDDOT;}
1 by Jacques Distler
Initial commit.
798
799
"\\tilde"       {return TILDE;} 
800
"\\widetilde"   {return WIDETILDE;}
801
802
803
"\\check"       {return CHECK;} 
804
"\\widecheck"   {return WIDECHECK;}
805
806
807
"\\hat"       {return HAT;} 
808
"\\widehat"   {return WIDEHAT;}
809
810
"\\underset"     {return UNDER;}
811
812
"\\stackrel" |
813
"\\overset"      {return OVER;}
814
815
"\\over"         {return TEXOVER;}
21 by Jacques Distler
\binom
816
"\\atop"         {return TEXATOP;}
1 by Jacques Distler
Initial commit.
817
818
"\\underoverset"  {return UNDEROVER;}
819
59 by Jacques Distler
itex2MML 1.4.5: Array Environment
820
"\\sqrt"         {BEGIN(OPTARG); return SQRT;}
1 by Jacques Distler
Initial commit.
821
822
"\\root"         {return ROOT;}
823
824
"\\space"        {BEGIN(INT1); return SPACE;}
825
826
"\\text"          {BEGIN(PLAINTEXT); return TEXTBOX;}
827
828
"\\statusline"    {BEGIN(PLAINTEXT); return STATLINE;}
40 by Jacques Distler
itex2MML 1.3.16: \tooltip{}{}
829
"\\tooltip"       {BEGIN(PLAINTEXT); return TOOLTIP;}
1 by Jacques Distler
Initial commit.
830
831
"\\toggle"        {return TOGGLE;}
832
61 by Jacques Distler
itex2MML 1.4.7: \mathraisebox{voffset}[height][depth]{content}
833
"\\mathraisebox"  {BEGIN(RAISEBOX1); return RAISEBOX;}
834
1 by Jacques Distler
Initial commit.
835
"\\fghilight" |
836
"\\fghighlight"   {BEGIN(ATTRIBUTELIST); return FGHIGHLIGHT;}
837
838
"\\bghilight" |
839
"\\bghighlight"   {BEGIN(ATTRIBUTELIST); return BGHIGHLIGHT;}
840
841
"\\color"        {BEGIN(ATTRIBUTELIST); return COLOR;}
842
"\\bgcolor"        {BEGIN(ATTRIBUTELIST); return BGCOLOR;}
843
62 by Jacques Distler
Fix bug in \displaystyle | \textstyle
844
"\\displaystyle"  {itex2MML_displaymode=1; itex2MML_rowposn=2; return DISPLAY;}
1 by Jacques Distler
Initial commit.
845
62 by Jacques Distler
Fix bug in \displaystyle | \textstyle
846
"\\textstyle"     {itex2MML_displaymode=0; itex2MML_rowposn=2; return TEXTSTY;}
1 by Jacques Distler
Initial commit.
847
848
"\\textsize"     {return TEXTSIZE;}
849
850
"\\scriptsize"     {return SCSIZE;}
851
852
"\\scriptscriptsize"     {return SCSCSIZE;}
853
854
"\\mathit"       {return ITALICS;}
855
10 by Jacques Distler
Add \boldsymbol, for Tony Pantev.
856
"\\boldsymbol" |
1 by Jacques Distler
Initial commit.
857
"\\mathbf"       {return BOLD;}
858
859
"\\mathrm"       {BEGIN(ROMAN); return RM;}
860
861
"\\mathbb"       {BEGIN(BBOLD); return BB;}
862
863
"\\mathfrak" |
864
"\\mathfr"       {BEGIN(FRAKTUR); return FRAK;}
865
16 by Jacques Distler
Slashed letters
866
"\\slash"       {return SLASHED;}
867
50 by Jacques Distler
itex2MML 1.3.25
868
"\\boxed"       {return BOXED;}
869
1 by Jacques Distler
Initial commit.
870
"\\mathcal"       {BEGIN(CALLIGRAPHIC); return CAL;}
871
59 by Jacques Distler
itex2MML 1.4.5: Array Environment
872
"\\begin"        {itex2MML_env_start = 1; BEGIN(MATHENV); return BEGINENV;}
1 by Jacques Distler
Initial commit.
873
"\\end"        {BEGIN(MATHENV); return ENDENV;}
874
875
"\\substack"     {return SUBSTACK;}
876
877
"\\array"        {return ARRAY;}
878
879
"\\arrayopts"    {return ARRAYOPTS;}
880
881
"\\colalign"     {BEGIN(ATTRIBUTELIST); return COLALIGN;}
882
883
"\\collayout"   {BEGIN(ATTRIBUTELIST); return COLLAYOUT;}
884
885
"\\rowalign"     {BEGIN(ATTRIBUTELIST); return ROWALIGN;}
886
887
"\\align"     {BEGIN(ATTRIBUTELIST); return ALIGN;}
888
889
"\\equalrows"     {BEGIN(ATTRIBUTELIST); return EQROWS;}
890
891
"\\equalcols"     {BEGIN(ATTRIBUTELIST); return EQCOLS;}
892
893
"\\rowlines"     {BEGIN(ATTRIBUTELIST); return ROWLINES;}
894
895
"\\collines"     {BEGIN(ATTRIBUTELIST); return COLLINES;}
896
897
"\\frame"     {BEGIN(ATTRIBUTELIST); return FRAME;}
898
899
"\\padding"     {BEGIN(ATTRIBUTELIST); return PADDING;}
900
901
"\\rowopts"    {return ROWOPTS;}
902
903
"\\cellopts"   {return CELLOPTS;} 
904
905
"\\rowspan"     {BEGIN(ATTRIBUTELIST); return ROWSPAN;}
906
907
"\\colspan"     {BEGIN(ATTRIBUTELIST); return COLSPAN;}
908
909
910
"\\," |
911
"\\thinspace"   {return THINSPACE;}
912
913
"\\:" |
914
"\\medspace"    {return MEDSPACE;}
915
916
"\\;" |
917
"\\thickspace"  {return THICKSPACE;}
918
919
"\\quad"        {return QUAD;}
920
"\\qquad"       {return QQUAD;}
921
922
"\\!" |
923
"\\negspace"    {return NEGSPACE;}
924
925
"\\phantom"     {return PHANTOM;}
926
927
"\\href"        {BEGIN(PLAINTEXT); return HREF;}
928
39 by Jacques Distler
itex2MML 1.3.15: \mathrel and its cousins
929
"\\operatorname"  {BEGIN(PLAINTEXT); return OPERATORNAME;}
930
"\\mathop"        {BEGIN(PLAINTEXT); return MATHOP;}
931
"\\mathbin"       {BEGIN(PLAINTEXT); return MATHBIN;}
932
"\\mathrel"       {BEGIN(PLAINTEXT); return MATHREL;}
60 by Jacques Distler
itex2MML 1.4.6
933
"\\itexnum"       {BEGIN(PLAINTEXT); return ITEXNUM;}
1 by Jacques Distler
Initial commit.
934
22 by Jacques Distler
SVG Environment
935
"\\includegraphics"(\[[^\]]*\])?\{[^}]*\}	;
936
1 by Jacques Distler
Initial commit.
937
"\\"[a-zA-Z]+    {yylval=itex2MML_copy_string(yytext+1); return MOP;}
938
939
"\&"[a-zA-Z_][a-zA-Z0-9_]*";" |
940
"\&#"[0-9]+";" |
941
"\&#x"[a-fA-F0-9]+";"  {yylval=itex2MML_copy_string(yytext); return MI;}
942
943
"\n"             itex2MML_lineno++;
40 by Jacques Distler
itex2MML 1.3.16: \tooltip{}{}
944
[\r\t ]+           ;
1 by Jacques Distler
Initial commit.
945
946
947
.              {return UNKNOWNCHAR;}
948
}
949
950
<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;}
951
54 by Jacques Distler
itex2MML 1.4.0: Extensible Arrows
952
<OPTARG>{
58 by Jacques Distler
Nested Extensible Arrows
953
"[" {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;}
63 by Jacques Distler
itex2MML 1.4.9: improved optarg parsing
954
[\n\r\t ]+    ;
70 by Jacques Distler
itex2MML 1.5.0
955
.   {itex2MML_eqn_src[itex2MML_eqn_end-itex2MML_eqn_src]=0; --itex2MML_eqn_end; BEGIN(MATH); unput(yytext[0]);}
54 by Jacques Distler
itex2MML 1.4.0: Extensible Arrows
956
}
957
61 by Jacques Distler
itex2MML 1.4.7: \mathraisebox{voffset}[height][depth]{content}
958
<RAISEBOX1>{
959
\{[\n\r\t ]*- {BEGIN(RAISEBOX2); return NEG;}
960
\{[\n\r\t ]* {BEGIN(RAISEBOX2);}
961
}
962
963
<RAISEBOX2>{
964
[^\}]*?\}  {yylval=itex2MML_copy_string(yytext); if ((yyleng > 1) && (yylval != itex2MML_empty_string)) yylval[yyleng-1]='\0'; BEGIN(TEXTOPTARG1); return TEXTSTRING;}
965
}
966
967
968
<TEXTOPTARG1>{
969
\[[^\]]*?\] {yylval=itex2MML_copy_string(yytext+1); if ((yyleng > 1) && (yylval != itex2MML_empty_string)) yylval[yyleng-2]='\0'; BEGIN(TEXTOPTARG); return TEXTSTRING;}
70 by Jacques Distler
itex2MML 1.5.0
970
. {itex2MML_eqn_src[itex2MML_eqn_end-itex2MML_eqn_src]=0; --itex2MML_eqn_end; BEGIN(MATH); unput(yytext[0]);}
61 by Jacques Distler
itex2MML 1.4.7: \mathraisebox{voffset}[height][depth]{content}
971
}
972
973
<TEXTOPTARG>{
974
\[[^\]]*?\] {yylval=itex2MML_copy_string(yytext+1); if ((yyleng > 1) && (yylval != itex2MML_empty_string)) yylval[yyleng-2]='\0'; BEGIN(MATH); return TEXTSTRING;}
70 by Jacques Distler
itex2MML 1.5.0
975
. {itex2MML_eqn_src[itex2MML_eqn_end-itex2MML_eqn_src]=0; --itex2MML_eqn_end; BEGIN(MATH); unput(yytext[0]);}
61 by Jacques Distler
itex2MML 1.4.7: \mathraisebox{voffset}[height][depth]{content}
976
}
977
1 by Jacques Distler
Initial commit.
978
<MATHENV>{
59 by Jacques Distler
itex2MML 1.4.5: Array Environment
979
"\{matrix\}" {itex2MML_env_start = 0; BEGIN(MATH); return MATRIX;}
980
"\{pmatrix\}" {itex2MML_env_start = 0; BEGIN(MATH); return PMATRIX;}
981
"\{bmatrix\}" {itex2MML_env_start = 0; BEGIN(MATH); return BMATRIX;}
982
"\{Bmatrix\}" {itex2MML_env_start = 0; BEGIN(MATH); return BBMATRIX;}
983
"\{vmatrix\}" {itex2MML_env_start = 0; BEGIN(MATH); return VMATRIX;}
984
"\{Vmatrix\}" {itex2MML_env_start = 0; BEGIN(MATH); return VVMATRIX;}
985
"\{smallmatrix\}" {itex2MML_env_start = 0; BEGIN(MATH); return SMALLMATRIX;}
986
"\{cases\}" {itex2MML_env_start = 0; BEGIN(MATH); return CASES;}
987
"\{aligned\}" {itex2MML_env_start = 0; BEGIN(MATH); return ALIGNED;}
988
"\{gathered\}" {itex2MML_env_start = 0; BEGIN(MATH); return GATHERED;}
989
"\{split\}" {itex2MML_env_start = 0; BEGIN(MATH); return ALIGNED;}
990
"\{array\}" {if (itex2MML_env_start == 1) BEGIN(ARRAYOPTIONS); else BEGIN(MATH); return ARRAY;}
991
"\{svg\}" {itex2MML_env_start = 0; BEGIN(SVGENV); return SVG;}
992
}
993
994
<ARRAYOPTIONS>{
995
"[t]" {yylval=itex2MML_copy_string("axis 1"); return ARRAYALIGN;}
996
"[c]" {yylval=itex2MML_copy_string("center"); return ARRAYALIGN;}
997
"[b]" {yylval=itex2MML_copy_string("axis -1"); return ARRAYALIGN;}
998
"\{"  {BEGIN(COLOPTS); return ST;}
999
[\t\n\r ]+       ;
1000
}
1001
1002
<COLOPTS>{
1003
"\}"  {itex2MML_env_start = 0; BEGIN(MATH); return END;}
1004
"c"   {yylval=itex2MML_copy_string("center"); return COLUMNALIGN;}
1005
"l"   {yylval=itex2MML_copy_string("left"); return COLUMNALIGN;}
1006
"r"   {yylval=itex2MML_copy_string("right"); return COLUMNALIGN;}
1007
[\t\n\r ]+       ;
22 by Jacques Distler
SVG Environment
1008
}
1009
1010
<SVGENV>{
68 by Jacques Distler
itex2MML 1.5.0beta3
1011
"\\end\{svg" {itex2MML_do_capture_eqn(); yylval=itex2MML_copy_string(yytext); yylval[yyleng-8]=0; BEGIN(SVGEND); return XMLSTRING;}
48 by Jacques Distler
Fix svg Environment
1012
(.|\n) {yymore();}
1013
}
1014
1015
<SVGEND>{
1016
"\}" {BEGIN(MATH); return ENDSVG;}
1 by Jacques Distler
Initial commit.
1017
}
1018
1019
<ROMAN>{
1020
"\{"  {return ST;}
1021
"\}"  {BEGIN(MATH); return END;}
1022
[a-zA-Z]   {yylval=itex2MML_copy_string(yytext); return RMCHAR;}
1023
[\t\n\r ]+       ;
1024
.           {return yytext[0];}
1025
}
1026
1027
<BBOLD>{
1028
"\{"  {return ST;}
1029
"\}"  {BEGIN(MATH); return END;}
1030
[a-z] {yylval=itex2MML_copy_string(yytext); return BBLOWERCHAR;}
1031
[A-Z]   {yylval=itex2MML_copy_string(yytext); return BBUPPERCHAR;}
32 by Jacques Distler
itex2MML 1.38: Support for Blackboard Bold Digits
1032
[0-9]   {yylval=itex2MML_copy_string(yytext); return BBDIGIT;}
1 by Jacques Distler
Initial commit.
1033
[\t\n\r ]+       ;
1034
.           {return yytext[0];}
1035
}
1036
1037
<CALLIGRAPHIC>{
1038
"\{"  {return ST;}
1039
"\}"  {BEGIN(MATH); return END;}
1040
[a-zA-Z]   {yylval=itex2MML_copy_string(yytext); return CALCHAR;}
1041
[\t\n\r ]+       ;
1042
.           {return yytext[0];}
1043
}
1044
1045
<FRAKTUR>{
1046
"\{"  {return ST;}
1047
"\}"  {BEGIN(MATH); return END;}
1048
[a-zA-Z]   {yylval=itex2MML_copy_string(yytext); return FRAKCHAR;}
1049
[\t\n\r ]+       ;
1050
.           {return yytext[0];}
1051
}
1052
1053
<PLAINTEXT>{
39 by Jacques Distler
itex2MML 1.3.15: \mathrel and its cousins
1054
\{[^\}]*?\}  {yylval=itex2MML_copy_string(yytext+1); if ((yyleng > 1) && (yylval != itex2MML_empty_string)) yylval[yyleng-2]='\0'; BEGIN(MATH); return TEXTSTRING;}
1 by Jacques Distler
Initial commit.
1055
}
1056
1057
<INT1>{ 
1058
"\{"      {return ST;}
1059
"\}"      {BEGIN(INT2); return END;}
1060
[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;}
1061
[\t\n\r ]+   ;
1062
.         {return yytext[0];}
1063
}
1064
1065
<INT2>{
1066
"\{"      {return ST;}
1067
"\}"      {BEGIN(INT3); return END;}
1068
[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;}
1069
[\t\n\r ]+   ;
1070
.         {return yytext[0];}
1071
}
1072
1073
<INT3>{
1074
"\{"      {return ST;}
1075
"\}"      {BEGIN(MATH); return END;}
1076
[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;}
1077
[\t\n\r ]+   ;
1078
.         {return yytext[0];}
1079
}
1080
1081
1082
1083
%%
1084
1085
void itex2MML_restart ()
1086
{
1087
	BEGIN(INITIAL);
1088
}
1089
1090
static const char *  s_itex2MML_buffer = 0;
1091
static unsigned long s_itex2MML_length = 0;
1092
1093
void itex2MML_setup (const char * buffer, unsigned long length)
1094
{
1095
	yy_flush_buffer( YY_CURRENT_BUFFER );
1096
1097
	s_itex2MML_buffer = buffer;
1098
	s_itex2MML_length = length;
1099
}
1100
66 by Jacques Distler
itex2MML 1.5.0beta
1101
int itex2MML_capture_eqn_src()
1102
{
68 by Jacques Distler
itex2MML 1.5.0beta3
1103
	if (YY_START != INITIAL && YY_START != SVGENV)
1104
		itex2MML_do_capture_eqn();
1105
}
1106
1107
int itex2MML_do_capture_eqn()
1108
{
1109
	if (itex2MML_eqn_bufsize - (itex2MML_eqn_end-itex2MML_eqn_src+yyleng) > 1)
66 by Jacques Distler
itex2MML 1.5.0beta
1110
	{
1111
		strcpy(itex2MML_eqn_end, yytext);
1112
		itex2MML_eqn_end += yyleng;
1113
	}
1114
}
1115
1 by Jacques Distler
Initial commit.
1116
static int s_itex2MML_read (char * buffer, int max_size)
1117
{
1118
	int result = 0;
1119
1120
	if (max_size < s_itex2MML_length)
1121
	{
1122
		result = max_size;
1123
1124
		memcpy (buffer, s_itex2MML_buffer, max_size);
1125
1126
		s_itex2MML_buffer += max_size;
1127
		s_itex2MML_length -= max_size;
1128
	}
1129
	else
1130
	{
1131
		result = s_itex2MML_length;
1132
1133
		memcpy (buffer, s_itex2MML_buffer, s_itex2MML_length);
1134
1135
		s_itex2MML_buffer = 0;
1136
		s_itex2MML_length = 0;
1137
	}
1138
	return result;
1139
}