1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
/* itex2MML 1.1.8
* itex2MML.cc last modified 9/15/2005
*/
#include <cstdio>
#include <string>
#include "itex2MML.h"
int main (int argc, char ** argv)
{
bool bPrintItex = false;
bool bRawFilter = false;
bool bInline = false;
bool bDisplay = false;
bool bStop = false;
for (int arg = 1; arg < argc; arg++)
{
std::string args = argv[arg];
if (args == "--help")
{
fputs ("usage: itex2MML [OPTIONS]\n"
"\n"
"itex2MML filters an input text stream (e.g., an XHTML web page) converting itex expressions\n"
"to MathML. Inline itex expressions are delimited either side by single dollar symbols ($):\n"
"\n"
"\t<p>The parameters $\\alpha$ and $\\beta$ in the function $f(x)$ are defined below.</p>\n"
"\n"
"For normal display of equations, etc., itex expressions can be delimited with double dollar\n"
"symbols ($$) either side or by \\[ to the left and \\] to the right:\n"
"\n"
"\t<p class=\"equation\">\\[\n"
"\t\tf(x) = \\alpha x + \\frac{\\beta}{1+|x|}\n"
"\t\\]</p>\n"
"\n"
"itex2MML Options:\n"
"\n"
" --raw-filter filter input stream, converting equations as found to MathML [stops on error]\n"
" --inline converts a single itex equation, without any $ symbols, to inline MathML\n"
" --display converts a single itex equation, without any $ symbols, to display-mode MathML\n"
" --print-itex used in conjuction with --inline or --display: prints the itex string\n"
"\n"
"For further information, see http://golem.ph.utexas.edu/~distler/blog/itex2MML.html\n", stdout);
bStop = true;
break;
}
if (args == "--print-itex")
{
bPrintItex = true;
bRawFilter = false;
continue;
}
if (args == "--inline")
{
bRawFilter = false;
bInline = true;
bDisplay = false;
continue;
}
if (args == "--display")
{
bRawFilter = false;
bInline = false;
bDisplay = true;
continue;
}
if (args == "--raw-filter")
{
bRawFilter = true;
bPrintItex = false;
bInline = false;
bDisplay = false;
continue;
}
}
if (bStop) return 0;
std::string itex;
if (bInline) itex += "$";
if (bDisplay) itex += "$$";
#define BUFSIZE 1024
char buffer[BUFSIZE];
while (fgets (buffer, BUFSIZE, stdin)) itex += buffer;
if (bInline) itex += "$";
if (bDisplay) itex += "$$";
if (bPrintItex)
{
fputs (itex.c_str (), stdout);
fputs ("\n", stdout);
fflush (stdout);
}
if (!bInline && !bDisplay)
{
if (bRawFilter)
itex2MML_filter (itex.c_str(), itex.size());
else
itex2MML_html_filter (itex.c_str(), itex.size());
return 0;
}
char * mathml = itex2MML_parse (itex.c_str(), itex.size());
if (mathml)
{
fputs (mathml, stdout);
fputs ("\n", stdout);
itex2MML_free_string (mathml);
mathml = 0;
}
else
{
fputs ("itex2MML: itex parser failed to generate MathML from itex!\n", stderr);
}
return 0;
}
|