python-pptx2 2.19.0__tar.gz → 3.0.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 (680) hide show
  1. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/HISTORY.rst +93 -1
  2. {python_pptx2-2.19.0/src/python_pptx2.egg-info → python_pptx2-3.0.0}/PKG-INFO +2 -2
  3. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/table.py +16 -11
  4. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/tbl-cell.feature +15 -0
  5. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/pyproject.toml +3 -1
  6. python_pptx2-3.0.0/src/paper_pptx_doctor/__init__.py +135 -0
  7. python_pptx2-3.0.0/src/paper_pptx_doctor/__main__.py +5 -0
  8. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/__init__.py +1 -1
  9. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/_color.py +3 -0
  10. python_pptx2-3.0.0/src/pptx2/_ownership.py +67 -0
  11. python_pptx2-3.0.0/src/pptx2/_transaction.py +666 -0
  12. python_pptx2-3.0.0/src/pptx2/_version.py +20 -0
  13. python_pptx2-3.0.0/src/pptx2/_zipguard.py +932 -0
  14. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/chart.py +232 -0
  15. python_pptx2-3.0.0/src/pptx2/compose/__init__.py +37 -0
  16. python_pptx2-3.0.0/src/pptx2/compose/deck_compose.py +1203 -0
  17. python_pptx2-3.0.0/src/pptx2/diff.py +1116 -0
  18. python_pptx2-3.0.0/src/pptx2/edit.py +612 -0
  19. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/text.py +28 -0
  20. python_pptx2-3.0.0/src/pptx2/errors.py +105 -0
  21. python_pptx2-3.0.0/src/pptx2/hf.py +344 -0
  22. python_pptx2-3.0.0/src/pptx2/inspect.py +1993 -0
  23. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/math.py +5 -0
  24. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/opc/package.py +236 -3
  25. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/opc/serialized.py +62 -5
  26. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/__init__.py +26 -0
  27. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/presentation.py +32 -30
  28. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/simpletypes.py +89 -0
  29. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/slide.py +57 -2
  30. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/table.py +38 -0
  31. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/text.py +83 -3
  32. python_pptx2-3.0.0/src/pptx2/package.py +876 -0
  33. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/presentation.py +6 -11
  34. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/presentation.py +199 -37
  35. python_pptx2-3.0.0/src/pptx2/rebind.py +531 -0
  36. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/picture.py +103 -10
  37. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/shapetree.py +434 -65
  38. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/SKILL.md +2 -1
  39. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/compose.md +39 -7
  40. python_pptx2-3.0.0/src/pptx2/skill/references/editing.md +117 -0
  41. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/slide.py +580 -100
  42. python_pptx2-3.0.0/src/pptx2/slideops.py +444 -0
  43. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/table.py +530 -22
  44. python_pptx2-3.0.0/src/pptx2/text/bullet.py +261 -0
  45. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/text/text.py +239 -0
  46. {python_pptx2-2.19.0 → python_pptx2-3.0.0/src/python_pptx2.egg-info}/PKG-INFO +2 -2
  47. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/python_pptx2.egg-info/SOURCES.txt +59 -0
  48. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/python_pptx2.egg-info/entry_points.txt +1 -0
  49. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/python_pptx2.egg-info/requires.txt +1 -1
  50. python_pptx2-3.0.0/src/python_pptx2.egg-info/top_level.txt +2 -0
  51. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/integration/test_compose_package.py +7 -2
  52. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/integration/test_import_slide.py +31 -19
  53. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/opc/test_package.py +2 -2
  54. python_pptx2-3.0.0/tests/paper/__init__.py +1 -0
  55. python_pptx2-3.0.0/tests/paper/_authoring/build_fixtures.py +1279 -0
  56. python_pptx2-3.0.0/tests/paper/_authoring/update_goldens.py +87 -0
  57. python_pptx2-3.0.0/tests/paper/clock.py +30 -0
  58. python_pptx2-3.0.0/tests/paper/conftest.py +66 -0
  59. python_pptx2-3.0.0/tests/paper/contract.py +188 -0
  60. python_pptx2-3.0.0/tests/paper/corpus.py +145 -0
  61. python_pptx2-3.0.0/tests/paper/fragval.py +90 -0
  62. python_pptx2-3.0.0/tests/paper/idlists.py +58 -0
  63. python_pptx2-3.0.0/tests/paper/lo.py +87 -0
  64. python_pptx2-3.0.0/tests/paper/relint.py +103 -0
  65. python_pptx2-3.0.0/tests/paper/test_autofit.py +340 -0
  66. python_pptx2-3.0.0/tests/paper/test_batch.py +310 -0
  67. python_pptx2-3.0.0/tests/paper/test_bullets.py +312 -0
  68. python_pptx2-3.0.0/tests/paper/test_chart_routing.py +370 -0
  69. python_pptx2-3.0.0/tests/paper/test_content_type_coverage.py +218 -0
  70. python_pptx2-3.0.0/tests/paper/test_contract_harness.py +434 -0
  71. python_pptx2-3.0.0/tests/paper/test_deck_manifest.py +113 -0
  72. python_pptx2-3.0.0/tests/paper/test_diff.py +1361 -0
  73. python_pptx2-3.0.0/tests/paper/test_distribution_doctor.py +120 -0
  74. python_pptx2-3.0.0/tests/paper/test_edit_text.py +740 -0
  75. python_pptx2-3.0.0/tests/paper/test_effective_inspect.py +1082 -0
  76. python_pptx2-3.0.0/tests/paper/test_fields_hf.py +267 -0
  77. python_pptx2-3.0.0/tests/paper/test_fixture_corpus.py +894 -0
  78. python_pptx2-3.0.0/tests/paper/test_hf_apply.py +429 -0
  79. python_pptx2-3.0.0/tests/paper/test_image_replace.py +382 -0
  80. python_pptx2-3.0.0/tests/paper/test_import.py +1270 -0
  81. python_pptx2-3.0.0/tests/paper/test_inspect_text.py +84 -0
  82. python_pptx2-3.0.0/tests/paper/test_notes.py +150 -0
  83. python_pptx2-3.0.0/tests/paper/test_package_io_hardening.py +337 -0
  84. python_pptx2-3.0.0/tests/paper/test_package_kernel.py +736 -0
  85. python_pptx2-3.0.0/tests/paper/test_package_round_trip.py +298 -0
  86. python_pptx2-3.0.0/tests/paper/test_rebind.py +543 -0
  87. python_pptx2-3.0.0/tests/paper/test_save_destinations.py +355 -0
  88. python_pptx2-3.0.0/tests/paper/test_shape_surgery.py +403 -0
  89. python_pptx2-3.0.0/tests/paper/test_slide_ops.py +805 -0
  90. python_pptx2-3.0.0/tests/paper/test_slide_partname_allocation.py +127 -0
  91. python_pptx2-3.0.0/tests/paper/test_table_ops.py +945 -0
  92. python_pptx2-3.0.0/tests/paper/test_transaction.py +200 -0
  93. python_pptx2-3.0.0/tests/paper/test_walkthrough_pitchbook.py +196 -0
  94. python_pptx2-3.0.0/tests/paper/test_walkthrough_qbr.py +344 -0
  95. python_pptx2-3.0.0/tests/paper/test_zipguard_end_record.py +228 -0
  96. python_pptx2-3.0.0/tests/paper/test_zipguard_structural.py +316 -0
  97. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/test_presentation.py +11 -13
  98. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/schema/test_schema_validity.py +8 -1
  99. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_pathlike_inputs.py +2 -0
  100. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_section.py +8 -1
  101. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_shape_helpers.py +9 -0
  102. python_pptx2-2.19.0/src/pptx2/compose/__init__.py +0 -28
  103. python_pptx2-2.19.0/src/pptx2/package.py +0 -234
  104. python_pptx2-2.19.0/src/python_pptx2.egg-info/top_level.txt +0 -1
  105. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/LICENSE +0 -0
  106. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/MANIFEST.in +0 -0
  107. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/README.rst +0 -0
  108. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/act-action.feature +0 -0
  109. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/act-hyperlink.feature +0 -0
  110. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-axis-props.feature +0 -0
  111. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-axistitle-props.feature +0 -0
  112. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-category-access.feature +0 -0
  113. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-category-props.feature +0 -0
  114. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-chart.feature +0 -0
  115. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-charttitle-props.feature +0 -0
  116. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-data-props.feature +0 -0
  117. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-datalabels.feature +0 -0
  118. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-gridlines-props.feature +0 -0
  119. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-legend-access.feature +0 -0
  120. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-legend-props.feature +0 -0
  121. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-marker-props.feature +0 -0
  122. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-plot-props.feature +0 -0
  123. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-point-access.feature +0 -0
  124. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-point-props.feature +0 -0
  125. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-replace-data.feature +0 -0
  126. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-series.feature +0 -0
  127. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/cht-ticklabels-props.feature +0 -0
  128. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/dml-color.feature +0 -0
  129. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/dml-effect.feature +0 -0
  130. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/dml-fill.feature +0 -0
  131. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/dml-line.feature +0 -0
  132. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/environment.py +0 -0
  133. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/ph-inherit-props.feature +0 -0
  134. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/ph-insert-shape.feature +0 -0
  135. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/ph-phfmt-props.feature +0 -0
  136. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/ph-placeholder-props.feature +0 -0
  137. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/prs-coreprops.feature +0 -0
  138. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/prs-default-template.feature +0 -0
  139. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/prs-open-save.feature +0 -0
  140. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/prs-presentation-props.feature +0 -0
  141. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-autoshape.feature +0 -0
  142. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-connector.feature +0 -0
  143. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-freeform.feature +0 -0
  144. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-graphicframe.feature +0 -0
  145. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-groupshape.feature +0 -0
  146. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-movie-props.feature +0 -0
  147. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-picture.feature +0 -0
  148. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-placeholder.feature +0 -0
  149. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-shapes.feature +0 -0
  150. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/shp-shared.feature +0 -0
  151. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/sld-background.feature +0 -0
  152. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/sld-slide.feature +0 -0
  153. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/sld-slides.feature +0 -0
  154. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/action.py +0 -0
  155. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/axis.py +0 -0
  156. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/background.py +0 -0
  157. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/category.py +0 -0
  158. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/chart.py +0 -0
  159. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/chartdata.py +0 -0
  160. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/color.py +0 -0
  161. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/coreprops.py +0 -0
  162. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/datalabel.py +0 -0
  163. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/effect.py +0 -0
  164. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/fill.py +0 -0
  165. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/font.py +0 -0
  166. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/font_color.py +0 -0
  167. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/helpers.py +0 -0
  168. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/legend.py +0 -0
  169. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/line.py +0 -0
  170. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/picture.py +0 -0
  171. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/placeholder.py +0 -0
  172. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/plot.py +0 -0
  173. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/presentation.py +0 -0
  174. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/series.py +0 -0
  175. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/shape.py +0 -0
  176. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/shapes.py +0 -0
  177. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/slide.py +0 -0
  178. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/slides.py +0 -0
  179. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/72-dpi.tiff +0 -0
  180. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
  181. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/act-props.pptm +0 -0
  182. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/calibriz.ttf +0 -0
  183. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
  184. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-category-access.pptx +0 -0
  185. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
  186. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
  187. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-charts.pptx +0 -0
  188. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
  189. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  190. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
  191. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-legend.pptx +0 -0
  192. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
  193. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
  194. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-point-access.pptx +0 -0
  195. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-point-props.pptx +0 -0
  196. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
  197. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-series.pptx +0 -0
  198. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  199. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/dml-effect.pptx +0 -0
  200. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/dml-fill.pptx +0 -0
  201. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/dml-line.pptx +0 -0
  202. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/ext-rels.pptx +0 -0
  203. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
  204. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
  205. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
  206. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
  207. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  208. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
  209. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
  210. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
  211. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  212. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  213. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  214. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  215. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  216. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  217. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  218. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  219. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  220. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  221. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  222. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  223. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  224. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  225. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  226. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  227. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  228. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  229. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  230. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  231. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  232. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  233. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  234. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  235. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  236. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  237. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
  238. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
  239. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
  240. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
  241. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/font-color.pptx +0 -0
  242. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
  243. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/just-two-mice.png +0 -0
  244. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
  245. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/minimal.pptx +0 -0
  246. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/monty-truth.png +0 -0
  247. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
  248. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/mst-shapes.pptx +0 -0
  249. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  250. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
  251. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  252. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  253. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/pic.emf +0 -0
  254. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
  255. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/prs-notes.pptx +0 -0
  256. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/prs-properties.pptx +0 -0
  257. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
  258. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/python-icon.jpeg +0 -0
  259. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/python-powered.png +0 -0
  260. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/python.bmp +0 -0
  261. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
  262. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  263. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  264. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  265. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-common-props.pptx +0 -0
  266. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
  267. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
  268. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  269. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  270. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-freeform.pptx +0 -0
  271. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
  272. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
  273. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-picture.pptx +0 -0
  274. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  275. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/shp-shapes.pptx +0 -0
  276. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/sld-background.pptx +0 -0
  277. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/sld-blank.pptx +0 -0
  278. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/sld-notes.pptx +0 -0
  279. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/sld-slide.pptx +0 -0
  280. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/sld-slides.pptx +0 -0
  281. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/sonic.gif +0 -0
  282. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/tbl-cell.pptx +0 -0
  283. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  284. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/test.pptx +0 -0
  285. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
  286. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/txt-font-props.pptx +0 -0
  287. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
  288. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  289. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
  290. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/test_files/txt-text.pptx +0 -0
  291. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/text.py +0 -0
  292. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/steps/text_frame.py +0 -0
  293. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/tbl-column.feature +0 -0
  294. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/tbl-table.feature +0 -0
  295. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/txt-fit-text.feature +0 -0
  296. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/txt-font-color.feature +0 -0
  297. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/txt-font-props.feature +0 -0
  298. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/txt-paragraph.feature +0 -0
  299. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/txt-text.feature +0 -0
  300. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/features/txt-textframe.feature +0 -0
  301. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/setup.cfg +0 -0
  302. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/_agent_friendly.py +0 -0
  303. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/_slide_importer.py +0 -0
  304. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/_svg.py +0 -0
  305. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/_template_applier.py +0 -0
  306. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/_textstyle.py +0 -0
  307. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/accessibility.py +0 -0
  308. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/action.py +0 -0
  309. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/animation.py +0 -0
  310. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/api.py +0 -0
  311. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/audit.py +0 -0
  312. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/__init__.py +0 -0
  313. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/analytics.py +0 -0
  314. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/axis.py +0 -0
  315. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/category.py +0 -0
  316. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/data.py +0 -0
  317. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/datalabel.py +0 -0
  318. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/legend.py +0 -0
  319. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/marker.py +0 -0
  320. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/palettes.py +0 -0
  321. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/plot.py +0 -0
  322. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/point.py +0 -0
  323. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/quick_layouts.py +0 -0
  324. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/series.py +0 -0
  325. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/xlsx.py +0 -0
  326. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/chart/xmlwriter.py +0 -0
  327. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/compose/from_spec.py +0 -0
  328. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/design/__init__.py +0 -0
  329. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/design/components.py +0 -0
  330. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/design/figures.py +0 -0
  331. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/design/layout.py +0 -0
  332. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/design/recipes.py +0 -0
  333. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/design/style.py +0 -0
  334. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/design/tokens.py +0 -0
  335. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/diagrams.py +0 -0
  336. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/dml/__init__.py +0 -0
  337. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/dml/chtfmt.py +0 -0
  338. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/dml/color.py +0 -0
  339. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/dml/effect.py +0 -0
  340. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/dml/fill.py +0 -0
  341. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/dml/line.py +0 -0
  342. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/dml/picture.py +0 -0
  343. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/dml/three_d.py +0 -0
  344. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/__init__.py +0 -0
  345. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/action.py +0 -0
  346. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/animation.py +0 -0
  347. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/base.py +0 -0
  348. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/chart.py +0 -0
  349. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/dml.py +0 -0
  350. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/lang.py +0 -0
  351. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/presentation.py +0 -0
  352. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/enum/shapes.py +0 -0
  353. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/exc.py +0 -0
  354. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/formats.py +0 -0
  355. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/geometry.py +0 -0
  356. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/inherit.py +0 -0
  357. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/lint.py +0 -0
  358. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/mathml2omml.py +0 -0
  359. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/media.py +0 -0
  360. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/opc/__init__.py +0 -0
  361. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/opc/constants.py +0 -0
  362. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/opc/oxml.py +0 -0
  363. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/opc/packuri.py +0 -0
  364. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/opc/shared.py +0 -0
  365. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/opc/spec.py +0 -0
  366. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/action.py +0 -0
  367. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/__init__.py +0 -0
  368. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/axis.py +0 -0
  369. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/chart.py +0 -0
  370. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
  371. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/legend.py +0 -0
  372. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/marker.py +0 -0
  373. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/plot.py +0 -0
  374. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/series.py +0 -0
  375. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/chart/shared.py +0 -0
  376. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/coreprops.py +0 -0
  377. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/customprops.py +0 -0
  378. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/dml/__init__.py +0 -0
  379. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/dml/color.py +0 -0
  380. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/dml/effect.py +0 -0
  381. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/dml/fill.py +0 -0
  382. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/dml/line.py +0 -0
  383. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/dml/three_d.py +0 -0
  384. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/ns.py +0 -0
  385. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
  386. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
  387. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/shapes/connector.py +0 -0
  388. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
  389. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
  390. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/shapes/picture.py +0 -0
  391. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/shapes/shared.py +0 -0
  392. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/theme.py +0 -0
  393. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/oxml/xmlchemy.py +0 -0
  394. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/__init__.py +0 -0
  395. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/chart.py +0 -0
  396. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/coreprops.py +0 -0
  397. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/customprops.py +0 -0
  398. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/diagram.py +0 -0
  399. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/embeddedpackage.py +0 -0
  400. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/image.py +0 -0
  401. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/media.py +0 -0
  402. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/parts/slide.py +0 -0
  403. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/py.typed +0 -0
  404. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/render.py +0 -0
  405. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/section.py +0 -0
  406. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/__init__.py +0 -0
  407. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/autoshape.py +0 -0
  408. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/base.py +0 -0
  409. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/connector.py +0 -0
  410. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/freeform.py +0 -0
  411. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/graphfrm.py +0 -0
  412. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/group.py +0 -0
  413. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shapes/placeholder.py +0 -0
  414. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/shared.py +0 -0
  415. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/__init__.py +0 -0
  416. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/__main__.py +0 -0
  417. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/animations.md +0 -0
  418. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/basics.md +0 -0
  419. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/charts.md +0 -0
  420. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/design.md +0 -0
  421. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/effects.md +0 -0
  422. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
  423. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
  424. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/lint.md +0 -0
  425. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/math.md +0 -0
  426. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/picture-effects.md +0 -0
  427. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/render.md +0 -0
  428. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/smart-art.md +0 -0
  429. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
  430. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/tables.md +0 -0
  431. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/theme.md +0 -0
  432. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/three-d.md +0 -0
  433. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/skill/references/transitions.md +0 -0
  434. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/smart_art.py +0 -0
  435. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/spec.py +0 -0
  436. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/table_styles.py +0 -0
  437. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/templates/default.pptx +0 -0
  438. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/templates/docx-icon.emf +0 -0
  439. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/templates/generic-icon.emf +0 -0
  440. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/templates/notes.xml +0 -0
  441. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/templates/notesMaster.xml +0 -0
  442. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/templates/pptx-icon.emf +0 -0
  443. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/templates/theme.xml +0 -0
  444. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
  445. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/text/__init__.py +0 -0
  446. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/text/fonts.py +0 -0
  447. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/text/layout.py +0 -0
  448. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/theme.py +0 -0
  449. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/types.py +0 -0
  450. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/pptx2/util.py +0 -0
  451. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
  452. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/__init__.py +0 -0
  453. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/__init__.py +0 -0
  454. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_analytics.py +0 -0
  455. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_axis.py +0 -0
  456. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_category.py +0 -0
  457. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_chart.py +0 -0
  458. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_chart_toggles.py +0 -0
  459. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_collision_strategy.py +0 -0
  460. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_data.py +0 -0
  461. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_datalabel.py +0 -0
  462. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_legend.py +0 -0
  463. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_marker.py +0 -0
  464. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_palettes.py +0 -0
  465. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_plot.py +0 -0
  466. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_point.py +0 -0
  467. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_quick_layouts.py +0 -0
  468. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_series.py +0 -0
  469. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_xlsx.py +0 -0
  470. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/chart/test_xmlwriter.py +0 -0
  471. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/design/__init__.py +0 -0
  472. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/design/test_components.py +0 -0
  473. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/design/test_figures.py +0 -0
  474. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/design/test_layout.py +0 -0
  475. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/design/test_recipes.py +0 -0
  476. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/design/test_style.py +0 -0
  477. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/design/test_tokens.py +0 -0
  478. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/dml/__init__.py +0 -0
  479. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/dml/test_chtfmt.py +0 -0
  480. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/dml/test_color.py +0 -0
  481. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/dml/test_effect.py +0 -0
  482. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/dml/test_fill.py +0 -0
  483. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/dml/test_line.py +0 -0
  484. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/dml/test_three_d.py +0 -0
  485. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/enum/__init__.py +0 -0
  486. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/enum/test_base.py +0 -0
  487. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/enum/test_shapes.py +0 -0
  488. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/integration/__init__.py +0 -0
  489. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/integration/round_trip.py +0 -0
  490. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/integration/test_add_slide_layout.py +0 -0
  491. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/integration/test_apply_template.py +0 -0
  492. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/integration/test_round_trip.py +0 -0
  493. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/opc/__init__.py +0 -0
  494. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/opc/test_oxml.py +0 -0
  495. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/opc/test_packuri.py +0 -0
  496. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/opc/test_serialized.py +0 -0
  497. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/__init__.py +0 -0
  498. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/shapes/__init__.py +0 -0
  499. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/shapes/test_autoshape.py +0 -0
  500. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
  501. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/shapes/test_groupshape.py +0 -0
  502. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/shapes/test_picture.py +0 -0
  503. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test___init__.py +0 -0
  504. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test_dml.py +0 -0
  505. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test_ns.py +0 -0
  506. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test_presentation.py +0 -0
  507. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test_simpletypes.py +0 -0
  508. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test_slide.py +0 -0
  509. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test_table.py +0 -0
  510. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test_theme.py +0 -0
  511. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/test_xmlchemy.py +0 -0
  512. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/unitdata/__init__.py +0 -0
  513. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/unitdata/dml.py +0 -0
  514. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/unitdata/shape.py +0 -0
  515. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/oxml/unitdata/text.py +0 -0
  516. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/__init__.py +0 -0
  517. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/test_chart.py +0 -0
  518. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/test_coreprops.py +0 -0
  519. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/test_customprops.py +0 -0
  520. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/test_embeddedpackage.py +0 -0
  521. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/test_image.py +0 -0
  522. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/test_media.py +0 -0
  523. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/parts/test_slide.py +0 -0
  524. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/schema/__init__.py +0 -0
  525. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/schema/oxml_schema_validator.py +0 -0
  526. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/__init__.py +0 -0
  527. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_anchor.py +0 -0
  528. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_animate.py +0 -0
  529. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_autoshape.py +0 -0
  530. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_base.py +0 -0
  531. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_connector.py +0 -0
  532. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_freeform.py +0 -0
  533. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_graphfrm.py +0 -0
  534. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_group.py +0 -0
  535. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_picture.py +0 -0
  536. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_placeholder.py +0 -0
  537. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/shapes/test_shapetree.py +0 -0
  538. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_accessibility.py +0 -0
  539. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_action.py +0 -0
  540. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_animation.py +0 -0
  541. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_api.py +0 -0
  542. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_audit.py +0 -0
  543. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_compose_from_spec.py +0 -0
  544. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_diagrams.py +0 -0
  545. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/calibriz.ttf +0 -0
  546. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/cdw-logo.eps +0 -0
  547. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/dummy.mp4 +0 -0
  548. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
  549. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
  550. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
  551. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
  552. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  553. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
  554. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
  555. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
  556. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  557. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  558. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  559. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  560. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  561. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  562. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  563. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  564. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  565. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  566. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  567. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  568. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  569. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  570. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  571. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  572. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  573. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  574. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  575. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  576. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  577. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  578. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  579. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  580. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  581. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  582. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
  583. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
  584. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
  585. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
  586. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/minimal.pptx +0 -0
  587. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/minimal_slide.xml +0 -0
  588. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/missing_rels_item.pptx +0 -0
  589. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/monty-truth.png +0 -0
  590. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/no-core-props.pptx +0 -0
  591. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/no-slides.pptx +0 -0
  592. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/presentation.xml +0 -0
  593. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/python-icon.jpeg +0 -0
  594. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/python-powered.png +0 -0
  595. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/python.bmp +0 -0
  596. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/slideLayout1.xml +0 -0
  597. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
  598. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
  599. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
  600. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
  601. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
  602. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-area.txt +0 -0
  603. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
  604. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
  605. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
  606. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
  607. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
  608. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
  609. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
  610. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
  611. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
  612. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
  613. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
  614. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
  615. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
  616. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
  617. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
  618. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x2-line.txt +0 -0
  619. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
  620. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
  621. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
  622. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
  623. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
  624. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
  625. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
  626. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
  627. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
  628. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
  629. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
  630. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
  631. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
  632. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
  633. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/cat-labels.txt +0 -0
  634. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
  635. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/default-notes.txt +0 -0
  636. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
  637. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/default-theme.txt +0 -0
  638. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/freeform.txt +0 -0
  639. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
  640. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/placeholders.txt +0 -0
  641. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
  642. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/relationships.txt +0 -0
  643. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
  644. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
  645. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/snippets/timing.txt +0 -0
  646. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/test.pptx +0 -0
  647. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_files/test_slides.pptx +0 -0
  648. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_formats.py +0 -0
  649. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_geometry.py +0 -0
  650. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_inherit.py +0 -0
  651. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_lint.py +0 -0
  652. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_lint_on_save.py +0 -0
  653. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_math.py +0 -0
  654. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_media.py +0 -0
  655. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_new_features.py +0 -0
  656. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_package.py +0 -0
  657. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_powerpoint_strict_validation.py +0 -0
  658. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_presentation.py +0 -0
  659. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_render.py +0 -0
  660. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_render_slides_alias.py +0 -0
  661. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_shared.py +0 -0
  662. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_skill.py +0 -0
  663. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_slide.py +0 -0
  664. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_smart_art.py +0 -0
  665. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_svg_picture.py +0 -0
  666. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_table.py +0 -0
  667. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_table_extras.py +0 -0
  668. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_theme.py +0 -0
  669. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_transition_morph.py +0 -0
  670. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/test_util.py +0 -0
  671. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/text/__init__.py +0 -0
  672. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/text/test_fonts.py +0 -0
  673. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/text/test_layout.py +0 -0
  674. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/text/test_text.py +0 -0
  675. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/unitdata.py +0 -0
  676. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/unitutil/__init__.py +0 -0
  677. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/unitutil/cxml.py +0 -0
  678. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/unitutil/file.py +0 -0
  679. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tests/unitutil/mock.py +0 -0
  680. {python_pptx2-2.19.0 → python_pptx2-3.0.0}/tox.ini +0 -0
