aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/docx/oxml/styles.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/docx/oxml/styles.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/docx/oxml/styles.py')
-rw-r--r--.venv/lib/python3.12/site-packages/docx/oxml/styles.py320
1 files changed, 320 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/docx/oxml/styles.py b/.venv/lib/python3.12/site-packages/docx/oxml/styles.py
new file mode 100644
index 00000000..fb0e5d0d
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/docx/oxml/styles.py
@@ -0,0 +1,320 @@
+"""Custom element classes related to the styles part."""
+
+from __future__ import annotations
+
+from docx.enum.style import WD_STYLE_TYPE
+from docx.oxml.simpletypes import ST_DecimalNumber, ST_OnOff, ST_String
+from docx.oxml.xmlchemy import (
+ BaseOxmlElement,
+ OptionalAttribute,
+ RequiredAttribute,
+ ZeroOrMore,
+ ZeroOrOne,
+)
+
+
+def styleId_from_name(name):
+ """Return the style id corresponding to `name`, taking into account special-case
+ names such as 'Heading 1'."""
+ return {
+ "caption": "Caption",
+ "heading 1": "Heading1",
+ "heading 2": "Heading2",
+ "heading 3": "Heading3",
+ "heading 4": "Heading4",
+ "heading 5": "Heading5",
+ "heading 6": "Heading6",
+ "heading 7": "Heading7",
+ "heading 8": "Heading8",
+ "heading 9": "Heading9",
+ }.get(name, name.replace(" ", ""))
+
+
+class CT_LatentStyles(BaseOxmlElement):
+ """`w:latentStyles` element, defining behavior defaults for latent styles and
+ containing `w:lsdException` child elements that each override those defaults for a
+ named latent style."""
+
+ lsdException = ZeroOrMore("w:lsdException", successors=())
+
+ count = OptionalAttribute("w:count", ST_DecimalNumber)
+ defLockedState = OptionalAttribute("w:defLockedState", ST_OnOff)
+ defQFormat = OptionalAttribute("w:defQFormat", ST_OnOff)
+ defSemiHidden = OptionalAttribute("w:defSemiHidden", ST_OnOff)
+ defUIPriority = OptionalAttribute("w:defUIPriority", ST_DecimalNumber)
+ defUnhideWhenUsed = OptionalAttribute("w:defUnhideWhenUsed", ST_OnOff)
+
+ def bool_prop(self, attr_name):
+ """Return the boolean value of the attribute having `attr_name`, or |False| if
+ not present."""
+ value = getattr(self, attr_name)
+ if value is None:
+ return False
+ return value
+
+ def get_by_name(self, name):
+ """Return the `w:lsdException` child having `name`, or |None| if not found."""
+ found = self.xpath('w:lsdException[@w:name="%s"]' % name)
+ if not found:
+ return None
+ return found[0]
+
+ def set_bool_prop(self, attr_name, value):
+ """Set the on/off attribute having `attr_name` to `value`."""
+ setattr(self, attr_name, bool(value))
+
+
+class CT_LsdException(BaseOxmlElement):
+ """``<w:lsdException>`` element, defining override visibility behaviors for a named
+ latent style."""
+
+ locked = OptionalAttribute("w:locked", ST_OnOff)
+ name = RequiredAttribute("w:name", ST_String)
+ qFormat = OptionalAttribute("w:qFormat", ST_OnOff)
+ semiHidden = OptionalAttribute("w:semiHidden", ST_OnOff)
+ uiPriority = OptionalAttribute("w:uiPriority", ST_DecimalNumber)
+ unhideWhenUsed = OptionalAttribute("w:unhideWhenUsed", ST_OnOff)
+
+ def delete(self):
+ """Remove this `w:lsdException` element from the XML document."""
+ self.getparent().remove(self)
+
+ def on_off_prop(self, attr_name):
+ """Return the boolean value of the attribute having `attr_name`, or |None| if
+ not present."""
+ return getattr(self, attr_name)
+
+ def set_on_off_prop(self, attr_name, value):
+ """Set the on/off attribute having `attr_name` to `value`."""
+ setattr(self, attr_name, value)
+
+
+class CT_Style(BaseOxmlElement):
+ """A ``<w:style>`` element, representing a style definition."""
+
+ _tag_seq = (
+ "w:name",
+ "w:aliases",
+ "w:basedOn",
+ "w:next",
+ "w:link",
+ "w:autoRedefine",
+ "w:hidden",
+ "w:uiPriority",
+ "w:semiHidden",
+ "w:unhideWhenUsed",
+ "w:qFormat",
+ "w:locked",
+ "w:personal",
+ "w:personalCompose",
+ "w:personalReply",
+ "w:rsid",
+ "w:pPr",
+ "w:rPr",
+ "w:tblPr",
+ "w:trPr",
+ "w:tcPr",
+ "w:tblStylePr",
+ )
+ name = ZeroOrOne("w:name", successors=_tag_seq[1:])
+ basedOn = ZeroOrOne("w:basedOn", successors=_tag_seq[3:])
+ next = ZeroOrOne("w:next", successors=_tag_seq[4:])
+ uiPriority = ZeroOrOne("w:uiPriority", successors=_tag_seq[8:])
+ semiHidden = ZeroOrOne("w:semiHidden", successors=_tag_seq[9:])
+ unhideWhenUsed = ZeroOrOne("w:unhideWhenUsed", successors=_tag_seq[10:])
+ qFormat = ZeroOrOne("w:qFormat", successors=_tag_seq[11:])
+ locked = ZeroOrOne("w:locked", successors=_tag_seq[12:])
+ pPr = ZeroOrOne("w:pPr", successors=_tag_seq[17:])
+ rPr = ZeroOrOne("w:rPr", successors=_tag_seq[18:])
+ del _tag_seq
+
+ type: WD_STYLE_TYPE | None = OptionalAttribute( # pyright: ignore[reportAssignmentType]
+ "w:type", WD_STYLE_TYPE
+ )
+ styleId: str | None = OptionalAttribute( # pyright: ignore[reportAssignmentType]
+ "w:styleId", ST_String
+ )
+ default = OptionalAttribute("w:default", ST_OnOff)
+ customStyle = OptionalAttribute("w:customStyle", ST_OnOff)
+
+ @property
+ def basedOn_val(self):
+ """Value of `w:basedOn/@w:val` or |None| if not present."""
+ basedOn = self.basedOn
+ if basedOn is None:
+ return None
+ return basedOn.val
+
+ @basedOn_val.setter
+ def basedOn_val(self, value):
+ if value is None:
+ self._remove_basedOn()
+ else:
+ self.get_or_add_basedOn().val = value
+
+ @property
+ def base_style(self):
+ """Sibling CT_Style element this style is based on or |None| if no base style or
+ base style not found."""
+ basedOn = self.basedOn
+ if basedOn is None:
+ return None
+ styles = self.getparent()
+ base_style = styles.get_by_id(basedOn.val)
+ if base_style is None:
+ return None
+ return base_style
+
+ def delete(self):
+ """Remove this `w:style` element from its parent `w:styles` element."""
+ self.getparent().remove(self)
+
+ @property
+ def locked_val(self):
+ """Value of `w:locked/@w:val` or |False| if not present."""
+ locked = self.locked
+ if locked is None:
+ return False
+ return locked.val
+
+ @locked_val.setter
+ def locked_val(self, value):
+ self._remove_locked()
+ if bool(value) is True:
+ locked = self._add_locked()
+ locked.val = value
+
+ @property
+ def name_val(self):
+ """Value of ``<w:name>`` child or |None| if not present."""
+ name = self.name
+ if name is None:
+ return None
+ return name.val
+
+ @name_val.setter
+ def name_val(self, value):
+ self._remove_name()
+ if value is not None:
+ name = self._add_name()
+ name.val = value
+
+ @property
+ def next_style(self):
+ """Sibling CT_Style element identified by the value of `w:name/@w:val` or |None|
+ if no value is present or no style with that style id is found."""
+ next = self.next
+ if next is None:
+ return None
+ styles = self.getparent()
+ return styles.get_by_id(next.val) # None if not found
+
+ @property
+ def qFormat_val(self):
+ """Value of `w:qFormat/@w:val` or |False| if not present."""
+ qFormat = self.qFormat
+ if qFormat is None:
+ return False
+ return qFormat.val
+
+ @qFormat_val.setter
+ def qFormat_val(self, value):
+ self._remove_qFormat()
+ if bool(value):
+ self._add_qFormat()
+
+ @property
+ def semiHidden_val(self):
+ """Value of ``<w:semiHidden>`` child or |False| if not present."""
+ semiHidden = self.semiHidden
+ if semiHidden is None:
+ return False
+ return semiHidden.val
+
+ @semiHidden_val.setter
+ def semiHidden_val(self, value):
+ self._remove_semiHidden()
+ if bool(value) is True:
+ semiHidden = self._add_semiHidden()
+ semiHidden.val = value
+
+ @property
+ def uiPriority_val(self):
+ """Value of ``<w:uiPriority>`` child or |None| if not present."""
+ uiPriority = self.uiPriority
+ if uiPriority is None:
+ return None
+ return uiPriority.val
+
+ @uiPriority_val.setter
+ def uiPriority_val(self, value):
+ self._remove_uiPriority()
+ if value is not None:
+ uiPriority = self._add_uiPriority()
+ uiPriority.val = value
+
+ @property
+ def unhideWhenUsed_val(self):
+ """Value of `w:unhideWhenUsed/@w:val` or |False| if not present."""
+ unhideWhenUsed = self.unhideWhenUsed
+ if unhideWhenUsed is None:
+ return False
+ return unhideWhenUsed.val
+
+ @unhideWhenUsed_val.setter
+ def unhideWhenUsed_val(self, value):
+ self._remove_unhideWhenUsed()
+ if bool(value) is True:
+ unhideWhenUsed = self._add_unhideWhenUsed()
+ unhideWhenUsed.val = value
+
+
+class CT_Styles(BaseOxmlElement):
+ """``<w:styles>`` element, the root element of a styles part, i.e. styles.xml."""
+
+ _tag_seq = ("w:docDefaults", "w:latentStyles", "w:style")
+ latentStyles = ZeroOrOne("w:latentStyles", successors=_tag_seq[2:])
+ style = ZeroOrMore("w:style", successors=())
+ del _tag_seq
+
+ def add_style_of_type(self, name, style_type, builtin):
+ """Return a newly added `w:style` element having `name` and `style_type`.
+
+ `w:style/@customStyle` is set based on the value of `builtin`.
+ """
+ style = self.add_style()
+ style.type = style_type
+ style.customStyle = None if builtin else True
+ style.styleId = styleId_from_name(name)
+ style.name_val = name
+ return style
+
+ def default_for(self, style_type):
+ """Return `w:style[@w:type="*{style_type}*][-1]` or |None| if not found."""
+ default_styles_for_type = [
+ s for s in self._iter_styles() if s.type == style_type and s.default
+ ]
+ if not default_styles_for_type:
+ return None
+ # spec calls for last default in document order
+ return default_styles_for_type[-1]
+
+ def get_by_id(self, styleId: str) -> CT_Style | None:
+ """`w:style` child where @styleId = `styleId`.
+
+ |None| if not found.
+ """
+ xpath = f'w:style[@w:styleId="{styleId}"]'
+ return next(iter(self.xpath(xpath)), None)
+
+ def get_by_name(self, name: str) -> CT_Style | None:
+ """`w:style` child with `w:name` grandchild having value `name`.
+
+ |None| if not found.
+ """
+ xpath = 'w:style[w:name/@w:val="%s"]' % name
+ return next(iter(self.xpath(xpath)), None)
+
+ def _iter_styles(self):
+ """Generate each of the `w:style` child elements in document order."""
+ return (style for style in self.xpath("w:style"))