aboutsummaryrefslogtreecommitdiff
path: root/mammoth/writers/html.py
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-02-07 18:35:25 +0000
committerMichael Williamson <mike@zwobble.org>2015-02-07 18:35:25 +0000
commit5da998b4fc5c926b25f77eb36ce75c7ec3396cd2 (patch)
treed296ee6eb668fbf8c67c4a929491af76ce00c99b /mammoth/writers/html.py
parentd75f5adfa5e0b10d1127edd810ed59d3868e2dcb (diff)
Split off separate HTML writer
Diffstat (limited to 'mammoth/writers/html.py')
-rw-r--r--mammoth/writers/html.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/mammoth/writers/html.py b/mammoth/writers/html.py
new file mode 100644
index 0000000..cf936cd
--- /dev/null
+++ b/mammoth/writers/html.py
@@ -0,0 +1,42 @@
+from __future__ import unicode_literals
+
+import cgi
+
+
+class HtmlWriter(object):
+ def __init__(self):
+ self._fragments = []
+
+ def text(self, text):
+ self._fragments.append(_escape_html(text))
+
+ def start(self, name, attributes=None):
+ attribute_string = _generate_attribute_string(attributes)
+ self._fragments.append("<{0}{1}>".format(name, attribute_string))
+
+ def end(self, name):
+ self._fragments.append("</{0}>".format(name))
+
+ def self_closing(self, name, attributes=None):
+ attribute_string = _generate_attribute_string(attributes)
+ self._fragments.append("<{0}{1} />".format(name, attribute_string))
+
+ def append(self, html):
+ self._fragments.append(html)
+
+ def as_string(self):
+ return "".join(self._fragments)
+
+
+def _escape_html(text):
+ return cgi.escape(text, quote=True)
+
+
+def _generate_attribute_string(attributes):
+ if attributes is None:
+ return ""
+ else:
+ return "".join(
+ ' {0}="{1}"'.format(key, _escape_html(attributes[key]))
+ for key in sorted(attributes)
+ )