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)
{
defaultLang = config.getString(QLatin1String(CONFIG_LANGUAGE));
defaultLang = config.getString(CONFIG_LANGUAGE);
QList<CodeMarker *>::ConstIterator m = markers.constBegin();
while (m != markers.constEnd()) {
(*m)->initializeMarker(config);

View File

@ -102,7 +102,7 @@ CodeParser::~CodeParser()
*/
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
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<QString> 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<QString> &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()) {

View File

@ -164,76 +164,150 @@ private:
static QMap<QString, QStringList> 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

View File

@ -802,31 +802,6 @@ QList<Section> 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<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() \
ch = (i < (int)code.length()) ? code[i++].cell() : EOF
QString code = in;
QMap<QString, int> types;
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;
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("</@") + tag + QLatin1Char('>');
out << QStringLiteral("</@") << tag << QStringLiteral(">");
}
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)
{
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() +

View File

@ -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);
}
/*!

View File

@ -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) {

View File

@ -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;
}