about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/docx/text/parfmt.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/text/parfmt.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are here HEAD master
Diffstat (limited to '.venv/lib/python3.12/site-packages/docx/text/parfmt.py')
-rw-r--r--.venv/lib/python3.12/site-packages/docx/text/parfmt.py286
1 files changed, 286 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/docx/text/parfmt.py b/.venv/lib/python3.12/site-packages/docx/text/parfmt.py
new file mode 100644
index 00000000..ea374373
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/docx/text/parfmt.py
@@ -0,0 +1,286 @@
+"""Paragraph-related proxy types."""
+
+from docx.enum.text import WD_LINE_SPACING
+from docx.shared import ElementProxy, Emu, Length, Pt, Twips, lazyproperty
+from docx.text.tabstops import TabStops
+
+
+class ParagraphFormat(ElementProxy):
+    """Provides access to paragraph formatting such as justification, indentation, line
+    spacing, space before and after, and widow/orphan control."""
+
+    @property
+    def alignment(self):
+        """A member of the :ref:`WdParagraphAlignment` enumeration specifying the
+        justification setting for this paragraph.
+
+        A value of |None| indicates paragraph alignment is inherited from the style
+        hierarchy.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.jc_val
+
+    @alignment.setter
+    def alignment(self, value):
+        pPr = self._element.get_or_add_pPr()
+        pPr.jc_val = value
+
+    @property
+    def first_line_indent(self):
+        """|Length| value specifying the relative difference in indentation for the
+        first line of the paragraph.
+
+        A positive value causes the first line to be indented. A negative value produces
+        a hanging indent. |None| indicates first line indentation is inherited from the
+        style hierarchy.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.first_line_indent
+
+    @first_line_indent.setter
+    def first_line_indent(self, value):
+        pPr = self._element.get_or_add_pPr()
+        pPr.first_line_indent = value
+
+    @property
+    def keep_together(self):
+        """|True| if the paragraph should be kept "in one piece" and not broken across a
+        page boundary when the document is rendered.
+
+        |None| indicates its effective value is inherited from the style hierarchy.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.keepLines_val
+
+    @keep_together.setter
+    def keep_together(self, value):
+        self._element.get_or_add_pPr().keepLines_val = value
+
+    @property
+    def keep_with_next(self):
+        """|True| if the paragraph should be kept on the same page as the subsequent
+        paragraph when the document is rendered.
+
+        For example, this property could be used to keep a section heading on the same
+        page as its first paragraph. |None| indicates its effective value is inherited
+        from the style hierarchy.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.keepNext_val
+
+    @keep_with_next.setter
+    def keep_with_next(self, value):
+        self._element.get_or_add_pPr().keepNext_val = value
+
+    @property
+    def left_indent(self):
+        """|Length| value specifying the space between the left margin and the left side
+        of the paragraph.
+
+        |None| indicates the left indent value is inherited from the style hierarchy.
+        Use an |Inches| value object as a convenient way to apply indentation in units
+        of inches.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.ind_left
+
+    @left_indent.setter
+    def left_indent(self, value):
+        pPr = self._element.get_or_add_pPr()
+        pPr.ind_left = value
+
+    @property
+    def line_spacing(self):
+        """|float| or |Length| value specifying the space between baselines in
+        successive lines of the paragraph.
+
+        A value of |None| indicates line spacing is inherited from the style hierarchy.
+        A float value, e.g. ``2.0`` or ``1.75``, indicates spacing is applied in
+        multiples of line heights. A |Length| value such as ``Pt(12)`` indicates spacing
+        is a fixed height. The |Pt| value class is a convenient way to apply line
+        spacing in units of points. Assigning |None| resets line spacing to inherit from
+        the style hierarchy.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return self._line_spacing(pPr.spacing_line, pPr.spacing_lineRule)
+
+    @line_spacing.setter
+    def line_spacing(self, value):
+        pPr = self._element.get_or_add_pPr()
+        if value is None:
+            pPr.spacing_line = None
+            pPr.spacing_lineRule = None
+        elif isinstance(value, Length):
+            pPr.spacing_line = value
+            if pPr.spacing_lineRule != WD_LINE_SPACING.AT_LEAST:
+                pPr.spacing_lineRule = WD_LINE_SPACING.EXACTLY
+        else:
+            pPr.spacing_line = Emu(value * Twips(240))
+            pPr.spacing_lineRule = WD_LINE_SPACING.MULTIPLE
+
+    @property
+    def line_spacing_rule(self):
+        """A member of the :ref:`WdLineSpacing` enumeration indicating how the value of
+        :attr:`line_spacing` should be interpreted.
+
+        Assigning any of the :ref:`WdLineSpacing` members :attr:`SINGLE`,
+        :attr:`DOUBLE`, or :attr:`ONE_POINT_FIVE` will cause the value of
+        :attr:`line_spacing` to be updated to produce the corresponding line spacing.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return self._line_spacing_rule(pPr.spacing_line, pPr.spacing_lineRule)
+
+    @line_spacing_rule.setter
+    def line_spacing_rule(self, value):
+        pPr = self._element.get_or_add_pPr()
+        if value == WD_LINE_SPACING.SINGLE:
+            pPr.spacing_line = Twips(240)
+            pPr.spacing_lineRule = WD_LINE_SPACING.MULTIPLE
+        elif value == WD_LINE_SPACING.ONE_POINT_FIVE:
+            pPr.spacing_line = Twips(360)
+            pPr.spacing_lineRule = WD_LINE_SPACING.MULTIPLE
+        elif value == WD_LINE_SPACING.DOUBLE:
+            pPr.spacing_line = Twips(480)
+            pPr.spacing_lineRule = WD_LINE_SPACING.MULTIPLE
+        else:
+            pPr.spacing_lineRule = value
+
+    @property
+    def page_break_before(self):
+        """|True| if the paragraph should appear at the top of the page following the
+        prior paragraph.
+
+        |None| indicates its effective value is inherited from the style hierarchy.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.pageBreakBefore_val
+
+    @page_break_before.setter
+    def page_break_before(self, value):
+        self._element.get_or_add_pPr().pageBreakBefore_val = value
+
+    @property
+    def right_indent(self):
+        """|Length| value specifying the space between the right margin and the right
+        side of the paragraph.
+
+        |None| indicates the right indent value is inherited from the style hierarchy.
+        Use a |Cm| value object as a convenient way to apply indentation in units of
+        centimeters.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.ind_right
+
+    @right_indent.setter
+    def right_indent(self, value):
+        pPr = self._element.get_or_add_pPr()
+        pPr.ind_right = value
+
+    @property
+    def space_after(self):
+        """|Length| value specifying the spacing to appear between this paragraph and
+        the subsequent paragraph.
+
+        |None| indicates this value is inherited from the style hierarchy. |Length|
+        objects provide convenience properties, such as :attr:`~.Length.pt` and
+        :attr:`~.Length.inches`, that allow easy conversion to various length units.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.spacing_after
+
+    @space_after.setter
+    def space_after(self, value):
+        self._element.get_or_add_pPr().spacing_after = value
+
+    @property
+    def space_before(self):
+        """|Length| value specifying the spacing to appear between this paragraph and
+        the prior paragraph.
+
+        |None| indicates this value is inherited from the style hierarchy. |Length|
+        objects provide convenience properties, such as :attr:`~.Length.pt` and
+        :attr:`~.Length.cm`, that allow easy conversion to various length units.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.spacing_before
+
+    @space_before.setter
+    def space_before(self, value):
+        self._element.get_or_add_pPr().spacing_before = value
+
+    @lazyproperty
+    def tab_stops(self):
+        """|TabStops| object providing access to the tab stops defined for this
+        paragraph format."""
+        pPr = self._element.get_or_add_pPr()
+        return TabStops(pPr)
+
+    @property
+    def widow_control(self):
+        """|True| if the first and last lines in the paragraph remain on the same page
+        as the rest of the paragraph when Word repaginates the document.
+
+        |None| indicates its effective value is inherited from the style hierarchy.
+        """
+        pPr = self._element.pPr
+        if pPr is None:
+            return None
+        return pPr.widowControl_val
+
+    @widow_control.setter
+    def widow_control(self, value):
+        self._element.get_or_add_pPr().widowControl_val = value
+
+    @staticmethod
+    def _line_spacing(spacing_line, spacing_lineRule):
+        """Return the line spacing value calculated from the combination of
+        `spacing_line` and `spacing_lineRule`.
+
+        Returns a |float| number of lines when `spacing_lineRule` is
+        ``WD_LINE_SPACING.MULTIPLE``, otherwise a |Length| object of absolute line
+        height is returned. Returns |None| when `spacing_line` is |None|.
+        """
+        if spacing_line is None:
+            return None
+        if spacing_lineRule == WD_LINE_SPACING.MULTIPLE:
+            return spacing_line / Pt(12)
+        return spacing_line
+
+    @staticmethod
+    def _line_spacing_rule(line, lineRule):
+        """Return the line spacing rule value calculated from the combination of `line`
+        and `lineRule`.
+
+        Returns special members of the :ref:`WdLineSpacing` enumeration when line
+        spacing is single, double, or 1.5 lines.
+        """
+        if lineRule == WD_LINE_SPACING.MULTIPLE:
+            if line == Twips(240):
+                return WD_LINE_SPACING.SINGLE
+            if line == Twips(360):
+                return WD_LINE_SPACING.ONE_POINT_FIVE
+            if line == Twips(480):
+                return WD_LINE_SPACING.DOUBLE
+        return lineRule