/* 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. Cardinality single; single.merge({1}); // 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, AnyCardinality)}; 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, AnyCardinality, {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, AnyCardinality)}; 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, AnyCardinality, {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_ */