diff --git a/src/core/textfactory.cpp b/src/core/textfactory.cpp index 3e0acef92..aa54c5247 100644 --- a/src/core/textfactory.cpp +++ b/src/core/textfactory.cpp @@ -49,3 +49,44 @@ QString TextFactory::shorten(const QString &input, int text_length_limit) { QString TextFactory::stripTags(QString text) { return text.remove(QRegExp("<[^>]*>")); } + +QString TextFactory::escapeHtml(const QString &html) { + QMap sequences; + + sequences["<"] = "<"; + sequences[">"] = ">"; + sequences["&"] = "&"; + sequences["""] = "\""; + sequences[" "] = " "; + sequences["±"] = "±"; + sequences["×"] = "×"; + + QList keys = sequences.uniqueKeys(); + QString output = html; + + foreach (const QString &key, keys) { + output.replace(key, sequences.value(key)); + } + + return output; +} + +QString TextFactory::deEscapeHtrml(const QString &text) { + QMap sequences; + + sequences["<"] = "<"; + sequences[">"] = ">"; + sequences["&"] = "&"; + sequences["\""] = """; + sequences["±"] = "±"; + sequences["×"] = "×"; + + QList keys = sequences.uniqueKeys(); + QString output = text; + + foreach (const QString &key, keys) { + output.replace(key, sequences.value(key)); + } + + return output; +} diff --git a/src/core/textfactory.h b/src/core/textfactory.h index e1359c1e6..5ce2a909f 100644 --- a/src/core/textfactory.h +++ b/src/core/textfactory.h @@ -19,6 +19,11 @@ class TextFactory { // Strips "<....>" (HTML, XML) tags from given text. static QString stripTags(QString text); + // HTML entity escaping. + // TODO: Optimize these methods. + static QString escapeHtml(const QString &html); + static QString deEscapeHtrml(const QString &text); + // Shortens input string according to given length limit. static QString shorten(const QString &input, int text_length_limit = TEXT_TITLE_LIMIT); };