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)