python-pptx2 2.13.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 (175) hide show
  1. pptx2/__init__.py +152 -0
  2. pptx2/_color.py +75 -0
  3. pptx2/_slide_importer.py +597 -0
  4. pptx2/_svg.py +155 -0
  5. pptx2/_template_applier.py +292 -0
  6. pptx2/_textstyle.py +187 -0
  7. pptx2/accessibility.py +365 -0
  8. pptx2/action.py +270 -0
  9. pptx2/animation.py +2237 -0
  10. pptx2/api.py +49 -0
  11. pptx2/audit.py +258 -0
  12. pptx2/chart/__init__.py +0 -0
  13. pptx2/chart/analytics.py +381 -0
  14. pptx2/chart/axis.py +543 -0
  15. pptx2/chart/category.py +200 -0
  16. pptx2/chart/chart.py +670 -0
  17. pptx2/chart/data.py +864 -0
  18. pptx2/chart/datalabel.py +406 -0
  19. pptx2/chart/legend.py +86 -0
  20. pptx2/chart/marker.py +70 -0
  21. pptx2/chart/palettes.py +129 -0
  22. pptx2/chart/plot.py +462 -0
  23. pptx2/chart/point.py +101 -0
  24. pptx2/chart/quick_layouts.py +325 -0
  25. pptx2/chart/series.py +334 -0
  26. pptx2/chart/xlsx.py +272 -0
  27. pptx2/chart/xmlwriter.py +1845 -0
  28. pptx2/compose/__init__.py +28 -0
  29. pptx2/compose/from_spec.py +1094 -0
  30. pptx2/design/__init__.py +8 -0
  31. pptx2/design/components.py +607 -0
  32. pptx2/design/figures.py +389 -0
  33. pptx2/design/layout.py +370 -0
  34. pptx2/design/recipes.py +1967 -0
  35. pptx2/design/style.py +209 -0
  36. pptx2/design/tokens.py +915 -0
  37. pptx2/diagrams.py +754 -0
  38. pptx2/dml/__init__.py +0 -0
  39. pptx2/dml/chtfmt.py +40 -0
  40. pptx2/dml/color.py +496 -0
  41. pptx2/dml/effect.py +909 -0
  42. pptx2/dml/fill.py +691 -0
  43. pptx2/dml/line.py +287 -0
  44. pptx2/dml/picture.py +212 -0
  45. pptx2/dml/three_d.py +381 -0
  46. pptx2/enum/__init__.py +0 -0
  47. pptx2/enum/action.py +71 -0
  48. pptx2/enum/animation.py +31 -0
  49. pptx2/enum/base.py +218 -0
  50. pptx2/enum/chart.py +574 -0
  51. pptx2/enum/dml.py +740 -0
  52. pptx2/enum/lang.py +685 -0
  53. pptx2/enum/presentation.py +133 -0
  54. pptx2/enum/shapes.py +1029 -0
  55. pptx2/enum/text.py +230 -0
  56. pptx2/exc.py +42 -0
  57. pptx2/formats.py +139 -0
  58. pptx2/geometry.py +420 -0
  59. pptx2/inherit.py +109 -0
  60. pptx2/lint.py +2256 -0
  61. pptx2/math.py +177 -0
  62. pptx2/media.py +197 -0
  63. pptx2/opc/__init__.py +0 -0
  64. pptx2/opc/constants.py +332 -0
  65. pptx2/opc/oxml.py +188 -0
  66. pptx2/opc/package.py +762 -0
  67. pptx2/opc/packuri.py +109 -0
  68. pptx2/opc/serialized.py +296 -0
  69. pptx2/opc/shared.py +20 -0
  70. pptx2/opc/spec.py +45 -0
  71. pptx2/oxml/__init__.py +555 -0
  72. pptx2/oxml/action.py +53 -0
  73. pptx2/oxml/chart/__init__.py +0 -0
  74. pptx2/oxml/chart/axis.py +337 -0
  75. pptx2/oxml/chart/chart.py +481 -0
  76. pptx2/oxml/chart/datalabel.py +253 -0
  77. pptx2/oxml/chart/legend.py +72 -0
  78. pptx2/oxml/chart/marker.py +61 -0
  79. pptx2/oxml/chart/plot.py +365 -0
  80. pptx2/oxml/chart/series.py +425 -0
  81. pptx2/oxml/chart/shared.py +220 -0
  82. pptx2/oxml/coreprops.py +288 -0
  83. pptx2/oxml/dml/__init__.py +0 -0
  84. pptx2/oxml/dml/color.py +135 -0
  85. pptx2/oxml/dml/effect.py +213 -0
  86. pptx2/oxml/dml/fill.py +316 -0
  87. pptx2/oxml/dml/line.py +12 -0
  88. pptx2/oxml/dml/three_d.py +110 -0
  89. pptx2/oxml/ns.py +135 -0
  90. pptx2/oxml/presentation.py +313 -0
  91. pptx2/oxml/shapes/__init__.py +19 -0
  92. pptx2/oxml/shapes/autoshape.py +467 -0
  93. pptx2/oxml/shapes/connector.py +107 -0
  94. pptx2/oxml/shapes/graphfrm.py +347 -0
  95. pptx2/oxml/shapes/groupshape.py +329 -0
  96. pptx2/oxml/shapes/picture.py +270 -0
  97. pptx2/oxml/shapes/shared.py +577 -0
  98. pptx2/oxml/simpletypes.py +1027 -0
  99. pptx2/oxml/slide.py +563 -0
  100. pptx2/oxml/table.py +650 -0
  101. pptx2/oxml/text.py +815 -0
  102. pptx2/oxml/theme.py +36 -0
  103. pptx2/oxml/xmlchemy.py +717 -0
  104. pptx2/package.py +222 -0
  105. pptx2/parts/__init__.py +0 -0
  106. pptx2/parts/chart.py +95 -0
  107. pptx2/parts/coreprops.py +167 -0
  108. pptx2/parts/diagram.py +37 -0
  109. pptx2/parts/embeddedpackage.py +93 -0
  110. pptx2/parts/image.py +275 -0
  111. pptx2/parts/media.py +37 -0
  112. pptx2/parts/presentation.py +136 -0
  113. pptx2/parts/slide.py +371 -0
  114. pptx2/presentation.py +408 -0
  115. pptx2/py.typed +0 -0
  116. pptx2/render.py +586 -0
  117. pptx2/section.py +272 -0
  118. pptx2/shapes/__init__.py +26 -0
  119. pptx2/shapes/autoshape.py +442 -0
  120. pptx2/shapes/base.py +1078 -0
  121. pptx2/shapes/connector.py +297 -0
  122. pptx2/shapes/freeform.py +337 -0
  123. pptx2/shapes/graphfrm.py +316 -0
  124. pptx2/shapes/group.py +264 -0
  125. pptx2/shapes/picture.py +422 -0
  126. pptx2/shapes/placeholder.py +468 -0
  127. pptx2/shapes/shapetree.py +2027 -0
  128. pptx2/shared.py +82 -0
  129. pptx2/skill/SKILL.md +450 -0
  130. pptx2/skill/__init__.py +78 -0
  131. pptx2/skill/__main__.py +64 -0
  132. pptx2/skill/references/animations.md +189 -0
  133. pptx2/skill/references/basics.md +421 -0
  134. pptx2/skill/references/charts.md +254 -0
  135. pptx2/skill/references/compose.md +234 -0
  136. pptx2/skill/references/design.md +366 -0
  137. pptx2/skill/references/effects.md +249 -0
  138. pptx2/skill/references/end-to-end-deck.md +231 -0
  139. pptx2/skill/references/geometry-and-arrows.md +334 -0
  140. pptx2/skill/references/lint.md +275 -0
  141. pptx2/skill/references/math.md +86 -0
  142. pptx2/skill/references/picture-effects.md +129 -0
  143. pptx2/skill/references/render.md +151 -0
  144. pptx2/skill/references/smart-art.md +75 -0
  145. pptx2/skill/references/space-aware-authoring.md +249 -0
  146. pptx2/skill/references/tables.md +244 -0
  147. pptx2/skill/references/theme.md +127 -0
  148. pptx2/skill/references/three-d.md +109 -0
  149. pptx2/skill/references/transitions.md +100 -0
  150. pptx2/slide.py +1244 -0
  151. pptx2/smart_art.py +220 -0
  152. pptx2/spec.py +633 -0
  153. pptx2/table.py +1181 -0
  154. pptx2/table_styles.py +184 -0
  155. pptx2/templates/default.pptx +0 -0
  156. pptx2/templates/docx-icon.emf +0 -0
  157. pptx2/templates/generic-icon.emf +0 -0
  158. pptx2/templates/notes.xml +23 -0
  159. pptx2/templates/notesMaster.xml +352 -0
  160. pptx2/templates/pptx-icon.emf +0 -0
  161. pptx2/templates/theme.xml +321 -0
  162. pptx2/templates/xlsx-icon.emf +0 -0
  163. pptx2/text/__init__.py +0 -0
  164. pptx2/text/fonts.py +482 -0
  165. pptx2/text/layout.py +374 -0
  166. pptx2/text/text.py +1272 -0
  167. pptx2/theme.py +721 -0
  168. pptx2/types.py +36 -0
  169. pptx2/util.py +263 -0
  170. python_pptx2-2.13.0.dist-info/METADATA +351 -0
  171. python_pptx2-2.13.0.dist-info/RECORD +175 -0
  172. python_pptx2-2.13.0.dist-info/WHEEL +5 -0
  173. python_pptx2-2.13.0.dist-info/entry_points.txt +3 -0
  174. python_pptx2-2.13.0.dist-info/licenses/LICENSE +22 -0
  175. python_pptx2-2.13.0.dist-info/top_level.txt +1 -0