@@ -15,12 +15,104 @@ 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.19.0 (2026-08-30)
18
+ 3.0.0 (2026-09-01)
19
+ ++++++++++++++++++
20
+
21
+ Backward-incompatible
22
+ .....................
23
+
24
+ * ``Presentation.import_slide`` and ``pptx2.compose.import_slide`` now
25
+ take the paper-pptx validating signature —
26
+ ``import_slide(source_prs, slide, *, mode, ...)`` returning
27
+ ``ImportReport``. The previous part-level engine (including its
28
+ ``merge_master=`` knobs) remains available unchanged at
29
+ ``pptx2._slide_importer.import_slide``, and the old deck-integration
30
+ tests exercise it directly.
31
+
32
+ Merged
33
+ ......
34
+
35
+ * **Ported the paper-pptx agent-first structure editor** (bootstrap
36
+ commit 700b5f1f from ``paper-instruments/paper-pptx``, a fork of
37
+ python-pptx 1.0.2). python-pptx2 gains paper-pptx's whole editing,
38
+ inspection, and safety surface, import-renamed from ``pptx`` to
39
+ ``pptx2``:
40
+
41
+ - ``pptx2.inspect`` — effective values with provenance
42
+ (``effective_font()``, ``effective_paragraph_format()``,
43
+ ``effective_shape_format()``), visibility-complete ``inspect_text()``
44
+ and a deterministic ``inspect_deck()`` manifest.
45
+ - ``pptx2.edit`` / ``pptx2.diff`` — ``replace_text()`` that preserves
46
+ untouched run formatting, and ``diff_decks()`` structural diffing.
47
+ - ``pptx2.compose`` — paper-pptx's validating
48
+ ``import_slide(dest, source, slide, mode=...)`` / ``append_deck()``
49
+ returning |ImportReport| (the older part-level engine remains at
50
+ ``pptx2._slide_importer``); ``Presentation.import_slide`` now takes
51
+ the paper-pptx signature.
52
+ - ``pptx2.hf`` (``Presentation.apply_footers()`` / ``Slide.apply_footers()``
53
+ / ``header_footers`` flags), ``pptx2.rebind``
54
+ (``Slide.rebind_layout()``), ``pptx2.slideops``,
55
+ ``pptx2._transaction`` / ``_ownership`` / ``_zipguard`` /
56
+ ``errors``, the ``paper_pptx_doctor`` CLI, and the full
57
+ ``tests/paper`` contract suite. (The bootstrap's ``pptx2.scrub``
58
+ module was removed again by ported commit #14, matching upstream
59
+ paper-pptx.)
60
+ - Slide ops: ``Slides.clone/delete/move/reorder`` (``move`` and
61
+ ``reorder`` merged with the existing python-pptx2 int/Slice APIs),
62
+ ``SlideShapes.add_copy/delete/move`` and strict ``*_by_name``
63
+ addressing, ``Table.insert_row/insert_column/delete_row/delete_column``
64
+ with merge guards, ``Picture.replace_image()``,
65
+ ``Chart.replace_data_safe()``, ``TextFrame.normalize_autofit()``,
66
+ ``_Run.effective_font()``, ``_Paragraph.bullet`` (``BulletFormat``),
67
+ notes-text read/replace that never creates a notes slide, and an
68
+ atomic, deterministic (epoch-stamped) package ``save()``.
69
+
70
+ * Follow-up paper-pptx fixes ported in sequence (their commit ids in
71
+ ours): zipguard keeps only structural checks and drops numeric
72
+ resource ceilings (#15); the inspect group-depth guard is gone (#19);
73
+ the bootstrap's ``scrub`` module was removed again (#14);
74
+ ``effective_paragraph_format`` resolves *inherited* bullets with
75
+ provenance, and deck diff reports bullet typeface/size changes (#16,
76
+ #27); ``Presentation.batch()`` validates once per block and
77
+ ``save()`` refuses inside it, slide-partname allocation and
78
+ duplicate-partname writes are fixed (#17); packages with leading
79
+ bytes are refused (#21); ``save()`` accepts every upstream
80
+ destination (write-only handles, unseekable sinks), writing at the
81
+ caller's cursor and resolving symlinks for path destinations (#23);
82
+ untyped ZIP members refuse while unreferenced parts are accepted
83
+ (#24); ZIP directory entries are accepted (#25); relationship
84
+ refusals are retyped with remedies (#26); ``patch_save`` treats
85
+ semantically equivalent OPC registries (other producers' absolute
86
+ rels, content-type fallbacks) as unchanged (#36); table expansion is
87
+ composable — ``insert_row/insert_column(copy_format_from=...)`` and
88
+ ``_Cell.extend_merge()`` (#37); text edits, layout selection,
89
+ placeholder reconciliation, section selection, and deck-diff
90
+ alignment all match by stable *identity*, refusing ambiguity instead
91
+ of guessing (#40–#46, #38 docs).
92
+
93
+ * The low-level slide-import engine keeps its part-level API at
94
+ ``pptx2._slide_importer`` with the ``merge_master=`` knobs; the
95
+ public ``Presentation.import_slide`` /
96
+ ``pptx2.compose.import_slide`` now take the paper-pptx
97
+ ``(source_prs, slide, mode=...)`` signature returning
98
+ ``ImportReport``.
99
+
100
+ * A zip-timestamp fix that benefits every save: package entries are
101
+ stamped with the 1980 zip epoch, so saving the same package state
102
+ twice produces byte-identical files, and the math-namespace
103
+ enrichment of slide XML only happens when a slide actually carries
104
+ equation markup (math-free decks round-trip byte-identically).
105
+
106
+
107
+ 2.20.0 (2026-08-30)
19
108
  +++++++++++++++++++
20
109
 
21
110
  Added
22
111
  .....
23
112
 
113
+ * CSS three-digit hex shorthand (``#888`` → ``#888888``) is accepted
114
+ anywhere a color hex string is.
115
+
24
116
  * **Agent-friendly kwargs, everywhere.** The alias/fuzzy normalization
25
117
  introduced for ``add_text`` now covers the whole shape-creation
26
118
  surface via a reusable ``@agent_friendly`` decorator: ``add_shape``
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.19.0
3
+ Version: 3.0.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
@@ -34,7 +34,7 @@ Classifier: Topic :: Software Development :: Libraries
34
34
  Requires-Python: >=3.9
35
35
  Description-Content-Type: text/x-rst
36
36
  License-File: LICENSE
37
- Requires-Dist: Pillow>=3.3.2
37
+ Requires-Dist: Pillow>=10.3.0
38
38
  Requires-Dist: XlsxWriter>=0.5.7
39
39
  Requires-Dist: lxml>=3.1.0
40
40
  Requires-Dist: typing_extensions>=4.9.0
@@ -109,9 +109,9 @@ def when_I_assign_origin_cell_eq_table_cell_0_0(context):
109
109
  context.origin_cell = context.table_.cell(0, 0)
110
110
 
111
111
 
112
- @when("I assign other_cell = table.cell(1, 1)")
113
- def when_I_assign_other_cell_eq_table_cell_1_1(context):
114
- context.other_cell = context.table_.cell(1, 1)
112
+ @when("I assign other_cell = table.cell({row_idx:d}, {col_idx:d})")
113
+ def when_I_assign_other_cell_eq_table_cell(context, row_idx, col_idx):
114
+ context.other_cell = context.table_.cell(row_idx, col_idx)
115
115
 
116
116
 
117
117
  @when("I assign table.first_col = True")
@@ -154,6 +154,11 @@ def when_I_call_origin_cell_merge_other_cell(context):
154
154
  context.origin_cell.merge(context.other_cell)
155
155
 
156
156
 
157
+ @when("I call origin_cell.extend_merge(other_cell)")
158
+ def when_I_call_origin_cell_extend_merge_other_cell(context):
159
+ context.origin_cell.extend_merge(context.other_cell)
160
+
161
+
157
162
  @when("I add a row to the table")
158
163
  def when_I_add_a_row_to_the_table(context):
159
164
  context.table_.rows.add_row()
@@ -217,18 +222,18 @@ def then_cell_text_eq_value(context, value):
217
222
  assert actual == expected, 'cell.text == "%s"' % actual
218
223
 
219
224
 
220
- @then("cell.span_height == {int_lit}")
221
- def then_cell_span_height_eq(context, int_lit):
225
+ @then("{cell_ref}.span_height == {int_lit}")
226
+ def then_cell_span_height_eq(context, cell_ref, int_lit):
222
227
  expected = int(int_lit)
223
- actual = context.cell.span_height
224
- assert actual is expected, "cell.span_height == %s" % actual
228
+ actual = getattr(context, cell_ref).span_height
229
+ assert actual == expected, "%s.span_height == %s" % (cell_ref, actual)
225
230
 
226
231
 
227
- @then("cell.span_width == {int_lit}")
228
- def then_cell_span_width_eq(context, int_lit):
232
+ @then("{cell_ref}.span_width == {int_lit}")
233
+ def then_cell_span_width_eq(context, cell_ref, int_lit):
229
234
  expected = int(int_lit)
230
- actual = context.cell.span_width
231
- assert actual is expected, "cell.span_width == %s" % actual
235
+ actual = getattr(context, cell_ref).span_width
236
+ assert actual == expected, "%s.span_width == %s" % (cell_ref, actual)
232
237
 
233
238
 
234
239
  @then("cell.vertical_anchor == {value}")
@@ -65,6 +65,21 @@ Feature: Table cell proxy objects
65
65
  And other_cell.text == ""
66
66
 
67
67
 
68
+ Scenario: _Cell.extend_merge()
69
+ Given a 3x3 Table object with cells a to i as table
70
+ When I assign origin_cell = table.cell(0, 0)
71
+ And I assign other_cell = table.cell(1, 1)
72
+ And I call origin_cell.merge(other_cell)
73
+ And I assign other_cell = table.cell(2, 2)
74
+ And I call origin_cell.extend_merge(other_cell)
75
+ Then origin_cell.is_merge_origin is True
76
+ And other_cell.is_spanned is True
77
+ And origin_cell.span_height == 3
78
+ And origin_cell.span_width == 3
79
+ And origin_cell.text == "a\nb\nd\ne\nc\nf\ng\nh\ni"
80
+ And other_cell.text == ""
81
+
82
+
68
83
  Scenario: Merged cell size
69
84
  Given a 2x3 _MergeOriginCell object as cell
70
85
  Then cell.span_height == 2
@@ -29,7 +29,7 @@ classifiers = [
29
29
  "Topic :: Software Development :: Libraries",
30
30
  ]
31
31
  dependencies = [
32
- "Pillow>=3.3.2",
32
+ "Pillow>=10.3.0",
33
33
  "XlsxWriter>=0.5.7",
34
34
  "lxml>=3.1.0",
35
35
  "typing_extensions>=4.9.0",
@@ -175,3 +175,5 @@ pptx2 = [
175
175
  # Convenience CLI: `pptx2-skill install` ≈ `python -m pptx2.skill install`.
176
176
  pptx2-skill = "pptx2.skill.__main__:main"
177
177
  python-pptx2-skill = "pptx2.skill.__main__:main"
178
+ # paper-pptx addition: package doctor CLI.
179
+ paper-pptx-doctor = "paper_pptx_doctor:main"
@@ -0,0 +1,135 @@
1
+ """Verify that the installed ``pptx2`` import belongs to ``python-pptx2``.
2
+
3
+ Adapted from paper-pptx's distribution doctor: same wheel-integrity
4
+ checks (RECORD hashes for every ``pptx2`` package file), retargeted at
5
+ the ``python-pptx2`` distribution and its ``__version__`` sentinel.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import base64
11
+ import csv
12
+ import hashlib
13
+ import hmac
14
+ import importlib
15
+ import sys
16
+ from importlib.metadata import Distribution, PackageNotFoundError, distribution
17
+ from io import StringIO
18
+ from pathlib import Path, PurePosixPath
19
+ from typing import Iterable, Optional, Tuple
20
+
21
+
22
+ class DoctorError(RuntimeError):
23
+ """The installed ``pptx2`` package cannot be trusted as ``python-pptx2``."""
24
+
25
+
26
+ _REMEDY = "python -m pip install --force-reinstall python-pptx2"
27
+
28
+
29
+ def verify_install() -> str:
30
+ """Verify distribution ownership, installed bytes, and the version sentinel.
31
+
32
+ Returns the installed ``python-pptx2`` version. Raises :class:`DoctorError`
33
+ without importing ``pptx2`` until its wheel-owned files have been checked.
34
+ """
35
+ dist = _installed_distribution("python-pptx2")
36
+ if dist is None:
37
+ raise DoctorError("python-pptx2 distribution metadata is missing")
38
+
39
+ _verify_pptx_record(dist)
40
+
41
+ try:
42
+ pptx2 = importlib.import_module("pptx2")
43
+ except Exception as exc:
44
+ raise DoctorError(f"pptx2 cannot be imported: {exc}") from exc
45
+
46
+ sentinel = getattr(pptx2, "__version__", None)
47
+ if sentinel is None:
48
+ raise DoctorError("pptx2.__version__ is missing")
49
+ if sentinel != dist.version:
50
+ raise DoctorError(
51
+ "pptx2.__version__ does not match the installed python-pptx2 "
52
+ f"version ({sentinel!r} != {dist.version!r})"
53
+ )
54
+ return dist.version
55
+
56
+
57
+ def main() -> int:
58
+ """Console entry point for ``paper-pptx-doctor``."""
59
+ try:
60
+ version = verify_install()
61
+ except DoctorError as exc:
62
+ print(f"paper-pptx-doctor: FAIL: {exc}", file=sys.stderr)
63
+ print(f"Remedy: {_REMEDY}", file=sys.stderr)
64
+ return 1
65
+ print(f"paper-pptx-doctor: OK (python-pptx2 {version})")
66
+ return 0
67
+
68
+
69
+ def _installed_distribution(name: str) -> Optional[Distribution]:
70
+ try:
71
+ return distribution(name)
72
+ except PackageNotFoundError:
73
+ return None
74
+
75
+
76
+ def _verify_pptx_record(dist: Distribution) -> None:
77
+ record = dist.read_text("RECORD")
78
+ if record is None:
79
+ raise DoctorError("python-pptx2 RECORD is missing")
80
+
81
+ entries = tuple(
82
+ (relative_path, hash_spec)
83
+ for relative_path, hash_spec in _pptx_record_entries(record)
84
+ if hash_spec
85
+ )
86
+ if not entries:
87
+ raise DoctorError("python-pptx2 RECORD has no hashed pptx2 package files")
88
+
89
+ for relative_path, hash_spec in entries:
90
+ path = Path(dist.locate_file(relative_path))
91
+ if not path.is_file():
92
+ raise DoctorError(f"python-pptx2 file is missing: {relative_path}")
93
+ algorithm, expected = _parse_hash(hash_spec, relative_path)
94
+ actual = _file_digest(path, algorithm)
95
+ if not hmac.compare_digest(actual, expected):
96
+ raise DoctorError(f"python-pptx2 file hash mismatch: {relative_path}")
97
+
98
+
99
+ def _pptx_record_entries(record: str) -> Iterable[Tuple[PurePosixPath, str]]:
100
+ for row in csv.reader(StringIO(record)):
101
+ if len(row) != 3:
102
+ raise DoctorError("python-pptx2 RECORD contains a malformed row")
103
+ raw_path, hash_spec, _size = row
104
+ path = PurePosixPath(raw_path)
105
+ if not path.parts or path.parts[0] != "pptx2":
106
+ continue
107
+ if path.is_absolute() or ".." in path.parts:
108
+ raise DoctorError(f"python-pptx2 RECORD contains an unsafe path: {raw_path}")
109
+ yield path, hash_spec
110
+
111
+
112
+ def _parse_hash(hash_spec: str, relative_path: PurePosixPath) -> Tuple[str, str]:
113
+ try:
114
+ algorithm, expected = hash_spec.split("=", 1)
115
+ hashlib.new(algorithm)
116
+ except (TypeError, ValueError):
117
+ raise DoctorError(
118
+ f"python-pptx2 RECORD has an invalid hash for {relative_path}"
119
+ ) from None
120
+ if not expected:
121
+ raise DoctorError(
122
+ f"python-pptx2 RECORD has an invalid hash for {relative_path}"
123
+ )
124
+ return algorithm, expected.rstrip("=")
125
+
126
+
127
+ def _file_digest(path: Path, algorithm: str) -> str:
128
+ digest = hashlib.new(algorithm)
129
+ with path.open("rb") as stream:
130
+ for chunk in iter(lambda: stream.read(1024 * 1024), b""):
131
+ digest.update(chunk)
132
+ return base64.urlsafe_b64encode(digest.digest()).rstrip(b"=").decode("ascii")
133
+
134
+
135
+ __all__ = ["DoctorError", "main", "verify_install"]
@@ -0,0 +1,5 @@
1
+ """Run ``paper-pptx-doctor`` with ``python -m paper_pptx_doctor``."""
2
+
3
+ from . import main
4
+
5
+ raise SystemExit(main())
@@ -57,7 +57,7 @@ from pptx2.parts.slide import (
57
57
  if TYPE_CHECKING:
58
58
  from pptx2.opc.package import Part
59
59
 
60
- __version__ = "2.19.0"
60
+ __version__ = "3.0.0"
61
61
 
62
62
  sys.modules["pptx2.exceptions"] = exceptions
63
63
  del sys
@@ -41,6 +41,9 @@ def coerce_color(value: Any) -> RGBColor:
41
41
  return value
42
42
  if isinstance(value, str):
43
43
  s = value.lstrip("#")
44
+ if len(s) == 3:
45
+ # CSS shorthand: '#888' -> '#888888' (a common generator habit)
46
+ s = "".join(ch * 2 for ch in s)
44
47
  if len(s) != 6:
45
48
  raise ValueError(
46
49
  "color hex string must be 6 digits "
@@ -0,0 +1,67 @@
1
+ """Attachment checks for live shape proxies used by paper-pptx operations."""
2
+
3
+ from __future__ import annotations
4
+
5
+
6
+ def require_shape_attached(shape, *, argument: str = "shape") -> None:
7
+ """Refuse a shape proxy whose XML is no longer attached to its remembered part."""
8
+ from pptx2.errors import TargetNotFoundError
9
+
10
+ element = getattr(shape, "_element", None)
11
+ try:
12
+ part_root = shape.part._element
13
+ except (AttributeError, ValueError):
14
+ part_root = None
15
+ root = element
16
+ while root is not None and root.getparent() is not None:
17
+ root = root.getparent()
18
+ if element is None or part_root is None or root is not part_root:
19
+ raise TargetNotFoundError(
20
+ "%s is stale: its shape was removed from the presentation" % argument
21
+ )
22
+ require_part_reachable(shape.part, argument=argument)
23
+
24
+
25
+ def require_element_attached(element, part, *, argument: str) -> None:
26
+ """Refuse an element detached from the active root of its remembered part."""
27
+ from pptx2.errors import TargetNotFoundError
28
+
29
+ root = element
30
+ while root is not None and root.getparent() is not None:
31
+ root = root.getparent()
32
+ if root is not getattr(part, "_element", None):
33
+ raise TargetNotFoundError(
34
+ "%s is stale: its content was removed from the presentation" % argument
35
+ )
36
+ require_part_reachable(part, argument=argument)
37
+
38
+
39
+ def require_shape_tree_attached(shapes, *, argument: str = "target shape tree") -> None:
40
+ """Refuse a shape collection that no longer wraps its part's active tree."""
41
+ from pptx2.errors import TargetNotFoundError
42
+
43
+ spTree = getattr(shapes, "_spTree", None)
44
+ part = shapes.part
45
+ require_element_attached(spTree, part, argument=argument)
46
+ live_spTree = part._element.cSld.spTree
47
+ if spTree is not live_spTree:
48
+ raise TargetNotFoundError(
49
+ "%s is stale: it is no longer the part's active shape tree" % argument
50
+ )
51
+
52
+
53
+ def require_part_reachable(part, *, argument: str) -> None:
54
+ """Refuse a part proxy no longer reachable from its package root."""
55
+ from pptx2.errors import TargetNotFoundError, UnsupportedStructureError
56
+
57
+ try:
58
+ reachable = any(candidate is part for candidate in part.package.iter_parts())
59
+ except (AssertionError, AttributeError, KeyError, TypeError, ValueError) as exc:
60
+ raise UnsupportedStructureError(
61
+ "cannot verify %s ownership because the package relationship graph is broken (%s)"
62
+ % (argument, exc)
63
+ ) from exc
64
+ if not reachable:
65
+ raise TargetNotFoundError(
66
+ "%s is stale: its package part is no longer in the presentation" % argument
67
+ )