diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 21:58:34 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 21:58:34 +0100 |
commit | 4373ba6a600785db93b97afb5daa53dc14a17d19 (patch) | |
tree | aa3694106889bcefc36833390b93f2a782d0e7bb /src/core | |
parent | 15d1cfd2c5198be8e0105da269de3091568a7c6c (diff) |
added parse, link and include functions to Project
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/model/Project.cpp | 28 | ||||
-rw-r--r-- | src/core/model/Project.hpp | 72 |
2 files changed, 100 insertions, 0 deletions
diff --git a/src/core/model/Project.cpp b/src/core/model/Project.cpp index a298ffc..1452de2 100644 --- a/src/core/model/Project.cpp +++ b/src/core/model/Project.cpp @@ -17,6 +17,8 @@ */ #include <core/common/RttiBuilder.hpp> +#include <core/parser/ParserScope.hpp> +#include <core/parser/ParserContext.hpp> #include "Domain.hpp" #include "Document.hpp" @@ -33,6 +35,32 @@ Project::Project(Manager &mgr, Registry ®istry) { } +Rooted<Node> Project::parse(const std::string &path, const std::string mimetype, + const std::string rel, RttiSet &supportedTypes, + Logger &logger) +{ + ParserScope scope; + ParserContext context(this, scope, logger); + return resourceManager.link(registry, context, path, mimetype, rel, + supportedTypes); +} + +Rooted<Node> Project::link(ParserContext &ctx, const std::string &path, + const std::string mimetype, const std::string rel, + RttiSet &supportedTypes) +{ + return resourceManager.link(registry, ctx, path, mimetype, rel, + supportedTypes); +} + +Rooted<Node> Project::include(ParserContext &ctx, const std::string &path, + const std::string mimetype, const std::string rel, + RttiSet &supportedTypes) +{ + return resourceManager.include(registry, ctx, path, mimetype, rel, + supportedTypes); +} + bool Project::doValidate(Logger &logger) const { return continueValidation(documents, logger); diff --git a/src/core/model/Project.hpp b/src/core/model/Project.hpp index 2c50f49..4743454 100644 --- a/src/core/model/Project.hpp +++ b/src/core/model/Project.hpp @@ -91,6 +91,78 @@ public: Project(Manager &mgr, Registry ®istry); /** + * Parses a file with the given Logger in an empty ParserScope. This + * function is meant to be called by the top-level (e.g. a main function) + * and not by other parsers. These should use the link and include methods + * instead. + * + * @param path is the path of the file that should be parsed. + * @param mimetype is the mimetype of the resource that should be parsed + * (may be empty, in which case the mimetype is deduced from the file + * extension). + * @param rel is a "relation string" supplied by the user which specifies + * the relationship of the specified resource. May be empty, in which case + * the relation is deduced from the supported types and the types of the + * parser for the given mimetype. + * @param supportedTypes contains the types of the returned Node the caller + * can deal with. Note that only the types the parser claims to return are + * checked, not the actual result. + * @param logger is the logger that should be used + * @return the parsed node or nullptr if something goes wrong. + */ + Rooted<Node> parse(const std::string &path, const std::string mimetype, + const std::string rel, RttiSet &supportedTypes, + Logger &logger); + + /** + * Parses a file with ParserContext and an empty ParserScope. The parsed + * object graph of files that are parsed using the "link" function is + * cached (in contrast to the "include" function). + * + * @param ctx is the ParserContext that should be passed to the underlying + * parser. The scope in the ParserContext will be exchanged. + * @param path is the path of the file that should be parsed. + * @param mimetype is the mimetype of the resource that should be parsed + * (may be empty, in which case the mimetype is deduced from the file + * extension). + * @param rel is a "relation string" supplied by the user which specifies + * the relationship of the specified resource. May be empty, in which case + * the relation is deduced from the supported types and the types of the + * parser for the given mimetype. + * @param supportedTypes contains the types of the returned Node the caller + * can deal with. Note that only the types the parser claims to return are + * checked, not the actual result. + * @return the parsed node or nullptr if something goes wrong. + */ + Rooted<Node> link(ParserContext &ctx, const std::string &path, + const std::string mimetype, const std::string rel, + RttiSet &supportedTypes); + + /** + * Parses a file with ParserContext and the current ParserScope. In contrast + * to the "link" function, include() does not cache the parsed node (as it + * depends on the current ParserScope). + * + * @param ctx is the ParserContext that should be passed to the underlying + * parser. The scope in the ParserContext will be exchanged. + * @param path is the path of the file that should be parsed. + * @param mimetype is the mimetype of the resource that should be parsed + * (may be empty, in which case the mimetype is deduced from the file + * extension). + * @param rel is a "relation string" supplied by the user which specifies + * the relationship of the specified resource. May be empty, in which case + * the relation is deduced from the supported types and the types of the + * parser for the given mimetype. + * @param supportedTypes contains the types of the returned Node the caller + * can deal with. Note that only the types the parser claims to return are + * checked, not the actual result. + * @return the parsed node or nullptr if something goes wrong. + */ + Rooted<Node> include(ParserContext &ctx, const std::string &path, + const std::string mimetype, const std::string rel, + RttiSet &supportedTypes); + + /** * Returns a reference to the internal system typesystem. * * @return a reference to the system typesystem. |