+// NOTE: This method is not threadsafe and not reentrant!
+// (RegExps are not constant while matching, and they are static here for efficiency)
+QList<ContentsChatItem::Clickable> ContentsChatItem::findClickables() {
+ // For matching URLs
+ static QString urlEnd("(?:>|[,.;:\"]*\\s|\\b|$)");
+ static QString urlChars("(?:[\\w\\-~@/?&=+$()!%#]|[,.;:]\\w)");
+
+ static QRegExp regExp[] = {
+ // URL
+ // QRegExp(QString("((?:https?://|s?ftp://|irc://|mailto:|www\\.)%1+|%1+\\.[a-z]{2,4}(?:?=/%1+|\\b))%2").arg(urlChars, urlEnd)),
+ QRegExp(QString("((?:(?:https?://|s?ftp://|irc://|mailto:)|www)%1+)%2").arg(urlChars, urlEnd)),
+
+ // Channel name
+ // We don't match for channel names starting with + or &, because that gives us a lot of false positives.
+ QRegExp("((?:#|![A-Z0-9]{5})[^,:\\s]+(?::[^,:\\s]+)?)\\b")
+
+ // TODO: Nicks, we'll need a filtering for only matching known nicknames further down if we do this
+ };
+
+ static const int regExpCount = 2; // number of regexps in the array above
+
+ qint16 matches[] = { 0, 0, 0 };
+ qint16 matchEnd[] = { 0, 0, 0 };