From 6fb36d6c028d4fe88043c764e42b54df9b06f48b Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 4 May 2014 14:50:01 +0200 Subject: - main window now has a small view displaying log messages - mod list will now be highlighted when grouping is active is active - download tooltip now supports bbcode markup in the description - bbcode translator will now translate some named colors - algorithm for detection of mod order problems is now more sophisticated - exposed more functionality to python plugins - updated to qt 4.8.6 dlls - bugfix: plugin list wasn't - bugfix: state changes in mod list wasn't always reported - bugfix: loot client will now create necessary directory - bugfix: NCC sometimes used wrong source path for extracting - bugfix: removed noisy debug message --- src/bbcode.cpp | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'src/bbcode.cpp') diff --git a/src/bbcode.cpp b/src/bbcode.cpp index fe7decfd..80721cd2 100644 --- a/src/bbcode.cpp +++ b/src/bbcode.cpp @@ -22,6 +22,7 @@ along with Mod Organizer. If not, see . #include #include #include +#include namespace BBCode { @@ -43,7 +44,6 @@ public: // extract the tag name m_TagNameExp.indexIn(input, 1, QRegExp::CaretAtOffset); QString tagName = m_TagNameExp.cap(0).toLower(); - //qDebug("tag name %s", tagName.toUtf8().constData()); TagMap::iterator tagIter = m_TagMap.find(tagName); if (tagIter != m_TagMap.end()) { // recognized tag @@ -60,7 +60,21 @@ public: length = closeTagPos + closeTag.length(); QString temp = input.mid(0, length); if (tagIter->second.first.indexIn(temp) == 0) { - return temp.replace(tagIter->second.first, tagIter->second.second); + if (tagIter->second.second.isEmpty()) { + if (tagName == "color") { + QString color = tagIter->second.first.cap(1); + QString content = tagIter->second.first.cap(2); + auto colIter = m_ColorMap.find(color.toLower()); + if (colIter != m_ColorMap.end()) { + color = colIter->second; + } + return temp.replace(tagIter->second.first, QString("%2").arg(color, content)); + } else { + qWarning("don't know how to deal with tag %s", qPrintable(tagName)); + } + } else { + return temp.replace(tagIter->second.first, tagIter->second.second); + } } else { // expression doesn't match. either the input string is invalid // or the expression is @@ -96,7 +110,7 @@ private: m_TagMap["size="] = std::make_pair(QRegExp("\\[size=([^\\]]*)\\](.*)\\[/size\\]"), "\\2"); m_TagMap["color="] = std::make_pair(QRegExp("\\[color=([^\\]]*)\\](.*)\\[/color\\]"), - "\\2"); + ""); m_TagMap["font="] = std::make_pair(QRegExp("\\[font=([^\\]]*)\\](.*)\\[/font\\]"), "\\2"); m_TagMap["center"] = std::make_pair(QRegExp("\\[center\\](.*)\\[/center\\]"), @@ -139,10 +153,6 @@ private: "\\1"); m_TagMap["url="] = std::make_pair(QRegExp("\\[url=([^\\]]*)\\](.*)\\[/url\\]"), "\\2"); -/* m_TagMap["img"] = std::make_pair(QRegExp("\\[img\\](.*)\\[/img\\]"), - ""); - m_TagMap["img="] = std::make_pair(QRegExp("\\[img=([^\\]]*)\\](.*)\\[/img\\]"), - "");*/ m_TagMap["img"] = std::make_pair(QRegExp("\\[img\\](.*)\\[/img\\]"), ""); m_TagMap["img="] = std::make_pair(QRegExp("\\[img=([^\\]]*)\\](.*)\\[/img\\]"), ""); m_TagMap["email="] = std::make_pair(QRegExp("\\[email=\"?([^\\]]*)\"?\\](.*)\\[/email\\]"), @@ -150,6 +160,11 @@ private: m_TagMap["youtube"] = std::make_pair(QRegExp("\\[youtube\\](.*)\\[/youtube\\]"), "http://www.youtube.com/v/\\1"); + m_ColorMap = boost::assign::map_list_of("red", "FF0000")("green", "00FF00")("blue", "0000FF") + ("black", "000000")("gray", "7F7F7F")("white", "FFFFFF") + ("yellow", "FFFF00")("cyan", "00FFFF")("magenta", "FF00FF") + ("brown", "A52A2A")("orange", "FFCC00"); + // make all patterns non-greedy and case-insensitive for (TagMap::iterator iter = m_TagMap.begin(); iter != m_TagMap.end(); ++iter) { iter->second.first.setCaseSensitivity(Qt::CaseInsensitive); @@ -157,10 +172,11 @@ private: } } - private: + QRegExp m_TagNameExp; TagMap m_TagMap; + std::map m_ColorMap; }; -- cgit v1.3.1