2019-10-18 00:33:17 -03:00
|
|
|
from __future__ import print_function
|
|
|
|
|
2020-10-07 17:14:20 -03:00
|
|
|
from lxml import etree
|
2019-10-18 00:33:17 -03:00
|
|
|
import emitter
|
|
|
|
|
|
|
|
class XMLEmitter(emitter.Emitter):
|
|
|
|
def preface(self):
|
|
|
|
return """<?xml version="1.0" encoding="utf-8"?>
|
|
|
|
<!-- Dynamically generated list of documented logfile messages (generated by parse.py) -->
|
|
|
|
"""
|
2020-10-07 17:14:20 -03:00
|
|
|
|
2019-10-18 00:33:17 -03:00
|
|
|
def postface(self):
|
2020-10-07 17:14:20 -03:00
|
|
|
return
|
2019-10-18 00:33:17 -03:00
|
|
|
|
|
|
|
def start(self):
|
2020-10-07 17:14:20 -03:00
|
|
|
self.logname = "LogMessages.xml"
|
2019-10-18 00:33:17 -03:00
|
|
|
self.fh = open("LogMessages.xml", mode='w')
|
|
|
|
print(self.preface(), file=self.fh)
|
2020-10-07 17:14:20 -03:00
|
|
|
self.loggermessagefile = etree.Element('loggermessagefile')
|
2019-10-18 00:33:17 -03:00
|
|
|
|
2020-03-21 03:56:15 -03:00
|
|
|
def emit(self, doccos, enumerations):
|
2019-10-18 00:33:17 -03:00
|
|
|
self.start()
|
|
|
|
for docco in doccos:
|
2020-10-07 17:14:20 -03:00
|
|
|
xml_logformat = etree.SubElement(self.loggermessagefile, 'logformat', name=docco.name)
|
2019-10-18 00:33:17 -03:00
|
|
|
if docco.url is not None:
|
2020-10-07 17:14:20 -03:00
|
|
|
xml_url = etree.SubElement(xml_logformat, 'url')
|
|
|
|
xml_url.text = docco.url
|
2019-10-18 00:33:17 -03:00
|
|
|
if docco.description is not None:
|
2020-10-07 17:14:20 -03:00
|
|
|
xml_description = etree.SubElement(xml_logformat, 'description')
|
|
|
|
xml_description.text = docco.description
|
|
|
|
|
|
|
|
xml_fields = etree.SubElement(xml_logformat, 'fields')
|
2020-03-20 03:05:57 -03:00
|
|
|
for f in docco.fields_order:
|
2020-10-07 17:14:20 -03:00
|
|
|
xml_field = etree.SubElement(xml_fields, 'field', name=f)
|
2019-10-18 00:33:17 -03:00
|
|
|
if "description" in docco.fields[f]:
|
2020-10-07 17:14:20 -03:00
|
|
|
xml_description2 = etree.SubElement(xml_field, 'description')
|
|
|
|
xml_description2.text = docco.fields[f]["description"]
|
2023-02-03 14:03:09 -04:00
|
|
|
if "bitmaskenum" in docco.fields[f]:
|
|
|
|
enum_name = docco.fields[f]["bitmaskenum"]
|
|
|
|
if enum_name not in enumerations:
|
|
|
|
raise Exception("Unknown enum (%s) (have %s)" %
|
|
|
|
(enum_name, "\n".join(sorted(enumerations.keys()))))
|
|
|
|
bit_mask = enumerations[enum_name]
|
|
|
|
xml_bitmask = etree.SubElement(xml_field, 'bitmask')
|
|
|
|
for bit in bit_mask.entries:
|
|
|
|
xml_bitmask_bit = etree.SubElement(xml_bitmask, 'bit', name=bit.name)
|
|
|
|
xml_bitmask_bit_value = etree.SubElement(xml_bitmask_bit, 'value')
|
|
|
|
xml_bitmask_bit_value.text = str(bit.value)
|
|
|
|
if bit.comment is not None:
|
|
|
|
xml_bitmask_bit_comment = etree.SubElement(xml_bitmask_bit, 'description')
|
|
|
|
xml_bitmask_bit_comment.text = bit.comment
|
2020-10-07 17:14:20 -03:00
|
|
|
if xml_fields.text is None and not len(xml_fields):
|
|
|
|
xml_fields.text = '\n' # add </param> on next line in case of empty element.
|
2019-10-18 00:33:17 -03:00
|
|
|
self.stop()
|
|
|
|
|
|
|
|
def stop(self):
|
2021-04-01 22:53:42 -03:00
|
|
|
# etree.indent(self.loggermessagefile) # not available on thor, Ubuntu 16.04
|
2020-10-07 17:14:20 -03:00
|
|
|
pretty_xml = etree.tostring(self.loggermessagefile, pretty_print=True, encoding='unicode')
|
|
|
|
self.fh.write(pretty_xml)
|
2019-10-18 00:33:17 -03:00
|
|
|
self.fh.close()
|