summaryrefslogtreecommitdiff
path: root/src/core/model/Document.cpp
diff options
context:
space:
mode:
authorBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2015-01-08 21:30:31 +0100
committerBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2015-01-08 21:30:31 +0100
commit235cf24518ca40bec59b497a416d9831db12eaa3 (patch)
tree4892229aa435f81206480e256e71a7678dcbee22 /src/core/model/Document.cpp
parentb05499223916879e051d102e1b7e2fd080f46e7d (diff)
further extended example to include annotations (emphasized and strong). The DemoOutput for that is still missing, though. convenience build functions have also been implemented in Document.cpp.
Diffstat (limited to 'src/core/model/Document.cpp')
-rw-r--r--src/core/model/Document.cpp54
1 files changed, 52 insertions, 2 deletions
diff --git a/src/core/model/Document.cpp b/src/core/model/Document.cpp
index 073f728..c653fe3 100644
--- a/src/core/model/Document.cpp
+++ b/src/core/model/Document.cpp
@@ -100,7 +100,7 @@ static Rooted<StructuredClass> resolveDescriptor(
}
// Otherwise take the first valid result.
for (auto &r : resolved) {
- if(r->isa(typeOf<StructuredClass>())){
+ if (r->isa(typeOf<StructuredClass>())) {
return r.cast<StructuredClass>();
}
}
@@ -155,6 +155,9 @@ Rooted<StructuredEntity> StructuredEntity::buildEntity(
return {nullptr};
}
// append the new entity to the right field.
+ if (!parent->hasField(fieldName)) {
+ return {nullptr};
+ }
NodeVector<StructuredEntity> &field = parent->getField(fieldName);
field.push_back(entity);
@@ -178,13 +181,60 @@ Rooted<DocumentPrimitive> DocumentPrimitive::buildEntity(
return {nullptr};
}
// append the new entity to the right field.
+ if (!parent->hasField(fieldName)) {
+ return {nullptr};
+ }
NodeVector<StructuredEntity> &field = parent->getField(fieldName);
field.push_back(entity);
-
// and return it.
return entity;
}
+Rooted<AnnotationEntity::Anchor> AnnotationEntity::buildAnchor(
+ Handle<DocumentEntity> parent, std::string id, const std::string &fieldName)
+{
+ // If the parent is not set, we can not build the anchor.
+ if (parent == nullptr) {
+ return {nullptr};
+ }
+ // Then construct the Anchor itself
+ Rooted<Anchor> anchor{
+ new AnnotationEntity::Anchor(parent->getManager(), parent, id)};
+ // append the new entity to the right field.
+ if (!parent->hasField(fieldName)) {
+ return {nullptr};
+ }
+ NodeVector<StructuredEntity> &field = parent->getField(fieldName);
+ field.push_back(anchor);
+ // and return it.
+ return anchor;
+}
+
+Rooted<AnnotationEntity> AnnotationEntity::buildEntity(
+ Handle<Document> parent, std::vector<Handle<Domain>> domains,
+ const std::string &className, Handle<AnnotationEntity::Anchor> start,
+ Handle<AnnotationEntity::Anchor> end, Variant attributes, std::string name)
+{
+ // If the parent is not set, we can not build the AnnotationEntity.
+ if (parent == nullptr) {
+ return {nullptr};
+ }
+ // If we can not find the correct descriptor, we can not build the entity
+ // either.
+ Rooted<StructuredClass> descriptor = resolveDescriptor(domains, className);
+ if (descriptor == nullptr) {
+ return {nullptr};
+ }
+ // Then construct the AnnotationEntity itself
+ Rooted<AnnotationEntity> anno{
+ new AnnotationEntity(parent->getManager(), parent, descriptor,
+ attributes, start, end, name)};
+ // append the new entity to the document
+ parent->getAnnotations().push_back(anno);
+ // and return it.
+ return anno;
+}
+
/* Type registrations */
}