aboutsummaryrefslogtreecommitdiff
path: root/common/xmlparser.cpp
diff options
context:
space:
mode:
authorVicent Marti2008-08-04 16:59:55 +0000
committerVicent Marti2008-08-04 16:59:55 +0000
commit85c36885f5bbf2d47276c7702f1b8ccbf22ecc34 (patch)
treedd3aeb61b4bcc37431b383c36f429d082f418965 /common/xmlparser.cpp
parent461e2f42149e3b1914b3c7b392d076c186c6d0a1 (diff)
downloadscummvm-rg350-85c36885f5bbf2d47276c7702f1b8ccbf22ecc34.tar.gz
scummvm-rg350-85c36885f5bbf2d47276c7702f1b8ccbf22ecc34.tar.bz2
scummvm-rg350-85c36885f5bbf2d47276c7702f1b8ccbf22ecc34.zip
Theme layout parsing. Work in progress.
svn-id: r33613
Diffstat (limited to 'common/xmlparser.cpp')
-rw-r--r--common/xmlparser.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/common/xmlparser.cpp b/common/xmlparser.cpp
index 5ea10f2278..526e6e6fb1 100644
--- a/common/xmlparser.cpp
+++ b/common/xmlparser.cpp
@@ -98,22 +98,23 @@ bool XMLParser::parseActiveKey(bool closed) {
ParserNode *key = _activeKey.top();
XMLKeyLayout *layout = (_activeKey.size() == 1) ? _XMLkeys : getParentNode(key)->layout;
- if (layout->children.contains(key->name) == false)
- return parserError("Unexpected key in the active scope: '%s'.", key->name.c_str());
-
- key->layout = layout->children[key->name];
+ if (layout->children.contains(key->name)) {
+ key->layout = layout->children[key->name];
- Common::StringMap localMap = key->values;
+ Common::StringMap localMap = key->values;
- for (Common::List<XMLKeyLayout::XMLKeyProperty>::const_iterator i = key->layout->properties.begin(); i != key->layout->properties.end(); ++i) {
- if (localMap.contains(i->name))
- localMap.erase(i->name);
- else if (i->required)
- return parserError("Missing required property '%s' inside key '%s'", i->name.c_str(), key->name.c_str());
- }
+ for (Common::List<XMLKeyLayout::XMLKeyProperty>::const_iterator i = key->layout->properties.begin(); i != key->layout->properties.end(); ++i) {
+ if (localMap.contains(i->name))
+ localMap.erase(i->name);
+ else if (i->required)
+ return parserError("Missing required property '%s' inside key '%s'", i->name.c_str(), key->name.c_str());
+ }
- if (key->layout->anyProps == false && localMap.empty() == false)
- return parserError("Unhandled property inside key '%s': '%s'", key->name.c_str(), localMap.begin()->_key.c_str());
+ if (key->layout->anyProps == false && localMap.empty() == false)
+ return parserError("Unhandled property inside key '%s': '%s'", key->name.c_str(), localMap.begin()->_key.c_str());
+ } else if (layout->anyKeys == false) {
+ return parserError("Unexpected key in the active scope: '%s'.", key->name.c_str());
+ }
// check if any of the parents must be ignored.
// if a parent is ignored, all children are too.