diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-02-07 18:35:25 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-02-07 18:35:25 +0000 |
| commit | 5da998b4fc5c926b25f77eb36ce75c7ec3396cd2 (patch) | |
| tree | d296ee6eb668fbf8c67c4a929491af76ce00c99b /mammoth/writers | |
| parent | d75f5adfa5e0b10d1127edd810ed59d3868e2dcb (diff) | |
Split off separate HTML writer
Diffstat (limited to 'mammoth/writers')
| -rw-r--r-- | mammoth/writers/__init__.py | 1 | ||||
| -rw-r--r-- | mammoth/writers/html.py | 42 |
2 files changed, 43 insertions, 0 deletions
diff --git a/mammoth/writers/__init__.py b/mammoth/writers/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/mammoth/writers/__init__.py @@ -0,0 +1 @@ + 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) + ) |
