diff options
author | David Robillard <d@drobilla.net> | 2012-08-12 23:42:17 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-08-12 23:42:17 +0000 |
commit | efe8e2311ee2fed881f95cc1e72825906d21c7c1 (patch) | |
tree | 371c03610f691f0b97137b9e5b2f756b21fc5583 /src/serialisation | |
parent | e63caf72f320ab683de6378ff6f2944890054cbf (diff) | |
download | ingen-efe8e2311ee2fed881f95cc1e72825906d21c7c1.tar.gz ingen-efe8e2311ee2fed881f95cc1e72825906d21c7c1.tar.bz2 ingen-efe8e2311ee2fed881f95cc1e72825906d21c7c1.zip |
Use ingen:root as the path for the root patch, opening up path space for engine/driver/etc.
Strict conversion between Path and URI (Path no longer is-a URI).
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4672 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/serialisation')
-rw-r--r-- | src/serialisation/Parser.cpp | 40 | ||||
-rw-r--r-- | src/serialisation/Serialiser.cpp | 4 |
2 files changed, 29 insertions, 15 deletions
diff --git a/src/serialisation/Parser.cpp b/src/serialisation/Parser.cpp index 8407429f..f5569460 100644 --- a/src/serialisation/Parser.cpp +++ b/src/serialisation/Parser.cpp @@ -279,7 +279,7 @@ parse_node(Ingen::World* world, Resource::Properties props = get_properties(world, model, subject); props.insert(make_pair(uris.rdf_type, uris.forge.alloc_uri(uris.ingen_Node.str()))); - target->put(path, props); + target->put(GraphObject::path_to_uri(path), props); } return path; } @@ -349,12 +349,13 @@ parse_patch(Ingen::World* world, // Create patch Path patch_path(patch_path_str); Resource::Properties props = get_properties(world, model, subject_node); - target->put(patch_path, props); + target->put(GraphObject::path_to_uri(patch_path), props); // For each node in this patch for (Sord::Iter n = model.find(subject_node, ingen_node, nil); !n.end(); ++n) { Sord::Node node = n.get_object(); - const Path node_path = patch_path.child(get_basename(node.to_string())); + const Path node_path = patch_path.child( + Raul::Symbol(get_basename(node.to_string()))); // Parse and create node parse_node(world, target, model, node, node_path, @@ -373,7 +374,8 @@ parse_patch(Ingen::World* world, } // Create port and/or set all port properties - target->put(port_record.first, port_record.second); + target->put(GraphObject::path_to_uri(port_record.first), + port_record.second); } } @@ -397,7 +399,8 @@ parse_patch(Ingen::World* world, // Create ports in order by index for (PortRecords::const_iterator i = ports.begin(); i != ports.end(); ++i) { - target->put(i->second.first, i->second.second); + target->put(GraphObject::path_to_uri(i->second.first), + i->second.second); } parse_edges(world, target, model, subject_node, patch_path); @@ -429,10 +432,19 @@ parse_edge(Ingen::World* world, return false; } - const Path tail_path( - parent.child(relative_uri(base_uri, t.get_object().to_string(), false))); - const Path head_path( - parent.child(relative_uri(base_uri, h.get_object().to_string(), false))); + const std::string tail_str = relative_uri( + base_uri, t.get_object().to_string(), true); + if (!Path::is_valid(tail_str)) { + LOG(error) << "Edge tail has invalid URI" << endl; + return false; + } + + const std::string head_str = relative_uri( + base_uri, h.get_object().to_string(), true); + if (!Path::is_valid(head_str)) { + LOG(error) << "Edge head has invalid URI" << endl; + return false; + } if (!(++t).end()) { LOG(error) << "Edge has multiple tails" << endl; @@ -442,7 +454,7 @@ parse_edge(Ingen::World* world, return false; } - target->connect(tail_path, head_path); + target->connect(Path(tail_str), Path(head_str)); return true; } @@ -539,7 +551,8 @@ parse(Ingen::World* world, ret = parse_node(world, target, model, s, path, data); } else if (types.find(in_port_class) != types.end() || types.find(out_port_class) != types.end()) { - parse_properties(world, target, model, s, path, data); + parse_properties( + world, target, model, s, GraphObject::path_to_uri(path), data); ret = path; } else if (types.find(edge_class) != types.end()) { Path parent_path(parent ? parent.get() : Path("/")); @@ -602,7 +615,7 @@ Parser::parse_file(Ingen::World* world, LOG(Raul::info)(Raul::fmt("Parsing %1%\n") % path); if (parent) - LOG(Raul::info)(Raul::fmt("Parent: %1%\n") % *parent); + LOG(Raul::info)(Raul::fmt("Parent: %1%\n") % parent->c_str()); if (symbol) LOG(Raul::info)(Raul::fmt("Symbol: %1%\n") % symbol->c_str()); @@ -611,7 +624,8 @@ Parser::parse_file(Ingen::World* world, = parse(world, target, model, path, subject, parent, symbol, data); if (parsed_path) { - target->set_property(*parsed_path, "http://drobilla.net/ns/ingen#document", + target->set_property(GraphObject::path_to_uri(*parsed_path), + "http://drobilla.net/ns/ingen#document", world->forge().alloc_uri(uri)); } else { LOG(Raul::warn)("Document URI lost\n"); diff --git a/src/serialisation/Serialiser.cpp b/src/serialisation/Serialiser.cpp index 9e01eaf7..bd7dfed5 100644 --- a/src/serialisation/Serialiser.cpp +++ b/src/serialisation/Serialiser.cpp @@ -277,7 +277,7 @@ Serialiser::Impl::path_rdf_node(const Path& path) assert(path == _root_path || path.is_child_of(_root_path)); const Path rel_path(path.relative_to_base(_root_path)); return Sord::URI(_model->world(), - rel_path.chop_scheme().substr(1).c_str(), + rel_path.substr(1).c_str(), _base_uri); } @@ -365,7 +365,7 @@ Serialiser::Impl::serialise_patch(SharedPtr<const GraphObject> patch, SerdURI base_uri; serd_uri_parse((const uint8_t*)_base_uri.c_str(), &base_uri); - const string sub_bundle_path = subpatch->path().chop_start("/") + ".ingen"; + const string sub_bundle_path = subpatch->path().substr(1) + ".ingen"; SerdURI subpatch_uri; SerdNode subpatch_node = serd_node_new_uri_from_string( |