mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Merge pull request #240 from sehraf/pr-smiley-whitespace
Add whitespaces around smileys.
This commit is contained in:
commit
e6cd4a4c55
@ -1391,7 +1391,13 @@ void ChatWidget::smileyWidget()
|
||||
|
||||
void ChatWidget::addSmiley()
|
||||
{
|
||||
ui->chatTextEdit->textCursor().insertText(qobject_cast<QPushButton*>(sender())->toolTip().split("|").first());
|
||||
QString smiley = qobject_cast<QPushButton*>(sender())->toolTip().split("|").first();
|
||||
// add trailing space
|
||||
smiley += QString(" ");
|
||||
// add preceding space when needed (not at start of text or preceding space already exists)
|
||||
if(!ui->chatTextEdit->textCursor().atStart() && ui->chatTextEdit->toPlainText()[ui->chatTextEdit->textCursor().position() - 1] != QChar(' '))
|
||||
smiley = QString(" ") + smiley;
|
||||
ui->chatTextEdit->textCursor().insertText(smiley);
|
||||
}
|
||||
|
||||
void ChatWidget::clearChatHistory()
|
||||
|
@ -105,7 +105,33 @@ void RsHtml::initEmoticons(const QHash< QString, QString >& hash)
|
||||
continue;
|
||||
}
|
||||
defEmbedImg.smileys.insert(smile, it.value());
|
||||
newRE += "(" + QRegExp::escape(smile) + ")|";
|
||||
// add space around smileys
|
||||
newRE += "(?:^|\\s)(" + QRegExp::escape(smile) + ")(?:$|\\s)|";
|
||||
// explanations:
|
||||
// (?:^|\s)(*smiley*)(?:$|\s)
|
||||
//
|
||||
// (?:^|\s) Non-capturing group
|
||||
// 1st Alternative: ^
|
||||
// ^ assert position at start of the string
|
||||
// 2nd Alternative: \s
|
||||
// \s match any white space character [\r\n\t\f ]
|
||||
//
|
||||
// 1st Capturing group (*smiley*)
|
||||
// *smiley* matches the characters *smiley* literally (case sensitive)
|
||||
//
|
||||
// (?:$|\s) Non-capturing group
|
||||
// 1st Alternative: $
|
||||
// $ assert position at end of the string
|
||||
// 2nd Alternative: \s
|
||||
// \s match any white space character [\r\n\t\f ]
|
||||
|
||||
/*
|
||||
* TODO
|
||||
* a better version is:
|
||||
* (?<=^|\s)(*smile*)(?=$|\s) using the lookbehind/lookahead operator instead of non-capturing groups.
|
||||
* This solves the problem that spaces are matched, too (see workaround in RsHtml::embedHtml)
|
||||
* This is not supported by Qt4!
|
||||
*/
|
||||
}
|
||||
newRE.chop(1); // remove last |
|
||||
defEmbedImg.myRE.setPattern(newRE);
|
||||
@ -312,7 +338,21 @@ void RsHtml::embedHtml(QTextDocument *textDocument, QDomDocument& doc, QDomEleme
|
||||
{
|
||||
insertedTag = doc.createElement("img");
|
||||
const EmbedInHtmlImg& embedImg = static_cast<const EmbedInHtmlImg&>(embedInfos);
|
||||
insertedTag.setAttribute("src", embedImg.smileys[embedInfos.myRE.cap(0)]);
|
||||
// embedInfos.myRE.cap(0) may include spaces at the end/beginning -> trim!
|
||||
insertedTag.setAttribute("src", embedImg.smileys[embedInfos.myRE.cap(0).trimmed()]);
|
||||
/*
|
||||
* NOTE
|
||||
* Trailing spaces are matched, too. This leads to embedInfos.myRE.matchedLength() being incorrect.
|
||||
* This hack reduces nextPos by one so that the new value of currentPos is calculated corretly.
|
||||
* This is needed to match multiple smileys since the leading whitespace in front of a smiley is required!
|
||||
*
|
||||
* This can be avoided by using Qt5 (see comment in RsHtml::initEmoticons)
|
||||
*
|
||||
* NOTE
|
||||
* Preceding spaces are also matched and removed.
|
||||
*/
|
||||
if(embedInfos.myRE.cap(0).endsWith(' '))
|
||||
nextPos--;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user