Data structure for paragraph properties extracted from a PowerPoint paragraph.
| 135 | |
| 136 | |
| 137 | class ParagraphData: |
| 138 | """Data structure for paragraph properties extracted from a PowerPoint paragraph.""" |
| 139 | |
| 140 | def __init__(self, paragraph: Any): |
| 141 | """Initialize from a PowerPoint paragraph object. |
| 142 | |
| 143 | Args: |
| 144 | paragraph: The PowerPoint paragraph object |
| 145 | """ |
| 146 | self.text: str = paragraph.text.strip() |
| 147 | self.bullet: bool = False |
| 148 | self.level: Optional[int] = None |
| 149 | self.alignment: Optional[str] = None |
| 150 | self.space_before: Optional[float] = None |
| 151 | self.space_after: Optional[float] = None |
| 152 | self.font_name: Optional[str] = None |
| 153 | self.font_size: Optional[float] = None |
| 154 | self.bold: Optional[bool] = None |
| 155 | self.italic: Optional[bool] = None |
| 156 | self.underline: Optional[bool] = None |
| 157 | self.color: Optional[str] = None |
| 158 | self.theme_color: Optional[str] = None |
| 159 | self.line_spacing: Optional[float] = None |
| 160 | |
| 161 | # Check for bullet formatting |
| 162 | if ( |
| 163 | hasattr(paragraph, "_p") |
| 164 | and paragraph._p is not None |
| 165 | and paragraph._p.pPr is not None |
| 166 | ): |
| 167 | pPr = paragraph._p.pPr |
| 168 | ns = "{http://schemas.openxmlformats.org/drawingml/2006/main}" |
| 169 | if ( |
| 170 | pPr.find(f"{ns}buChar") is not None |
| 171 | or pPr.find(f"{ns}buAutoNum") is not None |
| 172 | ): |
| 173 | self.bullet = True |
| 174 | if hasattr(paragraph, "level"): |
| 175 | self.level = paragraph.level |
| 176 | |
| 177 | # Add alignment if not LEFT (default) |
| 178 | if hasattr(paragraph, "alignment") and paragraph.alignment is not None: |
| 179 | alignment_map = { |
| 180 | PP_ALIGN.CENTER: "CENTER", |
| 181 | PP_ALIGN.RIGHT: "RIGHT", |
| 182 | PP_ALIGN.JUSTIFY: "JUSTIFY", |
| 183 | } |
| 184 | if paragraph.alignment in alignment_map: |
| 185 | self.alignment = alignment_map[paragraph.alignment] |
| 186 | |
| 187 | # Add spacing properties if set |
| 188 | if hasattr(paragraph, "space_before") and paragraph.space_before: |
| 189 | self.space_before = paragraph.space_before.pt |
| 190 | if hasattr(paragraph, "space_after") and paragraph.space_after: |
| 191 | self.space_after = paragraph.space_after.pt |
| 192 | |
| 193 | # Extract font properties from first run |
| 194 | if paragraph.runs: |
no outgoing calls
no test coverage detected