diff --git a/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.h b/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.h --- a/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.h +++ b/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.h @@ -89,6 +89,8 @@ private: const QScopedPointer d; + + QString parseDoxygenCommands(const QString& comment); }; } diff --git a/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.cpp b/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.cpp --- a/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.cpp +++ b/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.cpp @@ -323,6 +323,7 @@ // let's protect them from being removed completely comment.replace(QRegExp(QStringLiteral("
")), QStringLiteral("\n")); comment = comment.toHtmlEscaped(); + comment = parseDoxygenCommands(comment); comment.replace(QLatin1Char('\n'), QLatin1String("
")); //Replicate newlines in html } modifyHtml() += commentHighlight(comment); @@ -784,4 +785,57 @@ return details; } +QString AbstractDeclarationNavigationContext::parseDoxygenCommands(const QString& comment) +{ + QStringList parsedLines; + + for( QString line : comment.split('\n') ) { + line = line.trimmed(); + + line.replace(QRegExp("^(@param|\\\\param)\\[(in|out|in,out)\\] ([\\w]+) (.*)"), "\\2 \\3: \\4"); + + line.replace(QRegExp("^(@param|\\\\param) ([\\w]+) (.*)"), "\\2: \\3"); + + line.replace(QRegExp("^(@return|\\\\return|@returns|\\\\returns) (.*)"), "Returns \\2"); + + line.replace(QRegExp("^(@brief|\\\\brief) "), ""); + + line.replace(QRegExp("(@see|\\\\see|@sa|\\\\sa) "), "See also:
"); + + line.replace(QRegExp("(@since|\\\\since) "), "Since "); + + line.replace(QRegExp("(@note|\\\\note) "), "Note: "); + + line.replace(QRegExp("(@todo|\\\\todo) "), "TODO: "); + + line.replace(QRegExp("(@bug|\\\\bug) "), "BUG: "); + + line.replace(QRegExp("(.*)\\\\(a|e|em) ([\\w]+)(.*)"), "\\1\\3\\4"); + + line.replace(QRegExp("\\\\(a|e|em) ([\\w]+)"), "\\2"); + + line.replace(QRegExp("\\\\(c|p) ([\\w]+)"), "\\2"); + + line.replace(QRegExp("(@code|\\\\code)(\\{[^\\}]*\\})?"), "
");
+    
+    line.replace(QRegExp("(@endcode|\\\\endcode)"), "
"); + + line.replace(QRegExp("\\\\f\\$(((?!\\\\f\\$).)*)\\\\f\\$"), "\\1"); + + line.replace(QRegExp("\\\\f\\["), "
");
+    line.replace(QRegExp("\\\\f\\]"), "
"); + + line.replace(QRegExp("\\\\f\\{[^\\}]*\\}\\{"), "
");
+    line.replace(QRegExp("\\\\f\\}"), "
"); + + line.replace(QRegExp("\\\\([$@\\\\&~<>#%\\\"\\.\\]|::|--|---)"), "\\1"); + + line.replace("\\n", "
"); + + parsedLines << line; + } + + return parsedLines.join("
"); +} + }