ps-python-pptx 1.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. pptx/__init__.py +84 -0
  2. pptx/action.py +270 -0
  3. pptx/api.py +49 -0
  4. pptx/chart/__init__.py +0 -0
  5. pptx/chart/axis.py +523 -0
  6. pptx/chart/category.py +200 -0
  7. pptx/chart/chart.py +280 -0
  8. pptx/chart/data.py +864 -0
  9. pptx/chart/datalabel.py +288 -0
  10. pptx/chart/legend.py +79 -0
  11. pptx/chart/marker.py +70 -0
  12. pptx/chart/plot.py +412 -0
  13. pptx/chart/point.py +101 -0
  14. pptx/chart/series.py +258 -0
  15. pptx/chart/xlsx.py +272 -0
  16. pptx/chart/xmlwriter.py +1840 -0
  17. pptx/dml/__init__.py +0 -0
  18. pptx/dml/chtfmt.py +40 -0
  19. pptx/dml/color.py +301 -0
  20. pptx/dml/effect.py +41 -0
  21. pptx/dml/fill.py +468 -0
  22. pptx/dml/line.py +100 -0
  23. pptx/enum/__init__.py +0 -0
  24. pptx/enum/action.py +71 -0
  25. pptx/enum/base.py +175 -0
  26. pptx/enum/chart.py +492 -0
  27. pptx/enum/dml.py +405 -0
  28. pptx/enum/lang.py +685 -0
  29. pptx/enum/shapes.py +1029 -0
  30. pptx/enum/text.py +371 -0
  31. pptx/exc.py +23 -0
  32. pptx/media.py +197 -0
  33. pptx/opc/__init__.py +0 -0
  34. pptx/opc/constants.py +331 -0
  35. pptx/opc/oxml.py +188 -0
  36. pptx/opc/package.py +762 -0
  37. pptx/opc/packuri.py +109 -0
  38. pptx/opc/serialized.py +296 -0
  39. pptx/opc/shared.py +20 -0
  40. pptx/opc/spec.py +44 -0
  41. pptx/oxml/__init__.py +492 -0
  42. pptx/oxml/action.py +53 -0
  43. pptx/oxml/chart/__init__.py +0 -0
  44. pptx/oxml/chart/axis.py +297 -0
  45. pptx/oxml/chart/chart.py +282 -0
  46. pptx/oxml/chart/datalabel.py +252 -0
  47. pptx/oxml/chart/legend.py +72 -0
  48. pptx/oxml/chart/marker.py +61 -0
  49. pptx/oxml/chart/plot.py +345 -0
  50. pptx/oxml/chart/series.py +254 -0
  51. pptx/oxml/chart/shared.py +219 -0
  52. pptx/oxml/coreprops.py +288 -0
  53. pptx/oxml/dml/__init__.py +0 -0
  54. pptx/oxml/dml/color.py +111 -0
  55. pptx/oxml/dml/fill.py +197 -0
  56. pptx/oxml/dml/line.py +12 -0
  57. pptx/oxml/ns.py +129 -0
  58. pptx/oxml/presentation.py +130 -0
  59. pptx/oxml/shapes/__init__.py +19 -0
  60. pptx/oxml/shapes/autoshape.py +455 -0
  61. pptx/oxml/shapes/connector.py +107 -0
  62. pptx/oxml/shapes/graphfrm.py +342 -0
  63. pptx/oxml/shapes/groupshape.py +280 -0
  64. pptx/oxml/shapes/picture.py +270 -0
  65. pptx/oxml/shapes/shared.py +523 -0
  66. pptx/oxml/simpletypes.py +740 -0
  67. pptx/oxml/slide.py +347 -0
  68. pptx/oxml/table.py +588 -0
  69. pptx/oxml/text.py +748 -0
  70. pptx/oxml/theme.py +29 -0
  71. pptx/oxml/xmlchemy.py +717 -0
  72. pptx/package.py +222 -0
  73. pptx/parts/__init__.py +0 -0
  74. pptx/parts/chart.py +95 -0
  75. pptx/parts/coreprops.py +167 -0
  76. pptx/parts/embeddedpackage.py +93 -0
  77. pptx/parts/image.py +275 -0
  78. pptx/parts/media.py +37 -0
  79. pptx/parts/presentation.py +126 -0
  80. pptx/parts/slide.py +297 -0
  81. pptx/parts/theme.py +13 -0
  82. pptx/presentation.py +113 -0
  83. pptx/py.typed +0 -0
  84. pptx/shapes/__init__.py +26 -0
  85. pptx/shapes/autoshape.py +355 -0
  86. pptx/shapes/base.py +293 -0
  87. pptx/shapes/connector.py +297 -0
  88. pptx/shapes/freeform.py +337 -0
  89. pptx/shapes/graphfrm.py +166 -0
  90. pptx/shapes/group.py +69 -0
  91. pptx/shapes/picture.py +203 -0
  92. pptx/shapes/placeholder.py +407 -0
  93. pptx/shapes/shapetree.py +1190 -0
  94. pptx/shared.py +82 -0
  95. pptx/slide.py +577 -0
  96. pptx/spec.py +632 -0
  97. pptx/table.py +520 -0
  98. pptx/templates/default.pptx +0 -0
  99. pptx/templates/docx-icon.emf +0 -0
  100. pptx/templates/generic-icon.emf +0 -0
  101. pptx/templates/notes.xml +23 -0
  102. pptx/templates/notesMaster.xml +352 -0
  103. pptx/templates/pptx-icon.emf +0 -0
  104. pptx/templates/theme.xml +321 -0
  105. pptx/templates/xlsx-icon.emf +0 -0
  106. pptx/text/__init__.py +0 -0
  107. pptx/text/fonts.py +399 -0
  108. pptx/text/layout.py +325 -0
  109. pptx/text/text.py +770 -0
  110. pptx/theme.py +135 -0
  111. pptx/types.py +36 -0
  112. pptx/util.py +284 -0
  113. ps_python_pptx-1.1.0.dist-info/METADATA +75 -0
  114. ps_python_pptx-1.1.0.dist-info/RECORD +117 -0
  115. ps_python_pptx-1.1.0.dist-info/WHEEL +5 -0
  116. ps_python_pptx-1.1.0.dist-info/licenses/LICENSE +20 -0
  117. ps_python_pptx-1.1.0.dist-info/top_level.txt +1 -0
