aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/kconfigloader.cpp68
-rw-r--r--src/gui/kconfigloaderhandler_p.h5
2 files changed, 43 insertions, 30 deletions
diff --git a/src/gui/kconfigloader.cpp b/src/gui/kconfigloader.cpp
index 940613b8..bc1751f4 100644
--- a/src/gui/kconfigloader.cpp
+++ b/src/gui/kconfigloader.cpp
@@ -49,14 +49,20 @@ bool ConfigLoaderHandler::parse(QIODevice *input)
switch (reader.tokenType()) {
case QXmlStreamReader::StartElement:
- startElement(reader.name(), reader.attributes());
+ if (!startElement(reader.name(), reader.attributes())) {
+ return false;
+ }
break;
case QXmlStreamReader::EndElement:
- endElement(reader.name());
+ if (!endElement(reader.name())) {
+ return false;
+ }
break;
case QXmlStreamReader::Characters:
if (!reader.isWhitespace() && !reader.text().trimmed().isEmpty()) {
- m_cdata.append(reader.text());
+ if (!characters(reader.text())) {
+ return false;
+ }
}
break;
default:
@@ -71,19 +77,15 @@ bool ConfigLoaderHandler::parse(QIODevice *input)
return true;
}
-static bool caseInsensitiveCompare(const QStringView a, const QLatin1String b)
-{
- return a.compare(b, Qt::CaseInsensitive) == 0;
-}
-
-void ConfigLoaderHandler::startElement(const QStringView localName, const QXmlStreamAttributes &attrs)
+bool ConfigLoaderHandler::startElement(const QStringRef &localName, const QXmlStreamAttributes &attrs)
{
// qDebug() << "ConfigLoaderHandler::startElement(" << localName << qName;
- if (caseInsensitiveCompare(localName, QLatin1String("group"))) {
+ const QString tag = localName.toString().toLower();
+ if (tag == QLatin1String("group")) {
QString group;
for (const auto &attr : attrs) {
- const auto name = attr.name();
- if (caseInsensitiveCompare(name, QLatin1String("name"))) {
+ const QStringRef name = attr.name();
+ if (name.compare(QLatin1String("name"), Qt::CaseInsensitive) == 0) {
// qDebug() << "set group to" << attrs.value(i);
group = attr.value().toString();
}
@@ -100,61 +102,71 @@ void ConfigLoaderHandler::startElement(const QStringView localName, const QXmlSt
if (m_config) {
m_config->setCurrentGroup(group);
}
- } else if (caseInsensitiveCompare(localName, QLatin1String("entry"))) {
+ } else if (tag == QLatin1String("entry")) {
for (const auto &attr : attrs) {
- const auto name = attr.name();
- if (caseInsensitiveCompare(name, QLatin1String("name"))) {
+ const QStringRef name = attr.name();
+ if (name.compare(QLatin1String("name"), Qt::CaseInsensitive) == 0) {
m_name = attr.value().trimmed().toString();
- } else if (caseInsensitiveCompare(name, QLatin1String("type"))) {
+ } else if (name.compare(QLatin1String("type"), Qt::CaseInsensitive) == 0) {
m_type = attr.value().toString().toLower();
- } else if (caseInsensitiveCompare(name, QLatin1String("key"))) {
+ } else if (name.compare(QLatin1String("key"), Qt::CaseInsensitive) == 0) {
m_key = attr.value().trimmed().toString();
}
}
- } else if (caseInsensitiveCompare(localName, QLatin1String("choice"))) {
+ } else if (tag == QLatin1String("choice")) {
m_choice.name.clear();
m_choice.label.clear();
m_choice.whatsThis.clear();
for (const auto &attr : attrs) {
- const auto name = attr.name();
- if (caseInsensitiveCompare(name, QLatin1String("name"))) {
+ const QStringRef name = attr.name();
+ if (name.compare(QLatin1String("name"), Qt::CaseInsensitive) == 0) {
m_choice.name = attr.value().toString();
}
}
m_inChoice = true;
}
+
+ return true;
+}
+
+bool ConfigLoaderHandler::characters(const QStringRef &ch)
+{
+ m_cdata.append(ch.toString());
+ return true;
}
-void ConfigLoaderHandler::endElement(const QStringView localName)
+bool ConfigLoaderHandler::endElement(const QStringRef &localName)
{
// qDebug() << "ConfigLoaderHandler::endElement(" << localName << qName;
- if (caseInsensitiveCompare(localName, QLatin1String("entry"))) {
+ const QStringRef tag = localName;
+ if (tag.compare(QLatin1String("entry"), Qt::CaseInsensitive) == 0) {
addItem();
resetState();
- } else if (caseInsensitiveCompare(localName, QLatin1String("label"))) {
+ } else if (tag.compare(QLatin1String("label"), Qt::CaseInsensitive) == 0) {
if (m_inChoice) {
m_choice.label = m_cdata.trimmed();
} else {
m_label = m_cdata.trimmed();
}
- } else if (caseInsensitiveCompare(localName, QLatin1String("whatsthis"))) {
+ } else if (tag.compare(QLatin1String("whatsthis"), Qt::CaseInsensitive) == 0) {
if (m_inChoice) {
m_choice.whatsThis = m_cdata.trimmed();
} else {
m_whatsThis = m_cdata.trimmed();
}
- } else if (caseInsensitiveCompare(localName, QLatin1String("default"))) {
+ } else if (tag.compare(QLatin1String("default"), Qt::CaseInsensitive) == 0) {
m_default = m_cdata.trimmed();
- } else if (caseInsensitiveCompare(localName, QLatin1String("min"))) {
+ } else if (tag.compare(QLatin1String("min"), Qt::CaseInsensitive) == 0) {
m_min = m_cdata.toInt(&m_haveMin);
- } else if (caseInsensitiveCompare(localName, QLatin1String("max"))) {
+ } else if (tag.compare(QLatin1String("max"), Qt::CaseInsensitive) == 0) {
m_max = m_cdata.toInt(&m_haveMax);
- } else if (caseInsensitiveCompare(localName, QLatin1String("choice"))) {
+ } else if (tag.compare(QLatin1String("choice"), Qt::CaseInsensitive) == 0) {
m_enumChoices.append(m_choice);
m_inChoice = false;
}
m_cdata.clear();
+ return true;
}
void ConfigLoaderHandler::addItem()
diff --git a/src/gui/kconfigloaderhandler_p.h b/src/gui/kconfigloaderhandler_p.h
index 297e5462..bc199e0e 100644
--- a/src/gui/kconfigloaderhandler_p.h
+++ b/src/gui/kconfigloaderhandler_p.h
@@ -17,8 +17,9 @@ public:
bool parse(QIODevice *input);
- void startElement(const QStringView localName, const QXmlStreamAttributes &attrs);
- void endElement(const QStringView localName);
+ bool startElement(const QStringRef &localName, const QXmlStreamAttributes &attrs);
+ bool endElement(const QStringRef &localName);
+ bool characters(const QStringRef &ch);
private:
void addItem();