python-pptx2 2.13.0__tar.gz → 2.15.0__tar.gz

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 (618) hide show
  1. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/HISTORY.rst +130 -0
  2. {python_pptx2-2.13.0/src/python_pptx2.egg-info → python_pptx2-2.15.0}/PKG-INFO +3 -3
  3. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/README.rst +2 -1
  4. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/table.py +41 -1
  5. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/tbl-table.feature +28 -0
  6. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/pyproject.toml +0 -1
  7. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/__init__.py +4 -1
  8. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/_slide_importer.py +35 -21
  9. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/api.py +11 -5
  10. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/data.py +17 -0
  11. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/plot.py +19 -0
  12. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/xmlwriter.py +11 -2
  13. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/text.py +72 -0
  14. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/math.py +89 -37
  15. python_pptx2-2.15.0/src/pptx2/mathml2omml.py +1163 -0
  16. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/opc/package.py +12 -11
  17. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/opc/serialized.py +23 -14
  18. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/__init__.py +6 -0
  19. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/plot.py +13 -0
  20. python_pptx2-2.15.0/src/pptx2/oxml/customprops.py +170 -0
  21. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/ns.py +3 -0
  22. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/presentation.py +47 -0
  23. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/simpletypes.py +12 -0
  24. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/slide.py +68 -2
  25. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/text.py +34 -0
  26. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/package.py +14 -2
  27. python_pptx2-2.15.0/src/pptx2/parts/customprops.py +129 -0
  28. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/image.py +7 -5
  29. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/presentation.py +21 -6
  30. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/slide.py +77 -6
  31. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/presentation.py +15 -2
  32. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/shapetree.py +48 -7
  33. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/SKILL.md +1 -1
  34. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/basics.md +30 -0
  35. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/charts.md +1 -0
  36. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/math.md +6 -4
  37. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/tables.md +10 -0
  38. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/slide.py +104 -0
  39. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/table.py +193 -1
  40. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/text/text.py +137 -7
  41. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/util.py +3 -5
  42. {python_pptx2-2.13.0 → python_pptx2-2.15.0/src/python_pptx2.egg-info}/PKG-INFO +3 -3
  43. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/python_pptx2.egg-info/SOURCES.txt +6 -0
  44. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/python_pptx2.egg-info/requires.txt +0 -1
  45. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_chart_toggles.py +17 -0
  46. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_data.py +18 -0
  47. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_plot.py +47 -0
  48. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_xmlwriter.py +6 -0
  49. python_pptx2-2.15.0/tests/integration/test_add_slide_layout.py +216 -0
  50. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/integration/test_round_trip.py +80 -0
  51. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/opc/test_package.py +9 -0
  52. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/opc/test_serialized.py +23 -0
  53. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/test_presentation.py +47 -1
  54. python_pptx2-2.15.0/tests/oxml/test_slide.py +66 -0
  55. python_pptx2-2.15.0/tests/parts/test_customprops.py +274 -0
  56. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/parts/test_image.py +34 -1
  57. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/parts/test_presentation.py +17 -5
  58. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/parts/test_slide.py +89 -0
  59. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/schema/oxml_schema_validator.py +6 -2
  60. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/schema/test_schema_validity.py +146 -0
  61. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_shapetree.py +87 -0
  62. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_api.py +34 -0
  63. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_math.py +79 -18
  64. python_pptx2-2.15.0/tests/test_pathlike_inputs.py +178 -0
  65. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_slide.py +188 -0
  66. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_table.py +457 -0
  67. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_util.py +35 -1
  68. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/text/test_text.py +204 -2
  69. python_pptx2-2.13.0/tests/oxml/test_slide.py +0 -23
  70. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/LICENSE +0 -0
  71. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/MANIFEST.in +0 -0
  72. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/act-action.feature +0 -0
  73. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/act-hyperlink.feature +0 -0
  74. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-axis-props.feature +0 -0
  75. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-axistitle-props.feature +0 -0
  76. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-category-access.feature +0 -0
  77. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-category-props.feature +0 -0
  78. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-chart.feature +0 -0
  79. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-charttitle-props.feature +0 -0
  80. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-data-props.feature +0 -0
  81. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-datalabels.feature +0 -0
  82. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-gridlines-props.feature +0 -0
  83. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-legend-access.feature +0 -0
  84. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-legend-props.feature +0 -0
  85. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-marker-props.feature +0 -0
  86. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-plot-props.feature +0 -0
  87. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-point-access.feature +0 -0
  88. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-point-props.feature +0 -0
  89. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-replace-data.feature +0 -0
  90. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-series.feature +0 -0
  91. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/cht-ticklabels-props.feature +0 -0
  92. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/dml-color.feature +0 -0
  93. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/dml-effect.feature +0 -0
  94. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/dml-fill.feature +0 -0
  95. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/dml-line.feature +0 -0
  96. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/environment.py +0 -0
  97. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/ph-inherit-props.feature +0 -0
  98. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/ph-insert-shape.feature +0 -0
  99. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/ph-phfmt-props.feature +0 -0
  100. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/ph-placeholder-props.feature +0 -0
  101. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/prs-coreprops.feature +0 -0
  102. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/prs-default-template.feature +0 -0
  103. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/prs-open-save.feature +0 -0
  104. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/prs-presentation-props.feature +0 -0
  105. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-autoshape.feature +0 -0
  106. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-connector.feature +0 -0
  107. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-freeform.feature +0 -0
  108. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-graphicframe.feature +0 -0
  109. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-groupshape.feature +0 -0
  110. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-movie-props.feature +0 -0
  111. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-picture.feature +0 -0
  112. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-placeholder.feature +0 -0
  113. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-shapes.feature +0 -0
  114. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/shp-shared.feature +0 -0
  115. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/sld-background.feature +0 -0
  116. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/sld-slide.feature +0 -0
  117. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/sld-slides.feature +0 -0
  118. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/action.py +0 -0
  119. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/axis.py +0 -0
  120. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/background.py +0 -0
  121. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/category.py +0 -0
  122. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/chart.py +0 -0
  123. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/chartdata.py +0 -0
  124. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/color.py +0 -0
  125. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/coreprops.py +0 -0
  126. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/datalabel.py +0 -0
  127. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/effect.py +0 -0
  128. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/fill.py +0 -0
  129. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/font.py +0 -0
  130. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/font_color.py +0 -0
  131. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/helpers.py +0 -0
  132. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/legend.py +0 -0
  133. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/line.py +0 -0
  134. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/picture.py +0 -0
  135. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/placeholder.py +0 -0
  136. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/plot.py +0 -0
  137. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/presentation.py +0 -0
  138. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/series.py +0 -0
  139. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/shape.py +0 -0
  140. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/shapes.py +0 -0
  141. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/slide.py +0 -0
  142. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/slides.py +0 -0
  143. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/72-dpi.tiff +0 -0
  144. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
  145. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/act-props.pptm +0 -0
  146. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/calibriz.ttf +0 -0
  147. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
  148. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-category-access.pptx +0 -0
  149. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
  150. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
  151. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-charts.pptx +0 -0
  152. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
  153. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  154. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
  155. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-legend.pptx +0 -0
  156. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
  157. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
  158. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-point-access.pptx +0 -0
  159. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-point-props.pptx +0 -0
  160. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
  161. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-series.pptx +0 -0
  162. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  163. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/dml-effect.pptx +0 -0
  164. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/dml-fill.pptx +0 -0
  165. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/dml-line.pptx +0 -0
  166. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/ext-rels.pptx +0 -0
  167. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
  168. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
  169. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
  170. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
  171. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  172. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
  173. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
  174. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
  175. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  176. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  177. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  178. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  179. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  180. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  181. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  182. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  183. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  184. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  185. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  186. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  187. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  188. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  189. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  190. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  191. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  192. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  193. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  194. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  195. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  196. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  197. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  198. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  199. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  200. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  201. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
  202. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
  203. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
  204. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
  205. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/font-color.pptx +0 -0
  206. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
  207. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/just-two-mice.png +0 -0
  208. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
  209. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/minimal.pptx +0 -0
  210. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/monty-truth.png +0 -0
  211. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
  212. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/mst-shapes.pptx +0 -0
  213. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  214. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
  215. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  216. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  217. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/pic.emf +0 -0
  218. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
  219. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/prs-notes.pptx +0 -0
  220. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/prs-properties.pptx +0 -0
  221. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
  222. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/python-icon.jpeg +0 -0
  223. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/python-powered.png +0 -0
  224. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/python.bmp +0 -0
  225. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
  226. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  227. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  228. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  229. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-common-props.pptx +0 -0
  230. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
  231. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
  232. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  233. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  234. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-freeform.pptx +0 -0
  235. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
  236. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
  237. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-picture.pptx +0 -0
  238. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  239. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/shp-shapes.pptx +0 -0
  240. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/sld-background.pptx +0 -0
  241. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/sld-blank.pptx +0 -0
  242. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/sld-notes.pptx +0 -0
  243. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/sld-slide.pptx +0 -0
  244. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/sld-slides.pptx +0 -0
  245. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/sonic.gif +0 -0
  246. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/tbl-cell.pptx +0 -0
  247. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  248. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/test.pptx +0 -0
  249. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
  250. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/txt-font-props.pptx +0 -0
  251. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
  252. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  253. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
  254. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/test_files/txt-text.pptx +0 -0
  255. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/text.py +0 -0
  256. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/steps/text_frame.py +0 -0
  257. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/tbl-cell.feature +0 -0
  258. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/tbl-column.feature +0 -0
  259. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/txt-fit-text.feature +0 -0
  260. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/txt-font-color.feature +0 -0
  261. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/txt-font-props.feature +0 -0
  262. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/txt-paragraph.feature +0 -0
  263. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/txt-text.feature +0 -0
  264. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/features/txt-textframe.feature +0 -0
  265. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/setup.cfg +0 -0
  266. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/_color.py +0 -0
  267. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/_svg.py +0 -0
  268. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/_template_applier.py +0 -0
  269. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/_textstyle.py +0 -0
  270. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/accessibility.py +0 -0
  271. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/action.py +0 -0
  272. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/animation.py +0 -0
  273. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/audit.py +0 -0
  274. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/__init__.py +0 -0
  275. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/analytics.py +0 -0
  276. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/axis.py +0 -0
  277. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/category.py +0 -0
  278. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/chart.py +0 -0
  279. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/datalabel.py +0 -0
  280. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/legend.py +0 -0
  281. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/marker.py +0 -0
  282. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/palettes.py +0 -0
  283. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/point.py +0 -0
  284. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/quick_layouts.py +0 -0
  285. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/series.py +0 -0
  286. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/chart/xlsx.py +0 -0
  287. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/compose/__init__.py +0 -0
  288. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/compose/from_spec.py +0 -0
  289. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/design/__init__.py +0 -0
  290. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/design/components.py +0 -0
  291. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/design/figures.py +0 -0
  292. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/design/layout.py +0 -0
  293. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/design/recipes.py +0 -0
  294. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/design/style.py +0 -0
  295. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/design/tokens.py +0 -0
  296. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/diagrams.py +0 -0
  297. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/dml/__init__.py +0 -0
  298. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/dml/chtfmt.py +0 -0
  299. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/dml/color.py +0 -0
  300. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/dml/effect.py +0 -0
  301. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/dml/fill.py +0 -0
  302. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/dml/line.py +0 -0
  303. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/dml/picture.py +0 -0
  304. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/dml/three_d.py +0 -0
  305. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/__init__.py +0 -0
  306. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/action.py +0 -0
  307. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/animation.py +0 -0
  308. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/base.py +0 -0
  309. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/chart.py +0 -0
  310. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/dml.py +0 -0
  311. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/lang.py +0 -0
  312. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/presentation.py +0 -0
  313. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/enum/shapes.py +0 -0
  314. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/exc.py +0 -0
  315. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/formats.py +0 -0
  316. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/geometry.py +0 -0
  317. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/inherit.py +0 -0
  318. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/lint.py +0 -0
  319. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/media.py +0 -0
  320. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/opc/__init__.py +0 -0
  321. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/opc/constants.py +0 -0
  322. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/opc/oxml.py +0 -0
  323. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/opc/packuri.py +0 -0
  324. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/opc/shared.py +0 -0
  325. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/opc/spec.py +0 -0
  326. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/action.py +0 -0
  327. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/__init__.py +0 -0
  328. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/axis.py +0 -0
  329. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/chart.py +0 -0
  330. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
  331. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/legend.py +0 -0
  332. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/marker.py +0 -0
  333. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/series.py +0 -0
  334. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/chart/shared.py +0 -0
  335. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/coreprops.py +0 -0
  336. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/dml/__init__.py +0 -0
  337. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/dml/color.py +0 -0
  338. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/dml/effect.py +0 -0
  339. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/dml/fill.py +0 -0
  340. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/dml/line.py +0 -0
  341. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/dml/three_d.py +0 -0
  342. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
  343. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
  344. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/shapes/connector.py +0 -0
  345. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
  346. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
  347. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/shapes/picture.py +0 -0
  348. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/shapes/shared.py +0 -0
  349. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/table.py +0 -0
  350. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/theme.py +0 -0
  351. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/oxml/xmlchemy.py +0 -0
  352. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/__init__.py +0 -0
  353. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/chart.py +0 -0
  354. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/coreprops.py +0 -0
  355. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/diagram.py +0 -0
  356. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/embeddedpackage.py +0 -0
  357. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/parts/media.py +0 -0
  358. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/py.typed +0 -0
  359. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/render.py +0 -0
  360. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/section.py +0 -0
  361. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/__init__.py +0 -0
  362. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/autoshape.py +0 -0
  363. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/base.py +0 -0
  364. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/connector.py +0 -0
  365. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/freeform.py +0 -0
  366. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/graphfrm.py +0 -0
  367. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/group.py +0 -0
  368. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/picture.py +0 -0
  369. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shapes/placeholder.py +0 -0
  370. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/shared.py +0 -0
  371. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/__init__.py +0 -0
  372. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/__main__.py +0 -0
  373. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/animations.md +0 -0
  374. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/compose.md +0 -0
  375. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/design.md +0 -0
  376. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/effects.md +0 -0
  377. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
  378. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
  379. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/lint.md +0 -0
  380. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/picture-effects.md +0 -0
  381. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/render.md +0 -0
  382. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/smart-art.md +0 -0
  383. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
  384. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/theme.md +0 -0
  385. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/three-d.md +0 -0
  386. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/skill/references/transitions.md +0 -0
  387. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/smart_art.py +0 -0
  388. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/spec.py +0 -0
  389. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/table_styles.py +0 -0
  390. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/templates/default.pptx +0 -0
  391. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/templates/docx-icon.emf +0 -0
  392. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/templates/generic-icon.emf +0 -0
  393. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/templates/notes.xml +0 -0
  394. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/templates/notesMaster.xml +0 -0
  395. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/templates/pptx-icon.emf +0 -0
  396. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/templates/theme.xml +0 -0
  397. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
  398. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/text/__init__.py +0 -0
  399. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/text/fonts.py +0 -0
  400. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/text/layout.py +0 -0
  401. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/theme.py +0 -0
  402. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/pptx2/types.py +0 -0
  403. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
  404. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/python_pptx2.egg-info/entry_points.txt +0 -0
  405. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/src/python_pptx2.egg-info/top_level.txt +0 -0
  406. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/__init__.py +0 -0
  407. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/__init__.py +0 -0
  408. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_analytics.py +0 -0
  409. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_axis.py +0 -0
  410. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_category.py +0 -0
  411. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_chart.py +0 -0
  412. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_collision_strategy.py +0 -0
  413. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_datalabel.py +0 -0
  414. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_legend.py +0 -0
  415. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_marker.py +0 -0
  416. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_palettes.py +0 -0
  417. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_point.py +0 -0
  418. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_quick_layouts.py +0 -0
  419. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_series.py +0 -0
  420. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/chart/test_xlsx.py +0 -0
  421. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/design/__init__.py +0 -0
  422. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/design/test_components.py +0 -0
  423. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/design/test_figures.py +0 -0
  424. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/design/test_layout.py +0 -0
  425. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/design/test_recipes.py +0 -0
  426. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/design/test_style.py +0 -0
  427. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/design/test_tokens.py +0 -0
  428. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/dml/__init__.py +0 -0
  429. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/dml/test_chtfmt.py +0 -0
  430. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/dml/test_color.py +0 -0
  431. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/dml/test_effect.py +0 -0
  432. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/dml/test_fill.py +0 -0
  433. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/dml/test_line.py +0 -0
  434. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/dml/test_three_d.py +0 -0
  435. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/enum/__init__.py +0 -0
  436. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/enum/test_base.py +0 -0
  437. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/enum/test_shapes.py +0 -0
  438. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/integration/__init__.py +0 -0
  439. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/integration/round_trip.py +0 -0
  440. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/integration/test_apply_template.py +0 -0
  441. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/integration/test_compose_package.py +0 -0
  442. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/integration/test_import_slide.py +0 -0
  443. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/opc/__init__.py +0 -0
  444. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/opc/test_oxml.py +0 -0
  445. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/opc/test_packuri.py +0 -0
  446. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/__init__.py +0 -0
  447. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/shapes/__init__.py +0 -0
  448. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/shapes/test_autoshape.py +0 -0
  449. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
  450. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/shapes/test_groupshape.py +0 -0
  451. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/shapes/test_picture.py +0 -0
  452. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/test___init__.py +0 -0
  453. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/test_dml.py +0 -0
  454. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/test_ns.py +0 -0
  455. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/test_simpletypes.py +0 -0
  456. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/test_table.py +0 -0
  457. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/test_theme.py +0 -0
  458. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/test_xmlchemy.py +0 -0
  459. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/unitdata/__init__.py +0 -0
  460. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/unitdata/dml.py +0 -0
  461. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/unitdata/shape.py +0 -0
  462. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/oxml/unitdata/text.py +0 -0
  463. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/parts/__init__.py +0 -0
  464. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/parts/test_chart.py +0 -0
  465. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/parts/test_coreprops.py +0 -0
  466. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/parts/test_embeddedpackage.py +0 -0
  467. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/parts/test_media.py +0 -0
  468. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/schema/__init__.py +0 -0
  469. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/__init__.py +0 -0
  470. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_anchor.py +0 -0
  471. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_animate.py +0 -0
  472. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_autoshape.py +0 -0
  473. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_base.py +0 -0
  474. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_connector.py +0 -0
  475. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_freeform.py +0 -0
  476. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_graphfrm.py +0 -0
  477. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_group.py +0 -0
  478. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_picture.py +0 -0
  479. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/shapes/test_placeholder.py +0 -0
  480. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_accessibility.py +0 -0
  481. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_action.py +0 -0
  482. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_animation.py +0 -0
  483. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_audit.py +0 -0
  484. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_compose_from_spec.py +0 -0
  485. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_diagrams.py +0 -0
  486. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/calibriz.ttf +0 -0
  487. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/cdw-logo.eps +0 -0
  488. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/dummy.mp4 +0 -0
  489. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
  490. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
  491. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
  492. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
  493. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  494. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
  495. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
  496. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
  497. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  498. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  499. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  500. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  501. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  502. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  503. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  504. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  505. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  506. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  507. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  508. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  509. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  510. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  511. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  512. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  513. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  514. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  515. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  516. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  517. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  518. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  519. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  520. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  521. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  522. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  523. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
  524. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
  525. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
  526. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
  527. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/minimal.pptx +0 -0
  528. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/minimal_slide.xml +0 -0
  529. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/missing_rels_item.pptx +0 -0
  530. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/monty-truth.png +0 -0
  531. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/no-core-props.pptx +0 -0
  532. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/no-slides.pptx +0 -0
  533. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/presentation.xml +0 -0
  534. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/python-icon.jpeg +0 -0
  535. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/python-powered.png +0 -0
  536. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/python.bmp +0 -0
  537. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/slideLayout1.xml +0 -0
  538. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
  539. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
  540. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
  541. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
  542. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
  543. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-area.txt +0 -0
  544. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
  545. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
  546. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
  547. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
  548. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
  549. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
  550. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
  551. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
  552. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
  553. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
  554. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
  555. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
  556. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
  557. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
  558. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
  559. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x2-line.txt +0 -0
  560. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
  561. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
  562. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
  563. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
  564. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
  565. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
  566. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
  567. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
  568. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
  569. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
  570. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
  571. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
  572. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
  573. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
  574. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/cat-labels.txt +0 -0
  575. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
  576. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/default-notes.txt +0 -0
  577. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
  578. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/default-theme.txt +0 -0
  579. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/freeform.txt +0 -0
  580. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
  581. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/placeholders.txt +0 -0
  582. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
  583. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/relationships.txt +0 -0
  584. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
  585. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
  586. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/snippets/timing.txt +0 -0
  587. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/test.pptx +0 -0
  588. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_files/test_slides.pptx +0 -0
  589. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_formats.py +0 -0
  590. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_geometry.py +0 -0
  591. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_inherit.py +0 -0
  592. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_lint.py +0 -0
  593. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_lint_on_save.py +0 -0
  594. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_media.py +0 -0
  595. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_new_features.py +0 -0
  596. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_package.py +0 -0
  597. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_powerpoint_strict_validation.py +0 -0
  598. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_presentation.py +0 -0
  599. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_render.py +0 -0
  600. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_render_slides_alias.py +0 -0
  601. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_section.py +0 -0
  602. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_shape_helpers.py +0 -0
  603. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_shared.py +0 -0
  604. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_skill.py +0 -0
  605. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_smart_art.py +0 -0
  606. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_svg_picture.py +0 -0
  607. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_table_extras.py +0 -0
  608. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_theme.py +0 -0
  609. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/test_transition_morph.py +0 -0
  610. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/text/__init__.py +0 -0
  611. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/text/test_fonts.py +0 -0
  612. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/text/test_layout.py +0 -0
  613. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/unitdata.py +0 -0
  614. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/unitutil/__init__.py +0 -0
  615. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/unitutil/cxml.py +0 -0
  616. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/unitutil/file.py +0 -0
  617. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tests/unitutil/mock.py +0 -0
  618. {python_pptx2-2.13.0 → python_pptx2-2.15.0}/tox.ini +0 -0
