def read_styles(self, relationships_by_type): def get_name(rtype, defname): name = relationships_by_type.get(rtype, None) if name is None: cname = self.docx.document_name.split('/') cname[-1] = defname if self.docx.exists('/'.join(cname)): name = name return name nname = get_name(NUMBERING, 'numbering.xml') sname = get_name(STYLES, 'styles.xml') fname = get_name(FONTS, 'fontTable.xml') foname = get_name(FOOTNOTES, 'footnotes.xml') enname = get_name(ENDNOTES, 'endnotes.xml') numbering = self.numbering = Numbering() footnotes = self.footnotes = Footnotes() fonts = self.fonts = Fonts() foraw = enraw = None if foname is not None: try: foraw = self.docx.read(foname) except KeyError: self.log.warn('Footnotes %s do not exist' % foname) if enname is not None: try: enraw = self.docx.read(enname) except KeyError: self.log.warn('Endnotes %s do not exist' % enname) footnotes(fromstring(foraw) if foraw else None, fromstring(enraw) if enraw else None) if fname is not None: embed_relationships = self.docx.get_relationships(fname)[0] try: raw = self.docx.read(fname) except KeyError: self.log.warn('Fonts table %s does not exist' % fname) else: fonts(fromstring(raw), embed_relationships, self.docx, self.dest_dir) if sname is not None: try: raw = self.docx.read(sname) except KeyError: self.log.warn('Styles %s do not exist' % sname) else: self.styles(fromstring(raw), fonts) if nname is not None: try: raw = self.docx.read(nname) except KeyError: self.log.warn('Numbering styles %s do not exist' % nname) else: numbering(fromstring(raw), self.styles) self.styles.resolve_numbering(numbering)
def read_styles(self, relationships_by_type): def get_name(rtype, defname): name = relationships_by_type.get(rtype, None) if name is None: cname = self.docx.document_name.split('/') cname[-1] = defname if self.docx.exists('/'.join(cname)): name = name if name and name.startswith('word/word') and not self.docx.exists(name): name = name.partition('/')[2] return name nname = get_name(self.namespace.names['NUMBERING'], 'numbering.xml') sname = get_name(self.namespace.names['STYLES'], 'styles.xml') sename = get_name(self.namespace.names['SETTINGS'], 'settings.xml') fname = get_name(self.namespace.names['FONTS'], 'fontTable.xml') tname = get_name(self.namespace.names['THEMES'], 'theme1.xml') foname = get_name(self.namespace.names['FOOTNOTES'], 'footnotes.xml') enname = get_name(self.namespace.names['ENDNOTES'], 'endnotes.xml') numbering = self.numbering = Numbering(self.namespace) footnotes = self.footnotes = Footnotes(self.namespace) fonts = self.fonts = Fonts(self.namespace) foraw = enraw = None forel, enrel = ({}, {}), ({}, {}) if sename is not None: try: seraw = self.docx.read(sename) except KeyError: self.log.warn('Settings %s do not exist' % sename) except EnvironmentError as e: if e.errno != errno.ENOENT: raise self.log.warn('Settings %s file missing' % sename) else: self.settings(fromstring(seraw)) if foname is not None: try: foraw = self.docx.read(foname) except KeyError: self.log.warn('Footnotes %s do not exist' % foname) else: forel = self.docx.get_relationships(foname) if enname is not None: try: enraw = self.docx.read(enname) except KeyError: self.log.warn('Endnotes %s do not exist' % enname) else: enrel = self.docx.get_relationships(enname) footnotes(fromstring(foraw) if foraw else None, forel, fromstring(enraw) if enraw else None, enrel) if fname is not None: embed_relationships = self.docx.get_relationships(fname)[0] try: raw = self.docx.read(fname) except KeyError: self.log.warn('Fonts table %s does not exist' % fname) else: fonts(fromstring(raw), embed_relationships, self.docx, self.dest_dir) if tname is not None: try: raw = self.docx.read(tname) except KeyError: self.log.warn('Styles %s do not exist' % sname) else: self.theme(fromstring(raw)) styles_loaded = False if sname is not None: try: raw = self.docx.read(sname) except KeyError: 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: raw = self.docx.read(nname) except KeyError: self.log.warn('Numbering styles %s do not exist' % nname) else: numbering(fromstring(raw), self.styles, self.docx.get_relationships(nname)[0]) self.styles.resolve_numbering(numbering)