From 8969f57b6abef31d2e27500742dffa5498e38a46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Thu, 4 Apr 2013 16:04:49 +0200 Subject: 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 --- src/tools/qdoc/codemarker.cpp | 2 +- src/tools/qdoc/codeparser.cpp | 2 +- src/tools/qdoc/config.cpp | 79 ++++++++++++- src/tools/qdoc/config.h | 214 ++++++++++++++++++++++++------------ src/tools/qdoc/cppcodemarker.cpp | 127 ++++++++++----------- src/tools/qdoc/ditaxmlgenerator.cpp | 2 +- src/tools/qdoc/generator.cpp | 2 +- src/tools/qdoc/htmlgenerator.cpp | 2 +- src/tools/qdoc/main.cpp | 20 ++-- 9 files changed, 298 insertions(+), 152 deletions(-) (limited to 'src/tools') diff --git a/src/tools/qdoc/codemarker.cpp b/src/tools/qdoc/codemarker.cpp index 8faac66b1b..a1f0068f7d 100644 --- a/src/tools/qdoc/codemarker.cpp +++ b/src/tools/qdoc/codemarker.cpp @@ -94,7 +94,7 @@ void CodeMarker::terminateMarker() */ void CodeMarker::initialize(const Config& config) { - defaultLang = config.getString(QLatin1String(CONFIG_LANGUAGE)); + defaultLang = config.getString(CONFIG_LANGUAGE); QList::ConstIterator m = markers.constBegin(); while (m != markers.constEnd()) { (*m)->initializeMarker(config); diff --git a/src/tools/qdoc/codeparser.cpp b/src/tools/qdoc/codeparser.cpp index 1be67894cc..8f57a691bf 100644 --- a/src/tools/qdoc/codeparser.cpp +++ b/src/tools/qdoc/codeparser.cpp @@ -102,7 +102,7 @@ CodeParser::~CodeParser() */ void CodeParser::initializeParser(const Config& config) { - showInternal = config.getBool(QLatin1String(CONFIG_SHOWINTERNAL)); + showInternal = config.getBool(CONFIG_SHOWINTERNAL); } /*! diff --git a/src/tools/qdoc/config.cpp b/src/tools/qdoc/config.cpp index 48be30c24e..0dd59fd214 100644 --- a/src/tools/qdoc/config.cpp +++ b/src/tools/qdoc/config.cpp @@ -55,6 +55,77 @@ 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 of string values. @@ -284,7 +355,7 @@ QString Config::getOutputDir() const { QString t; if (overrideOutputDir.isNull()) - t = getString(QLatin1String(CONFIG_OUTPUTDIR)); + t = getString(CONFIG_OUTPUTDIR); else t = overrideOutputDir; if (!Generator::useOutputSubdirs()) { @@ -305,7 +376,7 @@ QString Config::getOutputDir() const QSet Config::getOutputFormats() const { if (overrideOutputFormats.isEmpty()) - return getStringSet(QLatin1String(CONFIG_OUTPUTFORMATS)); + return getStringSet(CONFIG_OUTPUTFORMATS); else return overrideOutputFormats; } @@ -635,7 +706,7 @@ QStringList Config::getAllFiles(const QString &filesVar, QStringList result = getStringList(filesVar); QStringList dirs = getCanonicalPathList(dirsVar); - QString nameFilter = getString(filesVar + dot + QLatin1String(CONFIG_FILEEXTENSIONS)); + QString nameFilter = getString(filesVar + dot + CONFIG_FILEEXTENSIONS); QStringList::ConstIterator d = dirs.constBegin(); while (d != dirs.constEnd()) { @@ -665,7 +736,7 @@ QStringList Config::getExampleImageFiles(const QSet &excludedDirs, { QStringList result; 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(); while (d != dirs.constEnd()) { diff --git a/src/tools/qdoc/config.h b/src/tools/qdoc/config.h index 6efff44442..54ee8de47f 100644 --- a/src/tools/qdoc/config.h +++ b/src/tools/qdoc/config.h @@ -164,76 +164,150 @@ private: static QMap includeFilesMap_; }; -#define CONFIG_ALIAS "alias" -#define CONFIG_BASE "base" -#define CONFIG_BASEDIR "basedir" -#define CONFIG_BUILDVERSION "buildversion" -#define CONFIG_CODEINDENT "codeindent" -#define CONFIG_CPPCLASSESPAGE "cppclassespage" -#define CONFIG_DEFINES "defines" -#define CONFIG_DEPENDS "depends" -#define CONFIG_DESCRIPTION "description" -#define CONFIG_EDITION "edition" -#define CONFIG_ENDHEADER "endheader" -#define CONFIG_EXAMPLEDIRS "exampledirs" -#define CONFIG_EXAMPLES "examples" -#define CONFIG_EXAMPLESINSTALLPATH "examplesinstallpath" -#define CONFIG_EXCLUDEDIRS "excludedirs" -#define CONFIG_EXCLUDEFILES "excludefiles" -#define CONFIG_EXTRAIMAGES "extraimages" -#define CONFIG_FALSEHOODS "falsehoods" -#define CONFIG_FORMATTING "formatting" -#define CONFIG_GENERATEINDEX "generateindex" -#define CONFIG_HEADERDIRS "headerdirs" -#define CONFIG_HEADERS "headers" -#define CONFIG_HEADERSCRIPTS "headerscripts" -#define CONFIG_HEADERSTYLES "headerstyles" -#define CONFIG_HOMEPAGE "homepage" -#define CONFIG_IGNOREDIRECTIVES "ignoredirectives" -#define CONFIG_IGNORETOKENS "ignoretokens" -#define CONFIG_IMAGEDIRS "imagedirs" -#define CONFIG_IMAGES "images" -#define CONFIG_INDEXES "indexes" -#define CONFIG_LANGUAGE "language" -#define CONFIG_LANDINGPAGE "landingpage" -#define CONFIG_MACRO "macro" -#define CONFIG_MANIFESTMETA "manifestmeta" -#define CONFIG_NATURALLANGUAGE "naturallanguage" -#define CONFIG_NAVIGATION "navigation" -#define CONFIG_NOLINKERRORS "nolinkerrors" -#define CONFIG_OBSOLETELINKS "obsoletelinks" -#define CONFIG_OUTPUTDIR "outputdir" -#define CONFIG_OUTPUTENCODING "outputencoding" -#define CONFIG_OUTPUTLANGUAGE "outputlanguage" -#define CONFIG_OUTPUTFORMATS "outputformats" -#define CONFIG_OUTPUTPREFIXES "outputprefixes" -#define CONFIG_PROJECT "project" -#define CONFIG_REDIRECTDOCUMENTATIONTODEVNULL "redirectdocumentationtodevnull" -#define CONFIG_QHP "qhp" -#define CONFIG_QMLTYPESPAGE "qmltypespage" -#define CONFIG_QUOTINGINFORMATION "quotinginformation" -#define CONFIG_SCRIPTDIRS "scriptdirs" -#define CONFIG_SCRIPTS "scripts" -#define CONFIG_SHOWINTERNAL "showinternal" -#define CONFIG_SOURCEDIRS "sourcedirs" -#define CONFIG_SOURCEENCODING "sourceencoding" -#define CONFIG_SOURCES "sources" -#define CONFIG_SPURIOUS "spurious" -#define CONFIG_STYLEDIRS "styledirs" -#define CONFIG_STYLE "style" -#define CONFIG_STYLES "styles" -#define CONFIG_STYLESHEETS "stylesheets" -#define CONFIG_SYNTAXHIGHLIGHTING "syntaxhighlighting" -#define CONFIG_TEMPLATEDIR "templatedir" -#define CONFIG_TABSIZE "tabsize" -#define CONFIG_TAGFILE "tagfile" -#define CONFIG_TRANSLATORS "translators" -#define CONFIG_URL "url" -#define CONFIG_VERSION "version" -#define CONFIG_VERSIONSYM "versionsym" -#define CONFIG_FILEEXTENSIONS "fileextensions" -#define CONFIG_IMAGEEXTENSIONS "imageextensions" -#define CONFIG_QMLONLY "qmlonly" +struct ConfigStrings +{ + static QString ALIAS; + static QString BASE; + static QString BASEDIR; + static QString BUILDVERSION; + static QString CODEINDENT; + static QString CPPCLASSESPAGE; + static QString DEFINES; + static QString DEPENDS; + static QString DESCRIPTION; + static QString EDITION; + static QString ENDHEADER; + static QString EXAMPLEDIRS; + static QString EXAMPLES; + static QString EXAMPLESINSTALLPATH; + static QString EXCLUDEDIRS; + static QString EXCLUDEFILES; + static QString EXTRAIMAGES; + static QString FALSEHOODS; + static QString FORMATTING; + static QString GENERATEINDEX; + static QString HEADERDIRS; + static QString HEADERS; + static QString HEADERSCRIPTS; + static QString HEADERSTYLES; + static QString HOMEPAGE; + static QString IGNOREDIRECTIVES; + static QString IGNORETOKENS; + static QString IMAGEDIRS; + static QString IMAGES; + static QString INDEXES; + static QString LANDINGPAGE; + static QString LANGUAGE; + static QString MACRO; + static QString MANIFESTMETA; + static QString NATURALLANGUAGE; + static QString NAVIGATION; + static QString NOLINKERRORS; + static QString OBSOLETELINKS; + static QString OUTPUTDIR; + static QString OUTPUTENCODING; + static QString OUTPUTLANGUAGE; + static QString OUTPUTFORMATS; + static QString OUTPUTPREFIXES; + static QString PROJECT; + static QString REDIRECTDOCUMENTATIONTODEVNULL; + static QString QHP; + static QString QUOTINGINFORMATION; + static QString SCRIPTDIRS; + static QString SCRIPTS; + static QString SHOWINTERNAL; + static QString SOURCEDIRS; + static QString SOURCEENCODING; + static QString SOURCES; + static QString SPURIOUS; + static QString STYLEDIRS; + static QString STYLE; + static QString STYLES; + static QString STYLESHEETS; + static QString SYNTAXHIGHLIGHTING; + static QString TEMPLATEDIR; + static QString TABSIZE; + static QString TAGFILE; + static QString TRANSLATORS; + static QString URL; + static QString VERSION; + static QString VERSIONSYM; + static QString FILEEXTENSIONS; + 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 diff --git a/src/tools/qdoc/cppcodemarker.cpp b/src/tools/qdoc/cppcodemarker.cpp index ab58238301..a5408f7178 100644 --- a/src/tools/qdoc/cppcodemarker.cpp +++ b/src/tools/qdoc/cppcodemarker.cpp @@ -802,31 +802,6 @@ QList
CppCodeMarker::sections(const InnerNode *inner, 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 @class @@ -844,25 +819,51 @@ QString CppCodeMarker::addMarkUp(const QString &in, const Node * /* relative */, const Location & /* location */) { + static QSet types; + static QSet 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() \ ch = (i < (int)code.length()) ? code[i++].cell() : EOF QString code = in; - - QMap types; - QMap 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; + QStringList out; + QString text; int braceDepth = 0; int parenDepth = 0; int i = 0; @@ -871,6 +872,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, QChar ch; QRegExp classRegExp("Qt?(?:[A-Z3]+[a-z][A-Za-z]*|t)"); QRegExp functionRegExp("q([A-Z][a-z]+)+"); + QRegExp findFunctionRegExp(QStringLiteral("^\\s*\\(")); readChar(); @@ -887,18 +889,18 @@ QString CppCodeMarker::addMarkUp(const QString &in, } while (ch.isLetterOrNumber() || ch == '_'); if (classRegExp.exactMatch(ident)) { - tag = QLatin1String("type"); + tag = QStringLiteral("type"); } else if (functionRegExp.exactMatch(ident)) { - tag = QLatin1String("func"); + tag = QStringLiteral("func"); target = true; } else if (types.contains(ident)) { - tag = QLatin1String("type"); + tag = QStringLiteral("type"); } else if (keywords.contains(ident)) { - tag = QLatin1String("keyword"); + tag = QStringLiteral("keyword"); } else if (braceDepth == 0 && parenDepth == 0) { if (QString(code.unicode() + i - 1, code.length() - (i - 1)) - .indexOf(QRegExp(QLatin1String("^\\s*\\("))) == 0) - tag = QLatin1String("func"); + .indexOf(findFunctionRegExp) == 0) + tag = QStringLiteral("func"); target = true; } } else if (ch.isDigit()) { @@ -906,7 +908,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, finish = i; readChar(); } while (ch.isLetterOrNumber() || ch == '.'); - tag = QLatin1String("number"); + tag = QStringLiteral("number"); } else { switch (ch.unicode()) { case '+': @@ -928,7 +930,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, case '~': finish = i; readChar(); - tag = QLatin1String("op"); + tag = QStringLiteral("op"); break; case '"': finish = i; @@ -941,7 +943,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, } finish = i; readChar(); - tag = QLatin1String("string"); + tag = QStringLiteral("string"); break; case '#': finish = i; @@ -952,7 +954,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, finish = i; readChar(); } - tag = QLatin1String("preprocessor"); + tag = QStringLiteral("preprocessor"); break; case '\'': finish = i; @@ -965,7 +967,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, } finish = i; readChar(); - tag = QLatin1String("char"); + tag = QStringLiteral("char"); break; case '(': finish = i; @@ -983,7 +985,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, if (ch == ':') { finish = i; readChar(); - tag = QLatin1String("op"); + tag = QStringLiteral("op"); } break; case '/': @@ -994,7 +996,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, finish = i; readChar(); } while (ch != EOF && ch != '\n'); - tag = QLatin1String("comment"); + tag = QStringLiteral("comment"); } else if (ch == '*') { bool metAster = false; bool metAsterSlash = false; @@ -1015,9 +1017,9 @@ QString CppCodeMarker::addMarkUp(const QString &in, finish = i; readChar(); } - tag = QLatin1String("comment"); + tag = QStringLiteral("comment"); } else { - tag = QLatin1String("op"); + tag = QStringLiteral("op"); } break; case '{': @@ -1036,28 +1038,27 @@ QString CppCodeMarker::addMarkUp(const QString &in, } } - QString text; text = code.mid(start, finish - start); start = finish; if (!tag.isEmpty()) { - out += QLatin1String("<@") + tag; + out << QStringLiteral("<@") << tag; if (target) - out += QLatin1String(" target=\"") + text + QLatin1String("()\""); - out += QLatin1Char('>'); + out << QStringLiteral(" target=\"") << text << QStringLiteral("()\""); + out << QStringLiteral(">"); } - out += protect(text); + out << protect(text); if (!tag.isEmpty()) - out += QLatin1String("'); + out << QStringLiteral(""); } if (start < code.length()) { - out += protect(code.mid(start)); + out << protect(code.mid(start)); } - return out; + return out.join(QString()); } /*! diff --git a/src/tools/qdoc/ditaxmlgenerator.cpp b/src/tools/qdoc/ditaxmlgenerator.cpp index 46fb6e27e6..275fc9ecae 100644 --- a/src/tools/qdoc/ditaxmlgenerator.cpp +++ b/src/tools/qdoc/ditaxmlgenerator.cpp @@ -502,7 +502,7 @@ DitaXmlGenerator::~DitaXmlGenerator() void DitaXmlGenerator::initializeGenerator(const Config &config) { Generator::initializeGenerator(config); - obsoleteLinks = config.getBool(QLatin1String(CONFIG_OBSOLETELINKS)); + obsoleteLinks = config.getBool(CONFIG_OBSOLETELINKS); setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif"); style = config.getString(DitaXmlGenerator::format() + diff --git a/src/tools/qdoc/generator.cpp b/src/tools/qdoc/generator.cpp index cfea6235d3..0d4e563836 100644 --- a/src/tools/qdoc/generator.cpp +++ b/src/tools/qdoc/generator.cpp @@ -1643,7 +1643,7 @@ void Generator::initialize(const Config &config) } else outputPrefixes[QLatin1String("QML")] = QLatin1String("qml-"); - noLinkErrors_ = config.getBool(QLatin1String(CONFIG_NOLINKERRORS)); + noLinkErrors_ = config.getBool(CONFIG_NOLINKERRORS); } /*! diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp index 52af5d60b9..1c28ede976 100644 --- a/src/tools/qdoc/htmlgenerator.cpp +++ b/src/tools/qdoc/htmlgenerator.cpp @@ -136,7 +136,7 @@ void HtmlGenerator::initializeGenerator(const Config &config) }; Generator::initializeGenerator(config); - obsoleteLinks = config.getBool(QLatin1String(CONFIG_OBSOLETELINKS)); + obsoleteLinks = config.getBool(CONFIG_OBSOLETELINKS); setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif"); int i = 0; while (defaults[i].key) { diff --git a/src/tools/qdoc/main.cpp b/src/tools/qdoc/main.cpp index 26aa0a7dc2..dd72be7f6e 100644 --- a/src/tools/qdoc/main.cpp +++ b/src/tools/qdoc/main.cpp @@ -78,16 +78,16 @@ QT_BEGIN_NAMESPACE And those are all the default values for configuration variables. */ static const struct { - const char *key; - const char *value; + const QString key; + const QString value; } defaults[] = { - { CONFIG_CODEINDENT, "4" }, - { CONFIG_FALSEHOODS, "0" }, - { CONFIG_FILEEXTENSIONS, "*.cpp *.h *.qdoc *.qml"}, - { CONFIG_LANGUAGE, "Cpp" }, - { CONFIG_OUTPUTFORMATS, "HTML" }, - { CONFIG_TABSIZE, "8" }, - { 0, 0 } + { CONFIG_CODEINDENT, QLatin1String("4") }, + { CONFIG_FALSEHOODS, QLatin1String("0") }, + { CONFIG_FILEEXTENSIONS, QLatin1String("*.cpp *.h *.qdoc *.qml") }, + { CONFIG_LANGUAGE, QLatin1String("Cpp") }, + { CONFIG_OUTPUTFORMATS, QLatin1String("HTML") }, + { CONFIG_TABSIZE, QLatin1String("8") }, + { QString(), QString() } }; bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2) @@ -269,7 +269,7 @@ static void processQdocconfFile(const QString &fileName) */ Config config(QCoreApplication::translate("QDoc", "qdoc")); int i = 0; - while (defaults[i].key) { + while (!defaults[i].key.isEmpty()) { config.setStringList(defaults[i].key, QStringList() << defaults[i].value); ++i; } -- cgit v1.2.3