@@ -15,6 +15,136 @@ can sit beside both ``python-pptx`` (``pptx``) and ``power-pptx``
15
15
  .. _`scanny/python-pptx`: https://github.com/scanny/python-pptx
16
16
 
17
17
 
18
+ 2.15.0 (2026-08-30)
19
+ +++++++++++++++++++
20
+
21
+ Twelve ports from the upstream ``scanny/python-pptx`` pull-request
22
+ backlog, triaged against this fork's existing surface: four correctness
23
+ fixes (notes-master registration, ``.potx`` opening, MPO images,
24
+ ``PathLike`` inputs) and eight features (``add_paragraph(text=...)``,
25
+ ``get_by_name()`` on shape collections, doughnut first-slice angle,
26
+ ``Slides.remove()``, table row/column add & remove, custom document
27
+ properties, slide-number/date fields, slide-layout authoring).
28
+
29
+ Added
30
+ .....
31
+
32
+ * ``TextFrame.add_paragraph()`` accepts an optional ``text`` argument.
33
+ When given, the new paragraph carries that text as a single run
34
+ (``add_paragraph("Hello")`` is equivalent to ``add_paragraph()``
35
+ followed by setting ``.text``); when omitted, an empty paragraph is
36
+ added exactly as before (upstream feature by kckaiwei,
37
+ ``scanny/python-pptx#602``).
38
+ * ``get_by_name(name, default=None)`` on shape collections
39
+ (``slide.shapes``, layout/master/notes shape trees, group shapes, and
40
+ placeholder collections via ``_BaseShapes``) — returns the first
41
+ shape whose ``name`` matches, or ``default`` when none does
42
+ (port of `scanny/python-pptx#798`_ by lthamm).
43
+
44
+ .. _`scanny/python-pptx#798`: https://github.com/scanny/python-pptx/pull/798
45
+ * ``DoughnutPlot.first_slice_angle`` — read/write angle in degrees
46
+ (0–359) of the first doughnut slice, mapped to the
47
+ ``<c:firstSliceAng>`` element. ``CategoryChartData.first_slice_angle``
48
+ bakes the angle into charts created with ``add_chart``; the plot
49
+ property also works on charts opened from a file.
50
+ * ``prs.slides.remove(slide)`` — delete a slide from the presentation,
51
+ accepting either the |Slide| object or its integer slide id (upstream's
52
+ ``remove_slide`` signature). Purges ``p14:section`` membership and drops
53
+ the presentation→slide relationship so the slide part (and its notes
54
+ slide) fall out of the saved package. Raises ``ValueError`` for a slide
55
+ not in the collection. Removing the last slide yields a valid, empty
56
+ deck.
57
+ * ``table.rows.add_row()`` / ``table.rows.remove(row_or_idx)`` and
58
+ ``table.columns.add_column(width=None)`` /
59
+ ``table.columns.remove(col_or_idx)`` — grow and shrink an existing
60
+ table. A new row/column copies the height/width and cell formatting
61
+ of the last row/column and arrives empty and unmerged; removal keeps
62
+ the one-``a:tc``-per-``a:gridCol`` invariant, resizes the graphic
63
+ frame, and raises ``ValueError`` rather than truncate a merged cell
64
+ spanning multiple rows/columns. Port of scanny/python-pptx#399 by
65
+ Ignisor.
66
+ * ``prs.custom_properties`` — mapping-style read/write access to the
67
+ user-defined document properties in ``/docProps/custom.xml``.
68
+ ``get``/``set``/``delete`` with ``str``, ``int``, ``float``, and
69
+ ``bool`` values (stored as ``vt:lpstr``, ``vt:i4``, ``vt:r8``, and
70
+ ``vt:bool``); the part and its package-root relationship are created
71
+ lazily by the first assignment, and files that already carry a
72
+ custom-properties part open mapped to the new part class. Port of
73
+ ``scanny/python-pptx#342`` by stadlerism.
74
+ * ``SlideLayouts.add_layout()`` appends a blank slide layout to a slide
75
+ master, named ``"Layout %s"`` by default (the ``%s`` is substituted with
76
+ the new master-to-layout relationship id). ``SlideLayouts.clone()``
77
+ deep-copies an existing layout of the same presentation — placeholders,
78
+ shapes, and referenced images included — under a non-colliding name, and
79
+ ``LayoutShapes.add_placeholder()`` adds a placeholder to a layout,
80
+ defaulting its idx to the matching master placeholder so inheritance and
81
+ ``slide.shapes.title`` keep working.
82
+
83
+
84
+ Fixed
85
+ .....
86
+
87
+ * Creating a notes master (``prs.notes_master`` on a deck without one,
88
+ e.g. the default template) related the new part but never wrote the
89
+ matching ``p:notesMasterIdLst`` / ``p:notesMasterId`` entry into
90
+ ``presentation.xml``, so PowerPoint could flag the saved file for
91
+ repair. The id list is now registered on creation and reconciled on
92
+ access for decks saved by older versions (port of
93
+ scanny/python-pptx#1128 by robbybrodie).
94
+ * ``@lazyproperty`` now caches a getter that legitimately returns
95
+ ``None``. The instance-cache hit test compared the cached value to
96
+ ``None``, so a ``None``-returning getter was silently re-evaluated on
97
+ every access, contradicting the decorator's documented evaluate-once
98
+ guarantee. The check is now key presence in the host object's
99
+ ``__dict__`` (upstream fix by Afonso Januário,
100
+ ``fix/lazyproperty-none-value-caching``).
101
+ * MPO-encoded JPEG images (multi-picture object files common from
102
+ cameras, ``.mpo``) are accepted by ``add_picture()`` and
103
+ ``Image.from_file()`` instead of raising ``ValueError: unsupported
104
+ image format``. Pillow reports these as format ``MPO``; they are
105
+ mapped to the canonical ``jpg`` extension and ``image/jpeg``
106
+ content type (port of scanny/python-pptx#1075 by riparuk).
107
+ * ``Presentation()`` now opens ``.potx`` template files. The main-document
108
+ part check only accepted the presentation and macro-enabled presentation
109
+ content types, so a template package raised ``ValueError``; the
110
+ ``presentationml.template.main+xml`` type is now accepted as well (port
111
+ of scanny/python-pptx#1071 by 9021007).
112
+ * ``os.PathLike`` inputs (e.g. ``pathlib.Path``) are now accepted
113
+ wherever a file path was: ``Presentation()`` open and ``save()``,
114
+ ``Image.from_file()``, ``shapes.add_picture()``, and picture-placeholder
115
+ ``insert_picture()``. Previously a ``Path`` raised ``TypeError`` from
116
+ ``Image.from_file()`` and was misrouted as a stream by the package
117
+ reader. No behavior change for ``str`` or file-like inputs (port of
118
+ `scanny/python-pptx#1123`_ by AlexanderWillner).
119
+
120
+ .. _`scanny/python-pptx#1123`: https://github.com/scanny/python-pptx/pull/1123
121
+
122
+
123
+ 2.14.0 (2026-08-26)
124
+ +++++++++++++++++++
125
+
126
+ PowerPoint-valid native equations. The MathML → OMML step is now a
127
+ bundled port of ``mathml2omml-plus`` (ECMA-376 §7.1) instead of the
128
+ PyPI ``mathml2omml`` 0.0.2 toy, which wrapped every construct in
129
+ ``m:box`` and omitted ``m:fPr`` — PowerPoint then flattened fractions
130
+ to concatenated digits (``7/10`` → ``710``). Slides now declare the
131
+ ``m`` / ``a14`` / ``mc`` host namespaces and ``mc:Ignorable="a14"``.
132
+
133
+ Added
134
+ .....
135
+
136
+ * ``Paragraph.add_field()`` appends slide-number and date/time fields
137
+ (``a:fld``) to a paragraph, with the new ``MSO_TEXT_FIELD_TYPE``
138
+ enumeration covering the ``slidenum`` / ``datetime*`` tokens. Fields are
139
+ created with the schema-required braced GUID ``id`` and a cached-text
140
+ (``a:t``) placeholder PowerPoint replaces with the computed value at
141
+ render time; ``_Field`` exposes ``type``, ``text``, and ``font``.
142
+ * **Bundled ``pptx2.mathml2omml``** — spec-compliant ``m:f`` / ``m:rad``
143
+ / ``m:nary`` / ``m:sSub`` / matrices / accents. ``python-pptx2[math]``
144
+ now only needs ``latex2mathml``.
145
+ * Fraction bars and other controls inherit ``size_pt`` / ``color`` via
146
+ ``m:ctrlPr`` as well as ``m:r``.
147
+
18
148
  2.13.0 (2026-08-26)
19
149
  +++++++++++++++++++
20
150
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.13.0
3
+ Version: 2.15.0
4
4
  Summary: Create, read, and update PowerPoint 2007+ (.pptx) files. Fork of power-pptx / python-pptx, published as python-pptx2.
5
5
  Author: Matěj Štágl
6
6
  Author-email: stagl@wattlescript.org
@@ -40,7 +40,6 @@ Requires-Dist: lxml>=3.1.0
40
40
  Requires-Dist: typing_extensions>=4.9.0
41
41
  Provides-Extra: math
42
42
  Requires-Dist: latex2mathml>=3.0; extra == "math"
43
- Requires-Dist: mathml2omml>=0.0.2; extra == "math"
44
43
  Dynamic: license-file
45
44
 
46
45
  python-pptx2
@@ -130,8 +129,9 @@ Optional dependencies:
130
129
  * ``cairosvg`` — install only if you want ``add_svg_picture(...)`` to
131
130
  auto-rasterise the PNG fallback.
132
131
  * ``pyyaml`` — install only if you want ``DesignTokens.from_yaml``.
133
- * ``python-pptx2[math]`` (``latex2mathml`` + ``mathml2omml``) — required
132
+ * ``python-pptx2[math]`` (``latex2mathml``) — required
134
133
  for ``slide.shapes.add_equation(...)`` / ``paragraph.add_math(...)``.
134
+ MathML → OMML is bundled.
135
135
  * ``soffice`` (LibreOffice) on PATH — required for
136
136
  ``Presentation.render_thumbnails()``.
137
137
  * ``pdftoppm`` (Poppler) or ``pypdfium2`` — required for the
@@ -85,8 +85,9 @@ Optional dependencies:
85
85
  * ``cairosvg`` — install only if you want ``add_svg_picture(...)`` to
86
86
  auto-rasterise the PNG fallback.
87
87
  * ``pyyaml`` — install only if you want ``DesignTokens.from_yaml``.
88
- * ``python-pptx2[math]`` (``latex2mathml`` + ``mathml2omml``) — required
88
+ * ``python-pptx2[math]`` (``latex2mathml``) — required
89
89
  for ``slide.shapes.add_equation(...)`` / ``paragraph.add_math(...)``.
90
+ MathML → OMML is bundled.
90
91
  * ``soffice`` (LibreOffice) on PATH — required for
91
92
  ``Presentation.render_thumbnails()``.
92
93
  * ``pdftoppm`` (Poppler) or ``pypdfium2`` — required for the
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from behave import given, then, when
6
- from helpers import test_pptx
6
+ from helpers import saved_pptx_path, test_pptx
7
7
 
8
8
  from pptx2 import Presentation
9
9
  from pptx2.enum.text import MSO_ANCHOR # noqa # pyright: ignore[reportUnusedImport]
@@ -16,6 +16,8 @@ from pptx2.util import Inches
16
16
  @given("a 2x2 Table object as table")
17
17
  def given_a_2x2_Table_object_as_table(context):
18
18
  prs = Presentation(test_pptx("shp-shapes"))
19
+ # ---prs is stashed so a later "I save the presentation" step can save it---
20
+ context.prs = prs
19
21
  context.table_ = prs.slides[0].shapes[3].table
20
22
 
21
23
 
@@ -152,6 +154,26 @@ def when_I_call_origin_cell_merge_other_cell(context):
152
154
  context.origin_cell.merge(context.other_cell)
153
155
 
154
156
 
157
+ @when("I add a row to the table")
158
+ def when_I_add_a_row_to_the_table(context):
159
+ context.table_.rows.add_row()
160
+
161
+
162
+ @when("I add a column to the table")
163
+ def when_I_add_a_column_to_the_table(context):
164
+ context.table_.columns.add_column()
165
+
166
+
167
+ @when("I remove the second row of the table")
168
+ def when_I_remove_the_second_row_of_the_table(context):
169
+ context.table_.rows.remove(1)
170
+
171
+
172
+ @when("I remove the second column of the table")
173
+ def when_I_remove_the_second_column_of_the_table(context):
174
+ context.table_.columns.remove(1)
175
+
176
+
155
177
  # then ====================================================
156
178
 
157
179
 
@@ -298,6 +320,24 @@ def then_table_rows_is_a_type_object(context, type_name):
298
320
  assert actual == expected, "table.rows is a %s object" % actual
299
321
 
300
322
 
323
+ @then("the saved table has {int_lit} rows")
324
+ @then("the saved table has {int_lit} row")
325
+ def then_the_saved_table_has_n_rows(context, int_lit):
326
+ table = Presentation(saved_pptx_path).slides[0].shapes[3].table
327
+ actual = len(table.rows)
328
+ expected = int(int_lit)
329
+ assert actual == expected, "the saved table has %s rows" % actual
330
+
331
+
332
+ @then("the saved table has {int_lit} columns")
333
+ @then("the saved table has {int_lit} column")
334
+ def then_the_saved_table_has_n_columns(context, int_lit):
335
+ table = Presentation(saved_pptx_path).slides[0].shapes[3].table
336
+ actual = len(table.columns)
337
+ expected = int(int_lit)
338
+ assert actual == expected, "the saved table has %s columns" % actual
339
+
340
+
301
341
  @then("table.vert_banding is {bool_lit}")
302
342
  def then_table_vert_banding_is_value(context, bool_lit):
303
343
  actual = context.table_.vert_banding
@@ -58,3 +58,31 @@ Feature: Table properties and methods
58
58
  Given a 2x2 Table object as table
59
59
  When I assign table.vert_banding = True
60
60
  Then table.vert_banding is True
61
+
62
+
63
+ Scenario: Append table row
64
+ Given a 2x2 Table object as table
65
+ When I add a row to the table
66
+ And I save the presentation
67
+ Then the saved table has 3 rows
68
+
69
+
70
+ Scenario: Remove table row
71
+ Given a 2x2 Table object as table
72
+ When I remove the second row of the table
73
+ And I save the presentation
74
+ Then the saved table has 1 row
75
+
76
+
77
+ Scenario: Append table column
78
+ Given a 2x2 Table object as table
79
+ When I add a column to the table
80
+ And I save the presentation
81
+ Then the saved table has 3 columns
82
+
83
+
84
+ Scenario: Remove table column
85
+ Given a 2x2 Table object as table
86
+ When I remove the second column of the table
87
+ And I save the presentation
88
+ Then the saved table has 1 column
@@ -44,7 +44,6 @@ requires-python = ">=3.9"
44
44
  [project.optional-dependencies]
45
45
  math = [
46
46
  "latex2mathml>=3.0",
47
- "mathml2omml>=0.0.2",
48
47
  ]
49
48
 
50
49
  [project.urls]
@@ -35,6 +35,7 @@ from pptx2.opc.constants import CONTENT_TYPE as CT
35
35
  from pptx2.opc.package import PartFactory
36
36
  from pptx2.parts.chart import ChartPart
37
37
  from pptx2.parts.coreprops import CorePropertiesPart
38
+ from pptx2.parts.customprops import CustomPropertiesPart
38
39
  from pptx2.parts.diagram import (
39
40
  DiagramColorsPart,
40
41
  DiagramDataPart,
@@ -56,7 +57,7 @@ from pptx2.parts.slide import (
56
57
  if TYPE_CHECKING:
57
58
  from pptx2.opc.package import Part
58
59
 
59
- __version__ = "2.13.0"
60
+ __version__ = "2.15.0"
60
61
 
61
62
  sys.modules["pptx2.exceptions"] = exceptions
62
63
  del sys
@@ -98,6 +99,7 @@ content_type_to_part_class_map: dict[str, type[Part]] = {
98
99
  CT.PML_TEMPLATE_MAIN: PresentationPart,
99
100
  CT.PML_SLIDESHOW_MAIN: PresentationPart,
100
101
  CT.OPC_CORE_PROPERTIES: CorePropertiesPart,
102
+ CT.OFC_CUSTOM_PROPERTIES: CustomPropertiesPart,
101
103
  CT.PML_NOTES_MASTER: NotesMasterPart,
102
104
  CT.PML_NOTES_SLIDE: NotesSlidePart,
103
105
  CT.PML_SLIDE: SlidePart,
@@ -136,6 +138,7 @@ PartFactory.part_type_for.update(content_type_to_part_class_map)
136
138
  del (
137
139
  ChartPart,
138
140
  CorePropertiesPart,
141
+ CustomPropertiesPart,
139
142
  DiagramColorsPart,
140
143
  DiagramDataPart,
141
144
  DiagramLayoutPart,
@@ -93,6 +93,37 @@ def import_slide(
93
93
  return importer.run()
94
94
 
95
95
 
96
+ def next_layout_hierarchy_id(prs_part: PresentationPart) -> int:
97
+ """Return a fresh unique id for a `p:sldMasterId` / `p:sldLayoutId` entry.
98
+
99
+ These share one id space starting at 2147483648 (ST_SlideMasterId /
100
+ ST_SlideLayoutId minimum); duplicates across the presentation are a
101
+ repair trigger, so scan every master's layout-id list plus the
102
+ presentation's master-id list for the current maximum. Used both when
103
+ cloning masters (import_slide) and when adding or cloning slide layouts.
104
+ """
105
+ used = [2147483647]
106
+ prs_element = prs_part._element # pyright: ignore[reportPrivateUsage]
107
+ used += [int(v) for v in prs_element.xpath("p:sldMasterIdLst/p:sldMasterId/@id")]
108
+ for dst_master_part in _iter_master_parts(prs_part):
109
+ used += [
110
+ int(v)
111
+ for v in dst_master_part._element.xpath( # pyright: ignore[reportPrivateUsage]
112
+ "p:sldLayoutIdLst/p:sldLayoutId/@id"
113
+ )
114
+ ]
115
+ return max(used) + 1
116
+
117
+
118
+ def _iter_master_parts(prs_part: PresentationPart):
119
+ """Yield each SlideMasterPart referenced from *prs_part*'s `p:sldMasterIdLst`."""
120
+ prs_element = prs_part._element # pyright: ignore[reportPrivateUsage]
121
+ if prs_element.sldMasterIdLst is None:
122
+ return
123
+ for entry in prs_element.sldMasterIdLst.sldMasterId_lst:
124
+ yield prs_part.related_part(entry.rId)
125
+
126
+
96
127
  # ---------------------------------------------------------------------------
97
128
  # Internal implementation
98
129
  # ---------------------------------------------------------------------------
@@ -169,13 +200,9 @@ class _SlideImporter:
169
200
  return dst_master_part
170
201
  return None
171
202
 
172
- def _iter_dst_masters(self): # type: ignore[return]
203
+ def _iter_dst_masters(self):
173
204
  """Yield each SlideMasterPart already in the destination presentation."""
174
- prs_element = self._dst_prs_part._element # pyright: ignore[reportPrivateUsage]
175
- if prs_element.sldMasterIdLst is None:
176
- return
177
- for entry in prs_element.sldMasterIdLst.sldMasterId_lst:
178
- yield self._dst_prs_part.related_part(entry.rId)
205
+ yield from _iter_master_parts(self._dst_prs_part)
179
206
 
180
207
  def _find_or_clone_layout_in_master(
181
208
  self, src_layout_part: SlideLayoutPart, dst_master_part: SlideMasterPart
@@ -325,22 +352,9 @@ class _SlideImporter:
325
352
  def _next_hierarchy_id(self) -> int:
326
353
  """Return a fresh unique id for a `p:sldMasterId` / `p:sldLayoutId` entry.
327
354
 
328
- These share one id space starting at 2147483648 (ST_SlideMasterId /
329
- ST_SlideLayoutId minimum); duplicates across the presentation are a
330
- repair trigger, so scan every master's layout-id list plus the
331
- presentation's master-id list for the current maximum.
355
+ See :func:`next_layout_hierarchy_id`.
332
356
  """
333
- used = [2147483647]
334
- prs_element = self._dst_prs_part._element # pyright: ignore[reportPrivateUsage]
335
- used += [int(v) for v in prs_element.xpath("p:sldMasterIdLst/p:sldMasterId/@id")]
336
- for dst_master_part in self._iter_dst_masters():
337
- used += [
338
- int(v)
339
- for v in dst_master_part._element.xpath( # pyright: ignore[reportPrivateUsage]
340
- "p:sldLayoutIdLst/p:sldLayoutId/@id"
341
- )
342
- ]
343
- return max(used) + 1
357
+ return next_layout_hierarchy_id(self._dst_prs_part)
344
358
 
345
359
  # ------------------------------------------------------------------
346
360
  # Slide copy
@@ -18,12 +18,14 @@ if TYPE_CHECKING:
18
18
  from pptx2.parts.presentation import PresentationPart
19
19
 
20
20
 
21
- def Presentation(pptx: str | IO[bytes] | None = None) -> presentation.Presentation:
21
+ def Presentation(
22
+ pptx: str | os.PathLike[str] | IO[bytes] | None = None,
23
+ ) -> presentation.Presentation:
22
24
  """
23
25
  Return a |Presentation| object loaded from *pptx*, where *pptx* can be
24
- either a path to a ``.pptx`` file (a string) or a file-like object. If
25
- *pptx* is missing or ``None``, the built-in default presentation
26
- "template" is loaded.
26
+ either a path to a ``.pptx`` file (a string or ``pathlib.Path``) or a
27
+ file-like object. If *pptx* is missing or ``None``, the built-in default
28
+ presentation "template" is loaded.
27
29
  """
28
30
  if pptx is None:
29
31
  pptx = _default_pptx_path()
@@ -45,5 +47,9 @@ def _default_pptx_path() -> str:
45
47
 
46
48
  def _is_pptx_package(prs_part: PresentationPart):
47
49
  """Return |True| if *prs_part* is a valid main document part, |False| otherwise."""
48
- valid_content_types = (CT.PML_PRESENTATION_MAIN, CT.PML_PRES_MACRO_MAIN)
50
+ valid_content_types = (
51
+ CT.PML_PRESENTATION_MAIN,
52
+ CT.PML_PRES_MACRO_MAIN,
53
+ CT.PML_TEMPLATE_MAIN,
54
+ )
49
55
  return prs_part.content_type in valid_content_types
@@ -12,6 +12,7 @@ from pptx2.chart.xlsx import (
12
12
  XyWorkbookWriter,
13
13
  )
14
14
  from pptx2.chart.xmlwriter import ChartXmlWriter
15
+ from pptx2.oxml.simpletypes import ST_FirstSliceAng
15
16
  from pptx2.util import lazyproperty
16
17
 
17
18
 
@@ -268,6 +269,8 @@ class CategoryChartData(_BaseChartData):
268
269
  The corresponding X value is inferred by its position in the sequence.
269
270
  """
270
271
 
272
+ _first_slice_angle = 0
273
+
271
274
  def add_category(self, label):
272
275
  """
273
276
  Return a newly created |data.Category| object having *label* and
@@ -323,6 +326,20 @@ class CategoryChartData(_BaseChartData):
323
326
  """
324
327
  return self._workbook_writer.categories_ref
325
328
 
329
+ @property
330
+ def first_slice_angle(self):
331
+ """
332
+ Read/write int in range 0..359 specifying the angle in degrees of
333
+ the first slice for a doughnut chart created from this chart data,
334
+ clockwise from 12 o'clock. The default is 0, the PowerPoint default.
335
+ """
336
+ return self._first_slice_angle
337
+
338
+ @first_slice_angle.setter
339
+ def first_slice_angle(self, value):
340
+ ST_FirstSliceAng.validate(value)
341
+ self._first_slice_angle = int(value)
342
+
326
343
  def values_ref(self, series):
327
344
  """
328
345
  The Excel worksheet reference to the values for *series* (not
@@ -220,6 +220,25 @@ class DoughnutPlot(_BasePlot):
220
220
  holeSize = self._element.get_or_add_holeSize()
221
221
  holeSize.val = value
222
222
 
223
+ @property
224
+ def first_slice_angle(self):
225
+ """
226
+ Read/write int in range 0..359 specifying the angle in degrees of
227
+ the first slice of this doughnut, clockwise from 12 o'clock. The
228
+ PowerPoint default for a new doughnut chart is 0, which is what this
229
+ property reports when no explicit ``<c:firstSliceAng>`` element is
230
+ present.
231
+ """
232
+ firstSliceAng = self._element.firstSliceAng
233
+ if firstSliceAng is None:
234
+ return 0
235
+ return firstSliceAng.val
236
+
237
+ @first_slice_angle.setter
238
+ def first_slice_angle(self, value):
239
+ firstSliceAng = self._element.get_or_add_firstSliceAng()
240
+ firstSliceAng.val = value
241
+
223
242
 
224
243
  class LinePlot(_BasePlot):
225
244
  """
@@ -669,7 +669,7 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
669
669
  ' <c:showBubbleSize val="0"/>\n'
670
670
  ' <c:showLeaderLines val="1"/>\n'
671
671
  " </c:dLbls>\n"
672
- ' <c:firstSliceAng val="0"/>\n'
672
+ ' <c:firstSliceAng val="{firstSliceAng}"/>\n'
673
673
  ' <c:holeSize val="50"/>\n'
674
674
  " </c:doughnutChart>\n"
675
675
  " </c:plotArea>\n"
@@ -693,7 +693,7 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
693
693
  " </a:p>\n"
694
694
  " </c:txPr>\n"
695
695
  "</c:chartSpace>\n"
696
- ).format(**{"ser_xml": self._ser_xml})
696
+ ).format(**{"ser_xml": self._ser_xml, "firstSliceAng": self._firstSliceAng})
697
697
 
698
698
  @property
699
699
  def _explosion_xml(self):
@@ -701,6 +701,15 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
701
701
  return ' <c:explosion val="25"/>\n'
702
702
  return ""
703
703
 
704
+ @property
705
+ def _firstSliceAng(self):
706
+ """
707
+ The integer angle in degrees for the ``<c:firstSliceAng>`` element,
708
+ taken from the chart data object when it specifies one and 0
709
+ (the PowerPoint default) otherwise.
710
+ """
711
+ return getattr(self._chart_data, "first_slice_angle", 0)
712
+
704
713
  @property
705
714
  def _ser_xml(self):
706
715
  xml = ""
@@ -228,3 +228,75 @@ class PP_PARAGRAPH_ALIGNMENT(BaseXmlEnum):
228
228
 
229
229
 
230
230
  PP_ALIGN = PP_PARAGRAPH_ALIGNMENT
231
+
232
+
233
+ class MSO_TEXT_FIELD_TYPE(BaseXmlEnum):
234
+ """Specifies the kind of value a text field (`a:fld`) displays.
235
+
236
+ Used with :meth:`.Paragraph.add_field` to add a run-like field element to a paragraph.
237
+ The field's displayed text (the actual slide number, the current date, ...) is computed by
238
+ PowerPoint when the slide is rendered; the `a:t` child element holds only the "cached"
239
+ placeholder text readers that do not compute fields will show.
240
+
241
+ Example::
242
+
243
+ from pptx2.enum.text import MSO_TEXT_FIELD_TYPE
244
+
245
+ paragraph.add_field(MSO_TEXT_FIELD_TYPE.SLIDE_NUMBER)
246
+
247
+ The XML tokens are the ST_TextFieldType values DrawingML defines ("slidenum", "datetime",
248
+ "datetime1" through "datetime13") plus "datetimeFigureOut", the token PowerPoint writes for
249
+ an automatically updated date.
250
+ """
251
+
252
+ SLIDE_NUMBER = (1, "slidenum", "The number of the slide the field appears on.")
253
+ """The number of the slide the field appears on."""
254
+
255
+ DATETIME = (2, "datetime", "The date and time in the containing document's default format.")
256
+ """The date and time in the containing document's default format."""
257
+
258
+ DATETIME_1 = (3, "datetime1", "Predefined date/time format 1 (locale-dependent rendering).")
259
+ """Predefined date/time format 1 (locale-dependent rendering)."""
260
+
261
+ DATETIME_2 = (4, "datetime2", "Predefined date/time format 2 (locale-dependent rendering).")
262
+ """Predefined date/time format 2 (locale-dependent rendering)."""
263
+
264
+ DATETIME_3 = (5, "datetime3", "Predefined date/time format 3 (locale-dependent rendering).")
265
+ """Predefined date/time format 3 (locale-dependent rendering)."""
266
+
267
+ DATETIME_4 = (6, "datetime4", "Predefined date/time format 4 (locale-dependent rendering).")
268
+ """Predefined date/time format 4 (locale-dependent rendering)."""
269
+
270
+ DATETIME_5 = (7, "datetime5", "Predefined date/time format 5 (locale-dependent rendering).")
271
+ """Predefined date/time format 5 (locale-dependent rendering)."""
272
+
273
+ DATETIME_6 = (8, "datetime6", "Predefined date/time format 6 (locale-dependent rendering).")
274
+ """Predefined date/time format 6 (locale-dependent rendering)."""
275
+
276
+ DATETIME_7 = (9, "datetime7", "Predefined date/time format 7 (locale-dependent rendering).")
277
+ """Predefined date/time format 7 (locale-dependent rendering)."""
278
+
279
+ DATETIME_8 = (10, "datetime8", "Predefined date/time format 8 (locale-dependent rendering).")
280
+ """Predefined date/time format 8 (locale-dependent rendering)."""
281
+
282
+ DATETIME_9 = (11, "datetime9", "Predefined date/time format 9 (locale-dependent rendering).")
283
+ """Predefined date/time format 9 (locale-dependent rendering)."""
284
+
285
+ DATETIME_10 = (12, "datetime10", "Predefined date/time format 10 (locale-dependent rendering).")
286
+ """Predefined date/time format 10 (locale-dependent rendering)."""
287
+
288
+ DATETIME_11 = (13, "datetime11", "Predefined date/time format 11 (locale-dependent rendering).")
289
+ """Predefined date/time format 11 (locale-dependent rendering)."""
290
+
291
+ DATETIME_12 = (14, "datetime12", "Predefined date/time format 12 (locale-dependent rendering).")
292
+ """Predefined date/time format 12 (locale-dependent rendering)."""
293
+
294
+ DATETIME_13 = (15, "datetime13", "Predefined date/time format 13 (locale-dependent rendering).")
295
+ """Predefined date/time format 13 (locale-dependent rendering)."""
296
+
297
+ DATETIME_FIGURE_OUT = (
298
+ 16,
299
+ "datetimeFigureOut",
300
+ "The current date, in the format PowerPoint figures out automatically.",
301
+ )
302
+ """The current date, in the format PowerPoint figures out automatically."""