/*
Ousía
Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#ifndef _MODEL_TEST_DOMAIN_HPP_
#define _MODEL_TEST_DOMAIN_HPP_
#include
#include
namespace ousia {
/**
* This constructs the "book" domain for test purposes. The structure of the
* domain is fairly simple and can be seen from the construction itself.
*/
static Rooted constructBookDomain(Manager &mgr,
Handle sys,
Logger &logger)
{
// Start with the Domain itself.
Rooted domain{new Domain(mgr, sys, "book")};
// Set up the cardinalities we'll need.
Variant::cardinalityType single;
single.merge({1});
Variant::cardinalityType any;
any.merge(Range::typeRange());
// Set up the "book" node.
Rooted book{new StructuredClass(
mgr, "book", domain, single, {nullptr}, {nullptr}, false, true)};
// The structure field of it.
Rooted book_field{new FieldDescriptor(mgr, book)};
// From there on the "section".
Rooted section{
new StructuredClass(mgr, "section", domain, any)};
book_field->addChild(section);
// And the field of it.
Rooted section_field{new FieldDescriptor(mgr, section)};
// We also add the "paragraph", which is transparent.
Rooted paragraph{new StructuredClass(
mgr, "paragraph", domain, any, {nullptr}, {nullptr}, true)};
section_field->addChild(paragraph);
book_field->addChild(paragraph);
// And the field of it.
Rooted paragraph_field{
new FieldDescriptor(mgr, paragraph)};
// We append "subsection" to section.
Rooted subsection{
new StructuredClass(mgr, "subsection", domain, any)};
section_field->addChild(subsection);
// And the field of it.
Rooted subsection_field{
new FieldDescriptor(mgr, subsection)};
// and we add the paragraph to subsections fields
subsection_field->addChild(paragraph);
// Finally we add the "text" node, which is transparent as well.
Rooted text{new StructuredClass(
mgr, "text", domain, any, {nullptr}, {nullptr}, true)};
paragraph_field->addChild(text);
// ... and has a primitive field.
Rooted text_field{new FieldDescriptor(
mgr, text, domain->getTypesystems()[0]->getTypes()[0], "content",
false)};
return domain;
}
}
#endif /* _TEST_DOMAIN_HPP_ */