/* This file is part of Ingen. Copyright 2012-2016 David Robillard Ingen is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. Ingen 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 Affero General Public License for details. You should have received a copy of the GNU Affero General Public License along with Ingen. If not, see . */ #include "ingen/TurtleWriter.hpp" #include "ingen/URIMap.hpp" #include "lv2/atom/atom.h" namespace ingen { TurtleWriter::TurtleWriter(serd::World& world, URIMap& map, URIs& uris, const URI& uri) : AtomWriter(world, map, uris, *this) , _map(map) , _streamer(world, map.urid_map_feature()->urid_map, map.urid_unmap_feature()->urid_unmap) , _base(serd::make_uri("ingen:/")) // Make relative URIs like bundle paths , _env(_base) , _writer(world, serd::Syntax::Turtle, {}, _env, [&](const char* str, size_t len) { return text_sink(str, len); }) , _uri(uri) , _wrote_prefixes(false) { // Set namespace prefixes _env.set_prefix("atom", "http://lv2plug.in/ns/ext/atom#"); _env.set_prefix("doap", "http://usefulinc.com/ns/doap#"); _env.set_prefix("ingen", INGEN_NS); _env.set_prefix("lv2", "http://lv2plug.in/ns/lv2core#"); _env.set_prefix("midi", "http://lv2plug.in/ns/ext/midi#"); _env.set_prefix("owl", "http://www.w3.org/2002/07/owl#"); _env.set_prefix("patch", "http://lv2plug.in/ns/ext/patch#"); _env.set_prefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); _env.set_prefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#"); _env.set_prefix("xsd", "http://www.w3.org/2001/XMLSchema#"); } TurtleWriter::~TurtleWriter() { _writer.finish(); } bool TurtleWriter::write(const LV2_Atom* msg, int32_t) { if (!_wrote_prefixes) { // Write namespace prefixes once to reduce traffic _env.write_prefixes(_writer.sink()); _writer.finish(); _wrote_prefixes = true; } _streamer.write(_writer.sink(), *msg); _writer.finish(); return true; } } // namespace ingen