aboutsummaryrefslogtreecommitdiff
path: root/src/kconfig_compiler/KConfigXmlParser.cpp
diff options
context:
space:
mode:
authorMéven Car <meven29@gmail.com>2020-03-05 10:02:46 +0100
committerMéven Car <meven.car@enioka.com>2020-03-08 19:02:19 +0100
commitec207330d5bd61799a47092bf555a523ab000f93 (patch)
tree1d81fd6d70ff14dcad535cc79c8d40c641a1c676 /src/kconfig_compiler/KConfigXmlParser.cpp
parenta38f3d91d9dc6717010f01893ae26c8015b6bb05 (diff)
downloadkconfig-ec207330d5bd61799a47092bf555a523ab000f93.tar.gz
kconfig-ec207330d5bd61799a47092bf555a523ab000f93.tar.bz2
KconfigXT: Add a value attribute to Enum field choices
Summary: Allow to write choices such as : ``` <choices> <choice name="enum_name" value="I can't containt (anything)"></choice> <choice name="normal_choice"></choice> </choices> ``` Test Plan: ctest Reviewers: ervin, bport, crossi, #frameworks Reviewed By: ervin Subscribers: ngraham, davidre, kde-frameworks-devel Tags: #frameworks Differential Revision: https://phabricator.kde.org/D27463
Diffstat (limited to 'src/kconfig_compiler/KConfigXmlParser.cpp')
-rw-r--r--src/kconfig_compiler/KConfigXmlParser.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/kconfig_compiler/KConfigXmlParser.cpp b/src/kconfig_compiler/KConfigXmlParser.cpp
index 2f31beb9..045018de 100644
--- a/src/kconfig_compiler/KConfigXmlParser.cpp
+++ b/src/kconfig_compiler/KConfigXmlParser.cpp
@@ -176,6 +176,7 @@ void KConfigXmlParser::readParameterFromEntry(CfgEntry &readEntry, const QDomEle
bool KConfigXmlParser::hasDefaultCode(CfgEntry &readEntry, const QDomElement &element)
{
+ Q_UNUSED(readEntry)
for (QDomElement e = element.firstChildElement(); !e.isNull(); e = e.nextSiblingElement()) {
if (e.attribute(QStringLiteral("param")).isEmpty()) {
if (e.attribute(QStringLiteral("code")) == QLatin1String("true")) {
@@ -186,10 +187,11 @@ bool KConfigXmlParser::hasDefaultCode(CfgEntry &readEntry, const QDomElement &el
return false;
}
-
void KConfigXmlParser::readChoicesFromEntry(CfgEntry &readEntry, const QDomElement &e)
{
QList<CfgEntry::Choice> chlist;
+ const auto choiceNameRegex = QRegularExpression(QStringLiteral("\\w+"));
+
for (QDomElement e2 = e.firstChildElement(); !e2.isNull(); e2 = e2.nextSiblingElement()) {
if (e2.tagName() != QLatin1String("choice")) {
continue;
@@ -198,7 +200,10 @@ void KConfigXmlParser::readChoicesFromEntry(CfgEntry &readEntry, const QDomEleme
choice.name = e2.attribute(QStringLiteral("name"));
if (choice.name.isEmpty()) {
std::cerr << "Tag <choice> requires attribute 'name'." << std::endl;
+ } else if (!choiceNameRegex.match(choice.name).hasMatch()) {
+ std::cerr << "Tag <choice> attribute 'name' must be compatible with Enum naming. name was '" << qPrintable(choice.name) << "'. You can use attribute 'value' to pass any string as the choice value." << std::endl;
}
+ choice.val = e2.attribute(QStringLiteral("value"));
for (QDomElement e3 = e2.firstChildElement(); !e3.isNull(); e3 = e3.nextSiblingElement()) {
if (e3.tagName() == QLatin1String("label")) {
choice.label = e3.text();