Initial commit (Clean history)

This commit is contained in:
anhduy-tech
2025-12-30 11:27:14 +07:00
commit ef48c93de0
19255 changed files with 3248867 additions and 0 deletions

View File

@@ -0,0 +1,150 @@
"""Base classes and other objects used by enumerations."""
from __future__ import annotations
import enum
import textwrap
from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar
if TYPE_CHECKING:
from typing_extensions import Self
_T = TypeVar("_T", bound="BaseXmlEnum")
class BaseEnum(int, enum.Enum):
"""Base class for Enums that do not map XML attr values.
The enum's value will be an integer, corresponding to the integer assigned the
corresponding member in the MS API enum of the same name.
"""
def __new__(cls, ms_api_value: int, docstr: str):
self = int.__new__(cls, ms_api_value)
self._value_ = ms_api_value
self.__doc__ = docstr.strip()
return self
def __str__(self):
"""The symbolic name and string value of this member, e.g. 'MIDDLE (3)'."""
return f"{self.name} ({self.value})"
class BaseXmlEnum(int, enum.Enum):
"""Base class for Enums that also map XML attr values.
The enum's value will be an integer, corresponding to the integer assigned the
corresponding member in the MS API enum of the same name.
"""
xml_value: str | None
def __new__(cls, ms_api_value: int, xml_value: str | None, docstr: str):
self = int.__new__(cls, ms_api_value)
self._value_ = ms_api_value
self.xml_value = xml_value
self.__doc__ = docstr.strip()
return self
def __str__(self):
"""The symbolic name and string value of this member, e.g. 'MIDDLE (3)'."""
return f"{self.name} ({self.value})"
@classmethod
def from_xml(cls, xml_value: str | None) -> Self:
"""Enumeration member corresponding to XML attribute value `xml_value`.
Example::
>>> WD_PARAGRAPH_ALIGNMENT.from_xml("center")
WD_PARAGRAPH_ALIGNMENT.CENTER
"""
member = next((member for member in cls if member.xml_value == xml_value), None)
if member is None:
raise ValueError(f"{cls.__name__} has no XML mapping for '{xml_value}'")
return member
@classmethod
def to_xml(cls: Type[_T], value: int | _T | None) -> str | None:
"""XML value of this enum member, generally an XML attribute value."""
# -- presence of multi-arg `__new__()` method fools type-checker, but getting a
# -- member by its value using EnumCls(val) works as usual.
member = cls(value)
xml_value = member.xml_value
if not xml_value:
raise ValueError(f"{cls.__name__}.{member.name} has no XML representation")
return xml_value
class DocsPageFormatter:
"""Generate an .rst doc page for an enumeration.
Formats a RestructuredText documention page (string) for the enumeration class parts
passed to the constructor. An immutable one-shot service object.
"""
def __init__(self, clsname: str, clsdict: Dict[str, Any]):
self._clsname = clsname
self._clsdict = clsdict
@property
def page_str(self):
"""The RestructuredText documentation page for the enumeration.
This is the only API member for the class.
"""
tmpl = ".. _%s:\n\n%s\n\n%s\n\n----\n\n%s"
components = (
self._ms_name,
self._page_title,
self._intro_text,
self._member_defs,
)
return tmpl % components
@property
def _intro_text(self):
"""Docstring of the enumeration, formatted for documentation page."""
try:
cls_docstring = self._clsdict["__doc__"]
except KeyError:
cls_docstring = ""
if cls_docstring is None:
return ""
return textwrap.dedent(cls_docstring).strip()
def _member_def(self, member: BaseEnum | BaseXmlEnum):
"""Return an individual member definition formatted as an RST glossary entry,
wrapped to fit within 78 columns."""
assert member.__doc__ is not None
member_docstring = textwrap.dedent(member.__doc__).strip()
member_docstring = textwrap.fill(
member_docstring,
width=78,
initial_indent=" " * 4,
subsequent_indent=" " * 4,
)
return "%s\n%s\n" % (member.name, member_docstring)
@property
def _member_defs(self):
"""A single string containing the aggregated member definitions section of the
documentation page."""
members = self._clsdict["__members__"]
member_defs = [self._member_def(member) for member in members if member.name is not None]
return "\n".join(member_defs)
@property
def _ms_name(self):
"""The Microsoft API name for this enumeration."""
return self._clsdict["__ms_name__"]
@property
def _page_title(self):
"""The title for the documentation page, formatted as code (surrounded in
double-backtics) and underlined with '=' characters."""
title_underscore = "=" * (len(self._clsname) + 4)
return "``%s``\n%s" % (self._clsname, title_underscore)

View File

