Optimize CppCodeMarker::addMarkUp()
This cuts away another 15% of the running time of qdoc -prepare. Change-Id: I81bc32fa191b73fad5d7bd27ff22ac845f83a9ce Reviewed-by: Martin Smith <martin.smith@digia.com>
This commit is contained in:
parent
6508365c04
commit
67638d08b4
@ -194,6 +194,24 @@ QString CodeMarker::protect(const QString& str)
|
|||||||
return marked;
|
return marked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CodeMarker::protect(const QStringRef& str)
|
||||||
|
{
|
||||||
|
int n = str.length();
|
||||||
|
QString marked;
|
||||||
|
marked.reserve(n * 2 + 30);
|
||||||
|
const QChar *data = str.constData();
|
||||||
|
for (int i = 0; i != n; ++i) {
|
||||||
|
switch (data[i].unicode()) {
|
||||||
|
case '&': marked += samp; break;
|
||||||
|
case '<': marked += slt; break;
|
||||||
|
case '>': marked += sgt; break;
|
||||||
|
case '"': marked += squot; break;
|
||||||
|
default : marked += data[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return marked;
|
||||||
|
}
|
||||||
|
|
||||||
QString CodeMarker::typified(const QString &string)
|
QString CodeMarker::typified(const QString &string)
|
||||||
{
|
{
|
||||||
QString result;
|
QString result;
|
||||||
|
@ -164,6 +164,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual QString sortName(const Node *node, const QString* name = 0);
|
virtual QString sortName(const Node *node, const QString* name = 0);
|
||||||
QString protect(const QString &string);
|
QString protect(const QString &string);
|
||||||
|
QString protect(const QStringRef &string);
|
||||||
QString taggedNode(const Node* node);
|
QString taggedNode(const Node* node);
|
||||||
QString taggedQmlNode(const Node* node);
|
QString taggedQmlNode(const Node* node);
|
||||||
QString linkTag(const Node *node, const QString& body);
|
QString linkTag(const Node *node, const QString& body);
|
||||||
|
@ -893,8 +893,8 @@ QString CppCodeMarker::addMarkUp(const QString &in,
|
|||||||
ch = (i < (int)code.length()) ? code[i++].cell() : EOF
|
ch = (i < (int)code.length()) ? code[i++].cell() : EOF
|
||||||
|
|
||||||
QString code = in;
|
QString code = in;
|
||||||
QStringList out;
|
QString out;
|
||||||
QString text;
|
QStringRef text;
|
||||||
int braceDepth = 0;
|
int braceDepth = 0;
|
||||||
int parenDepth = 0;
|
int parenDepth = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@ -1069,27 +1069,34 @@ QString CppCodeMarker::addMarkUp(const QString &in,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
text = code.mid(start, finish - start);
|
text = code.midRef(start, finish - start);
|
||||||
start = finish;
|
start = finish;
|
||||||
|
|
||||||
if (!tag.isEmpty()) {
|
if (!tag.isEmpty()) {
|
||||||
out << QStringLiteral("<@") << tag;
|
out += QStringLiteral("<@");
|
||||||
if (target)
|
out += tag;
|
||||||
out << QStringLiteral(" target=\"") << text << QStringLiteral("()\"");
|
if (target) {
|
||||||
out << QStringLiteral(">");
|
out += QStringLiteral(" target=\"");
|
||||||
|
out += text;
|
||||||
|
out += QStringLiteral("()\"");
|
||||||
|
}
|
||||||
|
out += QStringLiteral(">");
|
||||||
}
|
}
|
||||||
|
|
||||||
out << protect(text);
|
out += protect(text);
|
||||||
|
|
||||||
if (!tag.isEmpty())
|
if (!tag.isEmpty()) {
|
||||||
out << QStringLiteral("</@") << tag << QStringLiteral(">");
|
out += QStringLiteral("</@");
|
||||||
|
out += tag;
|
||||||
|
out += QStringLiteral(">");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start < code.length()) {
|
if (start < code.length()) {
|
||||||
out << protect(code.mid(start));
|
out += protect(code.midRef(start));
|
||||||
}
|
}
|
||||||
|
|
||||||
return out.join(QString());
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user