summaryrefslogtreecommitdiff
path: root/src/formats
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-02-15 23:23:17 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-02-15 23:23:17 +0100
commit1b033795a1780639c1c289524d2ef9ac3e36659d (patch)
tree469782de83d418d39e0bcce8c604739e67b7c6e8 /src/formats
parent40f33ed35691c5052beaa98ca89c0f22ceb12666 (diff)
Added OsmlParserTest
Diffstat (limited to 'src/formats')
-rw-r--r--src/formats/osml/OsmlParser.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/formats/osml/OsmlParser.cpp b/src/formats/osml/OsmlParser.cpp
index 87f4c00..519a2d8 100644
--- a/src/formats/osml/OsmlParser.cpp
+++ b/src/formats/osml/OsmlParser.cpp
@@ -64,13 +64,27 @@ public:
*/
void parse()
{
+ // Flag set to true if a "document" element needs to be created
+ bool needsDocument = true;
while (true) {
OsmlStreamParser::State state = parser.parse();
switch (state) {
- case OsmlStreamParser::State::COMMAND:
+ case OsmlStreamParser::State::COMMAND: {
+ // Implicitly create a "document" element if the first
+ // command is not any other top-level command
+ if (needsDocument) {
+ const std::string &cmd =
+ parser.getCommandName().asString();
+ if (cmd != "typesystem" && cmd != "document" &&
+ cmd != "domain") {
+ stack.command("document", Variant::mapType{});
+ }
+ needsDocument = false;
+ }
stack.command(parser.getCommandName(),
parser.getCommandArguments().asMap());
break;
+ }
case OsmlStreamParser::State::DATA:
stack.data(parser.getData());
break;