2014-11-13 01:04:59 +02:00
|
|
|
/**********************************************************************************
|
|
|
|
* Copyright (C) 2008 by Carlo Segato <brandon.ml@gmail.com> *
|
|
|
|
* Copyright (c) 2002-2003 by Stefan Gehn <metz@gehn.net> *
|
|
|
|
* Kopete (c) 2002-2008 by the Kopete developers <kopete-devel@kde.org> *
|
|
|
|
* Copyright (c) 2005 by Engin AYDOGAN <engin@bzzzt.biz> *
|
|
|
|
* *
|
|
|
|
* This library is free software; you can redistribute it and/or *
|
|
|
|
* modify it under the terms of the GNU Lesser General Public *
|
|
|
|
* License as published by the Free Software Foundation; either *
|
|
|
|
* version 2.1 of the License, or (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This library 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 *
|
|
|
|
* Lesser General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU Lesser General Public *
|
|
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.*
|
|
|
|
* *
|
|
|
|
**********************************************************************************/
|
|
|
|
|
|
|
|
#ifndef KEMOTICONS_THEME_H
|
|
|
|
#define KEMOTICONS_THEME_H
|
|
|
|
|
|
|
|
#include "kemoticonsprovider.h"
|
|
|
|
|
2015-08-11 05:56:07 +03:00
|
|
|
#include <QtCore/qshareddata.h>
|
2014-11-13 01:04:59 +02:00
|
|
|
|
|
|
|
class QString;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This class contains the emoticons theme
|
|
|
|
*/
|
|
|
|
class KEMOTICONS_EXPORT KEmoticonsTheme
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The possible parse modes
|
|
|
|
*/
|
|
|
|
enum ParseModeEnum {
|
|
|
|
DefaultParse = 0x0, /**< Use strict or relaxed according to the config */
|
|
|
|
StrictParse = 0x1, /**< Strict parsing requires a space between each emoticon */
|
|
|
|
RelaxedParse = 0x2, /**< Parse mode where all possible emoticon matches are allowed */
|
|
|
|
SkipHTML = 0x4 /**< Skip emoticons within HTML */
|
|
|
|
};
|
|
|
|
|
|
|
|
Q_DECLARE_FLAGS(ParseMode, ParseModeEnum)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* TokenType, a token might be an image ( emoticon ) or text.
|
|
|
|
*/
|
|
|
|
enum TokenType {
|
|
|
|
Undefined, /**< Undefined, for completeness only */
|
|
|
|
Image, /**< Token contains a path to an image */
|
|
|
|
Text /**< Token contains text */
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A token consists of a QString text which is either a regular text
|
|
|
|
* or a path to image depending on the type.
|
|
|
|
* If type is Image the text refers to an image path.
|
|
|
|
* If type is Text the text refers to a regular text.
|
|
|
|
*/
|
|
|
|
struct Token {
|
|
|
|
Token() : type(Undefined) {}
|
|
|
|
/**
|
|
|
|
* Create a Token of type @p t, and text @p m
|
|
|
|
*/
|
|
|
|
Token(TokenType t, const QString &m) : type(t), text(m) {}
|
|
|
|
/**
|
|
|
|
* Create a Token of type @p t, text @p m, image path @p p and html code @p html
|
|
|
|
*/
|
|
|
|
Token(TokenType t, const QString &m, const QString &p, const QString &html)
|
|
|
|
: type(t), text(m), picPath(p), picHTMLCode(html) {}
|
|
|
|
TokenType type; /**< type */
|
|
|
|
QString text; /**< text */
|
|
|
|
QString picPath; /**< path to the image */
|
|
|
|
QString picHTMLCode; /**< \<img> html code */
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Default constructor, it creates a null emoticons theme
|
|
|
|
* you should probably never use this, instead use KEmoticons::theme()
|
|
|
|
*/
|
|
|
|
KEmoticonsTheme();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Copy constructor
|
|
|
|
*/
|
|
|
|
KEmoticonsTheme(const KEmoticonsTheme &ket);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Another constructor where you set the KEmoticonsProvider @p p
|
|
|
|
* you should probably never use this, instead use KEmoticons::theme()
|
|
|
|
*/
|
|
|
|
KEmoticonsTheme(KEmoticonsProvider *p);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Destructor
|
|
|
|
*/
|
|
|
|
~KEmoticonsTheme();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Parse emoticons in text @p text with ParseMode @p mode and optionally excluding emoticons from @p exclude
|
|
|
|
* @code
|
|
|
|
* KEmoticonsTheme theme = KEmoticons().theme();
|
|
|
|
* QString text = ":D hi :)";
|
|
|
|
* QStringList exclude(":)");
|
|
|
|
* QString parsed = theme.parseEmoticons(text, KEmoticonsTheme::DefaultParse, exclude);
|
|
|
|
* // parsed will be "<img align="center" title=":D" alt=":D" src="/path/to/:D.png" width="24" height="24" /> hi :)"
|
|
|
|
* @endcode
|
|
|
|
* @param text the text to parse
|
|
|
|
* @param mode how to parse the text
|
|
|
|
* @param exclude a list of emoticons to exclude from the parsing
|
|
|
|
* @return the text with emoticons replaced by html images
|
|
|
|
* @note SkipHTML is forced when using this function
|
|
|
|
*/
|
|
|
|
QString parseEmoticons(const QString &text, ParseMode mode = DefaultParse, const QStringList &exclude = QStringList()) const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Tokenize the message @p message with ParseMode @p mode
|
|
|
|
* @code
|
|
|
|
* KEmoticonsTheme theme = KEmoticons().theme();
|
|
|
|
* QString text = "hi :)";
|
|
|
|
* QList<Token> tokens = theme.tokenize(text, KEmoticonsTheme::DefaultParse);
|
|
|
|
* // tokens[0].text = "hi "
|
|
|
|
* // tokens[1].text = ":)"
|
|
|
|
* // tokens[1].picPath = "/path/to/:).png"
|
|
|
|
* // tokens[1].picHTMLCode = "<img align="center" title=":)" alt=":)" src="/path/to/:).png" width="24" height="24" />"
|
|
|
|
* @endcode
|
|
|
|
*/
|
|
|
|
QList<Token> tokenize(const QString &message, ParseMode mode = DefaultParse) const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Load the theme inside the directory @p path
|
|
|
|
* @param path path to the directory
|
|
|
|
*/
|
|
|
|
bool loadTheme(const QString &path);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Remove the emoticon @p emo, this will not delete the image file too
|
|
|
|
* @code
|
|
|
|
* KEmoticonsTheme theme = KEmoticons().theme();
|
|
|
|
* theme.removeEmoticon(":)");
|
|
|
|
* @endcode
|
|
|
|
* @param emo the emoticon text to remove
|
|
|
|
* @return @c true if it can delete the emoticon
|
|
|
|
*/
|
|
|
|
bool removeEmoticon(const QString &emo);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add the emoticon @p emo with text @p text
|
|
|
|
* @code
|
|
|
|
* KEmoticonsTheme theme = KEmoticons().theme();
|
|
|
|
* theme.addEmoticon("/path/to/smiley.png", ":) :-)");
|
|
|
|
* @endcode
|
|
|
|
* @param emo path to the emoticon image
|
|
|
|
* @param text the text of the emoticon separated by space for multiple text
|
|
|
|
* @param copy whether or not copy @p emo into the theme directory
|
|
|
|
* @return @c true if it can add the emoticon
|
|
|
|
*/
|
|
|
|
bool addEmoticon(const QString &emo, const QString &text, KEmoticonsProvider::AddEmoticonOption option = KEmoticonsProvider::DoNotCopy);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Save the emoticon theme
|
|
|
|
*/
|
|
|
|
void save();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the theme name
|
|
|
|
*/
|
|
|
|
QString themeName() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the theme name
|
|
|
|
* @param name name of the theme
|
|
|
|
*/
|
|
|
|
void setThemeName(const QString &name);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the theme path
|
|
|
|
*/
|
|
|
|
QString themePath() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the file name of the theme
|
|
|
|
*/
|
|
|
|
QString fileName() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a QHash that contains the emoticons path as keys and the text as values
|
|
|
|
*/
|
|
|
|
QHash<QString, QStringList> emoticonsMap() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new theme
|
|
|
|
*/
|
|
|
|
void createNew();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if the theme has a valid provider and it returns true if it can't find it
|
|
|
|
*/
|
|
|
|
bool isNull() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @internal
|
|
|
|
*/
|
|
|
|
KEmoticonsTheme& operator=(const KEmoticonsTheme &ket);
|
|
|
|
private:
|
|
|
|
class KEmoticonsThemeData;
|
|
|
|
/**
|
|
|
|
* Private class
|
|
|
|
*/
|
|
|
|
QSharedDataPointer<KEmoticonsThemeData> d;
|
|
|
|
};
|
|
|
|
|
|
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(KEmoticonsTheme::ParseMode)
|
|
|
|
|
|
|
|
#endif /* KEMOTICONS_THEME_H */
|
|
|
|
|
|
|
|
// kate: space-indent on; indent-width 4; replace-tabs on;
|