Hey @Baggypants!
What about using a template engine for generating the TTL files, like this:
tornado.template — Flexible output generation — Tornado 6.4 documentation
I’m working on it …
I’ve a modified version of your converter templates:
José Fernando Moyano Domínguez / preset2lv2 · GitLab
manifest.template:
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
@prefix pset: <http://lv2plug.in/ns/ext/presets#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix state: <http://lv2plug.in/ns/ext/state#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<{{plugin_name}}_bank_{{bank_name}}> a pset:bank ;
lv2:appliesTo <{{plugin_url}}> ;
rdfs:label "{{bank_name}}" .
{% for preset in presets %}
<{{preset['name']}}.ttl>
a pset:Preset ;
pset:bank <{{plugin_name}}_bank_{{bank_name}}> ;
rdfs:seeAlso <{{preset['name']}}.ttl> ;
lv2:appliesTo <{{plugin_url}}> .
{% end %}
preset.template:
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
@prefix pset: <http://lv2plug.in/ns/ext/presets#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix state: <http://lv2plug.in/ns/ext/state#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<{{ preset['name'] }}.ttl>
a pset:Preset ;
lv2:appliesTo <{{ plugin_url }}> ;
rdfs:label "{{ preset['name'] }}" ;
{% set i = 1 %}
lv2:port{% for k in preset['ports'] %} [
lv2:symbol "{{ k }}" ;
pset:value {{ preset['ports'][k] }}
] {{ (i<len(ports)?";":".") }}{% i += 1 %}{% end %}
I didn’t modified the converter itself., but the generating code should create a data structure like this:
{
'plugin_name': "synthv1",
'plugin_url': "http://synthv1.sourceforge.net/lv2",
'bank_name': "supercool leads",
'presets': [
{
'name': "lead 1",
'ports': {
'param1': value1,
'param2': value2,
'param3': value3,
...
'paramN': valueN
}
}, {
'name': "lead 2",
'ports': {
'param1': value1,
'param2': value2,
'param3': value3,
...
'paramN': valueN
}
}, {
'name': "lead 3",
'ports': {
'param1': value1,
'param2': value2,
'param3': value3,
...
'paramN': valueN
}
}, {
...
}, {
'name': "lead M",
'ports': {
'param1': value1,
'param2': value2,
'param3': value3,
...
'paramN': valueN
}
}
]
}
And call the template parser using this data. Something like:
form tornado import template
#Generate data structure ...
data = ...
loader = template.Loader("./")
manifest_ttl = loader.load("manifest.template").generate(*data))
preset_template = loader.load("preset.template")
presets_ttl = {}
for p in data['presets']:
presets_ttl[p] = preset_template.generate(plugin_url = data['plugin_url'], *p)
Regards,