def resolve_based_on(self, parent): if parent.table_style is not None: if self.table_style is None: self.table_style = TableStyle(self.namespace) self.table_style.resolve_based_on(parent.table_style) if parent.paragraph_style is not None: if self.paragraph_style is None: self.paragraph_style = ParagraphStyle(self.namespace) self.paragraph_style.resolve_based_on(parent.paragraph_style) if parent.character_style is not None: if self.character_style is None: self.character_style = RunStyle(self.namespace) self.character_style.resolve_based_on(parent.character_style)
def __init__(self, namespace, elem): self.namespace = namespace self.name_path = namespace.XPath('./w:name[@w:val]') self.based_on_path = namespace.XPath('./w:basedOn[@w:val]') self.resolved = False self.style_id = namespace.get(elem, 'w:styleId') self.style_type = namespace.get(elem, 'w:type') names = self.name_path(elem) self.name = namespace.get(names[-1], 'w:val') if names else None based_on = self.based_on_path(elem) self.based_on = namespace.get(based_on[0], 'w:val') if based_on else None if self.style_type == 'numbering': self.based_on = None self.is_default = namespace.get(elem, 'w:default') in {'1', 'on', 'true'} self.paragraph_style = self.character_style = self.table_style = None if self.style_type in {'paragraph', 'character', 'table'}: if self.style_type == 'table': for tblPr in namespace.XPath('./w:tblPr')(elem): ts = TableStyle(namespace, tblPr) if self.table_style is None: self.table_style = ts else: self.table_style.update(ts) if self.style_type in {'paragraph', 'table'}: for pPr in namespace.XPath('./w:pPr')(elem): ps = ParagraphStyle(namespace, pPr) if self.paragraph_style is None: self.paragraph_style = ps else: self.paragraph_style.update(ps) for rPr in namespace.XPath('./w:rPr')(elem): rs = RunStyle(namespace, rPr) if self.character_style is None: self.character_style = rs else: self.character_style.update(rs) if self.style_type in {'numbering', 'paragraph'}: self.numbering_style_link = None for x in namespace.XPath('./w:pPr/w:numPr/w:numId[@w:val]')(elem): self.numbering_style_link = namespace.get(x, 'w:val')
class Style(object): ''' Class representing a <w:style> element. Can contain block, character, etc. styles. ''' def __init__(self, namespace, elem): self.namespace = namespace self.name_path = namespace.XPath('./w:name[@w:val]') self.based_on_path = namespace.XPath('./w:basedOn[@w:val]') self.resolved = False self.style_id = namespace.get(elem, 'w:styleId') self.style_type = namespace.get(elem, 'w:type') names = self.name_path(elem) self.name = namespace.get(names[-1], 'w:val') if names else None based_on = self.based_on_path(elem) self.based_on = namespace.get(based_on[0], 'w:val') if based_on else None if self.style_type == 'numbering': self.based_on = None self.is_default = namespace.get(elem, 'w:default') in {'1', 'on', 'true'} self.paragraph_style = self.character_style = self.table_style = None if self.style_type in {'paragraph', 'character', 'table'}: if self.style_type == 'table': for tblPr in namespace.XPath('./w:tblPr')(elem): ts = TableStyle(namespace, tblPr) if self.table_style is None: self.table_style = ts else: self.table_style.update(ts) if self.style_type in {'paragraph', 'table'}: for pPr in namespace.XPath('./w:pPr')(elem): ps = ParagraphStyle(namespace, pPr) if self.paragraph_style is None: self.paragraph_style = ps else: self.paragraph_style.update(ps) for rPr in namespace.XPath('./w:rPr')(elem): rs = RunStyle(namespace, rPr) if self.character_style is None: self.character_style = rs else: self.character_style.update(rs) if self.style_type in {'numbering', 'paragraph'}: self.numbering_style_link = None for x in namespace.XPath('./w:pPr/w:numPr/w:numId[@w:val]')(elem): self.numbering_style_link = namespace.get(x, 'w:val') def resolve_based_on(self, parent): if parent.table_style is not None: if self.table_style is None: self.table_style = TableStyle(self.namespace) self.table_style.resolve_based_on(parent.table_style) if parent.paragraph_style is not None: if self.paragraph_style is None: self.paragraph_style = ParagraphStyle(self.namespace) self.paragraph_style.resolve_based_on(parent.paragraph_style) if parent.character_style is not None: if self.character_style is None: self.character_style = RunStyle(self.namespace) self.character_style.resolve_based_on(parent.character_style)
class Style(object): """ Class representing a <w:style> element. Can contain block, character, etc. styles. """ name_path = XPath("./w:name[@w:val]") based_on_path = XPath("./w:basedOn[@w:val]") def __init__(self, elem): self.resolved = False self.style_id = get(elem, "w:styleId") self.style_type = get(elem, "w:type") names = self.name_path(elem) self.name = get(names[-1], "w:val") if names else None based_on = self.based_on_path(elem) self.based_on = get(based_on[0], "w:val") if based_on else None if self.style_type == "numbering": self.based_on = None self.is_default = get(elem, "w:default") in {"1", "on", "true"} self.paragraph_style = self.character_style = self.table_style = None if self.style_type in {"paragraph", "character", "table"}: if self.style_type == "table": for tblPr in XPath("./w:tblPr")(elem): ts = TableStyle(tblPr) if self.table_style is None: self.table_style = ts else: self.table_style.update(ts) if self.style_type in {"paragraph", "table"}: for pPr in XPath("./w:pPr")(elem): ps = ParagraphStyle(pPr) if self.paragraph_style is None: self.paragraph_style = ps else: self.paragraph_style.update(ps) for rPr in XPath("./w:rPr")(elem): rs = RunStyle(rPr) if self.character_style is None: self.character_style = rs else: self.character_style.update(rs) if self.style_type == "numbering": self.numbering_style_link = None for x in XPath("./w:pPr/w:numPr/w:numId[@w:val]")(elem): self.numbering_style_link = get(x, "w:val") def resolve_based_on(self, parent): if parent.table_style is not None: if self.table_style is None: self.table_style = TableStyle() self.table_style.resolve_based_on(parent.table_style) if parent.paragraph_style is not None: if self.paragraph_style is None: self.paragraph_style = ParagraphStyle() self.paragraph_style.resolve_based_on(parent.paragraph_style) if parent.character_style is not None: if self.character_style is None: self.character_style = RunStyle() self.character_style.resolve_based_on(parent.character_style)