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