9
/*#define DATA_BEGIN ((string) "debut" )
10
#define DATA_END ((string) "fin" )
11
#define DATA_ESCAPE ((string) "escape" )*/
13
#define DATA_BEGIN ((char) 2)
14
#define DATA_END ((char) 5)
15
#define DATA_ESCAPE ((char) 27)
17
static int counter= 0;
22
cout << DATA_BEGIN << "channel:prompt" << DATA_END;
23
cout << DATA_BEGIN << "latex:\\brown Maple " << counter
24
<< "]\\ " << DATA_END;
28
remplacer(string in, string what, string by) {
30
while (result.find(what)!=string::npos) {
31
result= result.replace (result.find(what), what.length(), by);
37
passer (string &s, int indentation) {
38
s= remplacer (s, "\\textbf{proc}", "\\proc");
39
s= remplacer (s, "\\textbf{end proc}", "\\endproc \n");
40
s= remplacer (s, "\\textbf{if}", "\\if");
41
s= remplacer (s, "\\textbf{then}", "\\then");
42
s= remplacer (s, "\\textbf{else}", "\\else");
43
s= remplacer (s, "\\textbf{end if}", "\\endif");
45
s= remplacer(s, "\\,", "\\mult ");
46
// l'espace correspond souvent a une multiplication,
47
// pas toujours malheureusement!
48
s= remplacer(s, "\\ast ", "\\mult ");// * =\\mult
49
// s= remplacer(s,"\\mathrm","\\mathrom");
50
// Joris devrait arranger ce probleme de conversion LaTeX
51
// a moins que je ne trouve qqc
52
// Maple est un peu incoherent a ce sujet
53
s= remplacer (s, "{\\displaystyle ", "\\dsp{ ");
54
//on peut faire mieux?
56
s= remplacer (s, "(", " \\bigpl ");
57
//les parentheses deviennent modulables cf session_maple.ts
58
s= remplacer (s, ")", " \\bigpr ");
59
//modulables cf session_maple.ts
61
if (indentation == 0) {
62
s= remplacer (s, "\\maplemultiline{","\\hfill $");
63
//hfill donne un prob avec les procedures qui sont indentees
64
s= remplacer (s, "\\\\","$\\hfill\\ \\cr \\ \\hfill $ ");
65
//idem: prob avec les procedures
67
else s= remplacer (s, "\\maplemultiline{","$");
72
search_matching (char entree[], int &niveau) {
74
while (pos<=strlen(entree)) {
76
case '{': niveau++;break;
77
case '}': niveau--;break;
79
if (niveau==0) break;pos++;
87
const int max_length=1000;
88
char buffer[max_length];
90
/* passer l'annonce et afficher le premier prompt */
93
cout << DATA_BEGIN << "verbatim:";
94
cout << " |\\^/| Maple \n";
95
cout << "._|\\| |/|_. Copyright by Waterloo Maple Inc\n";
96
cout << " \\ MAPLE / All rights reserved. Maple is a registered trademark of\n";
97
cout << " <____ ____> Waterloo Maple Inc.\n";
98
cout << " | Type ? for help.\n";
100
cout << "Interface with TeXmacs by Christian Even (c) 2002.\n";
105
/* lecture de l'annonce et premiere entree */
107
cin.getline(buffer,max_length);
108
if (strcmp (buffer,"\\begin{mapleinput}" ) == 0) break;
111
/*boucle principale*/
114
while(true) { /*boucle entree/sortie*/
116
cin.getline(buffer,max_length);
117
string debut(buffer,0,11);
119
// comment lire l'aide en ligne?
120
// if (buffer[0]='?') {
121
// lire tout sans convertir en string jusqu'a \begin{mapleinput} ???}
124
if (debut=="\\mapleplot{" ) {
127
while (buffer[i] != '}') i++;
128
string nomduplot(buffer,11,i-11);
129
string message="cat $HOME/" + nomduplot;
130
cout << DATA_BEGIN << "latex:\\hfill" << DATA_END;
131
cout << DATA_BEGIN << "ps:";
135
while (i<=100000000) i++;
136
// boucle de temporisation: a ameliorer!!!!!
137
// il faudrait tester l'arrivee du plot.eps
139
system(message.c_str());
141
cout << DATA_BEGIN << "latex:\\hfill" << DATA_END;
144
else if (strcmp (buffer, "quit;" ) == 0) break;
145
else if (strcmp (buffer, "quit" ) == 0) break;
146
else if (strcmp (buffer,"\\begin{mapleinput}" ) == 0) { c=0; break; }
147
else if (strcmp (buffer,"\\end{mapleinput}" ) == 0) {
148
cout << DATA_BEGIN << "verbatim:"; c=1; }
150
else if (strcmp (buffer,"\\begin{maplelatex}" ) == 0) {
152
cout << DATA_BEGIN << "latex:";
153
cin.getline(buffer,max_length);
154
while (strcmp(buffer,"\\end{maplelatex}" ) != 0) {
155
if (strcmp (buffer,"\\maplemultiline{" ) == 0) {
159
string sortielatex="\\maplemultiline{";
161
cin.getline (buffer, max_length);
162
pos=search_matching (buffer, niveau);
164
pos= search_matching (buffer, niveau);
165
if (niveau==0) break;
166
sortielatex= sortielatex+buffer;
167
cin.getline (buffer, max_length);
169
string debut (buffer, 0, pos);
170
sortielatex=sortielatex+ debut;
171
if (sortielatex.find ("\\textbf{proc}") != string::npos)
173
// cout <<"l'indentation vaut "<< indentation <<"\n";
174
passer (sortielatex, indentation);
175
// string fin(buffer,pos+1,max_length-pos);
176
cout << "$\\hfill \\cr";
177
cin.getline (buffer, max_length);
179
/* else {string sortielatex(buffer,0,strlen(buffer));
180
passer(sortielatex,0);
181
cin.getline(buffer,max_length);}; */
183
string sortielatex(buffer,0,strlen(buffer));
184
while (strcmp (buffer,"\\]" ) != 0) {
185
cin.getline(buffer,max_length);
186
string suite(buffer,0,strlen(buffer));
187
sortielatex=sortielatex+suite;
189
passer(sortielatex,0);
190
cin.getline(buffer,max_length);
192
} // fin du while latex
196
// else if (strcmp (buffer,"\\end{maplelatex}" ) == 0) cout << DATA_END;
197
else if (strcmp (buffer," \\[ " ) == 0) cout << buffer;
198
else if (strcmp (buffer," \\] " ) == 0) cout << buffer;
199
else if (strcmp (buffer,"\\begin{maplettyout}" ) == 0) c= 1;
200
else if (strcmp (buffer,"\\end{maplettyout}" ) == 0) c= 1;
201
else if (c==1) fputs(buffer,stdout); fputs("\n",stdout);
203
} /* fin de la boucle entree/sortie* */
205
if (strcmp (buffer, "quit" ) == 0) {
206
cout << DATA_END << DATA_BEGIN
207
<< "latex: \\red $$\\mathrm{La session Maple est termin\\'ee}$$";
209
cout << DATA_ESCAPE;fflush(stdout);break;
213
cout<< "La session Maple est arretee.3";
220
if (strcmp (buffer, "quit;" ) == 0) {
221
cout << "La session est arretee.1";
231
} // fin de la boucle principale