@@ -0,0 +1,103 @@
"""Enumerations used by DrawingML objects."""
from .base import BaseEnum, BaseXmlEnum
class MSO_COLOR_TYPE(BaseEnum):
"""Specifies the color specification scheme.
Example::
from docx.enum.dml import MSO_COLOR_TYPE
assert font.color.type == MSO_COLOR_TYPE.SCHEME
MS API name: `MsoColorType`
http://msdn.microsoft.com/en-us/library/office/ff864912(v=office.15).aspx
"""
RGB = (1, "Color is specified by an |RGBColor| value.")
"""Color is specified by an |RGBColor| value."""
THEME = (2, "Color is one of the preset theme colors.")
"""Color is one of the preset theme colors."""
AUTO = (101, "Color is determined automatically by the application.")
"""Color is determined automatically by the application."""
class MSO_THEME_COLOR_INDEX(BaseXmlEnum):
"""Indicates the Office theme color, one of those shown in the color gallery on the
formatting ribbon.
Alias: ``MSO_THEME_COLOR``
Example::
from docx.enum.dml import MSO_THEME_COLOR
font.color.theme_color = MSO_THEME_COLOR.ACCENT_1
MS API name: `MsoThemeColorIndex`
http://msdn.microsoft.com/en-us/library/office/ff860782(v=office.15).aspx
"""
NOT_THEME_COLOR = (0, "UNMAPPED", "Indicates the color is not a theme color.")
"""Indicates the color is not a theme color."""
ACCENT_1 = (5, "accent1", "Specifies the Accent 1 theme color.")
"""Specifies the Accent 1 theme color."""
ACCENT_2 = (6, "accent2", "Specifies the Accent 2 theme color.")
"""Specifies the Accent 2 theme color."""
ACCENT_3 = (7, "accent3", "Specifies the Accent 3 theme color.")
"""Specifies the Accent 3 theme color."""
ACCENT_4 = (8, "accent4", "Specifies the Accent 4 theme color.")
"""Specifies the Accent 4 theme color."""
ACCENT_5 = (9, "accent5", "Specifies the Accent 5 theme color.")
"""Specifies the Accent 5 theme color."""
ACCENT_6 = (10, "accent6", "Specifies the Accent 6 theme color.")
"""Specifies the Accent 6 theme color."""
BACKGROUND_1 = (14, "background1", "Specifies the Background 1 theme color.")
"""Specifies the Background 1 theme color."""
BACKGROUND_2 = (16, "background2", "Specifies the Background 2 theme color.")
"""Specifies the Background 2 theme color."""
DARK_1 = (1, "dark1", "Specifies the Dark 1 theme color.")
"""Specifies the Dark 1 theme color."""
DARK_2 = (3, "dark2", "Specifies the Dark 2 theme color.")
"""Specifies the Dark 2 theme color."""
FOLLOWED_HYPERLINK = (
12,
"followedHyperlink",
"Specifies the theme color for a clicked hyperlink.",
)
"""Specifies the theme color for a clicked hyperlink."""
HYPERLINK = (11, "hyperlink", "Specifies the theme color for a hyperlink.")
"""Specifies the theme color for a hyperlink."""
LIGHT_1 = (2, "light1", "Specifies the Light 1 theme color.")
"""Specifies the Light 1 theme color."""
LIGHT_2 = (4, "light2", "Specifies the Light 2 theme color.")
"""Specifies the Light 2 theme color."""
TEXT_1 = (13, "text1", "Specifies the Text 1 theme color.")
"""Specifies the Text 1 theme color."""
TEXT_2 = (15, "text2", "Specifies the Text 2 theme color.")
"""Specifies the Text 2 theme color."""
MSO_THEME_COLOR = MSO_THEME_COLOR_INDEX

View File

@@ -0,0 +1,86 @@
"""Enumerations related to the main document in WordprocessingML files."""
from .base import BaseXmlEnum
class WD_HEADER_FOOTER_INDEX(BaseXmlEnum):
"""Alias: **WD_HEADER_FOOTER**
Specifies one of the three possible header/footer definitions for a section.
For internal use only; not part of the python-docx API.
MS API name: `WdHeaderFooterIndex`
URL: https://docs.microsoft.com/en-us/office/vba/api/word.wdheaderfooterindex
"""
PRIMARY = (1, "default", "Header for odd pages or all if no even header.")
"""Header for odd pages or all if no even header."""
FIRST_PAGE = (2, "first", "Header for first page of section.")
"""Header for first page of section."""
EVEN_PAGE = (3, "even", "Header for even pages of recto/verso section.")
"""Header for even pages of recto/verso section."""
WD_HEADER_FOOTER = WD_HEADER_FOOTER_INDEX
class WD_ORIENTATION(BaseXmlEnum):
"""Alias: **WD_ORIENT**
Specifies the page layout orientation.
Example::
from docx.enum.section import WD_ORIENT
section = document.sections[-1] section.orientation = WD_ORIENT.LANDSCAPE
MS API name: `WdOrientation`
MS API URL: http://msdn.microsoft.com/en-us/library/office/ff837902.aspx
"""
PORTRAIT = (0, "portrait", "Portrait orientation.")
"""Portrait orientation."""
LANDSCAPE = (1, "landscape", "Landscape orientation.")
"""Landscape orientation."""
WD_ORIENT = WD_ORIENTATION
class WD_SECTION_START(BaseXmlEnum):
"""Alias: **WD_SECTION**
Specifies the start type of a section break.
Example::
from docx.enum.section import WD_SECTION
section = document.sections[0] section.start_type = WD_SECTION.NEW_PAGE
MS API name: `WdSectionStart`
MS API URL: http://msdn.microsoft.com/en-us/library/office/ff840975.aspx
"""
CONTINUOUS = (0, "continuous", "Continuous section break.")
"""Continuous section break."""
NEW_COLUMN = (1, "nextColumn", "New column section break.")
"""New column section break."""
NEW_PAGE = (2, "nextPage", "New page section break.")
"""New page section break."""
EVEN_PAGE = (3, "evenPage", "Even pages section break.")
"""Even pages section break."""
ODD_PAGE = (4, "oddPage", "Section begins on next odd page.")
"""Section begins on next odd page."""
WD_SECTION = WD_SECTION_START

