python-pptx2 2.20.0__tar.gz → 3.1.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 (686) hide show
  1. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/HISTORY.rst +142 -0
  2. {python_pptx2-2.20.0/src/python_pptx2.egg-info → python_pptx2-3.1.0}/PKG-INFO +2 -2
  3. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/table.py +16 -11
  4. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/tbl-cell.feature +15 -0
  5. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/pyproject.toml +3 -1
  6. python_pptx2-3.1.0/src/paper_pptx_doctor/__init__.py +135 -0
  7. python_pptx2-3.1.0/src/paper_pptx_doctor/__main__.py +5 -0
  8. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/__init__.py +19 -1
  9. python_pptx2-3.1.0/src/pptx2/_ownership.py +67 -0
  10. python_pptx2-3.1.0/src/pptx2/_transaction.py +666 -0
  11. python_pptx2-3.1.0/src/pptx2/_version.py +20 -0
  12. python_pptx2-3.1.0/src/pptx2/_zipguard.py +932 -0
  13. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/chart.py +232 -0
  14. python_pptx2-3.1.0/src/pptx2/compose/__init__.py +37 -0
  15. python_pptx2-3.1.0/src/pptx2/compose/deck_compose.py +1203 -0
  16. python_pptx2-3.1.0/src/pptx2/design/blocks.py +433 -0
  17. python_pptx2-3.1.0/src/pptx2/design/palettes.py +217 -0
  18. python_pptx2-3.1.0/src/pptx2/diff.py +1116 -0
  19. python_pptx2-3.1.0/src/pptx2/edit.py +612 -0
  20. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/text.py +28 -0
  21. python_pptx2-3.1.0/src/pptx2/errors.py +105 -0
  22. python_pptx2-3.1.0/src/pptx2/hf.py +344 -0
  23. python_pptx2-3.1.0/src/pptx2/inspect.py +1993 -0
  24. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/math.py +5 -0
  25. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/opc/package.py +236 -3
  26. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/opc/serialized.py +62 -5
  27. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/__init__.py +26 -0
  28. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/presentation.py +32 -30
  29. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/simpletypes.py +89 -0
  30. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/slide.py +57 -2
  31. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/table.py +38 -0
  32. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/text.py +83 -3
  33. python_pptx2-3.1.0/src/pptx2/package.py +876 -0
  34. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/presentation.py +6 -11
  35. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/presentation.py +211 -37
  36. python_pptx2-3.1.0/src/pptx2/rebind.py +531 -0
  37. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/render.py +99 -0
  38. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/picture.py +103 -10
  39. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/shapetree.py +434 -65
  40. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/SKILL.md +110 -20
  41. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/compose.md +39 -7
  42. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/design.md +35 -0
  43. python_pptx2-3.1.0/src/pptx2/skill/references/editing.md +117 -0
  44. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/render.md +20 -0
  45. python_pptx2-3.1.0/src/pptx2/skill/references/slide-design.md +495 -0
  46. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/slide.py +580 -100
  47. python_pptx2-3.1.0/src/pptx2/slideops.py +444 -0
  48. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/table.py +530 -22
  49. python_pptx2-3.1.0/src/pptx2/text/bullet.py +261 -0
  50. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/text/text.py +239 -0
  51. {python_pptx2-2.20.0 → python_pptx2-3.1.0/src/python_pptx2.egg-info}/PKG-INFO +2 -2
  52. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/python_pptx2.egg-info/SOURCES.txt +65 -0
  53. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/python_pptx2.egg-info/entry_points.txt +1 -0
  54. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/python_pptx2.egg-info/requires.txt +1 -1
  55. python_pptx2-3.1.0/src/python_pptx2.egg-info/top_level.txt +2 -0
  56. python_pptx2-3.1.0/tests/design/test_blocks.py +180 -0
  57. python_pptx2-3.1.0/tests/design/test_palettes.py +50 -0
  58. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/integration/test_compose_package.py +7 -2
  59. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/integration/test_import_slide.py +31 -19
  60. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/opc/test_package.py +2 -2
  61. python_pptx2-3.1.0/tests/paper/__init__.py +1 -0
  62. python_pptx2-3.1.0/tests/paper/_authoring/build_fixtures.py +1279 -0
  63. python_pptx2-3.1.0/tests/paper/_authoring/update_goldens.py +87 -0
  64. python_pptx2-3.1.0/tests/paper/clock.py +30 -0
  65. python_pptx2-3.1.0/tests/paper/conftest.py +66 -0
  66. python_pptx2-3.1.0/tests/paper/contract.py +188 -0
  67. python_pptx2-3.1.0/tests/paper/corpus.py +145 -0
  68. python_pptx2-3.1.0/tests/paper/fragval.py +90 -0
  69. python_pptx2-3.1.0/tests/paper/idlists.py +58 -0
  70. python_pptx2-3.1.0/tests/paper/lo.py +87 -0
  71. python_pptx2-3.1.0/tests/paper/relint.py +103 -0
  72. python_pptx2-3.1.0/tests/paper/test_autofit.py +340 -0
  73. python_pptx2-3.1.0/tests/paper/test_batch.py +310 -0
  74. python_pptx2-3.1.0/tests/paper/test_bullets.py +312 -0
  75. python_pptx2-3.1.0/tests/paper/test_chart_routing.py +370 -0
  76. python_pptx2-3.1.0/tests/paper/test_content_type_coverage.py +218 -0
  77. python_pptx2-3.1.0/tests/paper/test_contract_harness.py +434 -0
  78. python_pptx2-3.1.0/tests/paper/test_deck_manifest.py +113 -0
  79. python_pptx2-3.1.0/tests/paper/test_diff.py +1361 -0
  80. python_pptx2-3.1.0/tests/paper/test_distribution_doctor.py +120 -0
  81. python_pptx2-3.1.0/tests/paper/test_edit_text.py +740 -0
  82. python_pptx2-3.1.0/tests/paper/test_effective_inspect.py +1082 -0
  83. python_pptx2-3.1.0/tests/paper/test_fields_hf.py +267 -0
  84. python_pptx2-3.1.0/tests/paper/test_fixture_corpus.py +894 -0
  85. python_pptx2-3.1.0/tests/paper/test_hf_apply.py +429 -0
  86. python_pptx2-3.1.0/tests/paper/test_image_replace.py +382 -0
  87. python_pptx2-3.1.0/tests/paper/test_import.py +1270 -0
  88. python_pptx2-3.1.0/tests/paper/test_inspect_text.py +84 -0
  89. python_pptx2-3.1.0/tests/paper/test_notes.py +150 -0
  90. python_pptx2-3.1.0/tests/paper/test_package_io_hardening.py +337 -0
  91. python_pptx2-3.1.0/tests/paper/test_package_kernel.py +736 -0
  92. python_pptx2-3.1.0/tests/paper/test_package_round_trip.py +298 -0
  93. python_pptx2-3.1.0/tests/paper/test_rebind.py +543 -0
  94. python_pptx2-3.1.0/tests/paper/test_save_destinations.py +355 -0
  95. python_pptx2-3.1.0/tests/paper/test_shape_surgery.py +403 -0
  96. python_pptx2-3.1.0/tests/paper/test_slide_ops.py +805 -0
  97. python_pptx2-3.1.0/tests/paper/test_slide_partname_allocation.py +127 -0
  98. python_pptx2-3.1.0/tests/paper/test_table_ops.py +945 -0
  99. python_pptx2-3.1.0/tests/paper/test_transaction.py +200 -0
  100. python_pptx2-3.1.0/tests/paper/test_walkthrough_pitchbook.py +196 -0
  101. python_pptx2-3.1.0/tests/paper/test_walkthrough_qbr.py +344 -0
  102. python_pptx2-3.1.0/tests/paper/test_zipguard_end_record.py +228 -0
  103. python_pptx2-3.1.0/tests/paper/test_zipguard_structural.py +316 -0
  104. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/test_presentation.py +11 -13
  105. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/schema/test_schema_validity.py +8 -1
  106. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_pathlike_inputs.py +2 -0
  107. python_pptx2-3.1.0/tests/test_render_contact_sheet.py +81 -0
  108. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_section.py +8 -1
  109. python_pptx2-2.20.0/src/pptx2/compose/__init__.py +0 -28
  110. python_pptx2-2.20.0/src/pptx2/package.py +0 -234
  111. python_pptx2-2.20.0/src/python_pptx2.egg-info/top_level.txt +0 -1
  112. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/LICENSE +0 -0
  113. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/MANIFEST.in +0 -0
  114. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/README.rst +0 -0
  115. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/act-action.feature +0 -0
  116. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/act-hyperlink.feature +0 -0
  117. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-axis-props.feature +0 -0
  118. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-axistitle-props.feature +0 -0
  119. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-category-access.feature +0 -0
  120. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-category-props.feature +0 -0
  121. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-chart.feature +0 -0
  122. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-charttitle-props.feature +0 -0
  123. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-data-props.feature +0 -0
  124. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-datalabels.feature +0 -0
  125. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-gridlines-props.feature +0 -0
  126. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-legend-access.feature +0 -0
  127. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-legend-props.feature +0 -0
  128. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-marker-props.feature +0 -0
  129. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-plot-props.feature +0 -0
  130. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-point-access.feature +0 -0
  131. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-point-props.feature +0 -0
  132. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-replace-data.feature +0 -0
  133. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-series.feature +0 -0
  134. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/cht-ticklabels-props.feature +0 -0
  135. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/dml-color.feature +0 -0
  136. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/dml-effect.feature +0 -0
  137. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/dml-fill.feature +0 -0
  138. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/dml-line.feature +0 -0
  139. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/environment.py +0 -0
  140. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/ph-inherit-props.feature +0 -0
  141. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/ph-insert-shape.feature +0 -0
  142. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/ph-phfmt-props.feature +0 -0
  143. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/ph-placeholder-props.feature +0 -0
  144. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/prs-coreprops.feature +0 -0
  145. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/prs-default-template.feature +0 -0
  146. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/prs-open-save.feature +0 -0
  147. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/prs-presentation-props.feature +0 -0
  148. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-autoshape.feature +0 -0
  149. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-connector.feature +0 -0
  150. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-freeform.feature +0 -0
  151. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-graphicframe.feature +0 -0
  152. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-groupshape.feature +0 -0
  153. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-movie-props.feature +0 -0
  154. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-picture.feature +0 -0
  155. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-placeholder.feature +0 -0
  156. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-shapes.feature +0 -0
  157. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/shp-shared.feature +0 -0
  158. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/sld-background.feature +0 -0
  159. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/sld-slide.feature +0 -0
  160. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/sld-slides.feature +0 -0
  161. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/action.py +0 -0
  162. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/axis.py +0 -0
  163. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/background.py +0 -0
  164. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/category.py +0 -0
  165. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/chart.py +0 -0
  166. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/chartdata.py +0 -0
  167. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/color.py +0 -0
  168. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/coreprops.py +0 -0
  169. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/datalabel.py +0 -0
  170. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/effect.py +0 -0
  171. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/fill.py +0 -0
  172. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/font.py +0 -0
  173. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/font_color.py +0 -0
  174. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/helpers.py +0 -0
  175. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/legend.py +0 -0
  176. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/line.py +0 -0
  177. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/picture.py +0 -0
  178. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/placeholder.py +0 -0
  179. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/plot.py +0 -0
  180. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/presentation.py +0 -0
  181. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/series.py +0 -0
  182. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/shape.py +0 -0
  183. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/shapes.py +0 -0
  184. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/slide.py +0 -0
  185. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/slides.py +0 -0
  186. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/72-dpi.tiff +0 -0
  187. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
  188. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/act-props.pptm +0 -0
  189. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/calibriz.ttf +0 -0
  190. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
  191. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-category-access.pptx +0 -0
  192. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
  193. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
  194. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-charts.pptx +0 -0
  195. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
  196. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  197. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
  198. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-legend.pptx +0 -0
  199. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
  200. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
  201. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-point-access.pptx +0 -0
  202. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-point-props.pptx +0 -0
  203. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
  204. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-series.pptx +0 -0
  205. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  206. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/dml-effect.pptx +0 -0
  207. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/dml-fill.pptx +0 -0
  208. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/dml-line.pptx +0 -0
  209. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/ext-rels.pptx +0 -0
  210. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
  211. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
  212. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
  213. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
  214. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  215. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
  216. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
  217. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
  218. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  219. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  220. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  221. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  222. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  223. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  224. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  225. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  226. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  227. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  228. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  229. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  230. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  231. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  232. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  233. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  234. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  235. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  236. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  237. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  238. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  239. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  240. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  241. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  242. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  243. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  244. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
  245. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
  246. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
  247. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
  248. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/font-color.pptx +0 -0
  249. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
  250. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/just-two-mice.png +0 -0
  251. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
  252. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/minimal.pptx +0 -0
  253. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/monty-truth.png +0 -0
  254. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
  255. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/mst-shapes.pptx +0 -0
  256. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  257. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
  258. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  259. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  260. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/pic.emf +0 -0
  261. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
  262. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/prs-notes.pptx +0 -0
  263. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/prs-properties.pptx +0 -0
  264. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
  265. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/python-icon.jpeg +0 -0
  266. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/python-powered.png +0 -0
  267. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/python.bmp +0 -0
  268. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
  269. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  270. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  271. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  272. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-common-props.pptx +0 -0
  273. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
  274. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
  275. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  276. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  277. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-freeform.pptx +0 -0
  278. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
  279. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
  280. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-picture.pptx +0 -0
  281. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  282. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/shp-shapes.pptx +0 -0
  283. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/sld-background.pptx +0 -0
  284. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/sld-blank.pptx +0 -0
  285. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/sld-notes.pptx +0 -0
  286. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/sld-slide.pptx +0 -0
  287. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/sld-slides.pptx +0 -0
  288. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/sonic.gif +0 -0
  289. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/tbl-cell.pptx +0 -0
  290. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  291. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/test.pptx +0 -0
  292. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
  293. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/txt-font-props.pptx +0 -0
  294. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
  295. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  296. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
  297. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/test_files/txt-text.pptx +0 -0
  298. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/text.py +0 -0
  299. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/steps/text_frame.py +0 -0
  300. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/tbl-column.feature +0 -0
  301. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/tbl-table.feature +0 -0
  302. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/txt-fit-text.feature +0 -0
  303. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/txt-font-color.feature +0 -0
  304. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/txt-font-props.feature +0 -0
  305. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/txt-paragraph.feature +0 -0
  306. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/txt-text.feature +0 -0
  307. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/features/txt-textframe.feature +0 -0
  308. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/setup.cfg +0 -0
  309. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/_agent_friendly.py +0 -0
  310. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/_color.py +0 -0
  311. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/_slide_importer.py +0 -0
  312. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/_svg.py +0 -0
  313. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/_template_applier.py +0 -0
  314. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/_textstyle.py +0 -0
  315. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/accessibility.py +0 -0
  316. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/action.py +0 -0
  317. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/animation.py +0 -0
  318. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/api.py +0 -0
  319. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/audit.py +0 -0
  320. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/__init__.py +0 -0
  321. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/analytics.py +0 -0
  322. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/axis.py +0 -0
  323. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/category.py +0 -0
  324. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/data.py +0 -0
  325. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/datalabel.py +0 -0
  326. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/legend.py +0 -0
  327. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/marker.py +0 -0
  328. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/palettes.py +0 -0
  329. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/plot.py +0 -0
  330. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/point.py +0 -0
  331. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/quick_layouts.py +0 -0
  332. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/series.py +0 -0
  333. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/xlsx.py +0 -0
  334. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/chart/xmlwriter.py +0 -0
  335. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/compose/from_spec.py +0 -0
  336. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/design/__init__.py +0 -0
  337. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/design/components.py +0 -0
  338. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/design/figures.py +0 -0
  339. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/design/layout.py +0 -0
  340. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/design/recipes.py +0 -0
  341. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/design/style.py +0 -0
  342. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/design/tokens.py +0 -0
  343. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/diagrams.py +0 -0
  344. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/dml/__init__.py +0 -0
  345. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/dml/chtfmt.py +0 -0
  346. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/dml/color.py +0 -0
  347. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/dml/effect.py +0 -0
  348. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/dml/fill.py +0 -0
  349. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/dml/line.py +0 -0
  350. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/dml/picture.py +0 -0
  351. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/dml/three_d.py +0 -0
  352. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/__init__.py +0 -0
  353. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/action.py +0 -0
  354. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/animation.py +0 -0
  355. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/base.py +0 -0
  356. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/chart.py +0 -0
  357. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/dml.py +0 -0
  358. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/lang.py +0 -0
  359. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/presentation.py +0 -0
  360. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/enum/shapes.py +0 -0
  361. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/exc.py +0 -0
  362. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/formats.py +0 -0
  363. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/geometry.py +0 -0
  364. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/inherit.py +0 -0
  365. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/lint.py +0 -0
  366. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/mathml2omml.py +0 -0
  367. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/media.py +0 -0
  368. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/opc/__init__.py +0 -0
  369. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/opc/constants.py +0 -0
  370. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/opc/oxml.py +0 -0
  371. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/opc/packuri.py +0 -0
  372. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/opc/shared.py +0 -0
  373. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/opc/spec.py +0 -0
  374. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/action.py +0 -0
  375. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/__init__.py +0 -0
  376. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/axis.py +0 -0
  377. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/chart.py +0 -0
  378. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
  379. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/legend.py +0 -0
  380. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/marker.py +0 -0
  381. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/plot.py +0 -0
  382. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/series.py +0 -0
  383. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/chart/shared.py +0 -0
  384. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/coreprops.py +0 -0
  385. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/customprops.py +0 -0
  386. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/dml/__init__.py +0 -0
  387. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/dml/color.py +0 -0
  388. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/dml/effect.py +0 -0
  389. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/dml/fill.py +0 -0
  390. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/dml/line.py +0 -0
  391. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/dml/three_d.py +0 -0
  392. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/ns.py +0 -0
  393. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
  394. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
  395. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/shapes/connector.py +0 -0
  396. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
  397. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
  398. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/shapes/picture.py +0 -0
  399. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/shapes/shared.py +0 -0
  400. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/theme.py +0 -0
  401. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/oxml/xmlchemy.py +0 -0
  402. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/__init__.py +0 -0
  403. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/chart.py +0 -0
  404. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/coreprops.py +0 -0
  405. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/customprops.py +0 -0
  406. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/diagram.py +0 -0
  407. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/embeddedpackage.py +0 -0
  408. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/image.py +0 -0
  409. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/media.py +0 -0
  410. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/parts/slide.py +0 -0
  411. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/py.typed +0 -0
  412. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/section.py +0 -0
  413. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/__init__.py +0 -0
  414. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/autoshape.py +0 -0
  415. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/base.py +0 -0
  416. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/connector.py +0 -0
  417. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/freeform.py +0 -0
  418. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/graphfrm.py +0 -0
  419. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/group.py +0 -0
  420. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shapes/placeholder.py +0 -0
  421. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/shared.py +0 -0
  422. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/__init__.py +0 -0
  423. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/__main__.py +0 -0
  424. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/animations.md +0 -0
  425. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/basics.md +0 -0
  426. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/charts.md +0 -0
  427. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/effects.md +0 -0
  428. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
  429. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
  430. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/lint.md +0 -0
  431. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/math.md +0 -0
  432. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/picture-effects.md +0 -0
  433. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/smart-art.md +0 -0
  434. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
  435. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/tables.md +0 -0
  436. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/theme.md +0 -0
  437. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/three-d.md +0 -0
  438. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/skill/references/transitions.md +0 -0
  439. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/smart_art.py +0 -0
  440. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/spec.py +0 -0
  441. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/table_styles.py +0 -0
  442. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/templates/default.pptx +0 -0
  443. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/templates/docx-icon.emf +0 -0
  444. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/templates/generic-icon.emf +0 -0
  445. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/templates/notes.xml +0 -0
  446. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/templates/notesMaster.xml +0 -0
  447. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/templates/pptx-icon.emf +0 -0
  448. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/templates/theme.xml +0 -0
  449. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
  450. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/text/__init__.py +0 -0
  451. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/text/fonts.py +0 -0
  452. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/text/layout.py +0 -0
  453. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/theme.py +0 -0
  454. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/types.py +0 -0
  455. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/pptx2/util.py +0 -0
  456. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
  457. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/__init__.py +0 -0
  458. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/__init__.py +0 -0
  459. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_analytics.py +0 -0
  460. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_axis.py +0 -0
  461. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_category.py +0 -0
  462. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_chart.py +0 -0
  463. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_chart_toggles.py +0 -0
  464. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_collision_strategy.py +0 -0
  465. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_data.py +0 -0
  466. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_datalabel.py +0 -0
  467. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_legend.py +0 -0
  468. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_marker.py +0 -0
  469. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_palettes.py +0 -0
  470. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_plot.py +0 -0
  471. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_point.py +0 -0
  472. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_quick_layouts.py +0 -0
  473. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_series.py +0 -0
  474. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_xlsx.py +0 -0
  475. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/chart/test_xmlwriter.py +0 -0
  476. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/design/__init__.py +0 -0
  477. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/design/test_components.py +0 -0
  478. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/design/test_figures.py +0 -0
  479. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/design/test_layout.py +0 -0
  480. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/design/test_recipes.py +0 -0
  481. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/design/test_style.py +0 -0
  482. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/design/test_tokens.py +0 -0
  483. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/dml/__init__.py +0 -0
  484. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/dml/test_chtfmt.py +0 -0
  485. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/dml/test_color.py +0 -0
  486. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/dml/test_effect.py +0 -0
  487. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/dml/test_fill.py +0 -0
  488. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/dml/test_line.py +0 -0
  489. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/dml/test_three_d.py +0 -0
  490. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/enum/__init__.py +0 -0
  491. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/enum/test_base.py +0 -0
  492. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/enum/test_shapes.py +0 -0
  493. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/integration/__init__.py +0 -0
  494. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/integration/round_trip.py +0 -0
  495. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/integration/test_add_slide_layout.py +0 -0
  496. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/integration/test_apply_template.py +0 -0
  497. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/integration/test_round_trip.py +0 -0
  498. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/opc/__init__.py +0 -0
  499. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/opc/test_oxml.py +0 -0
  500. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/opc/test_packuri.py +0 -0
  501. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/opc/test_serialized.py +0 -0
  502. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/__init__.py +0 -0
  503. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/shapes/__init__.py +0 -0
  504. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/shapes/test_autoshape.py +0 -0
  505. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
  506. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/shapes/test_groupshape.py +0 -0
  507. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/shapes/test_picture.py +0 -0
  508. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test___init__.py +0 -0
  509. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test_dml.py +0 -0
  510. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test_ns.py +0 -0
  511. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test_presentation.py +0 -0
  512. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test_simpletypes.py +0 -0
  513. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test_slide.py +0 -0
  514. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test_table.py +0 -0
  515. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test_theme.py +0 -0
  516. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/test_xmlchemy.py +0 -0
  517. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/unitdata/__init__.py +0 -0
  518. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/unitdata/dml.py +0 -0
  519. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/unitdata/shape.py +0 -0
  520. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/oxml/unitdata/text.py +0 -0
  521. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/__init__.py +0 -0
  522. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/test_chart.py +0 -0
  523. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/test_coreprops.py +0 -0
  524. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/test_customprops.py +0 -0
  525. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/test_embeddedpackage.py +0 -0
  526. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/test_image.py +0 -0
  527. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/test_media.py +0 -0
  528. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/parts/test_slide.py +0 -0
  529. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/schema/__init__.py +0 -0
  530. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/schema/oxml_schema_validator.py +0 -0
  531. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/__init__.py +0 -0
  532. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_anchor.py +0 -0
  533. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_animate.py +0 -0
  534. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_autoshape.py +0 -0
  535. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_base.py +0 -0
  536. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_connector.py +0 -0
  537. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_freeform.py +0 -0
  538. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_graphfrm.py +0 -0
  539. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_group.py +0 -0
  540. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_picture.py +0 -0
  541. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_placeholder.py +0 -0
  542. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/shapes/test_shapetree.py +0 -0
  543. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_accessibility.py +0 -0
  544. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_action.py +0 -0
  545. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_animation.py +0 -0
  546. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_api.py +0 -0
  547. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_audit.py +0 -0
  548. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_compose_from_spec.py +0 -0
  549. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_diagrams.py +0 -0
  550. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/calibriz.ttf +0 -0
  551. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/cdw-logo.eps +0 -0
  552. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/dummy.mp4 +0 -0
  553. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
  554. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
  555. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
  556. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
  557. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  558. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
  559. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
  560. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
  561. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  562. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  563. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  564. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  565. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  566. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  567. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  568. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  569. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  570. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  571. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  572. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  573. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  574. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  575. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  576. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  577. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  578. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  579. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  580. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  581. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  582. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  583. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  584. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  585. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  586. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  587. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
  588. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
  589. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
  590. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
  591. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/minimal.pptx +0 -0
  592. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/minimal_slide.xml +0 -0
  593. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/missing_rels_item.pptx +0 -0
  594. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/monty-truth.png +0 -0
  595. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/no-core-props.pptx +0 -0
  596. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/no-slides.pptx +0 -0
  597. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/presentation.xml +0 -0
  598. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/python-icon.jpeg +0 -0
  599. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/python-powered.png +0 -0
  600. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/python.bmp +0 -0
  601. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/slideLayout1.xml +0 -0
  602. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
  603. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
  604. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
  605. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
  606. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
  607. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-area.txt +0 -0
  608. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
  609. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
  610. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
  611. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
  612. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
  613. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
  614. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
  615. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
  616. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
  617. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
  618. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
  619. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
  620. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
  621. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
  622. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
  623. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x2-line.txt +0 -0
  624. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
  625. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
  626. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
  627. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
  628. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
  629. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
  630. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
  631. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
  632. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
  633. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
  634. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
  635. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
  636. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
  637. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
  638. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/cat-labels.txt +0 -0
  639. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
  640. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/default-notes.txt +0 -0
  641. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
  642. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/default-theme.txt +0 -0
  643. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/freeform.txt +0 -0
  644. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
  645. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/placeholders.txt +0 -0
  646. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
  647. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/relationships.txt +0 -0
  648. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
  649. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
  650. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/snippets/timing.txt +0 -0
  651. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/test.pptx +0 -0
  652. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_files/test_slides.pptx +0 -0
  653. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_formats.py +0 -0
  654. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_geometry.py +0 -0
  655. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_inherit.py +0 -0
  656. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_lint.py +0 -0
  657. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_lint_on_save.py +0 -0
  658. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_math.py +0 -0
  659. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_media.py +0 -0
  660. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_new_features.py +0 -0
  661. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_package.py +0 -0
  662. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_powerpoint_strict_validation.py +0 -0
  663. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_presentation.py +0 -0
  664. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_render.py +0 -0
  665. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_render_slides_alias.py +0 -0
  666. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_shape_helpers.py +0 -0
  667. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_shared.py +0 -0
  668. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_skill.py +0 -0
  669. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_slide.py +0 -0
  670. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_smart_art.py +0 -0
  671. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_svg_picture.py +0 -0
  672. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_table.py +0 -0
  673. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_table_extras.py +0 -0
  674. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_theme.py +0 -0
  675. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_transition_morph.py +0 -0
  676. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/test_util.py +0 -0
  677. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/text/__init__.py +0 -0
  678. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/text/test_fonts.py +0 -0
  679. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/text/test_layout.py +0 -0
  680. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/text/test_text.py +0 -0
  681. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/unitdata.py +0 -0
  682. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/unitutil/__init__.py +0 -0
  683. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/unitutil/cxml.py +0 -0
  684. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/unitutil/file.py +0 -0
  685. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tests/unitutil/mock.py +0 -0
  686. {python_pptx2-2.20.0 → python_pptx2-3.1.0}/tox.ini +0 -0
