diff --git a/llsd/serde_xml.py b/llsd/serde_xml.py
index 3833f57..cbb6182 100644
--- a/llsd/serde_xml.py
+++ b/llsd/serde_xml.py
@@ -69,13 +69,15 @@ class LLSDXMLFormatter(LLSDBaseFormatter):
interface to this functionality.
"""
- def __init__(self, indent_atom = b'', eol = b''):
+ def __init__(self, indent_atom = b'', eol = b'', c_compat = False, sort_maps = False):
"Construct a serializer."
# Call the super class constructor so that we have the type map
super(LLSDXMLFormatter, self).__init__()
self._indent_atom = indent_atom
self._eol = eol
self._depth = 1
+ self.c_compat = c_compat
+ self.sort_maps = sort_maps
def _indent(self):
pass
@@ -85,13 +87,22 @@ def _LLSD(self, v):
def _UNDEF(self, _v):
self.stream.writelines([b'', self._eol])
def _BOOLEAN(self, v):
- if v:
- return self.stream.writelines([b'true', self._eol])
- self.stream.writelines([b'false', self._eol])
+ if self.c_compat:
+ s = b'1' if v else b'0'
+ else:
+ s = b'true' if v else b'false'
+ self.stream.writelines([b'', s, b'', self._eol])
def _INTEGER(self, v):
self.stream.writelines([b'', str(v).encode('utf-8'), b'', self._eol])
def _REAL(self, v):
- self.stream.writelines([b'', str(v).encode('utf-8'), b'', self._eol])
+ if self.c_compat:
+ if int(v) == v:
+ s = str(int(v))
+ else:
+ s = "%.25g" % v
+ else:
+ s = str(v)
+ self.stream.writelines([b'', s.encode('utf-8'), b'', self._eol])
def _UUID(self, v):
if v.int == 0:
return self.stream.writelines([b'', self._eol])
@@ -124,7 +135,11 @@ def _ARRAY(self, v):
def _MAP(self, v):
self.stream.writelines([b'