View File

@@ -0,0 +1,19 @@
"""Enumerations related to DrawingML shapes in WordprocessingML files."""
import enum
class WD_INLINE_SHAPE_TYPE(enum.Enum):
"""Corresponds to WdInlineShapeType enumeration.
http://msdn.microsoft.com/en-us/library/office/ff192587.aspx.
"""
CHART = 12
LINKED_PICTURE = 4
PICTURE = 3
SMART_ART = 15
NOT_IMPLEMENTED = -6
WD_INLINE_SHAPE = WD_INLINE_SHAPE_TYPE

View File

@@ -0,0 +1,452 @@
"""Enumerations related to styles."""
from .base import BaseEnum, BaseXmlEnum
class WD_BUILTIN_STYLE(BaseEnum):
"""Alias: **WD_STYLE**
Specifies a built-in Microsoft Word style.
Example::
from docx import Document
from docx.enum.style import WD_STYLE
document = Document()
styles = document.styles
style = styles[WD_STYLE.BODY_TEXT]
MS API name: `WdBuiltinStyle`
http://msdn.microsoft.com/en-us/library/office/ff835210.aspx
"""
BLOCK_QUOTATION = (-85, "Block Text.")
"""Block Text."""
BODY_TEXT = (-67, "Body Text.")
"""Body Text."""
BODY_TEXT_2 = (-81, "Body Text 2.")
"""Body Text 2."""
BODY_TEXT_3 = (-82, "Body Text 3.")
"""Body Text 3."""
BODY_TEXT_FIRST_INDENT = (-78, "Body Text First Indent.")
"""Body Text First Indent."""
BODY_TEXT_FIRST_INDENT_2 = (-79, "Body Text First Indent 2.")
"""Body Text First Indent 2."""
BODY_TEXT_INDENT = (-68, "Body Text Indent.")
"""Body Text Indent."""
BODY_TEXT_INDENT_2 = (-83, "Body Text Indent 2.")
"""Body Text Indent 2."""
BODY_TEXT_INDENT_3 = (-84, "Body Text Indent 3.")
"""Body Text Indent 3."""
BOOK_TITLE = (-265, "Book Title.")
"""Book Title."""
CAPTION = (-35, "Caption.")
"""Caption."""
CLOSING = (-64, "Closing.")
"""Closing."""
COMMENT_REFERENCE = (-40, "Comment Reference.")
"""Comment Reference."""
COMMENT_TEXT = (-31, "Comment Text.")
"""Comment Text."""
DATE = (-77, "Date.")
"""Date."""
DEFAULT_PARAGRAPH_FONT = (-66, "Default Paragraph Font.")
"""Default Paragraph Font."""
EMPHASIS = (-89, "Emphasis.")
"""Emphasis."""
ENDNOTE_REFERENCE = (-43, "Endnote Reference.")
"""Endnote Reference."""
ENDNOTE_TEXT = (-44, "Endnote Text.")
"""Endnote Text."""
ENVELOPE_ADDRESS = (-37, "Envelope Address.")
"""Envelope Address."""
ENVELOPE_RETURN = (-38, "Envelope Return.")
"""Envelope Return."""
FOOTER = (-33, "Footer.")
"""Footer."""
FOOTNOTE_REFERENCE = (-39, "Footnote Reference.")
"""Footnote Reference."""
FOOTNOTE_TEXT = (-30, "Footnote Text.")
"""Footnote Text."""
HEADER = (-32, "Header.")
"""Header."""
HEADING_1 = (-2, "Heading 1.")
"""Heading 1."""
HEADING_2 = (-3, "Heading 2.")
"""Heading 2."""
HEADING_3 = (-4, "Heading 3.")
"""Heading 3."""
HEADING_4 = (-5, "Heading 4.")
"""Heading 4."""
HEADING_5 = (-6, "Heading 5.")
"""Heading 5."""
HEADING_6 = (-7, "Heading 6.")
"""Heading 6."""
HEADING_7 = (-8, "Heading 7.")
"""Heading 7."""
HEADING_8 = (-9, "Heading 8.")
"""Heading 8."""
HEADING_9 = (-10, "Heading 9.")
"""Heading 9."""
HTML_ACRONYM = (-96, "HTML Acronym.")
"""HTML Acronym."""
HTML_ADDRESS = (-97, "HTML Address.")
"""HTML Address."""
HTML_CITE = (-98, "HTML Cite.")
"""HTML Cite."""
HTML_CODE = (-99, "HTML Code.")
"""HTML Code."""
HTML_DFN = (-100, "HTML Definition.")
"""HTML Definition."""
HTML_KBD = (-101, "HTML Keyboard.")
"""HTML Keyboard."""
HTML_NORMAL = (-95, "Normal (Web).")
"""Normal (Web)."""
HTML_PRE = (-102, "HTML Preformatted.")
"""HTML Preformatted."""
HTML_SAMP = (-103, "HTML Sample.")
"""HTML Sample."""
HTML_TT = (-104, "HTML Typewriter.")
"""HTML Typewriter."""
HTML_VAR = (-105, "HTML Variable.")
"""HTML Variable."""
HYPERLINK = (-86, "Hyperlink.")
"""Hyperlink."""
HYPERLINK_FOLLOWED = (-87, "Followed Hyperlink.")
"""Followed Hyperlink."""
INDEX_1 = (-11, "Index 1.")
"""Index 1."""
INDEX_2 = (-12, "Index 2.")
"""Index 2."""
INDEX_3 = (-13, "Index 3.")
"""Index 3."""
INDEX_4 = (-14, "Index 4.")
"""Index 4."""
INDEX_5 = (-15, "Index 5.")
"""Index 5."""
INDEX_6 = (-16, "Index 6.")
"""Index 6."""
INDEX_7 = (-17, "Index 7.")
"""Index 7."""
INDEX_8 = (-18, "Index 8.")
"""Index 8."""
INDEX_9 = (-19, "Index 9.")
"""Index 9."""
INDEX_HEADING = (-34, "Index Heading")
"""Index Heading"""
INTENSE_EMPHASIS = (-262, "Intense Emphasis.")
"""Intense Emphasis."""
INTENSE_QUOTE = (-182, "Intense Quote.")
"""Intense Quote."""
INTENSE_REFERENCE = (-264, "Intense Reference.")
"""Intense Reference."""
LINE_NUMBER = (-41, "Line Number.")
"""Line Number."""
LIST = (-48, "List.")
"""List."""
LIST_2 = (-51, "List 2.")
"""List 2."""
LIST_3 = (-52, "List 3.")
"""List 3."""
LIST_4 = (-53, "List 4.")
"""List 4."""
LIST_5 = (-54, "List 5.")
"""List 5."""
LIST_BULLET = (-49, "List Bullet.")
"""List Bullet."""
LIST_BULLET_2 = (-55, "List Bullet 2.")
"""List Bullet 2."""
LIST_BULLET_3 = (-56, "List Bullet 3.")
"""List Bullet 3."""
LIST_BULLET_4 = (-57, "List Bullet 4.")
"""List Bullet 4."""
LIST_BULLET_5 = (-58, "List Bullet 5.")
"""List Bullet 5."""
LIST_CONTINUE = (-69, "List Continue.")
"""List Continue."""
LIST_CONTINUE_2 = (-70, "List Continue 2.")
"""List Continue 2."""
LIST_CONTINUE_3 = (-71, "List Continue 3.")
"""List Continue 3."""
LIST_CONTINUE_4 = (-72, "List Continue 4.")
"""List Continue 4."""
LIST_CONTINUE_5 = (-73, "List Continue 5.")
"""List Continue 5."""
LIST_NUMBER = (-50, "List Number.")
"""List Number."""
LIST_NUMBER_2 = (-59, "List Number 2.")
"""List Number 2."""
LIST_NUMBER_3 = (-60, "List Number 3.")
"""List Number 3."""
LIST_NUMBER_4 = (-61, "List Number 4.")
"""List Number 4."""
LIST_NUMBER_5 = (-62, "List Number 5.")
"""List Number 5."""
LIST_PARAGRAPH = (-180, "List Paragraph.")
"""List Paragraph."""
MACRO_TEXT = (-46, "Macro Text.")
"""Macro Text."""
MESSAGE_HEADER = (-74, "Message Header.")
"""Message Header."""
NAV_PANE = (-90, "Document Map.")
"""Document Map."""
NORMAL = (-1, "Normal.")
"""Normal."""
NORMAL_INDENT = (-29, "Normal Indent.")
"""Normal Indent."""
NORMAL_OBJECT = (-158, "Normal (applied to an object).")
"""Normal (applied to an object)."""
NORMAL_TABLE = (-106, "Normal (applied within a table).")
"""Normal (applied within a table)."""
NOTE_HEADING = (-80, "Note Heading.")
"""Note Heading."""
PAGE_NUMBER = (-42, "Page Number.")
"""Page Number."""
PLAIN_TEXT = (-91, "Plain Text.")
"""Plain Text."""
QUOTE = (-181, "Quote.")
"""Quote."""
SALUTATION = (-76, "Salutation.")
"""Salutation."""
SIGNATURE = (-65, "Signature.")
"""Signature."""
STRONG = (-88, "Strong.")
"""Strong."""
SUBTITLE = (-75, "Subtitle.")
"""Subtitle."""
SUBTLE_EMPHASIS = (-261, "Subtle Emphasis.")
"""Subtle Emphasis."""
SUBTLE_REFERENCE = (-263, "Subtle Reference.")
"""Subtle Reference."""
TABLE_COLORFUL_GRID = (-172, "Colorful Grid.")
"""Colorful Grid."""
TABLE_COLORFUL_LIST = (-171, "Colorful List.")
"""Colorful List."""
TABLE_COLORFUL_SHADING = (-170, "Colorful Shading.")
"""Colorful Shading."""
TABLE_DARK_LIST = (-169, "Dark List.")
"""Dark List."""
TABLE_LIGHT_GRID = (-161, "Light Grid.")
"""Light Grid."""
TABLE_LIGHT_GRID_ACCENT_1 = (-175, "Light Grid Accent 1.")
"""Light Grid Accent 1."""
TABLE_LIGHT_LIST = (-160, "Light List.")
"""Light List."""
TABLE_LIGHT_LIST_ACCENT_1 = (-174, "Light List Accent 1.")
"""Light List Accent 1."""
TABLE_LIGHT_SHADING = (-159, "Light Shading.")
"""Light Shading."""
TABLE_LIGHT_SHADING_ACCENT_1 = (-173, "Light Shading Accent 1.")
"""Light Shading Accent 1."""
TABLE_MEDIUM_GRID_1 = (-166, "Medium Grid 1.")
"""Medium Grid 1."""
TABLE_MEDIUM_GRID_2 = (-167, "Medium Grid 2.")
"""Medium Grid 2."""
TABLE_MEDIUM_GRID_3 = (-168, "Medium Grid 3.")
"""Medium Grid 3."""
TABLE_MEDIUM_LIST_1 = (-164, "Medium List 1.")
"""Medium List 1."""
TABLE_MEDIUM_LIST_1_ACCENT_1 = (-178, "Medium List 1 Accent 1.")
"""Medium List 1 Accent 1."""
TABLE_MEDIUM_LIST_2 = (-165, "Medium List 2.")
"""Medium List 2."""
TABLE_MEDIUM_SHADING_1 = (-162, "Medium Shading 1.")
"""Medium Shading 1."""
TABLE_MEDIUM_SHADING_1_ACCENT_1 = (-176, "Medium Shading 1 Accent 1.")
"""Medium Shading 1 Accent 1."""
TABLE_MEDIUM_SHADING_2 = (-163, "Medium Shading 2.")
"""Medium Shading 2."""
TABLE_MEDIUM_SHADING_2_ACCENT_1 = (-177, "Medium Shading 2 Accent 1.")
"""Medium Shading 2 Accent 1."""
TABLE_OF_AUTHORITIES = (-45, "Table of Authorities.")
"""Table of Authorities."""
TABLE_OF_FIGURES = (-36, "Table of Figures.")
"""Table of Figures."""
TITLE = (-63, "Title.")
"""Title."""
TOAHEADING = (-47, "TOA Heading.")
"""TOA Heading."""
TOC_1 = (-20, "TOC 1.")
"""TOC 1."""
TOC_2 = (-21, "TOC 2.")
"""TOC 2."""
TOC_3 = (-22, "TOC 3.")
"""TOC 3."""
TOC_4 = (-23, "TOC 4.")
"""TOC 4."""
TOC_5 = (-24, "TOC 5.")
"""TOC 5."""
TOC_6 = (-25, "TOC 6.")
"""TOC 6."""
TOC_7 = (-26, "TOC 7.")
"""TOC 7."""
TOC_8 = (-27, "TOC 8.")
"""TOC 8."""
TOC_9 = (-28, "TOC 9.")
"""TOC 9."""
WD_STYLE = WD_BUILTIN_STYLE
class WD_STYLE_TYPE(BaseXmlEnum):
"""Specifies one of the four style types: paragraph, character, list, or table.
Example::
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
styles = Document().styles
assert styles[0].type == WD_STYLE_TYPE.PARAGRAPH
MS API name: `WdStyleType`
http://msdn.microsoft.com/en-us/library/office/ff196870.aspx
"""
CHARACTER = (2, "character", "Character style.")
"""Character style."""
LIST = (4, "numbering", "List style.")
"""List style."""
PARAGRAPH = (1, "paragraph", "Paragraph style.")
"""Paragraph style."""
TABLE = (3, "table", "Table style.")
"""Table style."""