pptx/oxml/__init__.py ADDED
@@ -0,0 +1,492 @@
1
+ """Initializes lxml parser, particularly the custom element classes.
2
+
3
+ Also makes available a handful of functions that wrap its typical uses.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ import os
9
+ from typing import TYPE_CHECKING, Type
10
+
11
+ from lxml import etree
12
+
13
+ from pptx.oxml.ns import NamespacePrefixedTag
14
+
15
+ if TYPE_CHECKING:
16
+ from pptx.oxml.xmlchemy import BaseOxmlElement
17
+
18
+
19
+ # -- configure etree XML parser ----------------------------
20
+ element_class_lookup = etree.ElementNamespaceClassLookup()
21
+ oxml_parser = etree.XMLParser(remove_blank_text=True, resolve_entities=False)
22
+ oxml_parser.set_element_class_lookup(element_class_lookup)
23
+
24
+
25
+ def parse_from_template(template_file_name: str):
26
+ """Return an element loaded from the XML in the template file identified by `template_name`."""
27
+ thisdir = os.path.split(__file__)[0]
28
+ filename = os.path.join(thisdir, "..", "templates", "%s.xml" % template_file_name)
29
+ with open(filename, "rb") as f:
30
+ xml = f.read()
31
+ return parse_xml(xml)
32
+
33
+
34
+ def parse_xml(xml: str | bytes):
35
+ """Return root lxml element obtained by parsing XML character string in `xml`."""
36
+ return etree.fromstring(xml, oxml_parser)
37
+
38
+
39
+ def register_element_cls(nsptagname: str, cls: Type[BaseOxmlElement]):
40
+ """Register `cls` to be constructed when oxml parser encounters element having `nsptag_name`.
41
+
42
+ `nsptag_name` is a string of the form `nspfx:tagroot`, e.g. `"w:document"`.
43
+ """
44
+ nsptag = NamespacePrefixedTag(nsptagname)
45
+ namespace = element_class_lookup.get_namespace(nsptag.nsuri)
46
+ namespace[nsptag.local_part] = cls
47
+
48
+
49
+ from pptx.oxml.action import CT_Hyperlink # noqa: E402
50
+
51
+ register_element_cls("a:hlinkClick", CT_Hyperlink)
52
+ register_element_cls("a:hlinkHover", CT_Hyperlink)
53
+
54
+
55
+ from pptx.oxml.chart.axis import ( # noqa: E402
56
+ CT_AxisUnit,
57
+ CT_CatAx,
58
+ CT_ChartLines,
59
+ CT_Crosses,
60
+ CT_DateAx,
61
+ CT_LblOffset,
62
+ CT_Orientation,
63
+ CT_Scaling,
64
+ CT_TickLblPos,
65
+ CT_TickMark,
66
+ CT_ValAx,
67
+ )
68
+
69
+ register_element_cls("c:catAx", CT_CatAx)
70
+ register_element_cls("c:crosses", CT_Crosses)
71
+ register_element_cls("c:dateAx", CT_DateAx)
72
+ register_element_cls("c:lblOffset", CT_LblOffset)
73
+ register_element_cls("c:majorGridlines", CT_ChartLines)
74
+ register_element_cls("c:majorTickMark", CT_TickMark)
75
+ register_element_cls("c:majorUnit", CT_AxisUnit)
76
+ register_element_cls("c:minorTickMark", CT_TickMark)
77
+ register_element_cls("c:minorUnit", CT_AxisUnit)
78
+ register_element_cls("c:orientation", CT_Orientation)
79
+ register_element_cls("c:scaling", CT_Scaling)
80
+ register_element_cls("c:tickLblPos", CT_TickLblPos)
81
+ register_element_cls("c:valAx", CT_ValAx)
82
+
83
+
84
+ from pptx.oxml.chart.chart import ( # noqa: E402
85
+ CT_Chart,
86
+ CT_ChartSpace,
87
+ CT_ExternalData,
88
+ CT_PlotArea,
89
+ CT_Style,
90
+ )
91
+
92
+ register_element_cls("c:chart", CT_Chart)
93
+ register_element_cls("c:chartSpace", CT_ChartSpace)
94
+ register_element_cls("c:externalData", CT_ExternalData)
95
+ register_element_cls("c:plotArea", CT_PlotArea)
96
+ register_element_cls("c:style", CT_Style)
97
+
98
+
99
+ from pptx.oxml.chart.datalabel import CT_DLbl, CT_DLblPos, CT_DLbls # noqa: E402
100
+
101
+ register_element_cls("c:dLbl", CT_DLbl)
102
+ register_element_cls("c:dLblPos", CT_DLblPos)
103
+ register_element_cls("c:dLbls", CT_DLbls)
104
+
105
+
106
+ from pptx.oxml.chart.legend import CT_Legend, CT_LegendPos # noqa: E402
107
+
108
+ register_element_cls("c:legend", CT_Legend)
109
+ register_element_cls("c:legendPos", CT_LegendPos)
110
+
111
+
112
+ from pptx.oxml.chart.marker import CT_Marker, CT_MarkerSize, CT_MarkerStyle # noqa: E402
113
+
114
+ register_element_cls("c:marker", CT_Marker)
115
+ register_element_cls("c:size", CT_MarkerSize)
116
+ register_element_cls("c:symbol", CT_MarkerStyle)
117
+
118
+
119
+ from pptx.oxml.chart.plot import ( # noqa: E402
120
+ CT_Area3DChart,
121
+ CT_AreaChart,
122
+ CT_BarChart,
123
+ CT_BarDir,
124
+ CT_BubbleChart,
125
+ CT_BubbleScale,
126
+ CT_DoughnutChart,
127
+ CT_GapAmount,
128
+ CT_Grouping,
129
+ CT_LineChart,
130
+ CT_Overlap,
131
+ CT_PieChart,
132
+ CT_RadarChart,
133
+ CT_ScatterChart,
134
+ )
135
+
136
+ register_element_cls("c:area3DChart", CT_Area3DChart)
137
+ register_element_cls("c:areaChart", CT_AreaChart)
138
+ register_element_cls("c:barChart", CT_BarChart)
139
+ register_element_cls("c:barDir", CT_BarDir)
140
+ register_element_cls("c:bubbleChart", CT_BubbleChart)
141
+ register_element_cls("c:bubbleScale", CT_BubbleScale)
142
+ register_element_cls("c:doughnutChart", CT_DoughnutChart)
143
+ register_element_cls("c:gapWidth", CT_GapAmount)
144
+ register_element_cls("c:grouping", CT_Grouping)
145
+ register_element_cls("c:lineChart", CT_LineChart)
146
+ register_element_cls("c:overlap", CT_Overlap)
147
+ register_element_cls("c:pieChart", CT_PieChart)
148
+ register_element_cls("c:radarChart", CT_RadarChart)
149
+ register_element_cls("c:scatterChart", CT_ScatterChart)
150
+
151
+
152
+ from pptx.oxml.chart.series import ( # noqa: E402
153
+ CT_AxDataSource,
154
+ CT_DPt,
155
+ CT_Lvl,
156
+ CT_NumDataSource,
157
+ CT_SeriesComposite,
158
+ CT_StrVal_NumVal_Composite,
159
+ )
160
+
161
+ register_element_cls("c:bubbleSize", CT_NumDataSource)
162
+ register_element_cls("c:cat", CT_AxDataSource)
163
+ register_element_cls("c:dPt", CT_DPt)
164
+ register_element_cls("c:lvl", CT_Lvl)
165
+ register_element_cls("c:pt", CT_StrVal_NumVal_Composite)
166
+ register_element_cls("c:ser", CT_SeriesComposite)
167
+ register_element_cls("c:val", CT_NumDataSource)
168
+ register_element_cls("c:xVal", CT_NumDataSource)
169
+ register_element_cls("c:yVal", CT_NumDataSource)
170
+
171
+
172
+ from pptx.oxml.chart.shared import ( # noqa: E402
173
+ CT_Boolean,
174
+ CT_Boolean_Explicit,
175
+ CT_Double,
176
+ CT_Layout,
177
+ CT_LayoutMode,
178
+ CT_ManualLayout,
179
+ CT_NumFmt,
180
+ CT_Title,
181
+ CT_Tx,
182
+ CT_UnsignedInt,
183
+ )
184
+
185
+ register_element_cls("c:autoTitleDeleted", CT_Boolean_Explicit)
186
+ register_element_cls("c:autoUpdate", CT_Boolean)
187
+ register_element_cls("c:bubble3D", CT_Boolean)
188
+ register_element_cls("c:crossAx", CT_UnsignedInt)
189
+ register_element_cls("c:crossesAt", CT_Double)
190
+ register_element_cls("c:date1904", CT_Boolean)
191
+ register_element_cls("c:delete", CT_Boolean)
192
+ register_element_cls("c:idx", CT_UnsignedInt)
193
+ register_element_cls("c:invertIfNegative", CT_Boolean_Explicit)
194
+ register_element_cls("c:layout", CT_Layout)
195
+ register_element_cls("c:manualLayout", CT_ManualLayout)
196
+ register_element_cls("c:max", CT_Double)
197
+ register_element_cls("c:min", CT_Double)
198
+ register_element_cls("c:numFmt", CT_NumFmt)
199
+ register_element_cls("c:order", CT_UnsignedInt)
200
+ register_element_cls("c:overlay", CT_Boolean_Explicit)
201
+ register_element_cls("c:ptCount", CT_UnsignedInt)
202
+ register_element_cls("c:showCatName", CT_Boolean_Explicit)
203
+ register_element_cls("c:showLegendKey", CT_Boolean_Explicit)
204
+ register_element_cls("c:showPercent", CT_Boolean_Explicit)
205
+ register_element_cls("c:showSerName", CT_Boolean_Explicit)
206
+ register_element_cls("c:showVal", CT_Boolean_Explicit)
207
+ register_element_cls("c:smooth", CT_Boolean)
208
+ register_element_cls("c:title", CT_Title)
209
+ register_element_cls("c:tx", CT_Tx)
210
+ register_element_cls("c:varyColors", CT_Boolean)
211
+ register_element_cls("c:x", CT_Double)
212
+ register_element_cls("c:xMode", CT_LayoutMode)
213
+
214
+
215
+ from pptx.oxml.coreprops import CT_CoreProperties # noqa: E402
216
+
217
+ register_element_cls("cp:coreProperties", CT_CoreProperties)
218
+
219
+
220
+ from pptx.oxml.dml.color import ( # noqa: E402
221
+ CT_Color,
222
+ CT_HslColor,
223
+ CT_Percentage,
224
+ CT_PresetColor,
225
+ CT_SchemeColor,
226
+ CT_ScRgbColor,
227
+ CT_SRgbColor,
228
+ CT_SystemColor,
229
+ )
230
+
231
+ register_element_cls("a:bgClr", CT_Color)
232
+ register_element_cls("a:fgClr", CT_Color)
233
+ register_element_cls("a:hslClr", CT_HslColor)
234
+ register_element_cls("a:lumMod", CT_Percentage)
235
+ register_element_cls("a:lumOff", CT_Percentage)
236
+ register_element_cls("a:prstClr", CT_PresetColor)
237
+ register_element_cls("a:schemeClr", CT_SchemeColor)
238
+ register_element_cls("a:scrgbClr", CT_ScRgbColor)
239
+ register_element_cls("a:srgbClr", CT_SRgbColor)
240
+ register_element_cls("a:sysClr", CT_SystemColor)
241
+
242
+
243
+ from pptx.oxml.dml.fill import ( # noqa: E402
244
+ CT_Blip,
245
+ CT_BlipFillProperties,
246
+ CT_GradientFillProperties,
247
+ CT_GradientStop,
248
+ CT_GradientStopList,
249
+ CT_GroupFillProperties,
250
+ CT_LinearShadeProperties,
251
+ CT_NoFillProperties,
252
+ CT_PatternFillProperties,
253
+ CT_RelativeRect,
254
+ CT_SolidColorFillProperties,
255
+ )
256
+
257
+ register_element_cls("a:blip", CT_Blip)
258
+ register_element_cls("a:blipFill", CT_BlipFillProperties)
259
+ register_element_cls("a:gradFill", CT_GradientFillProperties)
260
+ register_element_cls("a:grpFill", CT_GroupFillProperties)
261
+ register_element_cls("a:gs", CT_GradientStop)
262
+ register_element_cls("a:gsLst", CT_GradientStopList)
263
+ register_element_cls("a:lin", CT_LinearShadeProperties)
264
+ register_element_cls("a:noFill", CT_NoFillProperties)
265
+ register_element_cls("a:pattFill", CT_PatternFillProperties)
266
+ register_element_cls("a:solidFill", CT_SolidColorFillProperties)
267
+ register_element_cls("a:srcRect", CT_RelativeRect)
268
+
269
+
270
+ from pptx.oxml.dml.line import CT_PresetLineDashProperties # noqa: E402
271
+
272
+ register_element_cls("a:prstDash", CT_PresetLineDashProperties)
273
+
274
+
275
+ from pptx.oxml.presentation import ( # noqa: E402
276
+ CT_Presentation,
277
+ CT_SlideId,
278
+ CT_SlideIdList,
279
+ CT_SlideMasterIdList,
280
+ CT_SlideMasterIdListEntry,
281
+ CT_SlideSize,
282
+ )
283
+
284
+ register_element_cls("p:presentation", CT_Presentation)
285
+ register_element_cls("p:sldId", CT_SlideId)
286
+ register_element_cls("p:sldIdLst", CT_SlideIdList)
287
+ register_element_cls("p:sldMasterId", CT_SlideMasterIdListEntry)
288
+ register_element_cls("p:sldMasterIdLst", CT_SlideMasterIdList)
289
+ register_element_cls("p:sldSz", CT_SlideSize)
290
+
291
+
292
+ from pptx.oxml.shapes.autoshape import ( # noqa: E402
293
+ CT_AdjPoint2D,
294
+ CT_CustomGeometry2D,
295
+ CT_GeomGuide,
296
+ CT_GeomGuideList,
297
+ CT_NonVisualDrawingShapeProps,
298
+ CT_Path2D,
299
+ CT_Path2DClose,
300
+ CT_Path2DLineTo,
301
+ CT_Path2DList,
302
+ CT_Path2DMoveTo,
303
+ CT_PresetGeometry2D,
304
+ CT_Shape,
305
+ CT_ShapeNonVisual,
306
+ )
307
+
308
+ register_element_cls("a:avLst", CT_GeomGuideList)
309
+ register_element_cls("a:custGeom", CT_CustomGeometry2D)
310
+ register_element_cls("a:gd", CT_GeomGuide)
311
+ register_element_cls("a:close", CT_Path2DClose)
312
+ register_element_cls("a:lnTo", CT_Path2DLineTo)
313
+ register_element_cls("a:moveTo", CT_Path2DMoveTo)
314
+ register_element_cls("a:path", CT_Path2D)
315
+ register_element_cls("a:pathLst", CT_Path2DList)
316
+ register_element_cls("a:prstGeom", CT_PresetGeometry2D)
317
+ register_element_cls("a:pt", CT_AdjPoint2D)
318
+ register_element_cls("p:cNvSpPr", CT_NonVisualDrawingShapeProps)
319
+ register_element_cls("p:nvSpPr", CT_ShapeNonVisual)
320
+ register_element_cls("p:sp", CT_Shape)
321
+
322
+
323
+ from pptx.oxml.shapes.connector import ( # noqa: E402
324
+ CT_Connection,
325
+ CT_Connector,
326
+ CT_ConnectorNonVisual,
327
+ CT_NonVisualConnectorProperties,
328
+ )
329
+
330
+ register_element_cls("a:endCxn", CT_Connection)
331
+ register_element_cls("a:stCxn", CT_Connection)
332
+ register_element_cls("p:cNvCxnSpPr", CT_NonVisualConnectorProperties)
333
+ register_element_cls("p:cxnSp", CT_Connector)
334
+ register_element_cls("p:nvCxnSpPr", CT_ConnectorNonVisual)
335
+
336
+
337
+ from pptx.oxml.shapes.graphfrm import ( # noqa: E402
338
+ CT_GraphicalObject,
339
+ CT_GraphicalObjectData,
340
+ CT_GraphicalObjectFrame,
341
+ CT_GraphicalObjectFrameNonVisual,
342
+ CT_OleObject,
343
+ )
344
+
345
+ register_element_cls("a:graphic", CT_GraphicalObject)
346
+ register_element_cls("a:graphicData", CT_GraphicalObjectData)
347
+ register_element_cls("p:graphicFrame", CT_GraphicalObjectFrame)
348
+ register_element_cls("p:nvGraphicFramePr", CT_GraphicalObjectFrameNonVisual)
349
+ register_element_cls("p:oleObj", CT_OleObject)
350
+
351
+
352
+ from pptx.oxml.shapes.groupshape import ( # noqa: E402
353
+ CT_GroupShape,
354
+ CT_GroupShapeNonVisual,
355
+ CT_GroupShapeProperties,
356
+ )
357
+
358
+ register_element_cls("p:grpSp", CT_GroupShape)
359
+ register_element_cls("p:grpSpPr", CT_GroupShapeProperties)
360
+ register_element_cls("p:nvGrpSpPr", CT_GroupShapeNonVisual)
361
+ register_element_cls("p:spTree", CT_GroupShape)
362
+
363
+
364
+ from pptx.oxml.shapes.picture import CT_Picture, CT_PictureNonVisual # noqa: E402
365
+
366
+ register_element_cls("p:blipFill", CT_BlipFillProperties)
367
+ register_element_cls("p:nvPicPr", CT_PictureNonVisual)
368
+ register_element_cls("p:pic", CT_Picture)
369
+
370
+
371
+ from pptx.oxml.shapes.shared import ( # noqa: E402
372
+ CT_ApplicationNonVisualDrawingProps,
373
+ CT_LineProperties,
374
+ CT_NonVisualDrawingProps,
375
+ CT_Placeholder,
376
+ CT_Point2D,
377
+ CT_PositiveSize2D,
378
+ CT_ShapeProperties,
379
+ CT_Transform2D,
380
+ )
381
+
382
+ register_element_cls("a:chExt", CT_PositiveSize2D)
383
+ register_element_cls("a:chOff", CT_Point2D)
384
+ register_element_cls("a:ext", CT_PositiveSize2D)
385
+ register_element_cls("a:ln", CT_LineProperties)
386
+ register_element_cls("a:off", CT_Point2D)
387
+ register_element_cls("a:xfrm", CT_Transform2D)
388
+ register_element_cls("c:spPr", CT_ShapeProperties)
389
+ register_element_cls("p:cNvPr", CT_NonVisualDrawingProps)
390
+ register_element_cls("p:nvPr", CT_ApplicationNonVisualDrawingProps)
391
+ register_element_cls("p:ph", CT_Placeholder)
392
+ register_element_cls("p:spPr", CT_ShapeProperties)
393
+ register_element_cls("p:xfrm", CT_Transform2D)
394
+
395
+
396
+ from pptx.oxml.slide import ( # noqa: E402
397
+ CT_Background,
398
+ CT_BackgroundProperties,
399
+ CT_CommonSlideData,
400
+ CT_NotesMaster,
401
+ CT_NotesSlide,
402
+ CT_Slide,
403
+ CT_SlideLayout,
404
+ CT_SlideLayoutIdList,
405
+ CT_SlideLayoutIdListEntry,
406
+ CT_SlideMaster,
407
+ CT_SlideTiming,
408
+ CT_TimeNodeList,
409
+ CT_TLMediaNodeVideo,
410
+ )
411
+
412
+ register_element_cls("p:bg", CT_Background)
413
+ register_element_cls("p:bgPr", CT_BackgroundProperties)
414
+ register_element_cls("p:childTnLst", CT_TimeNodeList)
415
+ register_element_cls("p:cSld", CT_CommonSlideData)
416
+ register_element_cls("p:notes", CT_NotesSlide)
417
+ register_element_cls("p:notesMaster", CT_NotesMaster)
418
+ register_element_cls("p:sld", CT_Slide)
419
+ register_element_cls("p:sldLayout", CT_SlideLayout)
420
+ register_element_cls("p:sldLayoutId", CT_SlideLayoutIdListEntry)
421
+ register_element_cls("p:sldLayoutIdLst", CT_SlideLayoutIdList)
422
+ register_element_cls("p:sldMaster", CT_SlideMaster)
423
+ register_element_cls("p:timing", CT_SlideTiming)
424
+ register_element_cls("p:video", CT_TLMediaNodeVideo)
425
+
426
+
427
+ from pptx.oxml.table import ( # noqa: E402
428
+ CT_Table,
429
+ CT_TableCell,
430
+ CT_TableCellProperties,
431
+ CT_TableCol,
432
+ CT_TableGrid,
433
+ CT_TableProperties,
434
+ CT_TableRow,
435
+ )
436
+
437
+ register_element_cls("a:gridCol", CT_TableCol)
438
+ register_element_cls("a:tbl", CT_Table)
439
+ register_element_cls("a:tblGrid", CT_TableGrid)
440
+ register_element_cls("a:tblPr", CT_TableProperties)
441
+ register_element_cls("a:tc", CT_TableCell)
442
+ register_element_cls("a:tcPr", CT_TableCellProperties)
443
+ register_element_cls("a:tr", CT_TableRow)
444
+
445
+
446
+ from pptx.oxml.text import ( # noqa: E402
447
+ CT_RegularTextRun,
448
+ CT_TextAutoNumberBullet,
449
+ CT_TextBody,
450
+ CT_TextBodyProperties,
451
+ CT_TextCharacterProperties,
452
+ CT_TextField,
453
+ CT_TextFont,
454
+ CT_TextLineBreak,
455
+ CT_TextNormalAutofit,
456
+ CT_TextParagraph,
457
+ CT_TextParagraphProperties,
458
+ CT_TextSpacing,
459
+ CT_TextSpacingPercent,
460
+ CT_TextSpacingPoint,
461
+ CT_TextNoBullet,
462
+ CT_TextCharBullet,
463
+ )
464
+
465
+ register_element_cls("a:bodyPr", CT_TextBodyProperties)
466
+ register_element_cls("a:br", CT_TextLineBreak)
467
+ register_element_cls("a:defRPr", CT_TextCharacterProperties)
468
+ register_element_cls("a:endParaRPr", CT_TextCharacterProperties)
469
+ register_element_cls("a:fld", CT_TextField)
470
+ register_element_cls("a:latin", CT_TextFont)
471
+ register_element_cls("a:lnSpc", CT_TextSpacing)
472
+ register_element_cls("a:normAutofit", CT_TextNormalAutofit)
473
+ register_element_cls("a:r", CT_RegularTextRun)
474
+ register_element_cls("a:p", CT_TextParagraph)
475
+ register_element_cls("a:pPr", CT_TextParagraphProperties)
476
+ register_element_cls("c:rich", CT_TextBody)
477
+ register_element_cls("a:rPr", CT_TextCharacterProperties)
478
+ register_element_cls("a:spcAft", CT_TextSpacing)
479
+ register_element_cls("a:spcBef", CT_TextSpacing)
480
+ register_element_cls("a:spcPct", CT_TextSpacingPercent)
481
+ register_element_cls("a:spcPts", CT_TextSpacingPoint)
482
+ register_element_cls('a:buNone', CT_TextNoBullet)
483
+ register_element_cls('a:buAutoNum', CT_TextAutoNumberBullet)
484
+ register_element_cls('a:buChar', CT_TextCharBullet)
485
+ register_element_cls("a:txBody", CT_TextBody)
486
+ register_element_cls("c:txPr", CT_TextBody)
487
+ register_element_cls("p:txBody", CT_TextBody)
488
+
489
+
490
+ from pptx.oxml.theme import CT_OfficeStyleSheet # noqa: E402
491
+
492
+ register_element_cls("a:theme", CT_OfficeStyleSheet)
pptx/oxml/action.py ADDED
@@ -0,0 +1,53 @@
1
+ """lxml custom element classes for text-related XML elements."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pptx.oxml.simpletypes import XsdString
6
+ from pptx.oxml.xmlchemy import BaseOxmlElement, OptionalAttribute
7
+
8
+
9
+ class CT_Hyperlink(BaseOxmlElement):
10
+ """Custom element class for <a:hlinkClick> elements."""
11
+
12
+ rId: str = OptionalAttribute("r:id", XsdString) # pyright: ignore[reportAssignmentType]
13
+ action: str | None = OptionalAttribute( # pyright: ignore[reportAssignmentType]
14
+ "action", XsdString
15
+ )
16
+
17
+ @property
18
+ def action_fields(self) -> dict[str, str]:
19
+ """Query portion of the `ppaction://` URL as dict.
20
+
21
+ For example `{'id':'0', 'return':'true'}` in 'ppaction://customshow?id=0&return=true'.
22
+
23
+ Returns an empty dict if the URL contains no query string or if no action attribute is
24
+ present.
25
+ """
26
+ url = self.action
27
+
28
+ if url is None:
29
+ return {}
30
+
31
+ halves = url.split("?")
32
+ if len(halves) == 1:
33
+ return {}
34
+
35
+ key_value_pairs = halves[1].split("&")
36
+ return dict([pair.split("=") for pair in key_value_pairs])
37
+
38
+ @property
39
+ def action_verb(self) -> str | None:
40
+ """The host portion of the `ppaction://` URL contained in the action attribute.
41
+
42
+ For example 'customshow' in 'ppaction://customshow?id=0&return=true'. Returns |None| if no
43
+ action attribute is present.
44
+ """
45
+ url = self.action
46
+
47
+ if url is None:
48
+ return None
49
+
50
+ protocol_and_host = url.split("?")[0]
51
+ host = protocol_and_host[11:]
52
+
53
+ return host
File without changes