Ejemplo n.º 1
0
    def merge_styles_from(self, document):
        """Copy all the styles of a document into ourself.

        Styles with the same type and name will be replaced, so only unique
        styles will be preserved.
        """
        styles = self.get_styles()
        content = self.get_content()
        for style in document.get_style_list():
            tagname = style.get_tag()
            family = style.get_style_family()
            if family is None:
                family = _get_style_family(tagname)
            stylename = style.get_style_name()
            container = style.get_parent()
            container_name = container.get_tag()
            partname = container.get_parent().get_tag()
            # The destination part
            if partname == "office:document-styles":
                part = styles
            elif partname == "office:document-content":
                part = content
            else:
                raise NotImplementedError, partname
            # Implemented containers
            if container_name not in ('office:styles',
                                      'office:automatic-styles',
                                      'office:master-styles',
                                      'office:font-face-decls'):
                raise NotImplementedError, container_name
            dest = part.get_element('//%s' % container_name)
            # Implemented style types
            if tagname not in registered_styles:
                raise NotImplementedError, tagname
            duplicate = part.get_style(family, stylename)
            if duplicate is not None:
                duplicate.delete()
            dest.append(style)
            # Copy images from the header/footer
            if tagname == 'style:master-page':
                manifest = self.get_manifest()
                document_manifest = document.get_manifest()
                query = 'descendant::draw:image'
                for image in style.get_element_list(query):
                    full_path = image.get_attribute('xlink:href')
                    data = document.get_part(full_path)
                    media_type = document_manifest.get_media_type(full_path)
                    # Manually add the part to keep the name
                    self.set_part(full_path, data)
                    manifest.add_full_path(full_path, media_type)
Ejemplo n.º 2
0
    def merge_styles_from(self, document):
        """Copy all the styles of a document into ourself.

        Styles with the same type and name will be replaced, so only unique
        styles will be preserved.
        """
        styles = self.get_styles()
        content = self.get_content()
        for style in document.get_style_list():
            tagname = style.get_tag()
            family = style.get_style_family()
            if family is None:
                family = _get_style_family(tagname)
            stylename = style.get_style_name()
            container = style.get_parent()
            container_name = container.get_tag()
            partname = container.get_parent().get_tag()
            # The destination part
            if partname == "office:document-styles":
                part = styles
            elif partname == "office:document-content":
                part = content
            else:
                raise NotImplementedError, partname
            # Implemented containers
            if container_name not in ('office:styles',
                                      'office:automatic-styles',
                                      'office:master-styles',
                                      'office:font-face-decls'):
                raise NotImplementedError, container_name
            dest = part.get_element('//%s' % container_name)
            # Implemented style types
            if tagname not in registered_styles:
                raise NotImplementedError, tagname
            duplicate = part.get_style(family, stylename)
            if duplicate is not None:
                duplicate.delete()
            dest.append(style)
            # Copy images from the header/footer
            if tagname == 'style:master-page':
                manifest = self.get_manifest()
                document_manifest = document.get_manifest()
                query = 'descendant::draw:image'
                for image in style.get_element_list(query):
                    full_path = image.get_attribute('xlink:href')
                    data = document.get_part(full_path)
                    media_type = document_manifest.get_media_type(full_path)
                    # Manually add the part to keep the name
                    self.set_part(full_path, data)
                    manifest.add_full_path(full_path, media_type)
Ejemplo n.º 3
0
    def merge_styles_from(self, document):
        """Copy all the styles of a document into ourself.

        Styles with the same type and name will be replaced, so only unique
        styles will be preserved.
        """
        styles = self.get_styles()
        content = self.get_content()
        for style in document.get_style_list():
            tagname = style.get_tagname()
            family = style.get_style_family()
            if family is None:
                family = _get_style_family(tagname)
            stylename = style.get_style_name()
            container = style.get_parent()
            container_name = container.get_tagname()
            partname = container.get_parent().get_tagname()
            # The destination part
            if partname == "office:document-styles":
                part = styles
            elif partname == "office:document-content":
                part = content
            else:
                raise NotImplementedError, partname
            # Implemented containers
            if container_name not in ('office:styles',
                                      'office:automatic-styles',
                                      'office:master-styles',
                                      'office:font-face-decls'):
                raise NotImplementedError, container_name
            dest = part.get_element('//%s' % container_name)
            # Implemented style types
            if tagname not in ('style:default-style', 'style:style',
                               'style:style', 'style:page-layout',
                               'style:master-page', 'style:font-face',
                               'text:list-style', 'number:number-style',
                               'text:outline-style', 'number:date-style'):
                raise NotImplementedError, tagname
            duplicate = part.get_style(family, stylename)
            if duplicate is not None:
                duplicate.get_parent().delete_element(duplicate)
            dest.append_element(style)