1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Text: detect anchors

This commit is contained in:
krepa098 2014-12-10 19:56:08 +01:00
parent 170e2e6e29
commit 380d7b9a07
2 changed files with 41 additions and 10 deletions

View File

@ -27,6 +27,7 @@
#include <QApplication>
#include <QGraphicsSceneMouseEvent>
#include <QFontMetrics>
#include <QRegExp>
#include <QDesktopServices>
Text::Text(const QString& txt, QFont font, bool enableElide)
@ -52,6 +53,7 @@ void Text::setText(const QString& txt)
text = txt;
text.replace("\n", "<br/>");
detectAnchors();
ensureIntegrity();
freeResources();
}
@ -257,3 +259,30 @@ int Text::cursorFromPos(QPointF scenePos) const
return -1;
}
void Text::detectAnchors()
{
// detect urls
QRegExp exp("(?:\\b)(www\\.|http[s]?:\\/\\/|ftp:\\/\\/|tox:\\/\\/|tox:)\\S+");
int offset = 0;
while ((offset = exp.indexIn(text, offset)) != -1)
{
QString url = exp.cap();
// If there's a trailing " it's a HTML attribute, e.g. a smiley img's title=":tox:"
if (url == "tox:\"")
{
offset += url.length();
continue;
}
// add scheme if not specified
if (exp.cap(1) == "www.")
url.prepend("http://");
QString htmledUrl = QString("<a href=\"%1\">%1</a>").arg(url);
text.replace(offset, exp.cap().length(), htmledUrl);
offset += htmledUrl.length();
}
}

View File

@ -1,13 +1,3 @@
#ifndef TEXT_H
#define TEXT_H
#include "../chatlinecontent.h"
#include <QTextDocument>
#include <QTextCursor>
class CustomTextDocument;
/*
Copyright (C) 2014 by Project Tox <https://tox.im>
@ -24,6 +14,16 @@ class CustomTextDocument;
See the COPYING file for more details.
*/
#ifndef TEXT_H
#define TEXT_H
#include "../chatlinecontent.h"
#include <QTextDocument>
#include <QTextCursor>
class CustomTextDocument;
class Text : public ChatLineContent
{
public:
@ -61,6 +61,8 @@ protected:
int cursorFromPos(QPointF scenePos) const;
void detectAnchors();
private:
CustomTextDocument* doc = nullptr;
QString text;