summaryrefslogtreecommitdiff
path: root/src/core/parser/stack/ImportIncludeHandler.cpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-02-15 21:32:54 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-02-15 21:32:54 +0100
commit8e5e08c4f293434585d2a88f7f331f8ce49b67b9 (patch)
treefa82a937b1ea80f45d7955938c333f68f8a0f3f6 /src/core/parser/stack/ImportIncludeHandler.cpp
parent2544749215bc2465bfeca431e271110ca86d8a83 (diff)
parent40f4666c43211d9071a827ad8a2524688e7f678f (diff)
Merge branch 'astoecke_parser_stack_new'
Conflicts: application/src/core/parser/stack/DocumentHandler.cpp application/src/core/parser/stack/DocumentHandler.hpp
Diffstat (limited to 'src/core/parser/stack/ImportIncludeHandler.cpp')
-rw-r--r--src/core/parser/stack/ImportIncludeHandler.cpp76
1 files changed, 31 insertions, 45 deletions
diff --git a/src/core/parser/stack/ImportIncludeHandler.cpp b/src/core/parser/stack/ImportIncludeHandler.cpp
index 94ee82d..d1ea97d 100644
--- a/src/core/parser/stack/ImportIncludeHandler.cpp
+++ b/src/core/parser/stack/ImportIncludeHandler.cpp
@@ -16,50 +16,22 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ImportIncludeHandler.hpp"
-
+#include <core/model/RootNode.hpp>
#include <core/parser/ParserScope.hpp>
+#include <core/parser/ParserContext.hpp>
-namespace ousia {
-
-/* ImportIncludeHandler */
-
-void ImportIncludeHandler::start(Variant::mapType &args)
-{
- rel = args["rel"].asString();
- type = args["type"].asString();
- src = args["src"].asString();
- srcInArgs = !src.empty();
-}
+#include "DomainHandler.hpp"
+#include "DocumentHandler.hpp"
+#include "ImportIncludeHandler.hpp"
+#include "State.hpp"
+#include "TypesystemHandler.hpp"
-void ImportIncludeHandler::data(const std::string &data, int field)
-{
- if (srcInArgs) {
- logger().error("\"src\" attribute has already been set");
- return;
- }
- if (field != 0) {
- logger().error("Command has only one field.");
- return;
- }
- src.append(data);
-}
+namespace ousia {
+namespace parser_stack {
/* ImportHandler */
-void ImportHandler::start(Variant::mapType &args)
-{
- ImportIncludeHandler::start(args);
-
- // Make sure imports are still possible
- if (scope().getFlag(ParserFlag::POST_HEAD)) {
- logger().error("Imports must be listed before other commands.",
- location());
- return;
- }
-}
-
-void ImportHandler::end()
+void ImportHandler::doHandle(const Variant &fieldData, Variant::mapType &args)
{
// Fetch the last node and check whether an import is valid at this
// position
@@ -75,8 +47,9 @@ void ImportHandler::end()
// Perform the actual import, register the imported node within the leaf
// node
- Rooted<Node> imported =
- context().import(src, type, rel, leafRootNode->getReferenceTypes());
+ Rooted<Node> imported = context().import(
+ fieldData.asString(), args["type"].asString(), args["rel"].asString(),
+ leafRootNode->getReferenceTypes());
if (imported != nullptr) {
leafRootNode->reference(imported);
}
@@ -84,13 +57,26 @@ void ImportHandler::end()
/* IncludeHandler */
-void IncludeHandler::start(Variant::mapType &args)
+void IncludeHandler::doHandle(const Variant &fieldData, Variant::mapType &args)
{
- ImportIncludeHandler::start(args);
+ context().include(fieldData.asString(), args["type"].asString(),
+ args["rel"].asString(), {&RttiTypes::Node});
}
-void IncludeHandler::end()
-{
- context().include(src, type, rel, {&RttiTypes::Node});
+namespace States {
+const State Import =
+ StateBuilder()
+ .parents({&Document, &Typesystem, &Domain})
+ .elementHandler(ImportHandler::create)
+ .arguments({Argument::String("rel", ""), Argument::String("type", ""),
+ Argument::String("src", "")});
+
+const State Include =
+ StateBuilder()
+ .parent(&All)
+ .elementHandler(IncludeHandler::create)
+ .arguments({Argument::String("rel", ""), Argument::String("type", ""),
+ Argument::String("src", "")});
+}
}
}