View File

@@ -0,0 +1,136 @@
"""Enumerations related to tables in WordprocessingML files."""
from docx.enum.base import BaseEnum, BaseXmlEnum
class WD_CELL_VERTICAL_ALIGNMENT(BaseXmlEnum):
"""Alias: **WD_ALIGN_VERTICAL**
Specifies the vertical alignment of text in one or more cells of a table.
Example::
from docx.enum.table import WD_ALIGN_VERTICAL
table = document.add_table(3, 3)
table.cell(0, 0).vertical_alignment = WD_ALIGN_VERTICAL.BOTTOM
MS API name: `WdCellVerticalAlignment`
https://msdn.microsoft.com/en-us/library/office/ff193345.aspx
"""
TOP = (0, "top", "Text is aligned to the top border of the cell.")
"""Text is aligned to the top border of the cell."""
CENTER = (1, "center", "Text is aligned to the center of the cell.")
"""Text is aligned to the center of the cell."""
BOTTOM = (3, "bottom", "Text is aligned to the bottom border of the cell.")
"""Text is aligned to the bottom border of the cell."""
BOTH = (
101,
"both",
"This is an option in the OpenXml spec, but not in Word itself. It's not"
" clear what Word behavior this setting produces. If you find out please"
" let us know and we'll update this documentation. Otherwise, probably best"
" to avoid this option.",
)
"""This is an option in the OpenXml spec, but not in Word itself.
It's not clear what Word behavior this setting produces. If you find out please let
us know and we'll update this documentation. Otherwise, probably best to avoid this
option.
"""
WD_ALIGN_VERTICAL = WD_CELL_VERTICAL_ALIGNMENT
class WD_ROW_HEIGHT_RULE(BaseXmlEnum):
"""Alias: **WD_ROW_HEIGHT**
Specifies the rule for determining the height of a table row
Example::
from docx.enum.table import WD_ROW_HEIGHT_RULE
table = document.add_table(3, 3)
table.rows[0].height_rule = WD_ROW_HEIGHT_RULE.EXACTLY
MS API name: `WdRowHeightRule`
https://msdn.microsoft.com/en-us/library/office/ff193620.aspx
"""
AUTO = (
0,
"auto",
"The row height is adjusted to accommodate the tallest value in the row.",
)
"""The row height is adjusted to accommodate the tallest value in the row."""
AT_LEAST = (1, "atLeast", "The row height is at least a minimum specified value.")
"""The row height is at least a minimum specified value."""
EXACTLY = (2, "exact", "The row height is an exact value.")
"""The row height is an exact value."""
WD_ROW_HEIGHT = WD_ROW_HEIGHT_RULE
class WD_TABLE_ALIGNMENT(BaseXmlEnum):
"""Specifies table justification type.
Example::
from docx.enum.table import WD_TABLE_ALIGNMENT
table = document.add_table(3, 3)
table.alignment = WD_TABLE_ALIGNMENT.CENTER
MS API name: `WdRowAlignment`
http://office.microsoft.com/en-us/word-help/HV080607259.aspx
"""
LEFT = (0, "left", "Left-aligned")
"""Left-aligned"""
CENTER = (1, "center", "Center-aligned.")
"""Center-aligned."""
RIGHT = (2, "right", "Right-aligned.")
"""Right-aligned."""
class WD_TABLE_DIRECTION(BaseEnum):
"""Specifies the direction in which an application orders cells in the specified
table or row.
Example::
from docx.enum.table import WD_TABLE_DIRECTION
table = document.add_table(3, 3)
table.direction = WD_TABLE_DIRECTION.RTL
MS API name: `WdTableDirection`
http://msdn.microsoft.com/en-us/library/ff835141.aspx
"""
LTR = (
0,
"The table or row is arranged with the first column in the leftmost position.",
)
"""The table or row is arranged with the first column in the leftmost position."""
RTL = (
1,
"The table or row is arranged with the first column in the rightmost position.",
)
"""The table or row is arranged with the first column in the rightmost position."""

