// unicode conversion for special characters char *unicode_tags[]={ "nbsp", " ", "#38", " ", "#160", " ", "ntilde", "n", // spanish n special ñ "#224", "à", // spanish a with grove accent 'à' "#241", "n", // spanish symbol "copy", "(c)", "#169", "(c)", "trade", "[TM]", "reg", "(r)", "#174", "(r)", "bdquo", ",,", "amp", "&", "#38", "&", "lt", "<", "#60", "<", "gt", ">", "#62", ">", "minus", "-", "ndash", "-", "mdash", "-", //-- "#8722", "-", "#8211", "-", "#151", "-", "#149", "-", "rsquo", "'", "#39", "'", "#96", "'", "#8217", "'", "quot", "\"", "#34", "\"", "ldquo", "\"", "rdquo", "\"", "#8222", "\"", "#8221", "\"", "laquo", "<<", "#171", "<<", "raquo", ">>", "#187", ">>", "uarr", "\24", "darr", "\25", "rarr", "\26", "larr", "\27", "#1028", "\242", "#1030", "I", "#1031", "\244", "#8470", "N", "bull", "-", //âîîáùå çäåñü òî÷êà "percnt","%", 0}; // function to be called to fix the special symbols void fixSpecial(dword text) { byte ch; int i , j, z; dword aux; dword text2 = text; loop () { ch = ESBYTE[text]; if (!ch) return; if (ch=='&') { i = 0; j = 0; text++; while ( i < 7) { ch = ESBYTE[text]; if (ch == ';') { z = get_symbol(#str); if (z == -1) { // not found ch = ' '; } else { // tag found aux = unicode_tags[z]; strtrim(aux); ch = ESBYTE[aux]; // copy the special symbol found while (ch) { ESBYTE[text2] = ch; aux++; text2++; ch = ESBYTE[aux]; } ch = ESBYTE[text2]; } // clean the old symbol while (ch != ';') { ESBYTE[text2] = ' ';// should be (char) 0; text2++; ch = ESBYTE[text2]; } ESBYTE[text2] = ' '; // should be '' or char 0 break; } str[i] = ch; if (!ch) return; text++; i++; } for (i=0; i < 7; i++) str[i] = 0; // clean str } text++; text2++; } } // function to look for the conversion of special characters // if not found--> return -1 int get_symbol(char *str2) { int i,j; //debugln(#str2); for (i=0; unicode_tags[i]!=0; i+=2) { if (strcmp(str2, unicode_tags[i]) == 0) { return (i+1); } } return -1; }