from cgi import escape
import os
HEADER = """
]>
"""
FOOTER = """
"""
plugin_template='''
%(Maker)s
%(Copyright)s
%(Plugin Name)s
'''
def find_plugin(filename):
path = os.environ.get('LADSPA_PATH', '/usr/lib/ladspa').split(':')
for p in path:
maybe_file = os.path.join(p, filename)
if os.path.exists(maybe_file):
return maybe_file
raise IOError, "Didn't find %s on path %s" % (filename, path)
def split_vals(line):
try:
label, val = line.split(':', 1)
except ValueError:
# we don't handle port information for now.
return ()
val = val.strip('\'" ')
val = escape(val, 1)
return label, val
def parse_plugin(astr):
# icky quick hack
lines = astr.split('\n')
pairs = [split_vals(line) for line in lines]
pairs = [p for p in pairs if p]
info = dict(pairs)
return info
def parse_plugins(path):
info_str = os.popen('analyseplugin %s' % path).read()
plugin_strings = info_str.split('\n\n')
plugin_infos = [parse_plugin(s) for s in plugin_strings]
plugin_infos = [i for i in plugin_infos if i]
return plugin_infos
def make_rdf(parsed):
plugins_rdf = [HEADER]
# Sort by ID.
sortable = [(d['Plugin Unique ID'], d) for d in parsed]
parsed = [t[1] for t in sorted(sortable)]
for info in parsed:
plugin_template % info
plugins_rdf.extend([plugin_template % info for info in parsed])
plugins_rdf.append(FOOTER)
return '\n'.join(plugins_rdf)
if __name__ == '__main__':
where = find_plugin('caps.so') # XXX make it a parameter
parsed = parse_plugins(where)
print make_rdf(parsed)