00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <stdlib.h>
00018 #include <string.h>
00019 #include <gbfthml.h>
00020
00021
00022 GBFThML::GBFThML()
00023 {
00024 }
00025
00026
00027 char GBFThML::ProcessText(char *text, int maxlen)
00028 {
00029 char *to, *from, token[2048];
00030 int tokpos = 0;
00031 bool intoken = false;
00032 int len;
00033 const char *tok;
00034
00035 len = strlen(text) + 1;
00036 if (len < maxlen) {
00037 memmove(&text[maxlen - len], text, len);
00038 from = &text[maxlen - len];
00039 }
00040 else from = text;
00041
00042 for (to = text; *from; from++)
00043 {
00044 if (*from == '<') {
00045 intoken = true;
00046 tokpos = 0;
00047 token[0] = 0;
00048 token[1] = 0;
00049 token[2] = 0;
00050 continue;
00051 }
00052 if (*from == '>')
00053 {
00054 intoken = false;
00055
00056 switch (*token) {
00057 case 'W':
00058 switch(token[1]) {
00059 case 'G':
00060 case 'H':
00061 *to++ = '<';
00062 *to++ = 's';
00063 *to++ = 'y';
00064 *to++ = 'n';
00065 *to++ = 'c';
00066 *to++ = ' ';
00067 *to++ = 't';
00068 *to++ = 'y';
00069 *to++ = 'p';
00070 *to++ = 'e';
00071 *to++ = '=';
00072 *to++ = '"';
00073 *to++ = 'S';
00074 *to++ = 't';
00075 *to++ = 'r';
00076 *to++ = 'o';
00077 *to++ = 'n';
00078 *to++ = 'g';
00079 *to++ = 's';
00080 *to++ = '"';
00081 *to++ = ' ';
00082 *to++ = 'v';
00083 *to++ = 'a';
00084 *to++ = 'l';
00085 *to++ = 'u';
00086 *to++ = 'e';
00087 *to++ = '=';
00088 *to++ = '"';
00089 for (tok = token + 1; *tok; tok++)
00090 *to++ = *tok;
00091 *to++ = '"';
00092 *to++ = ' ';
00093 *to++ = '/';
00094 *to++ = '>';
00095 continue;
00096
00097 case 'T':
00098 *to++ = '<';
00099 *to++ = 's';
00100 *to++ = 'y';
00101 *to++ = 'n';
00102 *to++ = 'c';
00103 *to++ = ' ';
00104 *to++ = 't';
00105 *to++ = 'y';
00106 *to++ = 'p';
00107 *to++ = 'e';
00108 *to++ = '=';
00109 *to++ = '"';
00110 *to++ = 'M';
00111 *to++ = 'o';
00112 *to++ = 'r';
00113 *to++ = 'p';
00114 *to++ = 'h';
00115 *to++ = '"';
00116 *to++ = ' ';
00117 *to++ = 'v';
00118 *to++ = 'a';
00119 *to++ = 'l';
00120 *to++ = 'u';
00121 *to++ = 'e';
00122 *to++ = '=';
00123 *to++ = '"';
00124 for (tok = token + 2; *tok; tok++)
00125 *to++ = *tok;
00126 *to++ = '"';
00127 *to++ = ' ';
00128 *to++ = '/';
00129 *to++ = '>';
00130 continue;
00131 }
00132 break;
00133 case 'R':
00134 switch(token[1])
00135 {
00136 case 'X':
00137 *to++ = '<';
00138 *to++ = 'a';
00139 *to++ = ' ';
00140 *to++ = 'h';
00141 *to++ = 'r';
00142 *to++ = 'e';
00143 *to++ = 'f';
00144 *to++ = '=';
00145 *to++ = '\"';
00146 for (tok = token + 3; *tok; tok++) {
00147 if(*tok != '<' && *tok+1 != 'R' && *tok+2 != 'x') {
00148 *to++ = *tok;
00149 }
00150 else {
00151 break;
00152 }
00153 }
00154 *to++ = '\"';
00155 *to++ = '>';
00156 continue;
00157 case 'x':
00158 *to++ = '<';
00159 *to++ = '/';
00160 *to++ = 'a';
00161 *to++ = '>';
00162 continue;
00163 case 'F':
00164 *to++ = '<';
00165 *to++ = 'n';
00166 *to++ = 'o';
00167 *to++ = 't';
00168 *to++ = 'e';
00169 *to++ = ' ';
00170 *to++ = 'p';
00171 *to++ = 'l';
00172 *to++ = 'a';
00173 *to++ = 'c';
00174 *to++ = 'e';
00175 *to++ = '=';
00176 *to++ = '"';
00177 *to++ = 'f';
00178 *to++ = 'o';
00179 *to++ = 'o';
00180 *to++ = 't';
00181 *to++ = '"';
00182 *to++ = '>';
00183 continue;
00184 case 'f':
00185 *to++ = '<';
00186 *to++ = '/';
00187 *to++ = 'n';
00188 *to++ = 'o';
00189 *to++ = 't';
00190 *to++ = 'e';
00191 *to++ = '>';
00192 continue;
00193 }
00194 break;
00195 case 'F':
00196 switch(token[1])
00197 {
00198 case 'N':
00199 *to++ = '<';
00200 *to++ = 'f';
00201 *to++ = 'o';
00202 *to++ = 'n';
00203 *to++ = 't';
00204 *to++ = ' ';
00205 *to++ = 'f';
00206 *to++ = 'a';
00207 *to++ = 'c';
00208 *to++ = 'e';
00209 *to++ = '=';
00210 *to++ = '"';
00211 for (tok = token + 2; *tok; tok++)
00212 *to++ = *tok;
00213 *to++ = '"';
00214 *to++ = '>';
00215 continue;
00216 case 'n':
00217 *to++ = '<';
00218 *to++ = '/';
00219 *to++ = 'f';
00220 *to++ = 'o';
00221 *to++ = 'n';
00222 *to++ = 't';
00223 *to++ = '>';
00224 continue;
00225 case 'I':
00226 *to++ = '<';
00227 *to++ = 'i';
00228 *to++ = '>';
00229 continue;
00230 case 'i':
00231 *to++ = '<';
00232 *to++ = '/';
00233 *to++ = 'i';
00234 *to++ = '>';
00235 continue;
00236 case 'B':
00237 *to++ = '<';
00238 *to++ = 'b';
00239 *to++ = '>';
00240 continue;
00241 case 'b':
00242 *to++ = '<';
00243 *to++ = '/';
00244 *to++ = 'b';
00245 *to++ = '>';
00246 continue;
00247
00248 case 'R':
00249 *to++ = '<';
00250 *to++ = 'f';
00251 *to++ = 'o';
00252 *to++ = 'n';
00253 *to++ = 't';
00254 *to++ = ' ';
00255 *to++ = 'c';
00256 *to++ = 'o';
00257 *to++ = 'l';
00258 *to++ = 'o';
00259 *to++ = 'r';
00260 *to++ = '=';
00261 *to++ = '\"';
00262 *to++ = '#';
00263 *to++ = 'f';
00264 *to++ = 'f';
00265 *to++ = '0';
00266 *to++ = '0';
00267 *to++ = '0';
00268 *to++ = '0';
00269 *to++ = '\"';
00270 *to++ = '>';
00271 continue;
00272 case 'r':
00273 *to++ = '<';
00274 *to++ = '/';
00275 *to++ = 'f';
00276 *to++ = 'o';
00277 *to++ = 'n';
00278 *to++ = 't';
00279 *to++ = '>';
00280 continue;
00281 case 'U':
00282 *to++ = '<';
00283 *to++ = 'u';
00284 *to++ = '>';
00285 continue;
00286 case 'u':
00287 *to++ = '<';
00288 *to++ = '/';
00289 *to++ = 'u';
00290 *to++ = '>';
00291 continue;
00292 case 'O':
00293 *to++ = '<';
00294 *to++ = 'c';
00295 *to++ = 'i';
00296 *to++ = 't';
00297 *to++ = 'e';
00298 *to++ = '>';
00299 continue;
00300 case 'o':
00301 *to++ = '<';
00302 *to++ = '/';
00303 *to++ = 'c';
00304 *to++ = 'i';
00305 *to++ = 't';
00306 *to++ = 'e';
00307 *to++ = '>';
00308 continue;
00309 case 'S':
00310 *to++ = '<';
00311 *to++ = 's';
00312 *to++ = 'u';
00313 *to++ = 'p';
00314 *to++ = '>';
00315 continue;
00316 case 's':
00317 *to++ = '<';
00318 *to++ = '/';
00319 *to++ = 's';
00320 *to++ = 'u';
00321 *to++ = 'p';
00322 *to++ = '>';
00323 continue;
00324 case 'V':
00325 *to++ = '<';
00326 *to++ = 's';
00327 *to++ = 'u';
00328 *to++ = 'b';
00329 *to++ = '>';
00330 continue;
00331 case 'v':
00332 *to++ = '<';
00333 *to++ = '/';
00334 *to++ = 's';
00335 *to++ = 'u';
00336 *to++ = 'b';
00337 *to++ = '>';
00338 continue;
00339 }
00340 break;
00341 case 'C':
00342 switch(token[1])
00343 {
00344 case 'A':
00345 *to++ = (char)atoi(&token[2]);
00346 continue;
00347 case 'G':
00348
00349 continue;
00350 case 'L':
00351 *to++ = '<';
00352 *to++ = 'b';
00353 *to++ = 'r';
00354 *to++ = ' ';
00355 *to++ = '/';
00356 *to++ = '>';
00357 *to++ = ' ';
00358 continue;
00359 case 'M':
00360 *to++ = '<';
00361 *to++ = 'p';
00362 *to++ = ' ';
00363 *to++ = '/';
00364 *to++ = '>';
00365 continue;
00366 case 'T':
00367
00368 continue;
00369 }
00370 break;
00371 case 'T':
00372 switch(token[1])
00373 {
00374 case 'T':
00375 *to++ = '<';
00376 *to++ = 'b';
00377 *to++ = 'i';
00378 *to++ = 'g';
00379 *to++ = '>';
00380 continue;
00381 case 't':
00382 *to++ = '<';
00383 *to++ = '/';
00384 *to++ = 'b';
00385 *to++ = 'i';
00386 *to++ = 'g';
00387 *to++ = '>';
00388 continue;
00389 case 'S':
00390 *to++ = '<';
00391 *to++ = 'd';
00392 *to++ = 'i';
00393 *to++ = 'v';
00394 *to++ = ' ';
00395 *to++ = 'c';
00396 *to++ = 'l';
00397 *to++ = 'a';
00398 *to++ = 's';
00399 *to++ = 's';
00400 *to++ = '=';
00401 *to++ = '\"';
00402 *to++ = 's';
00403 *to++ = 'e';
00404 *to++ = 'c';
00405 *to++ = 'h';
00406 *to++ = 'e';
00407 *to++ = 'a';
00408 *to++ = 'd';
00409 *to++ = '\"';
00410 *to++ = '>';
00411 continue;
00412 case 's':
00413 *to++ = '<';
00414 *to++ = '/';
00415 *to++ = 'd';
00416 *to++ = 'i';
00417 *to++ = 'v';
00418 *to++ = '>';
00419 continue;
00420 }
00421 break;
00422
00423 case 'P':
00424 switch(token[1])
00425 {
00426 case 'P':
00427 *to++ = '<';
00428 *to++ = 'v';
00429 *to++ = 'e';
00430 *to++ = 'r';
00431 *to++ = 's';
00432 *to++ = 'e';
00433 *to++ = '>';
00434 continue;
00435 case 'p':
00436 *to++ = '<';
00437 *to++ = '/';
00438 *to++ = 'v';
00439 *to++ = 'e';
00440 *to++ = 'r';
00441 *to++ = 's';
00442 *to++ = 'e';
00443 *to++ = '>';
00444 continue;
00445 }
00446 break;
00447 }
00448 continue;
00449 }
00450 if (intoken) {
00451 if (tokpos < 2045)
00452 token[tokpos++] = *from;
00453 token[tokpos+2] = 0;
00454 }
00455 else *to++ = *from;
00456 }
00457 *to++ = 0;
00458 *to = 0;
00459 return 0;
00460 }
00461
00462
00463