diff --git a/src/calibre/ebooks/docx/styles.py b/src/calibre/ebooks/docx/styles.py index 43b694b692..fbc5b9c13a 100644 --- a/src/calibre/ebooks/docx/styles.py +++ b/src/calibre/ebooks/docx/styles.py @@ -138,32 +138,32 @@ class Styles(object): def __call__(self, root, fonts, theme): self.fonts, self.theme = fonts, theme - for s in self.namespace.XPath('//w:style')(root): - s = Style(self.namespace, s) - if s.style_id: - self.id_map[s.style_id] = s - if s.is_default: - self.default_styles[s.style_type] = s - if getattr(s, 'numbering_style_link', None) is not None: - self.numbering_style_links[s.style_id] = s.numbering_style_link - self.default_paragraph_style = self.default_character_style = None + if root is not None: + for s in self.namespace.XPath('//w:style')(root): + s = Style(self.namespace, s) + if s.style_id: + self.id_map[s.style_id] = s + if s.is_default: + self.default_styles[s.style_type] = s + if getattr(s, 'numbering_style_link', None) is not None: + self.numbering_style_links[s.style_id] = s.numbering_style_link - for dd in self.namespace.XPath('./w:docDefaults')(root): - for pd in self.namespace.XPath('./w:pPrDefault')(dd): - for pPr in self.namespace.XPath('./w:pPr')(pd): - ps = ParagraphStyle(self.namespace, pPr) - if self.default_paragraph_style is None: - self.default_paragraph_style = ps - else: - self.default_paragraph_style.update(ps) - for pd in self.namespace.XPath('./w:rPrDefault')(dd): - for pPr in self.namespace.XPath('./w:rPr')(pd): - ps = RunStyle(self.namespace, pPr) - if self.default_character_style is None: - self.default_character_style = ps - else: - self.default_character_style.update(ps) + for dd in self.namespace.XPath('./w:docDefaults')(root): + for pd in self.namespace.XPath('./w:pPrDefault')(dd): + for pPr in self.namespace.XPath('./w:pPr')(pd): + ps = ParagraphStyle(self.namespace, pPr) + if self.default_paragraph_style is None: + self.default_paragraph_style = ps + else: + self.default_paragraph_style.update(ps) + for pd in self.namespace.XPath('./w:rPrDefault')(dd): + for pPr in self.namespace.XPath('./w:rPr')(pd): + ps = RunStyle(self.namespace, pPr) + if self.default_character_style is None: + self.default_character_style = ps + else: + self.default_character_style.update(ps) def resolve(s, p): if p is not None: diff --git a/src/calibre/ebooks/docx/to_html.py b/src/calibre/ebooks/docx/to_html.py index 21f2ac2281..8fd8c48d9e 100644 --- a/src/calibre/ebooks/docx/to_html.py +++ b/src/calibre/ebooks/docx/to_html.py @@ -331,6 +331,7 @@ class Convert(object): else: self.theme(fromstring(raw)) + styles_loaded = False if sname is not None: try: raw = self.docx.read(sname) @@ -338,6 +339,9 @@ class Convert(object): self.log.warn('Styles %s do not exist' % sname) else: self.styles(fromstring(raw), fonts, self.theme) + styles_loaded = True + if not styles_loaded: + self.styles(None, fonts, self.theme) if nname is not None: try: