/* * A plugin for Miranda IM which displays web page text in a window Copyright * (C) 2005 Vincent Joyce. * * Miranda IM: the free icq client for MS Windows Copyright (C) 2000-2 * Richard Hughes, Roland Rabien & Tristan Van de Vreede * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "stdafx.h" #include "webview.h" // /////////////////////// // characters and symbols// // /////////////////////// #define AMOUNT3 164 char*CharacterCodes[AMOUNT3] = { """, "&", "<", ">", " ", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "&yumil;", "Œ", // greater that 255, extra latin characters "œ", "Š", "š", "Ÿ", "ƒ", "ˆ", "˜", "Œ", "œ", "Š", "š", "Ÿ", "ƒ", "ˆ", "˜", "–", // Misc other characters "—", "‘", "’", "‚", "“", "”", "„", "†", "‡", "•", "…", "‰", "‹", "›", "€", "ℑ", "ℜ", "™", "–", "—", "‘", "’", "‚", "“", "”", "„", "†", "‡", "•", "…", "‰", "‹", "›", "€", "ℑ", "ℜ", "™", " ", " ", " ", " ", " ", " ", "õ", // symbols without numeric code "¿", "¦", "¯"}; char Characters[AMOUNT3] = { '\"', '&', '<', '>', ' ', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ', 'Œ', // greater than 255 extra latin characters 'œ', 'Š', 'š', 'Ÿ', 'ƒ', 'ˆ', '˜', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ƒ', 'ˆ', '˜', '–', '—', // misc other characters '‘', '’', '‚', '“', '”', '„', '†', '‡', '•', '…', '‰', '‹', '›', '€', 'I', 'R', '™', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '•', '…', '‰', '‹', '›', '€', 'I', 'R', '™', ' ', ' ', ' ', ' ', ' ', ' ', 'õ', '¿', '¦', '¯'}; /*****************************************************************************/ void CodetoSymbol(char *truncated) { int counter = 0; int position = 0, recpos = 0; static char *stringfrompos; for (int n = 0; n < AMOUNT3; n++) { while (true) { // loop forever Sleep(1); // avoid 100% CPU if ( strstr(truncated, CharacterCodes[n]) != nullptr) { // does character code exist? stringfrompos = strstr(truncated, CharacterCodes[n]); position = stringfrompos - truncated; counter = 0; while (counter != mir_strlen(CharacterCodes[n])) { truncated[position + counter] = ' '; counter++; } truncated[(position + counter) - 1] = Characters[n]; strncpy(&truncated[position], &truncated[position + mir_strlen(CharacterCodes[n])] - 1, mir_strlen(&truncated[position]) - 1); } // end does character code exist? if (recpos == position) break; // break out of loop if doesn't find new character code recpos = position; } // end loop forever } // for } /*****************************************************************************/ void EraseBlock(char *truncated) { int counter = 0; int positionStart = 0, positionEnd = 0; char *stringfrompos; int BlockLength = 0; char* tempraw = (char*)malloc(MAXSIZE1); if (truncated) strncpy(tempraw, truncated, MAXSIZE1); // /////////////////////////// while (true) { Sleep(1); // avoid 100% CPU // /get start and end of block if (strstr(tempraw, "<!--") != nullptr) // does tag exist? { stringfrompos = strstr(tempraw, "<!--"); positionStart = stringfrompos - tempraw; } if (strstr(tempraw, "-->") != nullptr) // does tag exist? { stringfrompos = strstr(tempraw, "-->"); positionEnd = stringfrompos - tempraw; } BlockLength = (positionEnd - positionStart) + 3; if ((strstr(tempraw, "<!--") == nullptr) || (strstr(tempraw, "-->") == nullptr)) break; ///////////////////////////////////////// if (strstr(tempraw, "<!--") != nullptr) for (counter = 0; counter < BlockLength; counter++) tempraw[positionStart + counter] = ' '; if ((positionStart == 0) && (positionEnd == 0)) break; if (positionStart > positionEnd) break; positionStart = 0; positionEnd = 0; } // /////////////////////////// positionStart = 0; positionEnd = 0; // 2// while (true) { Sleep(1); // avoid 100% CPU // /get start and end of block if (((strstr(tempraw, "<script")) != nullptr) || (strstr(tempraw, "<SCRIPT") != nullptr)) // does { if (strstr(tempraw, "<script") != nullptr) stringfrompos = strstr(tempraw, "<script"); else stringfrompos = strstr(tempraw, "<SCRIPT"); positionStart = stringfrompos - tempraw; } if (((strstr(tempraw, "</script")) != nullptr) || (strstr(tempraw, "</SCRIPT") != nullptr)) // does { if (strstr(tempraw, "<script") != nullptr) stringfrompos = strstr(tempraw, "</script"); else stringfrompos = strstr(tempraw, "</SCRIPT"); positionEnd = stringfrompos - tempraw; } BlockLength = (positionEnd - positionStart) + 9; if ((strstr(tempraw, "<script") != nullptr) && (strstr(tempraw, "</script") == nullptr)) break; if ((strstr(tempraw, "<SCRIPT") != nullptr) && (strstr(tempraw, "</SCRIPT") == nullptr)) break; /////////////////////////////////////// if (((strstr(tempraw, "<script")) != nullptr) || ((strstr(tempraw, "<SCRIPT")) != nullptr)) for (counter = 0; counter < BlockLength; counter++) tempraw[positionStart + counter] = ' '; if ((positionStart == 0) && (positionEnd == 0)) break; if (positionStart > positionEnd) break; positionStart = 0; positionEnd = 0; } // //// // 3// while (true) { Sleep(1); // avoid 100% CPU // /get start and end of block if (((strstr(tempraw, "<style")) != nullptr) || (strstr(tempraw, "<STYLE") != nullptr)) // does { if (strstr(tempraw, "<style") != nullptr) stringfrompos = strstr(tempraw, "<style"); else stringfrompos = strstr(tempraw, "<STYLE"); positionStart = stringfrompos - tempraw; } if (((strstr(tempraw, "</style")) != nullptr) || (strstr(tempraw, "</STYLE") != nullptr)) // does { if (strstr(tempraw, "<style") != nullptr) stringfrompos = strstr(tempraw, "</style"); else stringfrompos = strstr(tempraw, "</STYLE"); positionEnd = stringfrompos - tempraw; } BlockLength = (positionEnd - positionStart) + 8; if ((strstr(tempraw, "<style") != nullptr) && (strstr(tempraw, "</style") == nullptr)) break; if ((strstr(tempraw, "<STYLE") != nullptr) && (strstr(tempraw, "</STYLE") == nullptr)) break; /////////////////////////////////////// if (((strstr(tempraw, "<style")) != nullptr) || ((strstr(tempraw, "<STYLE")) != nullptr)) for (counter = 0; counter < BlockLength; counter++) tempraw[positionStart + counter] = ' '; if ((positionStart == 0) && (positionEnd == 0)) break; if (positionStart > positionEnd) break; positionStart = 0; positionEnd = 0; } // 4// while (true) { Sleep(1); // avoid 100% CPU // /get start and end of block if (strstr(tempraw, "{") != nullptr) // does tag exist? { stringfrompos = strstr(tempraw, "{"); positionStart = stringfrompos - tempraw; } if (strstr(tempraw, "}") != nullptr) // does tag exist? { stringfrompos = strstr(tempraw, "}"); positionEnd = stringfrompos - tempraw; } BlockLength = (positionEnd - positionStart) + 1; if ((strstr(tempraw, "}") == nullptr) || (strstr(tempraw, "{") == nullptr)) break; ///////////////////////////////////////// if (strstr(tempraw, "{") != nullptr) for (counter = 0; counter < BlockLength; counter++) tempraw[positionStart + counter] = ' '; if ((positionStart == 0) && (positionEnd == 0)) break; if (positionStart > positionEnd) break; positionStart = 0; positionEnd = 0; } // /////////////////////////// positionStart = 0; positionEnd = 0; strncpy(truncated, tempraw, mir_strlen(truncated)); free(tempraw); } /*****************************************************************************/ void EraseSymbols(char *truncated) { int counter = 0; int position = 0, recpos = 0; char *stringfrompos; char *tempraw = (char*)malloc(MAXSIZE1); if (truncated) strncpy(tempraw, truncated, MAXSIZE1); // ////// while (true) { Sleep(1); // avoid 100% CPU /**/ counter = 0; if ((strstr(tempraw, "&#")) != nullptr) { stringfrompos = strstr(tempraw, "&#"); position = stringfrompos - tempraw; while (true) { tempraw[position + counter] = ' '; counter++; if (counter > 20) break; if (tempraw[position + counter] == ' ') break; } if (tempraw[position + counter] == ';') tempraw[position + counter] = ' '; } if (recpos == position) break; recpos = position; } strncpy(truncated, tempraw, mir_strlen(truncated)); free(tempraw); } /*****************************************************************************/ void NumSymbols(char *truncated) { int counter = 0; int position = 0, recpos = 0; char*stringfrompos; char symbol[20]; int character; char *tempraw = (char*)malloc(MAXSIZE1); if (truncated) strncpy(tempraw, truncated, MAXSIZE1); while (true) { Sleep(1); // avoid 100% CPU counter = 0; if ((strstr(tempraw, "&#")) != nullptr) { stringfrompos = strstr(tempraw, "&#"); position = stringfrompos - tempraw; while (true) { if (counter > 1) symbol[counter - 2] = tempraw[position + counter]; tempraw[position + counter] = ' '; counter++; if (counter > 20) break; if ((tempraw[position + counter] == ';')) { symbol[counter - 2] = '\0'; character = atoi(symbol); if (character > 0 && character < 256) memset(&tempraw[position], character, 1); break; } } if (tempraw[position + counter] == ';') tempraw[position + counter] = ' '; } if (recpos == position) break; recpos = position; } strncpy(truncated, tempraw, mir_strlen(truncated)); free(tempraw); } /*****************************************************************************/ void FastTagFilter(char *truncated) { char *tempraw = (char*)malloc(MAXSIZE1); if (truncated) strncpy(tempraw, truncated, MAXSIZE1); for (int counter = 0; counter < mir_strlen(tempraw); counter++) { if (tempraw[counter] == '<') { while (tempraw[counter] != '>') { if (counter >= mir_strlen(tempraw)) break; tempraw[counter] = ' '; counter++; } if (tempraw[counter] == '>') tempraw[counter] = ' '; } } strncpy(truncated, tempraw, mir_strlen(truncated)); free(tempraw); } /*****************************************************************************/ void RemoveInvis(char *truncated, int AmountWspcRem) { int erase = 0; int RemovalLevel = 0; char *tempraw = (char*)malloc(MAXSIZE1); if (truncated) strncpy(tempraw, truncated, MAXSIZE1); switch (AmountWspcRem) { case 1: RemovalLevel = 80; // small break; case 2: RemovalLevel = 30; // medium break; case 3: RemovalLevel = 10; // large break; } for (int counter = 0; counter < mir_strlen(tempraw); counter++) { if (AmountWspcRem != 0 && AmountWspcRem != 4) { if ((tempraw[counter] == '\n') || (tempraw[counter] == ' ') || (tempraw[counter] == '\r')) erase = erase + 1; else erase = 0; if (erase > RemovalLevel) tempraw[counter] = ' '; } if (AmountWspcRem == 4) if ((tempraw[counter] == '\n') || (tempraw[counter] == ' ') || (tempraw[counter] == '\r')) tempraw[counter] = ' '; } // end for strncpy(truncated, tempraw, mir_strlen(truncated)); free(tempraw); } /*****************************************************************************/ void RemoveTabs(char *truncated) { char *tempraw = (char*)malloc(MAXSIZE1); if (truncated) strncpy(tempraw, truncated, MAXSIZE1); for (int counter = 0; counter < mir_strlen(tempraw); counter++) if (tempraw[counter] == '\t') tempraw[counter] = ' '; strncpy(truncated, tempraw, mir_strlen(truncated)); free(tempraw); } /*****************************************************************************/ void Removewhitespace(char *truncated) { int counter2 = 0; int pos1 = 0, pos2 = 0; for (int counter = 0; counter < mir_strlen(truncated); counter++) { if (truncated[counter] == ' ' && truncated[counter + 1] == ' ') { pos1 = counter + 1; counter2 = counter; while (truncated[counter2] == ' ') counter2++; pos2 = counter2; strncpy(&truncated[pos1], &truncated[pos2], mir_strlen(&truncated[pos1]) - 1); } // end if } // end for } /*****************************************************************************/ void Filter(char *truncated) { char tempraw[MAXSIZE1]; strncpy(tempraw, truncated, _countof(tempraw)); for (int counter = 0; counter < mir_strlen(tempraw); counter++) if ((tempraw[counter] == '\n') || (tempraw[counter] == '\r') || (tempraw[counter] == '\t')) strncpy(&tempraw[counter], &tempraw[counter + 1], mir_strlen(&tempraw[counter]) - 1); strncpy(truncated, tempraw, mir_strlen(truncated)); }