|
|
|
@ -36,6 +36,16 @@ enum TextStyle
@@ -36,6 +36,16 @@ enum TextStyle
|
|
|
|
|
HREF |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const QString HTML_CHARACTER_CODE = QStringLiteral("&#%1"); |
|
|
|
|
|
|
|
|
|
static const QVector<char> MARKDOWN_SYMBOLS { |
|
|
|
|
'*', |
|
|
|
|
'/', |
|
|
|
|
'_', |
|
|
|
|
'~', |
|
|
|
|
'`' |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const QString COMMON_PATTERN = QStringLiteral("(?<=^|[^%1<])" |
|
|
|
|
"[%1]{%2}" |
|
|
|
|
"(?![%1 \\n])" |
|
|
|
@ -61,16 +71,21 @@ static const QVector<QString> htmlPatterns{QStringLiteral("<b>%1</b>"),
@@ -61,16 +71,21 @@ static const QVector<QString> htmlPatterns{QStringLiteral("<b>%1</b>"),
|
|
|
|
|
"<font color=#595959><code>%1</code></font>"), |
|
|
|
|
QStringLiteral("<a href=\"%1%2\">%2</a>")}; |
|
|
|
|
|
|
|
|
|
#define STRING_FROM_TYPE(type) QString(MARKDOWN_SYMBOLS[type]) |
|
|
|
|
|
|
|
|
|
#define REGEX_MARKDOWN_PAIR(type, count) \ |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg(STRING_FROM_TYPE(type), #count)), htmlPatterns[type]} |
|
|
|
|
|
|
|
|
|
static const QVector<QPair<QRegularExpression, QString>> textPatternStyle{ |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("*", "1")), htmlPatterns[BOLD]}, |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("/", "1")), htmlPatterns[ITALIC]}, |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("_", "1")), htmlPatterns[UNDERLINE]}, |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("~", "1")), htmlPatterns[STRIKE]}, |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("`", "1")), htmlPatterns[CODE]}, |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("*", "2")), htmlPatterns[BOLD]}, |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("/", "2")), htmlPatterns[ITALIC]}, |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("_", "2")), htmlPatterns[UNDERLINE]}, |
|
|
|
|
{QRegularExpression(COMMON_PATTERN.arg("~", "2")), htmlPatterns[STRIKE]}, |
|
|
|
|
REGEX_MARKDOWN_PAIR(BOLD, 1), |
|
|
|
|
REGEX_MARKDOWN_PAIR(ITALIC, 1), |
|
|
|
|
REGEX_MARKDOWN_PAIR(UNDERLINE, 1), |
|
|
|
|
REGEX_MARKDOWN_PAIR(STRIKE, 1), |
|
|
|
|
REGEX_MARKDOWN_PAIR(CODE, 1), |
|
|
|
|
REGEX_MARKDOWN_PAIR(BOLD, 2), |
|
|
|
|
REGEX_MARKDOWN_PAIR(ITALIC, 2), |
|
|
|
|
REGEX_MARKDOWN_PAIR(UNDERLINE, 2), |
|
|
|
|
REGEX_MARKDOWN_PAIR(STRIKE, 2), |
|
|
|
|
{QRegularExpression(MULTILINE_CODE), htmlPatterns[CODE]}}; |
|
|
|
|
|
|
|
|
|
static const QVector<QRegularExpression> urlPatterns { |
|
|
|
@ -155,7 +170,11 @@ static void processUrl(QString& str, std::function<QString(QString&)> func)
@@ -155,7 +170,11 @@ static void processUrl(QString& str, std::function<QString(QString&)> func)
|
|
|
|
|
void TextFormatter::applyHtmlFontStyling(bool showFormattingSymbols) |
|
|
|
|
{ |
|
|
|
|
processUrl(message, [] (QString& str) { |
|
|
|
|
return str.replace("/", "/"); |
|
|
|
|
for (char c : MARKDOWN_SYMBOLS) { |
|
|
|
|
QString charCode = QString::number(static_cast<int>(c)); |
|
|
|
|
str.replace(c, HTML_CHARACTER_CODE.arg(charCode)); |
|
|
|
|
} |
|
|
|
|
return str; |
|
|
|
|
}); |
|
|
|
|
for (QPair<QRegularExpression, QString> pair : textPatternStyle) { |
|
|
|
|
QRegularExpressionMatchIterator matchesIterator = pair.first.globalMatch(message); |
|
|
|
@ -182,7 +201,10 @@ void TextFormatter::applyHtmlFontStyling(bool showFormattingSymbols)
@@ -182,7 +201,10 @@ void TextFormatter::applyHtmlFontStyling(bool showFormattingSymbols)
|
|
|
|
|
insertedTagSymbolsCount += pair.second.length() - 2 - 2 * choppingSignsCount; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
message.replace("/", "/"); |
|
|
|
|
for (char c : MARKDOWN_SYMBOLS) { |
|
|
|
|
QString charCode = QString::number(static_cast<int>(c)); |
|
|
|
|
message.replace(HTML_CHARACTER_CODE.arg(charCode), QString(c)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|