View File

@@ -0,0 +1,367 @@
"""Enumerations related to text in WordprocessingML files."""
from __future__ import annotations
import enum
from docx.enum.base import BaseXmlEnum
class WD_PARAGRAPH_ALIGNMENT(BaseXmlEnum):
"""Alias: **WD_ALIGN_PARAGRAPH**
Specifies paragraph justification type.
Example::
from docx.enum.text import WD_ALIGN_PARAGRAPH
paragraph = document.add_paragraph()
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
"""
LEFT = (0, "left", "Left-aligned")
"""Left-aligned"""
CENTER = (1, "center", "Center-aligned.")
"""Center-aligned."""
RIGHT = (2, "right", "Right-aligned.")
"""Right-aligned."""
JUSTIFY = (3, "both", "Fully justified.")
"""Fully justified."""
DISTRIBUTE = (
4,
"distribute",
"Paragraph characters are distributed to fill entire width of paragraph.",
)
"""Paragraph characters are distributed to fill entire width of paragraph."""
JUSTIFY_MED = (
5,
"mediumKashida",
"Justified with a medium character compression ratio.",
)
"""Justified with a medium character compression ratio."""
JUSTIFY_HI = (
7,
"highKashida",
"Justified with a high character compression ratio.",
)
"""Justified with a high character compression ratio."""
JUSTIFY_LOW = (8, "lowKashida", "Justified with a low character compression ratio.")
"""Justified with a low character compression ratio."""
THAI_JUSTIFY = (
9,
"thaiDistribute",
"Justified according to Thai formatting layout.",
)
"""Justified according to Thai formatting layout."""
WD_ALIGN_PARAGRAPH = WD_PARAGRAPH_ALIGNMENT
class WD_BREAK_TYPE(enum.Enum):
"""Corresponds to WdBreakType enumeration.
http://msdn.microsoft.com/en-us/library/office/ff195905.aspx.
"""
COLUMN = 8
LINE = 6
LINE_CLEAR_LEFT = 9
LINE_CLEAR_RIGHT = 10
LINE_CLEAR_ALL = 11 # -- added for consistency, not in MS version --
PAGE = 7
SECTION_CONTINUOUS = 3
SECTION_EVEN_PAGE = 4
SECTION_NEXT_PAGE = 2
SECTION_ODD_PAGE = 5
TEXT_WRAPPING = 11
WD_BREAK = WD_BREAK_TYPE
class WD_COLOR_INDEX(BaseXmlEnum):
"""Specifies a standard preset color to apply.
Used for font highlighting and perhaps other applications.
* MS API name: `WdColorIndex`
* URL: https://msdn.microsoft.com/EN-US/library/office/ff195343.aspx
"""
INHERITED = (-1, None, "Color is inherited from the style hierarchy.")
"""Color is inherited from the style hierarchy."""
AUTO = (0, "default", "Automatic color. Default; usually black.")
"""Automatic color. Default; usually black."""
BLACK = (1, "black", "Black color.")
"""Black color."""
BLUE = (2, "blue", "Blue color")
"""Blue color"""
BRIGHT_GREEN = (4, "green", "Bright green color.")
"""Bright green color."""
DARK_BLUE = (9, "darkBlue", "Dark blue color.")
"""Dark blue color."""
DARK_RED = (13, "darkRed", "Dark red color.")
"""Dark red color."""
DARK_YELLOW = (14, "darkYellow", "Dark yellow color.")
"""Dark yellow color."""
GRAY_25 = (16, "lightGray", "25% shade of gray color.")
"""25% shade of gray color."""
GRAY_50 = (15, "darkGray", "50% shade of gray color.")
"""50% shade of gray color."""
GREEN = (11, "darkGreen", "Green color.")
"""Green color."""
PINK = (5, "magenta", "Pink color.")
"""Pink color."""
RED = (6, "red", "Red color.")
"""Red color."""
TEAL = (10, "darkCyan", "Teal color.")
"""Teal color."""
TURQUOISE = (3, "cyan", "Turquoise color.")
"""Turquoise color."""
VIOLET = (12, "darkMagenta", "Violet color.")
"""Violet color."""
WHITE = (8, "white", "White color.")
"""White color."""
YELLOW = (7, "yellow", "Yellow color.")
"""Yellow color."""
WD_COLOR = WD_COLOR_INDEX
class WD_LINE_SPACING(BaseXmlEnum):
"""Specifies a line spacing format to be applied to a paragraph.
Example::
from docx.enum.text import WD_LINE_SPACING
paragraph = document.add_paragraph()
paragraph.line_spacing_rule = WD_LINE_SPACING.EXACTLY
MS API name: `WdLineSpacing`
URL: http://msdn.microsoft.com/en-us/library/office/ff844910.aspx
"""
SINGLE = (0, "UNMAPPED", "Single spaced (default).")
"""Single spaced (default)."""
ONE_POINT_FIVE = (1, "UNMAPPED", "Space-and-a-half line spacing.")
"""Space-and-a-half line spacing."""
DOUBLE = (2, "UNMAPPED", "Double spaced.")
"""Double spaced."""
AT_LEAST = (
3,
"atLeast",
"Minimum line spacing is specified amount. Amount is specified separately.",
)
"""Minimum line spacing is specified amount. Amount is specified separately."""
EXACTLY = (
4,
"exact",
"Line spacing is exactly specified amount. Amount is specified separately.",
)
"""Line spacing is exactly specified amount. Amount is specified separately."""
MULTIPLE = (
5,
"auto",
"Line spacing is specified as multiple of line heights. Changing font size"
" will change line spacing proportionately.",
)
"""Line spacing is specified as multiple of line heights. Changing font size will
change the line spacing proportionately."""
class WD_TAB_ALIGNMENT(BaseXmlEnum):
"""Specifies the tab stop alignment to apply.
MS API name: `WdTabAlignment`
URL: https://msdn.microsoft.com/EN-US/library/office/ff195609.aspx
"""
LEFT = (0, "left", "Left-aligned.")
"""Left-aligned."""
CENTER = (1, "center", "Center-aligned.")
"""Center-aligned."""
RIGHT = (2, "right", "Right-aligned.")
"""Right-aligned."""
DECIMAL = (3, "decimal", "Decimal-aligned.")
"""Decimal-aligned."""
BAR = (4, "bar", "Bar-aligned.")
"""Bar-aligned."""
LIST = (6, "list", "List-aligned. (deprecated)")
"""List-aligned. (deprecated)"""
CLEAR = (101, "clear", "Clear an inherited tab stop.")
"""Clear an inherited tab stop."""
END = (102, "end", "Right-aligned. (deprecated)")
"""Right-aligned. (deprecated)"""
NUM = (103, "num", "Left-aligned. (deprecated)")
"""Left-aligned. (deprecated)"""
START = (104, "start", "Left-aligned. (deprecated)")
"""Left-aligned. (deprecated)"""
class WD_TAB_LEADER(BaseXmlEnum):
"""Specifies the character to use as the leader with formatted tabs.
MS API name: `WdTabLeader`
URL: https://msdn.microsoft.com/en-us/library/office/ff845050.aspx
"""
SPACES = (0, "none", "Spaces. Default.")
"""Spaces. Default."""
DOTS = (1, "dot", "Dots.")
"""Dots."""
DASHES = (2, "hyphen", "Dashes.")
"""Dashes."""
LINES = (3, "underscore", "Double lines.")
"""Double lines."""
HEAVY = (4, "heavy", "A heavy line.")
"""A heavy line."""
MIDDLE_DOT = (5, "middleDot", "A vertically-centered dot.")
"""A vertically-centered dot."""
class WD_UNDERLINE(BaseXmlEnum):
"""Specifies the style of underline applied to a run of characters.
MS API name: `WdUnderline`
URL: http://msdn.microsoft.com/en-us/library/office/ff822388.aspx
"""
INHERITED = (-1, None, "Inherit underline setting from containing paragraph.")
"""Inherit underline setting from containing paragraph."""
NONE = (
0,
"none",
"No underline.\n\nThis setting overrides any inherited underline value, so can"
" be used to remove underline from a run that inherits underlining from its"
" containing paragraph. Note this is not the same as assigning |None| to"
" Run.underline. |None| is a valid assignment value, but causes the run to"
" inherit its underline value. Assigning `WD_UNDERLINE.NONE` causes"
" underlining to be unconditionally turned off.",
)
"""No underline.
This setting overrides any inherited underline value, so can be used to remove
underline from a run that inherits underlining from its containing paragraph. Note
this is not the same as assigning |None| to Run.underline. |None| is a valid
assignment value, but causes the run to inherit its underline value. Assigning
``WD_UNDERLINE.NONE`` causes underlining to be unconditionally turned off.
"""
SINGLE = (
1,
"single",
"A single line.\n\nNote that this setting is write-only in the sense that"
" |True| (rather than `WD_UNDERLINE.SINGLE`) is returned for a run having"
" this setting.",
)
"""A single line.
Note that this setting is write-only in the sense that |True|
(rather than ``WD_UNDERLINE.SINGLE``) is returned for a run having this setting.
"""
WORDS = (2, "words", "Underline individual words only.")
"""Underline individual words only."""
DOUBLE = (3, "double", "A double line.")
"""A double line."""
DOTTED = (4, "dotted", "Dots.")
"""Dots."""
THICK = (6, "thick", "A single thick line.")
"""A single thick line."""
DASH = (7, "dash", "Dashes.")
"""Dashes."""
DOT_DASH = (9, "dotDash", "Alternating dots and dashes.")
"""Alternating dots and dashes."""
DOT_DOT_DASH = (10, "dotDotDash", "An alternating dot-dot-dash pattern.")
"""An alternating dot-dot-dash pattern."""
WAVY = (11, "wave", "A single wavy line.")
"""A single wavy line."""
DOTTED_HEAVY = (20, "dottedHeavy", "Heavy dots.")
"""Heavy dots."""
DASH_HEAVY = (23, "dashedHeavy", "Heavy dashes.")
"""Heavy dashes."""
DOT_DASH_HEAVY = (25, "dashDotHeavy", "Alternating heavy dots and heavy dashes.")
"""Alternating heavy dots and heavy dashes."""
DOT_DOT_DASH_HEAVY = (
26,
"dashDotDotHeavy",
"An alternating heavy dot-dot-dash pattern.",
)
"""An alternating heavy dot-dot-dash pattern."""
WAVY_HEAVY = (27, "wavyHeavy", "A heavy wavy line.")
"""A heavy wavy line."""
DASH_LONG = (39, "dashLong", "Long dashes.")
"""Long dashes."""
WAVY_DOUBLE = (43, "wavyDouble", "A double wavy line.")
"""A double wavy line."""
DASH_LONG_HEAVY = (55, "dashLongHeavy", "Long heavy dashes.")
"""Long heavy dashes."""