#!/usr/bin/env python from xml.sax.saxutils import escape, quoteattr from emit import Emit from param import known_param_fields, known_units # Emit APM documentation in an machine readable XML format class XmlEmit(Emit): def __init__(self): Emit.__init__(self) wiki_fname = 'apm.pdef.xml' self.f = open(wiki_fname, mode='w') preamble = ''' ''' self.f.write(preamble) def close(self): self.f.write('') self.f.write('''\n''') self.f.close() def emit_comment(self, s): self.f.write("") def start_libraries(self): self.f.write('') self.f.write('') def emit(self, g): t = '''\n''' % quoteattr(g.name) # i.e. ArduPlane for param in g.params: # Begin our parameter node if hasattr(param, 'DisplayName'): t += '%s\n''' % (quoteattr(v[0]), escape(v[1])) # i.e. numeric value, string label t += "\n" elif field == 'Units': abreviated_units = param.__dict__[field] if abreviated_units != '': units = known_units[abreviated_units] # use the known_units dictionary to convert the abreviated unit into a full textual one t += '''%s\n''' % (quoteattr(field), escape(abreviated_units)) # i.e. A/s t += '''%s\n''' % (quoteattr('UnitText'), escape(units)) # i.e. ampere per second else: t += '''%s\n''' % (quoteattr(field), escape(param.__dict__[field])) # i.e. Range: 0 10 t += '''\n''' t += '''\n''' # print t self.f.write(t)