From 08360b89fe37b3db70b7cde8dea36d6eb090e6f4 Mon Sep 17 00:00:00 2001 From: Jason Ward Date: Fri, 5 Jul 2013 13:38:09 -0400 Subject: [PATCH 1/4] refs #46: Added a test showing the error with self closing t tags --- pydocx/tests/templates/t.xml | 4 ++++ pydocx/tests/test_xml.py | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/pydocx/tests/templates/t.xml b/pydocx/tests/templates/t.xml index 92412f72..81d562b7 100644 --- a/pydocx/tests/templates/t.xml +++ b/pydocx/tests/templates/t.xml @@ -1 +1,5 @@ +{% if text %} {{ text }} +{% else %} + +{% endif %} diff --git a/pydocx/tests/test_xml.py b/pydocx/tests/test_xml.py index 7e80b323..8142ef2b 100644 --- a/pydocx/tests/test_xml.py +++ b/pydocx/tests/test_xml.py @@ -1231,3 +1231,25 @@ def get_xml(self): body += tag xml = DXB.xml(body) return xml.encode('utf-8') + + +class NoTextInTTagTestCase(_TranslationTestCase): + expected_output = u""" + """ + + def get_xml(self): + tags = [ + DXB.p_tag( + [ + DXB.r_tag( + [DXB.t_tag(None)], + ), + ], + ), + ] + + body = '' + for tag in tags: + body += tag + xml = DXB.xml(body) + return xml.encode('utf-8') From cbc2febaa886ece14c1e39619736c3e794591861 Mon Sep 17 00:00:00 2001 From: Jason Ward Date: Fri, 5 Jul 2013 13:38:45 -0400 Subject: [PATCH 2/4] refs #46: fixed the problem with el.text being None --- pydocx/DocxParser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pydocx/DocxParser.py b/pydocx/DocxParser.py index 465d2786..50fd3ba2 100644 --- a/pydocx/DocxParser.py +++ b/pydocx/DocxParser.py @@ -577,13 +577,13 @@ def _is_style_on(self, el): return val.lower() not in DISABLED_VALUES def parse_t(self, el, parsed): - return self.escape(el.text) + return self.escape(el.text or '') def parse_break_tag(self, el, parsed): return self.break_tag() def parse_deletion(self, el, parsed): - return self.deletion(el.text, '', '') + return self.deletion(el.text or '', '', '') def parse_insertion(self, el, parsed): return self.insertion(parsed, '', '') From d84b50b4e176736e4e398f76b43e536bbac634ba Mon Sep 17 00:00:00 2001 From: Jason Ward Date: Fri, 5 Jul 2013 13:40:17 -0400 Subject: [PATCH 3/4] refs #46: update note --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 63e02ddf..d8aa3f16 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ Changelog ========= +* 0.3.4 + * It is possible for `w:t` tags to have `text` set to `None`. This no longer causes an error when escaping that text. * 0.3.3 * In the event that `cElementTree` has a problem parsing the document, a `MalformedDocxException` is raised instead of a `SyntaxError` From b05e3087d27e5cf74867b64a721f67c213fad005 Mon Sep 17 00:00:00 2001 From: Jason Ward Date: Fri, 5 Jul 2013 13:48:43 -0400 Subject: [PATCH 4/4] refs #46: code cleanup --- pydocx/DocxParser.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pydocx/DocxParser.py b/pydocx/DocxParser.py index 50fd3ba2..82b48cc3 100644 --- a/pydocx/DocxParser.py +++ b/pydocx/DocxParser.py @@ -577,13 +577,17 @@ def _is_style_on(self, el): return val.lower() not in DISABLED_VALUES def parse_t(self, el, parsed): - return self.escape(el.text or '') + if el.text is None: + return '' + return self.escape(el.text) def parse_break_tag(self, el, parsed): return self.break_tag() def parse_deletion(self, el, parsed): - return self.deletion(el.text or '', '', '') + if el.text is None: + return '' + return self.deletion(el.text, '', '') def parse_insertion(self, el, parsed): return self.insertion(parsed, '', '')