mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-05 15:38:29 -04:00
d7c7deacdf
http://physics.nist.gov/cuu/Units/units.html http://physics.nist.gov/cuu/Units/outside.html and http://physics.nist.gov/cuu/Units/checklist.html http://www.bipm.org/en/publications/si-brochure/ http://www1.bipm.org/en/CGPM/db/3/2/ g_n unit for G-force one further constrain is that only printable (7bit) ASCII characters are allowed Add a validation so that Travis can validate the units Use full text unit information when generating .wiki, .rst and .html documentation Use both unit symbol and unit full text when generating .xml
77 lines
3.1 KiB
Python
77 lines
3.1 KiB
Python
#!/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 = '''<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- Dynamically generated list of documented parameters (generated by param_parse.py) -->
|
|
<paramfile>
|
|
<vehicles>
|
|
'''
|
|
self.f.write(preamble)
|
|
|
|
def close(self):
|
|
self.f.write('</libraries>')
|
|
self.f.write('''</paramfile>\n''')
|
|
self.f.close()
|
|
|
|
def emit_comment(self, s):
|
|
self.f.write("<!-- " + s + " -->")
|
|
|
|
def start_libraries(self):
|
|
self.f.write('</vehicles>')
|
|
self.f.write('<libraries>')
|
|
|
|
def emit(self, g, f):
|
|
t = '''<parameters name=%s>\n''' % quoteattr(g.name) # i.e. ArduPlane
|
|
|
|
for param in g.params:
|
|
# Begin our parameter node
|
|
if hasattr(param, 'DisplayName'):
|
|
t += '<param humanName=%s name=%s' % (quoteattr(param.DisplayName), quoteattr(param.name)) # i.e. ArduPlane (ArduPlane:FOOPARM)
|
|
else:
|
|
t += '<param name=%s' % quoteattr(param.name)
|
|
|
|
if hasattr(param, 'Description'):
|
|
t += ' documentation=%s' % quoteattr(param.Description) # i.e. parameter docs
|
|
if hasattr(param, 'User'):
|
|
t += ' user=%s' % quoteattr(param.User) # i.e. Standard or Advanced
|
|
|
|
t += ">\n"
|
|
|
|
# Add values as chidren of this node
|
|
for field in param.__dict__.keys():
|
|
if field not in ['name', 'DisplayName', 'Description', 'User'] and field in known_param_fields:
|
|
if field == 'Values' and Emit.prog_values_field.match(param.__dict__[field]):
|
|
t += "<values>\n"
|
|
|
|
values = (param.__dict__[field]).split(',')
|
|
for value in values:
|
|
v = value.split(':')
|
|
t += '''<value code=%s>%s</value>\n''' % (quoteattr(v[0]), escape(v[1])) # i.e. numeric value, string label
|
|
|
|
t += "</values>\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 += '''<field name=%s>%s</field>\n''' % (quoteattr(field), escape(abreviated_units)) # i.e. A/s
|
|
t += '''<field name=%s>%s</field>\n''' % (quoteattr('UnitText'), escape(units)) # i.e. ampere per second
|
|
else:
|
|
t += '''<field name=%s>%s</field>\n''' % (quoteattr(field), escape(param.__dict__[field])) # i.e. Range: 0 10
|
|
|
|
t += '''</param>\n'''
|
|
t += '''</parameters>\n'''
|
|
|
|
# print t
|
|
self.f.write(t)
|