diff options
-rw-r--r-- | src/core/parser/stack/Stack.cpp | 9 | ||||
-rw-r--r-- | test/formats/osml/OsmlParserTest.cpp | 13 | ||||
-rw-r--r-- | testdata/osmlparser/undefined_annotation.osml | 13 |
3 files changed, 34 insertions, 1 deletions
diff --git a/src/core/parser/stack/Stack.cpp b/src/core/parser/stack/Stack.cpp index 436d3a5..90735df 100644 --- a/src/core/parser/stack/Stack.cpp +++ b/src/core/parser/stack/Stack.cpp @@ -869,8 +869,15 @@ void StackImpl::handleAnnotationStartEnd(const Variant &name, // Call the startAnnotation method of the newly created handler, store the // valid flag HandlerInfo &info = currentInfo(); - info.valid = handler->startAnnotation(args); + info.valid = false; + try { + info.valid = handler->startAnnotation(args); + } catch (LoggableException ex) { + logger().log(ex); + } info.range = range; + + // End the handler directly if this is an annotation end if (type == HandlerType::ANNOTATION_END) { endCurrentHandler(); } diff --git a/test/formats/osml/OsmlParserTest.cpp b/test/formats/osml/OsmlParserTest.cpp index 78ddf17..8dc0035 100644 --- a/test/formats/osml/OsmlParserTest.cpp +++ b/test/formats/osml/OsmlParserTest.cpp @@ -212,6 +212,19 @@ TEST(OsmlParser, simpleAnnotation) ASSERT_TRUE(node->isa(&RttiTypes::Document)); } +TEST(OsmlParser, undefinedAnnotation) +{ + OsmlStandaloneEnvironment env(logger); + logger.reset(); + + Rooted<Node> node = + env.parse("undefined_annotation.osml", "", "", RttiSet{&RttiTypes::Node}); + ASSERT_TRUE(logger.hasError()); + + ASSERT_TRUE(node != nullptr); + ASSERT_TRUE(node->isa(&RttiTypes::Document)); +} + TEST(OsmlParser, overlappingAnnotations) { OsmlStandaloneEnvironment env(logger); diff --git a/testdata/osmlparser/undefined_annotation.osml b/testdata/osmlparser/undefined_annotation.osml new file mode 100644 index 0000000..98d4dde --- /dev/null +++ b/testdata/osmlparser/undefined_annotation.osml @@ -0,0 +1,13 @@ +\document + +\ontology#test + \struct#book[root=true] + \field + \childRef[ref=text] + \struct#text[transparent=true] + \primitive[type=string] +% \annotation#emph + +\begin{book} + Test <\emph#em1 Aufklärung ist der <\emph#em2 Ausgang des\emph#em1> Menschen aus seiner selbstverschuldeten\emph#em2> Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen. Selbstverschuldet ist diese Unmündigkeit, wenn die Ursache derselben nicht am Mangel des Verstandes, sondern der Entschließung und des Mutes liegt, sich seiner ohne Leitung eines andern zu bedienen. Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung. +\end{book} |