Improve qdoc performance.

Valgrind blamed CppCodeMarker::addMarkUp as slow, the patch improves
situation by ~12%

Use of QStringLiterals instead of const char* reduce amount of
allocations on startup.

Change-Id: I8737e02785506bba7e23868ab3952eab09d543d2
Reviewed-by: Martin Smith <martin.smith@digia.com>
This commit is contained in:
Jędrzej Nowacki 2013-04-04 16:04:49 +02:00 committed by The Qt Project
parent cab86ec3ed
commit 8969f57b6a
9 changed files with 298 additions and 152 deletions

View File

@ -94,7 +94,7 @@ void CodeMarker::terminateMarker()
*/ */
void CodeMarker::initialize(const Config& config) void CodeMarker::initialize(const Config& config)
{ {
defaultLang = config.getString(QLatin1String(CONFIG_LANGUAGE)); defaultLang = config.getString(CONFIG_LANGUAGE);
QList<CodeMarker *>::ConstIterator m = markers.constBegin(); QList<CodeMarker *>::ConstIterator m = markers.constBegin();
while (m != markers.constEnd()) { while (m != markers.constEnd()) {
(*m)->initializeMarker(config); (*m)->initializeMarker(config);

View File

@ -102,7 +102,7 @@ CodeParser::~CodeParser()
*/ */
void CodeParser::initializeParser(const Config& config) void CodeParser::initializeParser(const Config& config)
{ {
showInternal = config.getBool(QLatin1String(CONFIG_SHOWINTERNAL)); showInternal = config.getBool(CONFIG_SHOWINTERNAL);
} }
/*! /*!

View File

@ -55,6 +55,77 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
QString ConfigStrings::ALIAS = QStringLiteral("alias");
QString ConfigStrings::BASE = QStringLiteral("base");
QString ConfigStrings::BASEDIR = QStringLiteral("basedir");
QString ConfigStrings::BUILDVERSION = QStringLiteral("buildversion");
QString ConfigStrings::CODEINDENT = QStringLiteral("codeindent");
QString ConfigStrings::CPPCLASSESPAGE = QStringLiteral("cppclassespage");
QString ConfigStrings::DEFINES = QStringLiteral("defines");
QString ConfigStrings::DEPENDS = QStringLiteral("depends");
QString ConfigStrings::DESCRIPTION = QStringLiteral("description");
QString ConfigStrings::EDITION = QStringLiteral("edition");
QString ConfigStrings::ENDHEADER = QStringLiteral("endheader");
QString ConfigStrings::EXAMPLEDIRS = QStringLiteral("exampledirs");
QString ConfigStrings::EXAMPLES = QStringLiteral("examples");
QString ConfigStrings::EXAMPLESINSTALLPATH = QStringLiteral("examplesinstallpath");
QString ConfigStrings::EXCLUDEDIRS = QStringLiteral("excludedirs");
QString ConfigStrings::EXCLUDEFILES = QStringLiteral("excludefiles");
QString ConfigStrings::EXTRAIMAGES = QStringLiteral("extraimages");
QString ConfigStrings::FALSEHOODS = QStringLiteral("falsehoods");
QString ConfigStrings::FORMATTING = QStringLiteral("formatting");
QString ConfigStrings::GENERATEINDEX = QStringLiteral("generateindex");
QString ConfigStrings::HEADERDIRS = QStringLiteral("headerdirs");
QString ConfigStrings::HEADERS = QStringLiteral("headers");
QString ConfigStrings::HEADERSCRIPTS = QStringLiteral("headerscripts");
QString ConfigStrings::HEADERSTYLES = QStringLiteral("headerstyles");
QString ConfigStrings::HOMEPAGE = QStringLiteral("homepage");
QString ConfigStrings::IGNOREDIRECTIVES = QStringLiteral("ignoredirectives");
QString ConfigStrings::IGNORETOKENS = QStringLiteral("ignoretokens");
QString ConfigStrings::IMAGEDIRS = QStringLiteral("imagedirs");
QString ConfigStrings::IMAGES = QStringLiteral("images");
QString ConfigStrings::INDEXES = QStringLiteral("indexes");
QString ConfigStrings::LANDINGPAGE = QStringLiteral("landingpage");
QString ConfigStrings::LANGUAGE = QStringLiteral("language");
QString ConfigStrings::MACRO = QStringLiteral("macro");
QString ConfigStrings::MANIFESTMETA = QStringLiteral("manifestmeta");
QString ConfigStrings::NATURALLANGUAGE = QStringLiteral("naturallanguage");
QString ConfigStrings::NAVIGATION = QStringLiteral("navigation");
QString ConfigStrings::NOLINKERRORS = QStringLiteral("nolinkerrors");
QString ConfigStrings::OBSOLETELINKS = QStringLiteral("obsoletelinks");
QString ConfigStrings::OUTPUTDIR = QStringLiteral("outputdir");
QString ConfigStrings::OUTPUTENCODING = QStringLiteral("outputencoding");
QString ConfigStrings::OUTPUTLANGUAGE = QStringLiteral("outputlanguage");
QString ConfigStrings::OUTPUTFORMATS = QStringLiteral("outputformats");
QString ConfigStrings::OUTPUTPREFIXES = QStringLiteral("outputprefixes");
QString ConfigStrings::PROJECT = QStringLiteral("project");
QString ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL = QStringLiteral("redirectdocumentationtodevnull");
QString ConfigStrings::QHP = QStringLiteral("qhp");
QString ConfigStrings::QUOTINGINFORMATION = QStringLiteral("quotinginformation");
QString ConfigStrings::SCRIPTDIRS = QStringLiteral("scriptdirs");
QString ConfigStrings::SCRIPTS = QStringLiteral("scripts");
QString ConfigStrings::SHOWINTERNAL = QStringLiteral("showinternal");
QString ConfigStrings::SOURCEDIRS = QStringLiteral("sourcedirs");
QString ConfigStrings::SOURCEENCODING = QStringLiteral("sourceencoding");
QString ConfigStrings::SOURCES = QStringLiteral("sources");
QString ConfigStrings::SPURIOUS = QStringLiteral("spurious");
QString ConfigStrings::STYLEDIRS = QStringLiteral("styledirs");
QString ConfigStrings::STYLE = QStringLiteral("style");
QString ConfigStrings::STYLES = QStringLiteral("styles");
QString ConfigStrings::STYLESHEETS = QStringLiteral("stylesheets");
QString ConfigStrings::SYNTAXHIGHLIGHTING = QStringLiteral("syntaxhighlighting");
QString ConfigStrings::TEMPLATEDIR = QStringLiteral("templatedir");
QString ConfigStrings::TABSIZE = QStringLiteral("tabsize");
QString ConfigStrings::TAGFILE = QStringLiteral("tagfile");
QString ConfigStrings::TRANSLATORS = QStringLiteral("translators");
QString ConfigStrings::URL = QStringLiteral("url");
QString ConfigStrings::VERSION = QStringLiteral("version");
QString ConfigStrings::VERSIONSYM = QStringLiteral("versionsym");
QString ConfigStrings::FILEEXTENSIONS = QStringLiteral("fileextensions");
QString ConfigStrings::IMAGEEXTENSIONS = QStringLiteral("imageextensions");
QString ConfigStrings::QMLONLY = QStringLiteral("qmlonly");
QString ConfigStrings::QMLTYPESPAGE = QStringLiteral("qmltypespage");
/*! /*!
An entry in a stack, where each entry is a list An entry in a stack, where each entry is a list
of string values. of string values.
@ -284,7 +355,7 @@ QString Config::getOutputDir() const
{ {
QString t; QString t;
if (overrideOutputDir.isNull()) if (overrideOutputDir.isNull())
t = getString(QLatin1String(CONFIG_OUTPUTDIR)); t = getString(CONFIG_OUTPUTDIR);
else else
t = overrideOutputDir; t = overrideOutputDir;
if (!Generator::useOutputSubdirs()) { if (!Generator::useOutputSubdirs()) {
@ -305,7 +376,7 @@ QString Config::getOutputDir() const
QSet<QString> Config::getOutputFormats() const QSet<QString> Config::getOutputFormats() const
{ {
if (overrideOutputFormats.isEmpty()) if (overrideOutputFormats.isEmpty())
return getStringSet(QLatin1String(CONFIG_OUTPUTFORMATS)); return getStringSet(CONFIG_OUTPUTFORMATS);
else else
return overrideOutputFormats; return overrideOutputFormats;
} }
@ -635,7 +706,7 @@ QStringList Config::getAllFiles(const QString &filesVar,
QStringList result = getStringList(filesVar); QStringList result = getStringList(filesVar);
QStringList dirs = getCanonicalPathList(dirsVar); QStringList dirs = getCanonicalPathList(dirsVar);
QString nameFilter = getString(filesVar + dot + QLatin1String(CONFIG_FILEEXTENSIONS)); QString nameFilter = getString(filesVar + dot + CONFIG_FILEEXTENSIONS);
QStringList::ConstIterator d = dirs.constBegin(); QStringList::ConstIterator d = dirs.constBegin();
while (d != dirs.constEnd()) { while (d != dirs.constEnd()) {
@ -665,7 +736,7 @@ QStringList Config::getExampleImageFiles(const QSet<QString> &excludedDirs,
{ {
QStringList result; QStringList result;
QStringList dirs = getCanonicalPathList("exampledirs"); QStringList dirs = getCanonicalPathList("exampledirs");
QString nameFilter = getString(CONFIG_EXAMPLES + dot + QLatin1String(CONFIG_IMAGEEXTENSIONS)); QString nameFilter = getString(CONFIG_EXAMPLES + dot + CONFIG_IMAGEEXTENSIONS);
QStringList::ConstIterator d = dirs.constBegin(); QStringList::ConstIterator d = dirs.constBegin();
while (d != dirs.constEnd()) { while (d != dirs.constEnd()) {

View File

@ -164,76 +164,150 @@ private:
static QMap<QString, QStringList> includeFilesMap_; static QMap<QString, QStringList> includeFilesMap_;
}; };
#define CONFIG_ALIAS "alias" struct ConfigStrings
#define CONFIG_BASE "base" {
#define CONFIG_BASEDIR "basedir" static QString ALIAS;
#define CONFIG_BUILDVERSION "buildversion" static QString BASE;
#define CONFIG_CODEINDENT "codeindent" static QString BASEDIR;
#define CONFIG_CPPCLASSESPAGE "cppclassespage" static QString BUILDVERSION;
#define CONFIG_DEFINES "defines" static QString CODEINDENT;
#define CONFIG_DEPENDS "depends" static QString CPPCLASSESPAGE;
#define CONFIG_DESCRIPTION "description" static QString DEFINES;
#define CONFIG_EDITION "edition" static QString DEPENDS;
#define CONFIG_ENDHEADER "endheader" static QString DESCRIPTION;
#define CONFIG_EXAMPLEDIRS "exampledirs" static QString EDITION;
#define CONFIG_EXAMPLES "examples" static QString ENDHEADER;
#define CONFIG_EXAMPLESINSTALLPATH "examplesinstallpath" static QString EXAMPLEDIRS;
#define CONFIG_EXCLUDEDIRS "excludedirs" static QString EXAMPLES;
#define CONFIG_EXCLUDEFILES "excludefiles" static QString EXAMPLESINSTALLPATH;
#define CONFIG_EXTRAIMAGES "extraimages" static QString EXCLUDEDIRS;
#define CONFIG_FALSEHOODS "falsehoods" static QString EXCLUDEFILES;
#define CONFIG_FORMATTING "formatting" static QString EXTRAIMAGES;
#define CONFIG_GENERATEINDEX "generateindex" static QString FALSEHOODS;
#define CONFIG_HEADERDIRS "headerdirs" static QString FORMATTING;
#define CONFIG_HEADERS "headers" static QString GENERATEINDEX;
#define CONFIG_HEADERSCRIPTS "headerscripts" static QString HEADERDIRS;
#define CONFIG_HEADERSTYLES "headerstyles" static QString HEADERS;
#define CONFIG_HOMEPAGE "homepage" static QString HEADERSCRIPTS;
#define CONFIG_IGNOREDIRECTIVES "ignoredirectives" static QString HEADERSTYLES;
#define CONFIG_IGNORETOKENS "ignoretokens" static QString HOMEPAGE;
#define CONFIG_IMAGEDIRS "imagedirs" static QString IGNOREDIRECTIVES;
#define CONFIG_IMAGES "images" static QString IGNORETOKENS;
#define CONFIG_INDEXES "indexes" static QString IMAGEDIRS;
#define CONFIG_LANGUAGE "language" static QString IMAGES;
#define CONFIG_LANDINGPAGE "landingpage" static QString INDEXES;
#define CONFIG_MACRO "macro" static QString LANDINGPAGE;
#define CONFIG_MANIFESTMETA "manifestmeta" static QString LANGUAGE;
#define CONFIG_NATURALLANGUAGE "naturallanguage" static QString MACRO;
#define CONFIG_NAVIGATION "navigation" static QString MANIFESTMETA;
#define CONFIG_NOLINKERRORS "nolinkerrors" static QString NATURALLANGUAGE;
#define CONFIG_OBSOLETELINKS "obsoletelinks" static QString NAVIGATION;
#define CONFIG_OUTPUTDIR "outputdir" static QString NOLINKERRORS;
#define CONFIG_OUTPUTENCODING "outputencoding" static QString OBSOLETELINKS;
#define CONFIG_OUTPUTLANGUAGE "outputlanguage" static QString OUTPUTDIR;
#define CONFIG_OUTPUTFORMATS "outputformats" static QString OUTPUTENCODING;
#define CONFIG_OUTPUTPREFIXES "outputprefixes" static QString OUTPUTLANGUAGE;
#define CONFIG_PROJECT "project" static QString OUTPUTFORMATS;
#define CONFIG_REDIRECTDOCUMENTATIONTODEVNULL "redirectdocumentationtodevnull" static QString OUTPUTPREFIXES;
#define CONFIG_QHP "qhp" static QString PROJECT;
#define CONFIG_QMLTYPESPAGE "qmltypespage" static QString REDIRECTDOCUMENTATIONTODEVNULL;
#define CONFIG_QUOTINGINFORMATION "quotinginformation" static QString QHP;
#define CONFIG_SCRIPTDIRS "scriptdirs" static QString QUOTINGINFORMATION;
#define CONFIG_SCRIPTS "scripts" static QString SCRIPTDIRS;
#define CONFIG_SHOWINTERNAL "showinternal" static QString SCRIPTS;
#define CONFIG_SOURCEDIRS "sourcedirs" static QString SHOWINTERNAL;
#define CONFIG_SOURCEENCODING "sourceencoding" static QString SOURCEDIRS;
#define CONFIG_SOURCES "sources" static QString SOURCEENCODING;
#define CONFIG_SPURIOUS "spurious" static QString SOURCES;
#define CONFIG_STYLEDIRS "styledirs" static QString SPURIOUS;
#define CONFIG_STYLE "style" static QString STYLEDIRS;
#define CONFIG_STYLES "styles" static QString STYLE;
#define CONFIG_STYLESHEETS "stylesheets" static QString STYLES;
#define CONFIG_SYNTAXHIGHLIGHTING "syntaxhighlighting" static QString STYLESHEETS;
#define CONFIG_TEMPLATEDIR "templatedir" static QString SYNTAXHIGHLIGHTING;
#define CONFIG_TABSIZE "tabsize" static QString TEMPLATEDIR;
#define CONFIG_TAGFILE "tagfile" static QString TABSIZE;
#define CONFIG_TRANSLATORS "translators" static QString TAGFILE;
#define CONFIG_URL "url" static QString TRANSLATORS;
#define CONFIG_VERSION "version" static QString URL;
#define CONFIG_VERSIONSYM "versionsym" static QString VERSION;
#define CONFIG_FILEEXTENSIONS "fileextensions" static QString VERSIONSYM;
#define CONFIG_IMAGEEXTENSIONS "imageextensions" static QString FILEEXTENSIONS;
#define CONFIG_QMLONLY "qmlonly" static QString IMAGEEXTENSIONS;
static QString QMLONLY;
static QString QMLTYPESPAGE;
};
#define CONFIG_ALIAS ConfigStrings::ALIAS
#define CONFIG_BASE ConfigStrings::BASE
#define CONFIG_BASEDIR ConfigStrings::BASEDIR
#define CONFIG_BUILDVERSION ConfigStrings::BUILDVERSION
#define CONFIG_CODEINDENT ConfigStrings::CODEINDENT
#define CONFIG_CPPCLASSESPAGE ConfigStrings::CPPCLASSESPAGE
#define CONFIG_DEFINES ConfigStrings::DEFINES
#define CONFIG_DEPENDS ConfigStrings::DEPENDS
#define CONFIG_DESCRIPTION ConfigStrings::DESCRIPTION
#define CONFIG_EDITION ConfigStrings::EDITION
#define CONFIG_ENDHEADER ConfigStrings::ENDHEADER
#define CONFIG_EXAMPLEDIRS ConfigStrings::EXAMPLEDIRS
#define CONFIG_EXAMPLES ConfigStrings::EXAMPLES
#define CONFIG_EXAMPLESINSTALLPATH ConfigStrings::EXAMPLESINSTALLPATH
#define CONFIG_EXCLUDEDIRS ConfigStrings::EXCLUDEDIRS
#define CONFIG_EXCLUDEFILES ConfigStrings::EXCLUDEFILES
#define CONFIG_EXTRAIMAGES ConfigStrings::EXTRAIMAGES
#define CONFIG_FALSEHOODS ConfigStrings::FALSEHOODS
#define CONFIG_FORMATTING ConfigStrings::FORMATTING
#define CONFIG_GENERATEINDEX ConfigStrings::GENERATEINDEX
#define CONFIG_HEADERDIRS ConfigStrings::HEADERDIRS
#define CONFIG_HEADERS ConfigStrings::HEADERS
#define CONFIG_HEADERSCRIPTS ConfigStrings::HEADERSCRIPTS
#define CONFIG_HEADERSTYLES ConfigStrings::HEADERSTYLES
#define CONFIG_HOMEPAGE ConfigStrings::HOMEPAGE
#define CONFIG_IGNOREDIRECTIVES ConfigStrings::IGNOREDIRECTIVES
#define CONFIG_IGNORETOKENS ConfigStrings::IGNORETOKENS
#define CONFIG_IMAGEDIRS ConfigStrings::IMAGEDIRS
#define CONFIG_IMAGES ConfigStrings::IMAGES
#define CONFIG_INDEXES ConfigStrings::INDEXES
#define CONFIG_LANDINGPAGE ConfigStrings::LANDINGPAGE
#define CONFIG_LANGUAGE ConfigStrings::LANGUAGE
#define CONFIG_MACRO ConfigStrings::MACRO
#define CONFIG_MANIFESTMETA ConfigStrings::MANIFESTMETA
#define CONFIG_NATURALLANGUAGE ConfigStrings::NATURALLANGUAGE
#define CONFIG_NAVIGATION ConfigStrings::NAVIGATION
#define CONFIG_NOLINKERRORS ConfigStrings::NOLINKERRORS
#define CONFIG_OBSOLETELINKS ConfigStrings::OBSOLETELINKS
#define CONFIG_OUTPUTDIR ConfigStrings::OUTPUTDIR
#define CONFIG_OUTPUTENCODING ConfigStrings::OUTPUTENCODING
#define CONFIG_OUTPUTLANGUAGE ConfigStrings::OUTPUTLANGUAGE
#define CONFIG_OUTPUTFORMATS ConfigStrings::OUTPUTFORMATS
#define CONFIG_OUTPUTPREFIXES ConfigStrings::OUTPUTPREFIXES
#define CONFIG_PROJECT ConfigStrings::PROJECT
#define CONFIG_REDIRECTDOCUMENTATIONTODEVNULL ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL
#define CONFIG_QHP ConfigStrings::QHP
#define CONFIG_QUOTINGINFORMATION ConfigStrings::QUOTINGINFORMATION
#define CONFIG_SCRIPTDIRS ConfigStrings::SCRIPTDIRS
#define CONFIG_SCRIPTS ConfigStrings::SCRIPTS
#define CONFIG_SHOWINTERNAL ConfigStrings::SHOWINTERNAL
#define CONFIG_SOURCEDIRS ConfigStrings::SOURCEDIRS
#define CONFIG_SOURCEENCODING ConfigStrings::SOURCEENCODING
#define CONFIG_SOURCES ConfigStrings::SOURCES
#define CONFIG_SPURIOUS ConfigStrings::SPURIOUS
#define CONFIG_STYLEDIRS ConfigStrings::STYLEDIRS
#define CONFIG_STYLE ConfigStrings::STYLE
#define CONFIG_STYLES ConfigStrings::STYLES
#define CONFIG_STYLESHEETS ConfigStrings::STYLESHEETS
#define CONFIG_SYNTAXHIGHLIGHTING ConfigStrings::SYNTAXHIGHLIGHTING
#define CONFIG_TEMPLATEDIR ConfigStrings::TEMPLATEDIR
#define CONFIG_TABSIZE ConfigStrings::TABSIZE
#define CONFIG_TAGFILE ConfigStrings::TAGFILE
#define CONFIG_TRANSLATORS ConfigStrings::TRANSLATORS
#define CONFIG_URL ConfigStrings::URL
#define CONFIG_VERSION ConfigStrings::VERSION
#define CONFIG_VERSIONSYM ConfigStrings::VERSIONSYM
#define CONFIG_FILEEXTENSIONS ConfigStrings::FILEEXTENSIONS
#define CONFIG_IMAGEEXTENSIONS ConfigStrings::IMAGEEXTENSIONS
#define CONFIG_QMLONLY ConfigStrings::QMLONLY
#define CONFIG_QMLTYPESPAGE ConfigStrings::QMLTYPESPAGE
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -802,31 +802,6 @@ QList<Section> CppCodeMarker::sections(const InnerNode *inner,
return sections; return sections;
} }
static const char * const typeTable[] = {
"bool", "char", "double", "float", "int", "long", "short",
"signed", "unsigned", "uint", "ulong", "ushort", "uchar", "void",
"qlonglong", "qulonglong",
"qint", "qint8", "qint16", "qint32", "qint64",
"quint", "quint8", "quint16", "quint32", "quint64",
"qreal", "cond", 0
};
static const char * const keywordTable[] = {
"and", "and_eq", "asm", "auto", "bitand", "bitor", "break",
"case", "catch", "class", "compl", "const", "const_cast",
"continue", "default", "delete", "do", "dynamic_cast", "else",
"enum", "explicit", "export", "extern", "false", "for", "friend",
"goto", "if", "include", "inline", "monitor", "mutable", "namespace",
"new", "not", "not_eq", "operator", "or", "or_eq", "private", "protected",
"public", "register", "reinterpret_cast", "return", "sizeof",
"static", "static_cast", "struct", "switch", "template", "this",
"throw", "true", "try", "typedef", "typeid", "typename", "union",
"using", "virtual", "volatile", "wchar_t", "while", "xor",
"xor_eq", "synchronized",
// Qt specific
"signals", "slots", "emit", 0
};
/* /*
@char @char
@class @class
@ -844,25 +819,51 @@ QString CppCodeMarker::addMarkUp(const QString &in,
const Node * /* relative */, const Node * /* relative */,
const Location & /* location */) const Location & /* location */)
{ {
static QSet<QString> types;
static QSet<QString> keywords;
if (types.isEmpty()) {
// initialize statics
Q_ASSERT(keywords.isEmpty());
static const QString typeTable[] = {
QLatin1String("bool"), QLatin1String("char"), QLatin1String("double"), QLatin1String("float"), QLatin1String("int"), QLatin1String("long"), QLatin1String("short"),
QLatin1String("signed"), QLatin1String("unsigned"), QLatin1String("uint"), QLatin1String("ulong"), QLatin1String("ushort"), QLatin1String("uchar"), QLatin1String("void"),
QLatin1String("qlonglong"), QLatin1String("qulonglong"),
QLatin1String("qint"), QLatin1String("qint8"), QLatin1String("qint16"), QLatin1String("qint32"), QLatin1String("qint64"),
QLatin1String("quint"), QLatin1String("quint8"), QLatin1String("quint16"), QLatin1String("quint32"), QLatin1String("quint64"),
QLatin1String("qreal"), QLatin1String("cond")
};
static const QString keywordTable[] = {
QLatin1String("and"), QLatin1String("and_eq"), QLatin1String("asm"), QLatin1String("auto"), QLatin1String("bitand"), QLatin1String("bitor"), QLatin1String("break"),
QLatin1String("case"), QLatin1String("catch"), QLatin1String("class"), QLatin1String("compl"), QLatin1String("const"), QLatin1String("const_cast"),
QLatin1String("continue"), QLatin1String("default"), QLatin1String("delete"), QLatin1String("do"), QLatin1String("dynamic_cast"), QLatin1String("else"),
QLatin1String("enum"), QLatin1String("explicit"), QLatin1String("export"), QLatin1String("extern"), QLatin1String("false"), QLatin1String("for"), QLatin1String("friend"),
QLatin1String("goto"), QLatin1String("if"), QLatin1String("include"), QLatin1String("inline"), QLatin1String("monitor"), QLatin1String("mutable"), QLatin1String("namespace"),
QLatin1String("new"), QLatin1String("not"), QLatin1String("not_eq"), QLatin1String("operator"), QLatin1String("or"), QLatin1String("or_eq"), QLatin1String("private"), QLatin1String("protected"),
QLatin1String("public"), QLatin1String("register"), QLatin1String("reinterpret_cast"), QLatin1String("return"), QLatin1String("sizeof"),
QLatin1String("static"), QLatin1String("static_cast"), QLatin1String("struct"), QLatin1String("switch"), QLatin1String("template"), QLatin1String("this"),
QLatin1String("throw"), QLatin1String("true"), QLatin1String("try"), QLatin1String("typedef"), QLatin1String("typeid"), QLatin1String("typename"), QLatin1String("union"),
QLatin1String("using"), QLatin1String("virtual"), QLatin1String("volatile"), QLatin1String("wchar_t"), QLatin1String("while"), QLatin1String("xor"),
QLatin1String("xor_eq"), QLatin1String("synchronized"),
// Qt specific
QLatin1String("signals"), QLatin1String("slots"), QLatin1String("emit")
};
types.reserve(sizeof(typeTable) / sizeof(QString));
for (int j = sizeof(typeTable) / sizeof(QString) - 1; j; --j)
types.insert(typeTable[j]);
keywords.reserve(sizeof(keywordTable) / sizeof(QString));
for (int j = sizeof(keywordTable) / sizeof(QString) - 1; j; --j)
keywords.insert(keywordTable[j]);
}
#define readChar() \ #define readChar() \
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;
QMap<QString, int> types; QString text;
QMap<QString, int> keywords;
int j = 0;
while (typeTable[j] != 0) {
types.insert(QString(typeTable[j]), 0);
j++;
}
j = 0;
while (keywordTable[j] != 0) {
keywords.insert(QString(keywordTable[j]), 0);
j++;
}
QString out;
int braceDepth = 0; int braceDepth = 0;
int parenDepth = 0; int parenDepth = 0;
int i = 0; int i = 0;
@ -871,6 +872,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
QChar ch; QChar ch;
QRegExp classRegExp("Qt?(?:[A-Z3]+[a-z][A-Za-z]*|t)"); QRegExp classRegExp("Qt?(?:[A-Z3]+[a-z][A-Za-z]*|t)");
QRegExp functionRegExp("q([A-Z][a-z]+)+"); QRegExp functionRegExp("q([A-Z][a-z]+)+");
QRegExp findFunctionRegExp(QStringLiteral("^\\s*\\("));
readChar(); readChar();
@ -887,18 +889,18 @@ QString CppCodeMarker::addMarkUp(const QString &in,
} while (ch.isLetterOrNumber() || ch == '_'); } while (ch.isLetterOrNumber() || ch == '_');
if (classRegExp.exactMatch(ident)) { if (classRegExp.exactMatch(ident)) {
tag = QLatin1String("type"); tag = QStringLiteral("type");
} else if (functionRegExp.exactMatch(ident)) { } else if (functionRegExp.exactMatch(ident)) {
tag = QLatin1String("func"); tag = QStringLiteral("func");
target = true; target = true;
} else if (types.contains(ident)) { } else if (types.contains(ident)) {
tag = QLatin1String("type"); tag = QStringLiteral("type");
} else if (keywords.contains(ident)) { } else if (keywords.contains(ident)) {
tag = QLatin1String("keyword"); tag = QStringLiteral("keyword");
} else if (braceDepth == 0 && parenDepth == 0) { } else if (braceDepth == 0 && parenDepth == 0) {
if (QString(code.unicode() + i - 1, code.length() - (i - 1)) if (QString(code.unicode() + i - 1, code.length() - (i - 1))
.indexOf(QRegExp(QLatin1String("^\\s*\\("))) == 0) .indexOf(findFunctionRegExp) == 0)
tag = QLatin1String("func"); tag = QStringLiteral("func");
target = true; target = true;
} }
} else if (ch.isDigit()) { } else if (ch.isDigit()) {
@ -906,7 +908,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
finish = i; finish = i;
readChar(); readChar();
} while (ch.isLetterOrNumber() || ch == '.'); } while (ch.isLetterOrNumber() || ch == '.');
tag = QLatin1String("number"); tag = QStringLiteral("number");
} else { } else {
switch (ch.unicode()) { switch (ch.unicode()) {
case '+': case '+':
@ -928,7 +930,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
case '~': case '~':
finish = i; finish = i;
readChar(); readChar();
tag = QLatin1String("op"); tag = QStringLiteral("op");
break; break;
case '"': case '"':
finish = i; finish = i;
@ -941,7 +943,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
} }
finish = i; finish = i;
readChar(); readChar();
tag = QLatin1String("string"); tag = QStringLiteral("string");
break; break;
case '#': case '#':
finish = i; finish = i;
@ -952,7 +954,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
finish = i; finish = i;
readChar(); readChar();
} }
tag = QLatin1String("preprocessor"); tag = QStringLiteral("preprocessor");
break; break;
case '\'': case '\'':
finish = i; finish = i;
@ -965,7 +967,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
} }
finish = i; finish = i;
readChar(); readChar();
tag = QLatin1String("char"); tag = QStringLiteral("char");
break; break;
case '(': case '(':
finish = i; finish = i;
@ -983,7 +985,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
if (ch == ':') { if (ch == ':') {
finish = i; finish = i;
readChar(); readChar();
tag = QLatin1String("op"); tag = QStringLiteral("op");
} }
break; break;
case '/': case '/':
@ -994,7 +996,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
finish = i; finish = i;
readChar(); readChar();
} while (ch != EOF && ch != '\n'); } while (ch != EOF && ch != '\n');
tag = QLatin1String("comment"); tag = QStringLiteral("comment");
} else if (ch == '*') { } else if (ch == '*') {
bool metAster = false; bool metAster = false;
bool metAsterSlash = false; bool metAsterSlash = false;
@ -1015,9 +1017,9 @@ QString CppCodeMarker::addMarkUp(const QString &in,
finish = i; finish = i;
readChar(); readChar();
} }
tag = QLatin1String("comment"); tag = QStringLiteral("comment");
} else { } else {
tag = QLatin1String("op"); tag = QStringLiteral("op");
} }
break; break;
case '{': case '{':
@ -1036,28 +1038,27 @@ QString CppCodeMarker::addMarkUp(const QString &in,
} }
} }
QString text;
text = code.mid(start, finish - start); text = code.mid(start, finish - start);
start = finish; start = finish;
if (!tag.isEmpty()) { if (!tag.isEmpty()) {
out += QLatin1String("<@") + tag; out << QStringLiteral("<@") << tag;
if (target) if (target)
out += QLatin1String(" target=\"") + text + QLatin1String("()\""); out << QStringLiteral(" target=\"") << text << QStringLiteral("()\"");
out += QLatin1Char('>'); out << QStringLiteral(">");
} }
out += protect(text); out << protect(text);
if (!tag.isEmpty()) if (!tag.isEmpty())
out += QLatin1String("</@") + tag + QLatin1Char('>'); out << QStringLiteral("</@") << tag << QStringLiteral(">");
} }
if (start < code.length()) { if (start < code.length()) {
out += protect(code.mid(start)); out << protect(code.mid(start));
} }
return out; return out.join(QString());
} }
/*! /*!

View File

@ -502,7 +502,7 @@ DitaXmlGenerator::~DitaXmlGenerator()
void DitaXmlGenerator::initializeGenerator(const Config &config) void DitaXmlGenerator::initializeGenerator(const Config &config)
{ {
Generator::initializeGenerator(config); Generator::initializeGenerator(config);
obsoleteLinks = config.getBool(QLatin1String(CONFIG_OBSOLETELINKS)); obsoleteLinks = config.getBool(CONFIG_OBSOLETELINKS);
setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif"); setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif");
style = config.getString(DitaXmlGenerator::format() + style = config.getString(DitaXmlGenerator::format() +

View File

@ -1643,7 +1643,7 @@ void Generator::initialize(const Config &config)
} }
else else
outputPrefixes[QLatin1String("QML")] = QLatin1String("qml-"); outputPrefixes[QLatin1String("QML")] = QLatin1String("qml-");
noLinkErrors_ = config.getBool(QLatin1String(CONFIG_NOLINKERRORS)); noLinkErrors_ = config.getBool(CONFIG_NOLINKERRORS);
} }
/*! /*!

View File

@ -136,7 +136,7 @@ void HtmlGenerator::initializeGenerator(const Config &config)
}; };
Generator::initializeGenerator(config); Generator::initializeGenerator(config);
obsoleteLinks = config.getBool(QLatin1String(CONFIG_OBSOLETELINKS)); obsoleteLinks = config.getBool(CONFIG_OBSOLETELINKS);
setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif"); setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif");
int i = 0; int i = 0;
while (defaults[i].key) { while (defaults[i].key) {

View File

@ -78,16 +78,16 @@ QT_BEGIN_NAMESPACE
And those are all the default values for configuration variables. And those are all the default values for configuration variables.
*/ */
static const struct { static const struct {
const char *key; const QString key;
const char *value; const QString value;
} defaults[] = { } defaults[] = {
{ CONFIG_CODEINDENT, "4" }, { CONFIG_CODEINDENT, QLatin1String("4") },
{ CONFIG_FALSEHOODS, "0" }, { CONFIG_FALSEHOODS, QLatin1String("0") },
{ CONFIG_FILEEXTENSIONS, "*.cpp *.h *.qdoc *.qml"}, { CONFIG_FILEEXTENSIONS, QLatin1String("*.cpp *.h *.qdoc *.qml") },
{ CONFIG_LANGUAGE, "Cpp" }, { CONFIG_LANGUAGE, QLatin1String("Cpp") },
{ CONFIG_OUTPUTFORMATS, "HTML" }, { CONFIG_OUTPUTFORMATS, QLatin1String("HTML") },
{ CONFIG_TABSIZE, "8" }, { CONFIG_TABSIZE, QLatin1String("8") },
{ 0, 0 } { QString(), QString() }
}; };
bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2) bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
@ -269,7 +269,7 @@ static void processQdocconfFile(const QString &fileName)
*/ */
Config config(QCoreApplication::translate("QDoc", "qdoc")); Config config(QCoreApplication::translate("QDoc", "qdoc"));
int i = 0; int i = 0;
while (defaults[i].key) { while (!defaults[i].key.isEmpty()) {
config.setStringList(defaults[i].key, QStringList() << defaults[i].value); config.setStringList(defaults[i].key, QStringList() << defaults[i].value);
++i; ++i;
} }