2 # vi:si:et:sw=4:sts=4:ts=4
5 examine all plugins and elements and output xml documentation for them
6 used as part of the plugin documentation build
18 ELEMENT_TEMPLATE = """<element>
20 <longname>%(longname)s</longname>
21 <class>%(class)s</class>
22 <description>%(description)s</description>
23 <author>%(author)s</author>
26 PLUGIN_TEMPLATE = """<plugin>
28 <description>%(description)s</description>
29 <filename>%(filename)s</filename>
30 <basename>%(basename)s</basename>
31 <version>%(version)s</version>
32 <license>%(license)s</license>
33 <source>%(source)s</source>
34 <package>%(package)s</package>
35 <origin>%(origin)s</origin>
45 line = "&".join(line.split("&"))
46 line = "<".join(line.split("<"))
47 line = ">".join(line.split(">"))
50 def get_offset(indent):
51 return " " * INDENT_SIZE * indent
53 def output_element_factory(elf, indent=0):
54 print "ELEMENT", elf.get_name()
56 'name': xmlencode(elf.get_name()),
57 'longname': xmlencode(elf.get_longname()),
58 'class': xmlencode(elf.get_klass()),
59 'description': xmlencode(elf.get_description()),
60 'author': xmlencode(elf.get_author()),
62 block = ELEMENT_TEMPLATE % d
64 offset = get_offset(indent)
65 return offset + ("\n" + offset).join(block.split("\n"))
67 def output_plugin(plugin, indent=0):
68 print "PLUGIN", plugin.get_name()
69 version = plugin.get_version()
72 gst.debug('getting features for plugin %s' % plugin.get_name())
73 registry = gst.registry_get_default()
74 features = registry.get_feature_list_by_plugin(plugin.get_name())
75 gst.debug('plugin %s has %d features' % (plugin.get_name(), len(features)))
76 for feature in features:
77 if isinstance(feature, gst.ElementFactory):
78 elements[feature.get_name()] = feature
79 #gst.debug("got features")
82 keys = elements.keys()
85 feature = elements[name]
86 elementsoutput.append(output_element_factory(feature, indent + 2))
88 filename = plugin.get_filename()
91 basename = os.path.basename(basename)
93 'name': xmlencode(plugin.get_name()),
94 'description': xmlencode(plugin.get_description()),
98 'license': xmlencode(plugin.get_license()),
99 'source': xmlencode(plugin.get_source()),
100 'package': xmlencode(plugin.get_package()),
101 'origin': xmlencode(plugin.get_origin()),
102 'elements': "\n".join(elementsoutput),
104 block = PLUGIN_TEMPLATE % d
106 offset = get_offset(indent)
107 return offset + ("\n" + offset).join(block.split("\n"))
110 if len(sys.argv) == 1:
111 sys.stderr.write("Please specify a source module to inspect")
115 if len(sys.argv) > 2:
116 os.chdir(sys.argv[2])
118 registry = gst.registry_get_default()
119 all = registry.get_plugin_list()
121 gst.debug("inspecting plugin %s from source %s" % (
122 plugin.get_name(), plugin.get_source()))
123 # this skips gstcoreelements, with bin and pipeline
124 if plugin.get_filename() is None:
126 if plugin.get_source() != source:
129 filename = "plugin-%s.xml" % plugin.get_name()
130 handle = open(filename, "w")
131 handle.write(output_plugin(plugin))