summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt22
-rw-r--r--src/formats/osxml/OsxmlEventParser.cpp6
-rw-r--r--src/formats/osxml/OsxmlEventParser.hpp11
-rw-r--r--src/formats/osxml/OsxmlParser.cpp13
-rw-r--r--test/formats/osxml/OsxmlEventParserTest.cpp41
5 files changed, 48 insertions, 45 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6e021fd..2a09b54 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -225,7 +225,7 @@ TARGET_LINK_LIBRARIES(ousia_osml
ADD_LIBRARY(ousia_osxml
src/formats/osxml/OsxmlAttributeLocator
src/formats/osxml/OsxmlEventParser
-# src/formats/osxml/OsxmlParser
+ src/formats/osxml/OsxmlParser
)
TARGET_LINK_LIBRARIES(ousia_osxml
@@ -397,17 +397,17 @@ IF(TEST)
ousia_filesystem
)
-# ADD_EXECUTABLE(ousia_test_osxml
-# test/formats/osxml/OsxmlEventParserTest
+ ADD_EXECUTABLE(ousia_test_osxml
+ test/formats/osxml/OsxmlEventParserTest
# test/formats/osxml/OsxmlParserTest
-# )
+ )
-# TARGET_LINK_LIBRARIES(ousia_test_osxml
-# ${GTEST_LIBRARIES}
-# ousia_core
-# ousia_osxml
-# ousia_filesystem
-# )
+ TARGET_LINK_LIBRARIES(ousia_test_osxml
+ ${GTEST_LIBRARIES}
+ ousia_core
+ ousia_osxml
+ ousia_filesystem
+ )
ADD_EXECUTABLE(ousia_test_xml
test/plugins/xml/XmlOutputTest
@@ -426,7 +426,7 @@ IF(TEST)
ADD_TEST(ousia_test_html ousia_test_html)
# ADD_TEST(ousia_test_mozjs ousia_test_mozjs)
ADD_TEST(ousia_test_osml ousia_test_osml)
-# ADD_TEST(ousia_test_osxml ousia_test_osxml)
+ ADD_TEST(ousia_test_osxml ousia_test_osxml)
ADD_TEST(ousia_test_xml ousia_test_xml)
ENDIF()
diff --git a/src/formats/osxml/OsxmlEventParser.cpp b/src/formats/osxml/OsxmlEventParser.cpp
index 855f80d..83c16f0 100644
--- a/src/formats/osxml/OsxmlEventParser.cpp
+++ b/src/formats/osxml/OsxmlEventParser.cpp
@@ -323,7 +323,7 @@ static void xmlStartElementHandler(void *ref, const XML_Char *name,
// Just issue a "commandStart" event in any other case
Variant nameVar = Variant::fromString(nameStr);
nameVar.setLocation(nameLoc);
- parser->getEvents().command(nameVar, args);
+ parser->getEvents().commandStart(nameVar, args);
}
}
@@ -358,8 +358,8 @@ static void xmlEndElementHandler(void *ref, const XML_Char *name)
return;
}
- // Issue the "fieldEnd" event
- parser->getEvents().fieldEnd();
+ // Issue the "rangeEnd" event
+ parser->getEvents().rangeEnd();
}
static void xmlCharacterDataHandler(void *ref, const XML_Char *s, int len)
diff --git a/src/formats/osxml/OsxmlEventParser.hpp b/src/formats/osxml/OsxmlEventParser.hpp
index e3fd5d4..7a8c96d 100644
--- a/src/formats/osxml/OsxmlEventParser.hpp
+++ b/src/formats/osxml/OsxmlEventParser.hpp
@@ -59,7 +59,8 @@ public:
* @param args is a map containing the arguments that were given to the
* command.
*/
- virtual void command(const Variant &name, const Variant::mapType &args) = 0;
+ virtual void commandStart(const Variant &name,
+ const Variant::mapType &args) = 0;
/**
* Called whenever an annotation starts. Note that this implicitly always
@@ -88,13 +89,9 @@ public:
const Variant &elementName) = 0;
/**
- * Called whenever the default field which was implicitly started by
- * commandStart or annotationStart ends. Note that this does not end the
- * range of an annotation, but the default field of the annotation. To
- * signal the end of the annotation this, the annotationEnd method will be
- * invoked.
+ * Called whenever the command or annotation tags end.
*/
- virtual void fieldEnd() = 0;
+ virtual void rangeEnd() = 0;
/**
* Called whenever string data is found.
diff --git a/src/formats/osxml/OsxmlParser.cpp b/src/formats/osxml/OsxmlParser.cpp
index c216855..924d11b 100644
--- a/src/formats/osxml/OsxmlParser.cpp
+++ b/src/formats/osxml/OsxmlParser.cpp
@@ -16,6 +16,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <core/common/Variant.hpp>
+#include <core/common/CharReader.hpp>
#include <core/parser/stack/GenericParserStates.hpp>
#include <core/parser/stack/Stack.hpp>
#include <core/parser/ParserContext.hpp>
@@ -63,17 +65,16 @@ public:
*/
void parse() { parser.parse(); }
- void command(const Variant &name, const Variant::mapType &args) override
+ void commandStart(const Variant &name,
+ const Variant::mapType &args) override
{
- stack.command(name, args);
- stack.fieldStart(true);
+ stack.commandStart(name, args, true);
}
void annotationStart(const Variant &name,
const Variant::mapType &args) override
{
- stack.annotationStart(name, args);
- stack.fieldStart(true);
+ stack.annotationStart(name, args, true);
}
void annotationEnd(const Variant &className,
@@ -82,7 +83,7 @@ public:
stack.annotationEnd(className, elementName);
}
- void fieldEnd() override { stack.fieldEnd(); }
+ void rangeEnd() override { stack.rangeEnd(); }
void data(const Variant &data) override { stack.data(data); }
};
diff --git a/test/formats/osxml/OsxmlEventParserTest.cpp b/test/formats/osxml/OsxmlEventParserTest.cpp
index 6942166..b24a43d 100644
--- a/test/formats/osxml/OsxmlEventParserTest.cpp
+++ b/test/formats/osxml/OsxmlEventParserTest.cpp
@@ -32,10 +32,10 @@ static TerminalLogger logger(std::cerr, true);
namespace {
enum class OsxmlEvent {
- COMMAND,
+ COMMAND_START,
ANNOTATION_START,
ANNOTATION_END,
- FIELD_END,
+ RANGE_END,
DATA
};
@@ -43,9 +43,10 @@ class TestOsxmlEventListener : public OsxmlEvents {
public:
std::vector<std::pair<OsxmlEvent, Variant>> events;
- void command(const Variant &name, const Variant::mapType &args) override
+ void commandStart(const Variant &name,
+ const Variant::mapType &args) override
{
- events.emplace_back(OsxmlEvent::COMMAND,
+ events.emplace_back(OsxmlEvent::COMMAND_START,
Variant::arrayType{name, args});
}
@@ -63,9 +64,9 @@ public:
Variant::arrayType{className, elementName});
}
- void fieldEnd() override
+ void rangeEnd() override
{
- events.emplace_back(OsxmlEvent::FIELD_END, Variant::arrayType{});
+ events.emplace_back(OsxmlEvent::RANGE_END, Variant::arrayType{});
}
void data(const Variant &data) override
@@ -92,11 +93,11 @@ TEST(OsxmlEventParser, simpleCommandWithArgs)
// 0 1 2 3
std::vector<std::pair<OsxmlEvent, Variant>> expectedEvents{
- {OsxmlEvent::COMMAND,
+ {OsxmlEvent::COMMAND_START,
Variant::arrayType{
"a", Variant::mapType{
{"name", "test"}, {"a", 1}, {"b", 2}, {"c", "blub"}}}},
- {OsxmlEvent::FIELD_END, Variant::arrayType{}}};
+ {OsxmlEvent::RANGE_END, Variant::arrayType{}}};
auto events = parseXml(testString);
ASSERT_EQ(expectedEvents, events);
@@ -132,10 +133,12 @@ TEST(OsxmlEventParser, magicTopLevelTag)
const char *testString = "<ousia><a/><b/></ousia>";
std::vector<std::pair<OsxmlEvent, Variant>> expectedEvents{
- {OsxmlEvent::COMMAND, Variant::arrayType{{"a", Variant::mapType{}}}},
- {OsxmlEvent::FIELD_END, Variant::arrayType{}},
- {OsxmlEvent::COMMAND, Variant::arrayType{{"b", Variant::mapType{}}}},
- {OsxmlEvent::FIELD_END, Variant::arrayType{}}};
+ {OsxmlEvent::COMMAND_START,
+ Variant::arrayType{{"a", Variant::mapType{}}}},
+ {OsxmlEvent::RANGE_END, Variant::arrayType{}},
+ {OsxmlEvent::COMMAND_START,
+ Variant::arrayType{{"b", Variant::mapType{}}}},
+ {OsxmlEvent::RANGE_END, Variant::arrayType{}}};
auto events = parseXml(testString);
ASSERT_EQ(expectedEvents, events);
@@ -146,11 +149,12 @@ TEST(OsxmlEventParser, magicTopLevelTagInside)
const char *testString = "<a><ousia/></a>";
std::vector<std::pair<OsxmlEvent, Variant>> expectedEvents{
- {OsxmlEvent::COMMAND, Variant::arrayType{{"a", Variant::mapType{}}}},
- {OsxmlEvent::COMMAND,
+ {OsxmlEvent::COMMAND_START,
+ Variant::arrayType{{"a", Variant::mapType{}}}},
+ {OsxmlEvent::COMMAND_START,
Variant::arrayType{{"ousia", Variant::mapType{}}}},
- {OsxmlEvent::FIELD_END, Variant::arrayType{}},
- {OsxmlEvent::FIELD_END, Variant::arrayType{}}};
+ {OsxmlEvent::RANGE_END, Variant::arrayType{}},
+ {OsxmlEvent::RANGE_END, Variant::arrayType{}}};
auto events = parseXml(testString);
ASSERT_EQ(expectedEvents, events);
@@ -163,9 +167,10 @@ TEST(OsxmlEventParser, commandWithData)
// 0 1 2
std::vector<std::pair<OsxmlEvent, Variant>> expectedEvents{
- {OsxmlEvent::COMMAND, Variant::arrayType{"a", Variant::mapType{}}},
+ {OsxmlEvent::COMMAND_START,
+ Variant::arrayType{"a", Variant::mapType{}}},
{OsxmlEvent::DATA, Variant::arrayType{" hello \n world "}},
- {OsxmlEvent::FIELD_END, Variant::arrayType{}}};
+ {OsxmlEvent::RANGE_END, Variant::arrayType{}}};
auto events = parseXml(testString);
ASSERT_EQ(expectedEvents, events);