@@ -15,6 +15,148 @@ 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
+ 3.1.0 (2026-09-03)
19
+ ++++++++++++++++++
20
+
21
+ Slide-design layer: the everyday blocks a content slide is made of, a
22
+ set of curated palettes, a one-image visual check, and a design guide
23
+ that leads generated decks toward calm, consistent layouts.
24
+
25
+ Added
26
+ .....
27
+
28
+ * ``pptx2.design.blocks`` (re-exported at the package root):
29
+
30
+ * ``add_card(slide, bbox, title=, body=, fill=, line=, pad_pt=, ...)``
31
+ — one flat rounded surface (``shadow.clear()``, real
32
+ ``corner_radius``, tint *or* hairline outline) with a padded, fitted
33
+ title and body. ``body`` may be a list, rendered as bullets
34
+ (``numbered=True`` for a numbered list). Returns ``Card`` with
35
+ ``card`` / ``title_box`` / ``body_box`` and ``inner`` (the padded
36
+ content ``BBox``).
37
+ * ``add_bullets(slide, bbox, items=, size_pt=, numbered=, gap_pt=, ...)``
38
+ — real ``a:buChar`` / ``a:buAutoNum`` bullets with a hanging indent
39
+ that scales with the type size, item spacing, and fit-to-box that
40
+ never drops below ``min_size_pt``. Numbering continues across items.
41
+ * ``add_picture_fit(slide, image, bbox, mode="contain"|"cover", align=,
42
+ caption=, ...)`` — places a picture inside a box without distortion,
43
+ letter-boxed or cropped symmetrically to fill, with an optional
44
+ caption. Returns ``FittedPicture`` with the occupied ``frame``.
45
+
46
+ All three tag their shapes with one ``lint_group``.
47
+
48
+ * ``pptx2.design.palettes`` (re-exported at the package root):
49
+ ``Palette`` with named roles (``paper``, ``surface``, ``line``, ``ink``,
50
+ ``muted``, ``accent``, ``accent_soft``, ``accent_ink``), ``PALETTES``
51
+ (``slate``, ``linen``, ``forest``, ``plum``, ``ember``, ``navy``,
52
+ ``graphite``) that pass WCAG AA contrast for their intended pairings,
53
+ ``palette(name)``, and ``Palette.dark()`` for title / section slides.
54
+
55
+ * ``pptx2.render.render_contact_sheet(prs, out_path, cols=, thumb_width=,
56
+ ...)`` and ``Presentation.render_contact_sheet(...)`` — every slide
57
+ rendered and tiled into a single numbered PNG.
58
+
59
+ Skill
60
+ .....
61
+
62
+ * New ``references/slide-design.md``: grid and margins, type scale,
63
+ one-palette colour, surfaces done well, whitespace, pictures, tables /
64
+ diagrams / charts, deliberate vs accidental overlaps, a twelve-archetype
65
+ slide catalog with runnable code, and the visual check.
66
+ * ``SKILL.md`` cheat sheet, house rules and anti-patterns updated for the
67
+ blocks, palettes and contact sheet; ``design.md`` and ``render.md``
68
+ cross-reference them.
69
+
70
+
71
+ 3.0.0 (2026-09-01)
72
+ ++++++++++++++++++
73
+
74
+ Backward-incompatible
75
+ .....................
76
+
77
+ * ``Presentation.import_slide`` and ``pptx2.compose.import_slide`` now
78
+ take the paper-pptx validating signature —
79
+ ``import_slide(source_prs, slide, *, mode, ...)`` returning
80
+ ``ImportReport``. The previous part-level engine (including its
81
+ ``merge_master=`` knobs) remains available unchanged at
82
+ ``pptx2._slide_importer.import_slide``, and the old deck-integration
83
+ tests exercise it directly.
84
+
85
+ Merged
86
+ ......
87
+
88
+ * **Ported the paper-pptx agent-first structure editor** (bootstrap
89
+ commit 700b5f1f from ``paper-instruments/paper-pptx``, a fork of
90
+ python-pptx 1.0.2). python-pptx2 gains paper-pptx's whole editing,
91
+ inspection, and safety surface, import-renamed from ``pptx`` to
92
+ ``pptx2``:
93
+
94
+ - ``pptx2.inspect`` — effective values with provenance
95
+ (``effective_font()``, ``effective_paragraph_format()``,
96
+ ``effective_shape_format()``), visibility-complete ``inspect_text()``
97
+ and a deterministic ``inspect_deck()`` manifest.
98
+ - ``pptx2.edit`` / ``pptx2.diff`` — ``replace_text()`` that preserves
99
+ untouched run formatting, and ``diff_decks()`` structural diffing.
100
+ - ``pptx2.compose`` — paper-pptx's validating
101
+ ``import_slide(dest, source, slide, mode=...)`` / ``append_deck()``
102
+ returning |ImportReport| (the older part-level engine remains at
103
+ ``pptx2._slide_importer``); ``Presentation.import_slide`` now takes
104
+ the paper-pptx signature.
105
+ - ``pptx2.hf`` (``Presentation.apply_footers()`` / ``Slide.apply_footers()``
106
+ / ``header_footers`` flags), ``pptx2.rebind``
107
+ (``Slide.rebind_layout()``), ``pptx2.slideops``,
108
+ ``pptx2._transaction`` / ``_ownership`` / ``_zipguard`` /
109
+ ``errors``, the ``paper_pptx_doctor`` CLI, and the full
110
+ ``tests/paper`` contract suite. (The bootstrap's ``pptx2.scrub``
111
+ module was removed again by ported commit #14, matching upstream
112
+ paper-pptx.)
113
+ - Slide ops: ``Slides.clone/delete/move/reorder`` (``move`` and
114
+ ``reorder`` merged with the existing python-pptx2 int/Slice APIs),
115
+ ``SlideShapes.add_copy/delete/move`` and strict ``*_by_name``
116
+ addressing, ``Table.insert_row/insert_column/delete_row/delete_column``
117
+ with merge guards, ``Picture.replace_image()``,
118
+ ``Chart.replace_data_safe()``, ``TextFrame.normalize_autofit()``,
119
+ ``_Run.effective_font()``, ``_Paragraph.bullet`` (``BulletFormat``),
120
+ notes-text read/replace that never creates a notes slide, and an
121
+ atomic, deterministic (epoch-stamped) package ``save()``.
122
+
123
+ * Follow-up paper-pptx fixes ported in sequence (their commit ids in
124
+ ours): zipguard keeps only structural checks and drops numeric
125
+ resource ceilings (#15); the inspect group-depth guard is gone (#19);
126
+ the bootstrap's ``scrub`` module was removed again (#14);
127
+ ``effective_paragraph_format`` resolves *inherited* bullets with
128
+ provenance, and deck diff reports bullet typeface/size changes (#16,
129
+ #27); ``Presentation.batch()`` validates once per block and
130
+ ``save()`` refuses inside it, slide-partname allocation and
131
+ duplicate-partname writes are fixed (#17); packages with leading
132
+ bytes are refused (#21); ``save()`` accepts every upstream
133
+ destination (write-only handles, unseekable sinks), writing at the
134
+ caller's cursor and resolving symlinks for path destinations (#23);
135
+ untyped ZIP members refuse while unreferenced parts are accepted
136
+ (#24); ZIP directory entries are accepted (#25); relationship
137
+ refusals are retyped with remedies (#26); ``patch_save`` treats
138
+ semantically equivalent OPC registries (other producers' absolute
139
+ rels, content-type fallbacks) as unchanged (#36); table expansion is
140
+ composable — ``insert_row/insert_column(copy_format_from=...)`` and
141
+ ``_Cell.extend_merge()`` (#37); text edits, layout selection,
142
+ placeholder reconciliation, section selection, and deck-diff
143
+ alignment all match by stable *identity*, refusing ambiguity instead
144
+ of guessing (#40–#46, #38 docs).
145
+
146
+ * The low-level slide-import engine keeps its part-level API at
147
+ ``pptx2._slide_importer`` with the ``merge_master=`` knobs; the
148
+ public ``Presentation.import_slide`` /
149
+ ``pptx2.compose.import_slide`` now take the paper-pptx
150
+ ``(source_prs, slide, mode=...)`` signature returning
151
+ ``ImportReport``.
152
+
153
+ * A zip-timestamp fix that benefits every save: package entries are
154
+ stamped with the 1980 zip epoch, so saving the same package state
155
+ twice produces byte-identical files, and the math-namespace
156
+ enrichment of slide XML only happens when a slide actually carries
157
+ equation markup (math-free decks round-trip byte-identically).
158
+
159
+
18
160
  2.20.0 (2026-08-30)
19
161
  +++++++++++++++++++
20
162
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.20.0
3
+ Version: 3.1.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())
@@ -9,6 +9,14 @@ import pptx2.exc as exceptions
9
9
  from pptx2.api import Presentation
10
10
  from pptx2.audit import AuditReport, audit
11
11
  from pptx2.geometry import BBox
12
+ from pptx2.design.blocks import (
13
+ Card,
14
+ FittedPicture,
15
+ add_bullets,
16
+ add_card,
17
+ add_picture_fit,
18
+ )
19
+ from pptx2.design.palettes import PALETTES, Palette, palette
12
20
  from pptx2.design.components import (
13
21
  ArticleCard,
14
22
  Gauge,
@@ -57,7 +65,7 @@ from pptx2.parts.slide import (
57
65
  if TYPE_CHECKING:
58
66
  from pptx2.opc.package import Part
59
67
 
60
- __version__ = "2.20.0"
68
+ __version__ = "3.1.0"
61
69
 
62
70
  sys.modules["pptx2.exceptions"] = exceptions
63
71
  del sys
@@ -91,6 +99,16 @@ __all__ = [
91
99
  "StatusPill",
92
100
  "StatStrip",
93
101
  "ArticleCard",
102
+ # Everyday slide blocks (hex-driven; no token setup required).
103
+ "add_card",
104
+ "add_bullets",
105
+ "add_picture_fit",
106
+ "Card",
107
+ "FittedPicture",
108
+ # Curated colour sets.
109
+ "Palette",
110
+ "PALETTES",
111
+ "palette",
94
112
  ]
95
113
 
96
114
  content_type_to_part_class_map: dict[str, type[Part]] = {
@@ -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
+ )