tibia/templates/lv2/tibia-index.js
2024-01-05 11:09:30 +01:00

66 lines
2.0 KiB
JavaScript

var path = require("path");
var sep = path.sep;
module.exports = function (data, api) {
data.tibia.lv2 = {
prefixes: [
{ id: "doap", uri: "http://usefulinc.com/ns/doap#" },
{ id: "lv2", uri: "http://lv2plug.in/ns/lv2core#" },
{ id: "rdf", uri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#" },
{ id: "rdfs", uri: "http://www.w3.org/2000/01/rdf-schema#" }
],
ports: [],
ttlURI: function (uri) {
return uri.charAt(0) == "@" ? uri.substring(1) : "<" + uri + ">";
},
expandURI: function (uri) {
if (uri.charAt(0) != "@")
return uri;
var i = uri.indexOf(":");
var p = uri.substring(1, uri.indexOf(":"));
return data.tibia.lv2.prefixes.find(x => x.id == p).uri + uri.substring(i + 1);
}
};
for (var id in data.lv2.prefixes)
data.tibia.lv2.prefixes.push({ id: id, uri: data.lv2.prefixes[id] });
var symbols = {};
function getSymbol(name) {
name = name.toLowerCase().replace(/[^0-9a-z]/g, "_");
var n = name;
var i = 1;
while (n in symbols) {
n = name + i;
i++;
}
return n;
}
for (var i = 0; i < data.product.parameters.length; i++) {
var p = data.product.parameters[i];
var e = { type: "control", direction: p.direction, name: p.name, defaultValue: p.defaultValue };
e.symbol = getSymbol(p.shortName);
data.tibia.lv2.ports.push(e);
}
var audioBuses = data.product.buses.filter(x => x.type == "audio");
for (var i = 0; i < audioBuses.length; i++) {
var b = audioBuses[i];
for (var j = 0; j < b.channels; j++) {
var e = { type: "audio", direction: b.direction, name: b.name };
e.symbol = getSymbol(b.name);
data.tibia.lv2.ports.push(e);
}
}
data.tibia.lv2.ports.sort((a, b) => a.type != b.type ? (a.type == "audio" ? -1 : 1) : (a.direction != b.direction ? (a.direction == "input" ? -1 : 1) : 0));
api.generateFileFromTemplateFile(`data${sep}manifest.ttl`, `data${sep}manifest.ttl`, data);
api.copyFile(`src${sep}lv2.c`, `src${sep}lv2.c`);
api.generateFileFromTemplateFile(`src${sep}data.h`, `src${sep}data.h`, data);
api.copyFileIfNotExists(`src${sep}plugin.h`, `src${sep}plugin.h`);
};