From 40bf717d3ba7974d95414bf8c8cf1abe34de288d Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 4 Jul 2008 23:51:23 +0000 Subject: [PATCH] closedKeyCallback on XMLParser (as asked by Kenny) svn-id: r32909 --- common/xmlparser.cpp | 5 +++++ common/xmlparser.h | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/common/xmlparser.cpp b/common/xmlparser.cpp index d5c8535932b..d0c89a9d3eb 100644 --- a/common/xmlparser.cpp +++ b/common/xmlparser.cpp @@ -194,6 +194,11 @@ bool XMLParser::parse() { case kParserNeedPropertyName: if (activeClosure) { + if (!closedKeyCallback(_activeKey.top()->name)) { + parserError("Missing data when closing key '%s'.", _activeKey.top()->name.c_str()); + break; + } + activeClosure = false; delete _activeKey.pop(); diff --git a/common/xmlparser.h b/common/xmlparser.h index 3738b69b7bf..4c776964829 100644 --- a/common/xmlparser.h +++ b/common/xmlparser.h @@ -203,6 +203,20 @@ protected: return false; } + /** + * The closed key callback function must be overloaded by inheriting classes to + * implement parser-specific functions. + * + * The closedKeyCallback is issued once a key has been finished parsing, to let + * the parser verify that all the required subkeys, etc, were included. + * + * Returns true if the key was properly closed, false otherwise. + * By default, all keys are properly closed. + */ + virtual bool closedKeyCallback(Common::String keyName) { + return true; + } + /** * Parses the value of a given key. There's no reason to overload this. */