/**************************************************************** * This file is distributed under the following license: * * Copyright (c) 2010, Thomas Kister * * 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., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. ****************************************************************/ /** * This file provides helper functions and functors for translating data from/to * rich text format and HTML. Its main goal is to facilitate decoding of chat * messages, particularly embedding special information into HTML tags. */ #ifndef HANDLE_RICH_TEXT_H_ #define HANDLE_RICH_TEXT_H_ #include #include /* Flags for RsHtml::formatText */ #define RSHTML_FORMATTEXT_EMBED_SMILEYS 1 #define RSHTML_FORMATTEXT_EMBED_LINKS 2 #define RSHTML_FORMATTEXT_REMOVE_FONT 4 #define RSHTML_FORMATTEXT_REMOVE_COLOR 8 #define RSHTML_FORMATTEXT_CLEANSTYLE (RSHTML_FORMATTEXT_REMOVE_FONT | RSHTML_FORMATTEXT_REMOVE_COLOR) /* Flags for RsHtml::formatText */ #define RSHTML_OPTIMIZEHTML_REMOVE_FONT 2 #define RSHTML_OPTIMIZEHTML_REMOVE_COLOR 1 class QTextEdit; namespace RsHtml { /** * The type of embedding we'd like to do */ enum EmbeddedType { Ahref, ///< into Img, ///< into }; /** * Base class for storing information about a given kind of embedding. * * Its only constructor is protected so it is impossible to instantiate it, and * at the same time derived classes have to provide a type. */ class EmbedInHtml { protected: EmbedInHtml(EmbeddedType newType) : myType(newType) {} public: const EmbeddedType myType; QRegExp myRE; }; /** * This class is used to store information for embedding links into tags. */ class EmbedInHtmlAhref : public EmbedInHtml { public: EmbedInHtmlAhref() : EmbedInHtml(Ahref) { myRE.setPattern("(\\bretroshare://[^\\s]*)|(\\bhttps?://[^\\s]*)|(\\bfile://[^\\s]*)|(\\bwww\\.[^\\s]*)"); } }; /** * This class is used to store information for embedding smileys into tags. * * By default the QRegExp the variables are empty, which means it must be * filled at runtime, typically when the smileys set is loaded. It can be * either done by hand or by using one of the helper methods available. * * Note: The QHash uses only *one* smiley per key (unlike soon-to-be-upgraded * code out there). */ class EmbedInHtmlImg : public EmbedInHtml { public: EmbedInHtmlImg() : EmbedInHtml(Img) {} void InitFromAwkwardHash(const QHash& hash); QHash smileys; }; extern EmbedInHtmlImg defEmbedImg; QString formatText(const QString &text, unsigned int flag); bool findAnchors(const QString &text, QStringList& urls); void optimizeHtml(QTextEdit *textEdit, QString &text, unsigned int flag = 0); void optimizeHtml(QString &text, unsigned int flag = 0); QString toHtml(QString text, bool realHtml = true); } // namespace RsHtml #endif // HANDLE_RICH_TEXT_H_