pptx2/oxml/__init__.py ADDED
@@ -0,0 +1,555 @@
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 pptx2.oxml.ns import NamespacePrefixedTag
14
+
15
+ if TYPE_CHECKING:
16
+ from pptx2.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 pptx2.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 pptx2.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 pptx2.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 pptx2.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 pptx2.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 pptx2.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 pptx2.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 pptx2.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 pptx2.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 pptx2.oxml.coreprops import CT_CoreProperties # noqa: E402
216
+
217
+ register_element_cls("cp:coreProperties", CT_CoreProperties)
218
+
219
+
220
+ from pptx2.oxml.dml.color import ( # noqa: E402
221
+ CT_Color,
222
+ CT_HslColor,
223
+ CT_Percentage,
224
+ CT_PositiveFixedPercentage,
225
+ CT_PresetColor,
226
+ CT_SchemeColor,
227
+ CT_ScRgbColor,
228
+ CT_SRgbColor,
229
+ CT_SystemColor,
230
+ )
231
+
232
+ register_element_cls("a:alpha", CT_PositiveFixedPercentage)
233
+ register_element_cls("a:bgClr", CT_Color)
234
+ register_element_cls("a:fgClr", CT_Color)
235
+ register_element_cls("a:hslClr", CT_HslColor)
236
+ register_element_cls("a:lumMod", CT_Percentage)
237
+ register_element_cls("a:lumOff", CT_Percentage)
238
+ register_element_cls("a:prstClr", CT_PresetColor)
239
+ register_element_cls("a:schemeClr", CT_SchemeColor)
240
+ register_element_cls("a:scrgbClr", CT_ScRgbColor)
241
+ register_element_cls("a:srgbClr", CT_SRgbColor)
242
+ register_element_cls("a:sysClr", CT_SystemColor)
243
+
244
+
245
+ from pptx2.oxml.dml.fill import ( # noqa: E402
246
+ CT_AlphaModFixEffect,
247
+ CT_BiLevelEffect,
248
+ CT_Blip,
249
+ CT_BlipFillProperties,
250
+ CT_DuotoneEffect,
251
+ CT_GradientFillProperties,
252
+ CT_GradientStop,
253
+ CT_GradientStopList,
254
+ CT_GrayscaleEffect,
255
+ CT_GroupFillProperties,
256
+ CT_LinearShadeProperties,
257
+ CT_LuminanceEffect,
258
+ CT_NoFillProperties,
259
+ CT_PatternFillProperties,
260
+ CT_RelativeRect,
261
+ CT_SolidColorFillProperties,
262
+ )
263
+
264
+ register_element_cls("a:alphaModFix", CT_AlphaModFixEffect)
265
+ register_element_cls("a:biLevel", CT_BiLevelEffect)
266
+ register_element_cls("a:blip", CT_Blip)
267
+ register_element_cls("a:blipFill", CT_BlipFillProperties)
268
+ register_element_cls("a:duotone", CT_DuotoneEffect)
269
+ register_element_cls("a:grayscl", CT_GrayscaleEffect)
270
+ register_element_cls("a:lum", CT_LuminanceEffect)
271
+ register_element_cls("a:gradFill", CT_GradientFillProperties)
272
+ register_element_cls("a:grpFill", CT_GroupFillProperties)
273
+ register_element_cls("a:gs", CT_GradientStop)
274
+ register_element_cls("a:gsLst", CT_GradientStopList)
275
+ register_element_cls("a:lin", CT_LinearShadeProperties)
276
+ register_element_cls("a:noFill", CT_NoFillProperties)
277
+ register_element_cls("a:pattFill", CT_PatternFillProperties)
278
+ register_element_cls("a:solidFill", CT_SolidColorFillProperties)
279
+ register_element_cls("a:srcRect", CT_RelativeRect)
280
+
281
+
282
+ from pptx2.oxml.dml.effect import ( # noqa: E402
283
+ CT_BlurEffect,
284
+ CT_EffectList,
285
+ CT_GlowEffect,
286
+ CT_InnerShadowEffect,
287
+ CT_OuterShadowEffect,
288
+ CT_ReflectionEffect,
289
+ CT_SoftEdgesEffect,
290
+ )
291
+
292
+ register_element_cls("a:blur", CT_BlurEffect)
293
+ register_element_cls("a:effectLst", CT_EffectList)
294
+ register_element_cls("a:glow", CT_GlowEffect)
295
+ register_element_cls("a:innerShdw", CT_InnerShadowEffect)
296
+ register_element_cls("a:outerShdw", CT_OuterShadowEffect)
297
+ register_element_cls("a:reflection", CT_ReflectionEffect)
298
+ register_element_cls("a:softEdge", CT_SoftEdgesEffect)
299
+
300
+
301
+ from pptx2.oxml.dml.three_d import ( # noqa: E402
302
+ CT_Bevel,
303
+ CT_Camera,
304
+ CT_ContourColor,
305
+ CT_ExtrusionColor,
306
+ CT_LightRig,
307
+ CT_Scene3D,
308
+ CT_Shape3D,
309
+ )
310
+
311
+ register_element_cls("a:bevelT", CT_Bevel)
312
+ register_element_cls("a:bevelB", CT_Bevel)
313
+ register_element_cls("a:camera", CT_Camera)
314
+ register_element_cls("a:contourClr", CT_ContourColor)
315
+ register_element_cls("a:extrusionClr", CT_ExtrusionColor)
316
+ register_element_cls("a:lightRig", CT_LightRig)
317
+ register_element_cls("a:scene3d", CT_Scene3D)
318
+ register_element_cls("a:sp3d", CT_Shape3D)
319
+
320
+
321
+ from pptx2.oxml.dml.line import CT_PresetLineDashProperties # noqa: E402
322
+
323
+ register_element_cls("a:prstDash", CT_PresetLineDashProperties)
324
+
325
+
326
+ from pptx2.oxml.presentation import ( # noqa: E402
327
+ CT_Presentation,
328
+ CT_SlideId,
329
+ CT_SlideIdList,
330
+ CT_SlideMasterIdList,
331
+ CT_SlideMasterIdListEntry,
332
+ CT_SlideSize,
333
+ )
334
+
335
+ register_element_cls("p:presentation", CT_Presentation)
336
+ register_element_cls("p:sldId", CT_SlideId)
337
+ register_element_cls("p:sldIdLst", CT_SlideIdList)
338
+ register_element_cls("p:sldMasterId", CT_SlideMasterIdListEntry)
339
+ register_element_cls("p:sldMasterIdLst", CT_SlideMasterIdList)
340
+ register_element_cls("p:sldSz", CT_SlideSize)
341
+
342
+
343
+ from pptx2.oxml.shapes.autoshape import ( # noqa: E402
344
+ CT_AdjPoint2D,
345
+ CT_CustomGeometry2D,
346
+ CT_GeomGuide,
347
+ CT_GeomGuideList,
348
+ CT_NonVisualDrawingShapeProps,
349
+ CT_Path2D,
350
+ CT_Path2DClose,
351
+ CT_Path2DLineTo,
352
+ CT_Path2DList,
353
+ CT_Path2DMoveTo,
354
+ CT_PresetGeometry2D,
355
+ CT_Shape,
356
+ CT_ShapeNonVisual,
357
+ )
358
+
359
+ register_element_cls("a:avLst", CT_GeomGuideList)
360
+ register_element_cls("a:custGeom", CT_CustomGeometry2D)
361
+ register_element_cls("a:gd", CT_GeomGuide)
362
+ register_element_cls("a:close", CT_Path2DClose)
363
+ register_element_cls("a:lnTo", CT_Path2DLineTo)
364
+ register_element_cls("a:moveTo", CT_Path2DMoveTo)
365
+ register_element_cls("a:path", CT_Path2D)
366
+ register_element_cls("a:pathLst", CT_Path2DList)
367
+ register_element_cls("a:prstGeom", CT_PresetGeometry2D)
368
+ register_element_cls("a:pt", CT_AdjPoint2D)
369
+ register_element_cls("p:cNvSpPr", CT_NonVisualDrawingShapeProps)
370
+ register_element_cls("p:nvSpPr", CT_ShapeNonVisual)
371
+ register_element_cls("p:sp", CT_Shape)
372
+
373
+
374
+ from pptx2.oxml.shapes.connector import ( # noqa: E402
375
+ CT_Connection,
376
+ CT_Connector,
377
+ CT_ConnectorNonVisual,
378
+ CT_NonVisualConnectorProperties,
379
+ )
380
+
381
+ register_element_cls("a:endCxn", CT_Connection)
382
+ register_element_cls("a:stCxn", CT_Connection)
383
+ register_element_cls("p:cNvCxnSpPr", CT_NonVisualConnectorProperties)
384
+ register_element_cls("p:cxnSp", CT_Connector)
385
+ register_element_cls("p:nvCxnSpPr", CT_ConnectorNonVisual)
386
+
387
+
388
+ from pptx2.oxml.shapes.graphfrm import ( # noqa: E402
389
+ CT_GraphicalObject,
390
+ CT_GraphicalObjectData,
391
+ CT_GraphicalObjectFrame,
392
+ CT_GraphicalObjectFrameNonVisual,
393
+ CT_OleObject,
394
+ )
395
+
396
+ register_element_cls("a:graphic", CT_GraphicalObject)
397
+ register_element_cls("a:graphicData", CT_GraphicalObjectData)
398
+ register_element_cls("p:graphicFrame", CT_GraphicalObjectFrame)
399
+ register_element_cls("p:nvGraphicFramePr", CT_GraphicalObjectFrameNonVisual)
400
+ register_element_cls("p:oleObj", CT_OleObject)
401
+
402
+
403
+ from pptx2.oxml.shapes.groupshape import ( # noqa: E402
404
+ CT_GroupShape,
405
+ CT_GroupShapeNonVisual,
406
+ CT_GroupShapeProperties,
407
+ )
408
+
409
+ register_element_cls("p:grpSp", CT_GroupShape)
410
+ register_element_cls("p:grpSpPr", CT_GroupShapeProperties)
411
+ register_element_cls("p:nvGrpSpPr", CT_GroupShapeNonVisual)
412
+ register_element_cls("p:spTree", CT_GroupShape)
413
+
414
+
415
+ from pptx2.oxml.shapes.picture import CT_Picture, CT_PictureNonVisual # noqa: E402
416
+
417
+ register_element_cls("p:blipFill", CT_BlipFillProperties)
418
+ register_element_cls("p:nvPicPr", CT_PictureNonVisual)
419
+ register_element_cls("p:pic", CT_Picture)
420
+
421
+
422
+ from pptx2.oxml.shapes.shared import ( # noqa: E402
423
+ CT_ApplicationNonVisualDrawingProps,
424
+ CT_LineEndProperties,
425
+ CT_LineJoinMiterProperties,
426
+ CT_LineProperties,
427
+ CT_NonVisualDrawingProps,
428
+ CT_Placeholder,
429
+ CT_Point2D,
430
+ CT_PositiveSize2D,
431
+ CT_ShapeProperties,
432
+ CT_Transform2D,
433
+ )
434
+
435
+ register_element_cls("a:chExt", CT_PositiveSize2D)
436
+ register_element_cls("a:chOff", CT_Point2D)
437
+ register_element_cls("a:ext", CT_PositiveSize2D)
438
+ register_element_cls("a:headEnd", CT_LineEndProperties)
439
+ register_element_cls("a:ln", CT_LineProperties)
440
+ register_element_cls("a:lnB", CT_LineProperties)
441
+ register_element_cls("a:lnBlToTr", CT_LineProperties)
442
+ register_element_cls("a:lnL", CT_LineProperties)
443
+ register_element_cls("a:lnR", CT_LineProperties)
444
+ register_element_cls("a:lnT", CT_LineProperties)
445
+ register_element_cls("a:lnTlToBr", CT_LineProperties)
446
+ register_element_cls("a:miter", CT_LineJoinMiterProperties)
447
+ register_element_cls("a:off", CT_Point2D)
448
+ register_element_cls("a:tailEnd", CT_LineEndProperties)
449
+ register_element_cls("a:xfrm", CT_Transform2D)
450
+ register_element_cls("c:spPr", CT_ShapeProperties)
451
+ register_element_cls("p:cNvPr", CT_NonVisualDrawingProps)
452
+ register_element_cls("p:nvPr", CT_ApplicationNonVisualDrawingProps)
453
+ register_element_cls("p:ph", CT_Placeholder)
454
+ register_element_cls("p:spPr", CT_ShapeProperties)
455
+ register_element_cls("p:xfrm", CT_Transform2D)
456
+
457
+
458
+ from pptx2.oxml.slide import ( # noqa: E402
459
+ CT_Background,
460
+ CT_BackgroundProperties,
461
+ CT_CommonSlideData,
462
+ CT_NotesMaster,
463
+ CT_NotesSlide,
464
+ CT_Slide,
465
+ CT_SlideLayout,
466
+ CT_SlideLayoutIdList,
467
+ CT_SlideLayoutIdListEntry,
468
+ CT_SlideMaster,
469
+ CT_SlideTiming,
470
+ CT_SlideTransition,
471
+ CT_TimeNodeList,
472
+ CT_TLMediaNodeVideo,
473
+ )
474
+
475
+ register_element_cls("p:bg", CT_Background)
476
+ register_element_cls("p:bgPr", CT_BackgroundProperties)
477
+ register_element_cls("p:childTnLst", CT_TimeNodeList)
478
+ register_element_cls("p:cSld", CT_CommonSlideData)
479
+ register_element_cls("p:notes", CT_NotesSlide)
480
+ register_element_cls("p:notesMaster", CT_NotesMaster)
481
+ register_element_cls("p:sld", CT_Slide)
482
+ register_element_cls("p:sldLayout", CT_SlideLayout)
483
+ register_element_cls("p:sldLayoutId", CT_SlideLayoutIdListEntry)
484
+ register_element_cls("p:sldLayoutIdLst", CT_SlideLayoutIdList)
485
+ register_element_cls("p:sldMaster", CT_SlideMaster)
486
+ register_element_cls("p:timing", CT_SlideTiming)
487
+ register_element_cls("p:transition", CT_SlideTransition)
488
+ register_element_cls("p:video", CT_TLMediaNodeVideo)
489
+
490
+
491
+ from pptx2.oxml.table import ( # noqa: E402
492
+ CT_Table,
493
+ CT_TableCell,
494
+ CT_TableCellProperties,
495
+ CT_TableCol,
496
+ CT_TableGrid,
497
+ CT_TableProperties,
498
+ CT_TableRow,
499
+ )
500
+
501
+ register_element_cls("a:gridCol", CT_TableCol)
502
+ register_element_cls("a:tbl", CT_Table)
503
+ register_element_cls("a:tblGrid", CT_TableGrid)
504
+ register_element_cls("a:tblPr", CT_TableProperties)
505
+ register_element_cls("a:tc", CT_TableCell)
506
+ register_element_cls("a:tcPr", CT_TableCellProperties)
507
+ register_element_cls("a:tr", CT_TableRow)
508
+
509
+
510
+ from pptx2.oxml.text import ( # noqa: E402
511
+ CT_OfficeMathMarker,
512
+ CT_RegularTextRun,
513
+ CT_TextBody,
514
+ CT_TextBodyProperties,
515
+ CT_TextCharacterProperties,
516
+ CT_TextField,
517
+ CT_TextFont,
518
+ CT_TextLineBreak,
519
+ CT_TextListStyle,
520
+ CT_TextNormalAutofit,
521
+ CT_TextParagraph,
522
+ CT_TextParagraphProperties,
523
+ CT_TextSpacing,
524
+ CT_TextSpacingPercent,
525
+ CT_TextSpacingPoint,
526
+ )
527
+
528
+ register_element_cls("a:bodyPr", CT_TextBodyProperties)
529
+ register_element_cls("a:br", CT_TextLineBreak)
530
+ register_element_cls("a:defRPr", CT_TextCharacterProperties)
531
+ register_element_cls("a:endParaRPr", CT_TextCharacterProperties)
532
+ register_element_cls("a:fld", CT_TextField)
533
+ register_element_cls("a:latin", CT_TextFont)
534
+ register_element_cls("a:lnSpc", CT_TextSpacing)
535
+ register_element_cls("a:normAutofit", CT_TextNormalAutofit)
536
+ register_element_cls("a:r", CT_RegularTextRun)
537
+ register_element_cls("a14:m", CT_OfficeMathMarker)
538
+ register_element_cls("a:p", CT_TextParagraph)
539
+ register_element_cls("a:lstStyle", CT_TextListStyle)
540
+ register_element_cls("a:lvl1pPr", CT_TextParagraphProperties)
541
+ register_element_cls("a:pPr", CT_TextParagraphProperties)
542
+ register_element_cls("c:rich", CT_TextBody)
543
+ register_element_cls("a:rPr", CT_TextCharacterProperties)
544
+ register_element_cls("a:spcAft", CT_TextSpacing)
545
+ register_element_cls("a:spcBef", CT_TextSpacing)
546
+ register_element_cls("a:spcPct", CT_TextSpacingPercent)
547
+ register_element_cls("a:spcPts", CT_TextSpacingPoint)
548
+ register_element_cls("a:txBody", CT_TextBody)
549
+ register_element_cls("c:txPr", CT_TextBody)
550
+ register_element_cls("p:txBody", CT_TextBody)
551
+
552
+
553
+ from pptx2.oxml.theme import CT_OfficeStyleSheet # noqa: E402
554
+
555
+ register_element_cls("a:theme", CT_OfficeStyleSheet)
pptx2/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 pptx2.oxml.simpletypes import XsdString
6
+ from pptx2.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