python-pptx2 2.18.0__tar.gz → 2.20.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/HISTORY.rst +23 -0
  2. {python_pptx2-2.18.0/src/python_pptx2.egg-info → python_pptx2-2.20.0}/PKG-INFO +1 -1
  3. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/__init__.py +1 -1
  4. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/_agent_friendly.py +88 -14
  5. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/_color.py +3 -0
  6. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/diagrams.py +51 -0
  7. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/shapetree.py +11 -0
  8. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/basics.md +10 -6
  9. {python_pptx2-2.18.0 → python_pptx2-2.20.0/src/python_pptx2.egg-info}/PKG-INFO +1 -1
  10. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_shape_helpers.py +69 -0
  11. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/LICENSE +0 -0
  12. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/MANIFEST.in +0 -0
  13. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/README.rst +0 -0
  14. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/act-action.feature +0 -0
  15. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/act-hyperlink.feature +0 -0
  16. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-axis-props.feature +0 -0
  17. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-axistitle-props.feature +0 -0
  18. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-category-access.feature +0 -0
  19. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-category-props.feature +0 -0
  20. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-chart.feature +0 -0
  21. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-charttitle-props.feature +0 -0
  22. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-data-props.feature +0 -0
  23. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-datalabels.feature +0 -0
  24. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-gridlines-props.feature +0 -0
  25. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-legend-access.feature +0 -0
  26. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-legend-props.feature +0 -0
  27. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-marker-props.feature +0 -0
  28. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-plot-props.feature +0 -0
  29. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-point-access.feature +0 -0
  30. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-point-props.feature +0 -0
  31. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-replace-data.feature +0 -0
  32. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-series.feature +0 -0
  33. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/cht-ticklabels-props.feature +0 -0
  34. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/dml-color.feature +0 -0
  35. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/dml-effect.feature +0 -0
  36. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/dml-fill.feature +0 -0
  37. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/dml-line.feature +0 -0
  38. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/environment.py +0 -0
  39. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/ph-inherit-props.feature +0 -0
  40. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/ph-insert-shape.feature +0 -0
  41. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/ph-phfmt-props.feature +0 -0
  42. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/ph-placeholder-props.feature +0 -0
  43. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/prs-coreprops.feature +0 -0
  44. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/prs-default-template.feature +0 -0
  45. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/prs-open-save.feature +0 -0
  46. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/prs-presentation-props.feature +0 -0
  47. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-autoshape.feature +0 -0
  48. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-connector.feature +0 -0
  49. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-freeform.feature +0 -0
  50. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-graphicframe.feature +0 -0
  51. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-groupshape.feature +0 -0
  52. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-movie-props.feature +0 -0
  53. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-picture.feature +0 -0
  54. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-placeholder.feature +0 -0
  55. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-shapes.feature +0 -0
  56. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/shp-shared.feature +0 -0
  57. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/sld-background.feature +0 -0
  58. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/sld-slide.feature +0 -0
  59. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/sld-slides.feature +0 -0
  60. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/action.py +0 -0
  61. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/axis.py +0 -0
  62. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/background.py +0 -0
  63. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/category.py +0 -0
  64. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/chart.py +0 -0
  65. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/chartdata.py +0 -0
  66. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/color.py +0 -0
  67. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/coreprops.py +0 -0
  68. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/datalabel.py +0 -0
  69. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/effect.py +0 -0
  70. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/fill.py +0 -0
  71. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/font.py +0 -0
  72. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/font_color.py +0 -0
  73. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/helpers.py +0 -0
  74. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/legend.py +0 -0
  75. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/line.py +0 -0
  76. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/picture.py +0 -0
  77. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/placeholder.py +0 -0
  78. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/plot.py +0 -0
  79. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/presentation.py +0 -0
  80. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/series.py +0 -0
  81. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/shape.py +0 -0
  82. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/shapes.py +0 -0
  83. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/slide.py +0 -0
  84. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/slides.py +0 -0
  85. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/table.py +0 -0
  86. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/72-dpi.tiff +0 -0
  87. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
  88. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/act-props.pptm +0 -0
  89. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/calibriz.ttf +0 -0
  90. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
  91. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-category-access.pptx +0 -0
  92. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
  93. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
  94. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-charts.pptx +0 -0
  95. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
  96. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  97. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
  98. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-legend.pptx +0 -0
  99. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
  100. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
  101. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-point-access.pptx +0 -0
  102. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-point-props.pptx +0 -0
  103. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
  104. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-series.pptx +0 -0
  105. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  106. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/dml-effect.pptx +0 -0
  107. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/dml-fill.pptx +0 -0
  108. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/dml-line.pptx +0 -0
  109. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/ext-rels.pptx +0 -0
  110. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
  111. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
  112. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
  113. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
  114. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  115. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
  116. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
  117. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
  118. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  119. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  120. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  121. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  122. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  123. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  124. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  125. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  126. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  127. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  128. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  129. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  130. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  131. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  132. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  133. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  134. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  135. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  136. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  137. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  138. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  139. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  140. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  141. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  142. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  143. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  144. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
  145. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
  146. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
  147. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
  148. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/font-color.pptx +0 -0
  149. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
  150. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/just-two-mice.png +0 -0
  151. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
  152. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/minimal.pptx +0 -0
  153. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/monty-truth.png +0 -0
  154. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
  155. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/mst-shapes.pptx +0 -0
  156. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  157. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
  158. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  159. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  160. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/pic.emf +0 -0
  161. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
  162. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/prs-notes.pptx +0 -0
  163. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/prs-properties.pptx +0 -0
  164. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
  165. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/python-icon.jpeg +0 -0
  166. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/python-powered.png +0 -0
  167. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/python.bmp +0 -0
  168. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
  169. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  170. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  171. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  172. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-common-props.pptx +0 -0
  173. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
  174. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
  175. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  176. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  177. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-freeform.pptx +0 -0
  178. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
  179. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
  180. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-picture.pptx +0 -0
  181. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  182. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/shp-shapes.pptx +0 -0
  183. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/sld-background.pptx +0 -0
  184. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/sld-blank.pptx +0 -0
  185. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/sld-notes.pptx +0 -0
  186. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/sld-slide.pptx +0 -0
  187. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/sld-slides.pptx +0 -0
  188. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/sonic.gif +0 -0
  189. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/tbl-cell.pptx +0 -0
  190. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  191. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/test.pptx +0 -0
  192. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
  193. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/txt-font-props.pptx +0 -0
  194. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
  195. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  196. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
  197. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/test_files/txt-text.pptx +0 -0
  198. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/text.py +0 -0
  199. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/steps/text_frame.py +0 -0
  200. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/tbl-cell.feature +0 -0
  201. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/tbl-column.feature +0 -0
  202. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/tbl-table.feature +0 -0
  203. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/txt-fit-text.feature +0 -0
  204. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/txt-font-color.feature +0 -0
  205. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/txt-font-props.feature +0 -0
  206. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/txt-paragraph.feature +0 -0
  207. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/txt-text.feature +0 -0
  208. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/features/txt-textframe.feature +0 -0
  209. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/pyproject.toml +0 -0
  210. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/setup.cfg +0 -0
  211. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/_slide_importer.py +0 -0
  212. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/_svg.py +0 -0
  213. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/_template_applier.py +0 -0
  214. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/_textstyle.py +0 -0
  215. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/accessibility.py +0 -0
  216. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/action.py +0 -0
  217. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/animation.py +0 -0
  218. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/api.py +0 -0
  219. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/audit.py +0 -0
  220. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/__init__.py +0 -0
  221. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/analytics.py +0 -0
  222. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/axis.py +0 -0
  223. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/category.py +0 -0
  224. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/chart.py +0 -0
  225. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/data.py +0 -0
  226. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/datalabel.py +0 -0
  227. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/legend.py +0 -0
  228. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/marker.py +0 -0
  229. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/palettes.py +0 -0
  230. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/plot.py +0 -0
  231. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/point.py +0 -0
  232. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/quick_layouts.py +0 -0
  233. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/series.py +0 -0
  234. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/xlsx.py +0 -0
  235. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/chart/xmlwriter.py +0 -0
  236. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/compose/__init__.py +0 -0
  237. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/compose/from_spec.py +0 -0
  238. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/design/__init__.py +0 -0
  239. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/design/components.py +0 -0
  240. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/design/figures.py +0 -0
  241. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/design/layout.py +0 -0
  242. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/design/recipes.py +0 -0
  243. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/design/style.py +0 -0
  244. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/design/tokens.py +0 -0
  245. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/dml/__init__.py +0 -0
  246. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/dml/chtfmt.py +0 -0
  247. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/dml/color.py +0 -0
  248. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/dml/effect.py +0 -0
  249. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/dml/fill.py +0 -0
  250. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/dml/line.py +0 -0
  251. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/dml/picture.py +0 -0
  252. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/dml/three_d.py +0 -0
  253. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/__init__.py +0 -0
  254. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/action.py +0 -0
  255. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/animation.py +0 -0
  256. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/base.py +0 -0
  257. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/chart.py +0 -0
  258. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/dml.py +0 -0
  259. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/lang.py +0 -0
  260. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/presentation.py +0 -0
  261. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/shapes.py +0 -0
  262. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/enum/text.py +0 -0
  263. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/exc.py +0 -0
  264. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/formats.py +0 -0
  265. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/geometry.py +0 -0
  266. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/inherit.py +0 -0
  267. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/lint.py +0 -0
  268. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/math.py +0 -0
  269. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/mathml2omml.py +0 -0
  270. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/media.py +0 -0
  271. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/opc/__init__.py +0 -0
  272. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/opc/constants.py +0 -0
  273. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/opc/oxml.py +0 -0
  274. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/opc/package.py +0 -0
  275. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/opc/packuri.py +0 -0
  276. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/opc/serialized.py +0 -0
  277. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/opc/shared.py +0 -0
  278. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/opc/spec.py +0 -0
  279. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/__init__.py +0 -0
  280. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/action.py +0 -0
  281. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/__init__.py +0 -0
  282. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/axis.py +0 -0
  283. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/chart.py +0 -0
  284. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
  285. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/legend.py +0 -0
  286. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/marker.py +0 -0
  287. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/plot.py +0 -0
  288. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/series.py +0 -0
  289. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/chart/shared.py +0 -0
  290. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/coreprops.py +0 -0
  291. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/customprops.py +0 -0
  292. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/dml/__init__.py +0 -0
  293. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/dml/color.py +0 -0
  294. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/dml/effect.py +0 -0
  295. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/dml/fill.py +0 -0
  296. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/dml/line.py +0 -0
  297. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/dml/three_d.py +0 -0
  298. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/ns.py +0 -0
  299. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/presentation.py +0 -0
  300. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
  301. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
  302. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/shapes/connector.py +0 -0
  303. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
  304. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
  305. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/shapes/picture.py +0 -0
  306. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/shapes/shared.py +0 -0
  307. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/simpletypes.py +0 -0
  308. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/slide.py +0 -0
  309. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/table.py +0 -0
  310. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/text.py +0 -0
  311. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/theme.py +0 -0
  312. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/oxml/xmlchemy.py +0 -0
  313. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/package.py +0 -0
  314. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/__init__.py +0 -0
  315. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/chart.py +0 -0
  316. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/coreprops.py +0 -0
  317. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/customprops.py +0 -0
  318. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/diagram.py +0 -0
  319. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/embeddedpackage.py +0 -0
  320. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/image.py +0 -0
  321. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/media.py +0 -0
  322. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/presentation.py +0 -0
  323. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/parts/slide.py +0 -0
  324. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/presentation.py +0 -0
  325. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/py.typed +0 -0
  326. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/render.py +0 -0
  327. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/section.py +0 -0
  328. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/__init__.py +0 -0
  329. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/autoshape.py +0 -0
  330. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/base.py +0 -0
  331. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/connector.py +0 -0
  332. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/freeform.py +0 -0
  333. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/graphfrm.py +0 -0
  334. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/group.py +0 -0
  335. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/picture.py +0 -0
  336. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shapes/placeholder.py +0 -0
  337. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/shared.py +0 -0
  338. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/SKILL.md +0 -0
  339. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/__init__.py +0 -0
  340. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/__main__.py +0 -0
  341. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/animations.md +0 -0
  342. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/charts.md +0 -0
  343. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/compose.md +0 -0
  344. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/design.md +0 -0
  345. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/effects.md +0 -0
  346. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
  347. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
  348. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/lint.md +0 -0
  349. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/math.md +0 -0
  350. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/picture-effects.md +0 -0
  351. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/render.md +0 -0
  352. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/smart-art.md +0 -0
  353. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
  354. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/tables.md +0 -0
  355. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/theme.md +0 -0
  356. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/three-d.md +0 -0
  357. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/skill/references/transitions.md +0 -0
  358. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/slide.py +0 -0
  359. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/smart_art.py +0 -0
  360. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/spec.py +0 -0
  361. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/table.py +0 -0
  362. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/table_styles.py +0 -0
  363. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/templates/default.pptx +0 -0
  364. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/templates/docx-icon.emf +0 -0
  365. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/templates/generic-icon.emf +0 -0
  366. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/templates/notes.xml +0 -0
  367. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/templates/notesMaster.xml +0 -0
  368. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/templates/pptx-icon.emf +0 -0
  369. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/templates/theme.xml +0 -0
  370. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
  371. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/text/__init__.py +0 -0
  372. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/text/fonts.py +0 -0
  373. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/text/layout.py +0 -0
  374. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/text/text.py +0 -0
  375. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/theme.py +0 -0
  376. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/types.py +0 -0
  377. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/pptx2/util.py +0 -0
  378. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/python_pptx2.egg-info/SOURCES.txt +0 -0
  379. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
  380. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/python_pptx2.egg-info/entry_points.txt +0 -0
  381. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/python_pptx2.egg-info/requires.txt +0 -0
  382. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/src/python_pptx2.egg-info/top_level.txt +0 -0
  383. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/__init__.py +0 -0
  384. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/__init__.py +0 -0
  385. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_analytics.py +0 -0
  386. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_axis.py +0 -0
  387. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_category.py +0 -0
  388. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_chart.py +0 -0
  389. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_chart_toggles.py +0 -0
  390. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_collision_strategy.py +0 -0
  391. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_data.py +0 -0
  392. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_datalabel.py +0 -0
  393. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_legend.py +0 -0
  394. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_marker.py +0 -0
  395. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_palettes.py +0 -0
  396. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_plot.py +0 -0
  397. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_point.py +0 -0
  398. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_quick_layouts.py +0 -0
  399. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_series.py +0 -0
  400. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_xlsx.py +0 -0
  401. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/chart/test_xmlwriter.py +0 -0
  402. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/design/__init__.py +0 -0
  403. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/design/test_components.py +0 -0
  404. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/design/test_figures.py +0 -0
  405. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/design/test_layout.py +0 -0
  406. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/design/test_recipes.py +0 -0
  407. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/design/test_style.py +0 -0
  408. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/design/test_tokens.py +0 -0
  409. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/dml/__init__.py +0 -0
  410. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/dml/test_chtfmt.py +0 -0
  411. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/dml/test_color.py +0 -0
  412. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/dml/test_effect.py +0 -0
  413. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/dml/test_fill.py +0 -0
  414. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/dml/test_line.py +0 -0
  415. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/dml/test_three_d.py +0 -0
  416. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/enum/__init__.py +0 -0
  417. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/enum/test_base.py +0 -0
  418. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/enum/test_shapes.py +0 -0
  419. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/integration/__init__.py +0 -0
  420. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/integration/round_trip.py +0 -0
  421. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/integration/test_add_slide_layout.py +0 -0
  422. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/integration/test_apply_template.py +0 -0
  423. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/integration/test_compose_package.py +0 -0
  424. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/integration/test_import_slide.py +0 -0
  425. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/integration/test_round_trip.py +0 -0
  426. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/opc/__init__.py +0 -0
  427. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/opc/test_oxml.py +0 -0
  428. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/opc/test_package.py +0 -0
  429. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/opc/test_packuri.py +0 -0
  430. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/opc/test_serialized.py +0 -0
  431. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/__init__.py +0 -0
  432. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/shapes/__init__.py +0 -0
  433. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/shapes/test_autoshape.py +0 -0
  434. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
  435. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/shapes/test_groupshape.py +0 -0
  436. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/shapes/test_picture.py +0 -0
  437. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test___init__.py +0 -0
  438. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test_dml.py +0 -0
  439. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test_ns.py +0 -0
  440. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test_presentation.py +0 -0
  441. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test_simpletypes.py +0 -0
  442. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test_slide.py +0 -0
  443. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test_table.py +0 -0
  444. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test_theme.py +0 -0
  445. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/test_xmlchemy.py +0 -0
  446. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/unitdata/__init__.py +0 -0
  447. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/unitdata/dml.py +0 -0
  448. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/unitdata/shape.py +0 -0
  449. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/oxml/unitdata/text.py +0 -0
  450. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/__init__.py +0 -0
  451. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/test_chart.py +0 -0
  452. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/test_coreprops.py +0 -0
  453. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/test_customprops.py +0 -0
  454. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/test_embeddedpackage.py +0 -0
  455. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/test_image.py +0 -0
  456. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/test_media.py +0 -0
  457. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/test_presentation.py +0 -0
  458. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/parts/test_slide.py +0 -0
  459. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/schema/__init__.py +0 -0
  460. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/schema/oxml_schema_validator.py +0 -0
  461. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/schema/test_schema_validity.py +0 -0
  462. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/__init__.py +0 -0
  463. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_anchor.py +0 -0
  464. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_animate.py +0 -0
  465. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_autoshape.py +0 -0
  466. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_base.py +0 -0
  467. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_connector.py +0 -0
  468. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_freeform.py +0 -0
  469. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_graphfrm.py +0 -0
  470. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_group.py +0 -0
  471. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_picture.py +0 -0
  472. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_placeholder.py +0 -0
  473. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/shapes/test_shapetree.py +0 -0
  474. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_accessibility.py +0 -0
  475. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_action.py +0 -0
  476. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_animation.py +0 -0
  477. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_api.py +0 -0
  478. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_audit.py +0 -0
  479. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_compose_from_spec.py +0 -0
  480. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_diagrams.py +0 -0
  481. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/calibriz.ttf +0 -0
  482. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/cdw-logo.eps +0 -0
  483. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/dummy.mp4 +0 -0
  484. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
  485. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
  486. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
  487. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
  488. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  489. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
  490. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
  491. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
  492. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  493. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  494. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  495. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  496. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  497. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  498. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  499. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  500. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  501. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  502. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  503. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  504. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  505. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  506. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  507. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  508. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  509. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  510. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  511. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  512. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  513. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  514. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  515. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  516. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  517. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  518. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
  519. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
  520. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
  521. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
  522. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/minimal.pptx +0 -0
  523. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/minimal_slide.xml +0 -0
  524. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/missing_rels_item.pptx +0 -0
  525. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/monty-truth.png +0 -0
  526. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/no-core-props.pptx +0 -0
  527. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/no-slides.pptx +0 -0
  528. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/presentation.xml +0 -0
  529. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/python-icon.jpeg +0 -0
  530. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/python-powered.png +0 -0
  531. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/python.bmp +0 -0
  532. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/slideLayout1.xml +0 -0
  533. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
  534. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
  535. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
  536. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
  537. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
  538. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-area.txt +0 -0
  539. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
  540. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
  541. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
  542. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
  543. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
  544. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
  545. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
  546. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
  547. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
  548. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
  549. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
  550. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
  551. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
  552. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
  553. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
  554. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x2-line.txt +0 -0
  555. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
  556. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
  557. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
  558. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
  559. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
  560. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
  561. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
  562. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
  563. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
  564. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
  565. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
  566. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
  567. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
  568. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
  569. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/cat-labels.txt +0 -0
  570. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
  571. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/default-notes.txt +0 -0
  572. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
  573. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/default-theme.txt +0 -0
  574. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/freeform.txt +0 -0
  575. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
  576. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/placeholders.txt +0 -0
  577. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
  578. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/relationships.txt +0 -0
  579. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
  580. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
  581. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/snippets/timing.txt +0 -0
  582. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/test.pptx +0 -0
  583. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_files/test_slides.pptx +0 -0
  584. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_formats.py +0 -0
  585. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_geometry.py +0 -0
  586. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_inherit.py +0 -0
  587. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_lint.py +0 -0
  588. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_lint_on_save.py +0 -0
  589. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_math.py +0 -0
  590. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_media.py +0 -0
  591. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_new_features.py +0 -0
  592. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_package.py +0 -0
  593. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_pathlike_inputs.py +0 -0
  594. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_powerpoint_strict_validation.py +0 -0
  595. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_presentation.py +0 -0
  596. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_render.py +0 -0
  597. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_render_slides_alias.py +0 -0
  598. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_section.py +0 -0
  599. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_shared.py +0 -0
  600. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_skill.py +0 -0
  601. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_slide.py +0 -0
  602. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_smart_art.py +0 -0
  603. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_svg_picture.py +0 -0
  604. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_table.py +0 -0
  605. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_table_extras.py +0 -0
  606. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_theme.py +0 -0
  607. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_transition_morph.py +0 -0
  608. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/test_util.py +0 -0
  609. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/text/__init__.py +0 -0
  610. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/text/test_fonts.py +0 -0
  611. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/text/test_layout.py +0 -0
  612. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/text/test_text.py +0 -0
  613. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/unitdata.py +0 -0
  614. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/unitutil/__init__.py +0 -0
  615. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/unitutil/cxml.py +0 -0
  616. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/unitutil/file.py +0 -0
  617. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tests/unitutil/mock.py +0 -0
  618. {python_pptx2-2.18.0 → python_pptx2-2.20.0}/tox.ini +0 -0
@@ -15,6 +15,29 @@ 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.20.0 (2026-08-30)
19
+ +++++++++++++++++++
20
+
21
+ Added
22
+ .....
23
+
24
+ * CSS three-digit hex shorthand (``#888`` → ``#888888``) is accepted
25
+ anywhere a color hex string is.
26
+
27
+ * **Agent-friendly kwargs, everywhere.** The alias/fuzzy normalization
28
+ introduced for ``add_text`` now covers the whole shape-creation
29
+ surface via a reusable ``@agent_friendly`` decorator: ``add_shape``
30
+ (``shape_type=``), ``add_picture`` / ``add_svg_picture`` /
31
+ ``add_movie`` (``image=`` / ``video=``), ``add_table``
32
+ (``columns=``), ``add_chart`` (``data=``, ``width=``/``height=`` for
33
+ ``cx``/``cy``), ``add_textbox``, ``add_connector`` (``x1/y1/x2/y2``),
34
+ ``add_group_shape``, ``add_ole_object``, and the six diagram recipes
35
+ (``items=`` / ``stages=`` / ``nodes=`` / ``colour=`` ...). All of
36
+ them accept ``x``/``y``/``w``/``h`` geometry keywords, substitute
37
+ synonyms without allowing contradictions, and raise ``TypeErrors``
38
+ that list every accepted argument.
39
+
40
+
18
41
  2.18.0 (2026-08-30)
19
42
  +++++++++++++++++++
20
43
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.18.0
3
+ Version: 2.20.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
@@ -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.18.0"
60
+ __version__ = "2.20.0"
61
61
 
62
62
  sys.modules["pptx2.exceptions"] = exceptions
63
63
  del sys
@@ -23,23 +23,21 @@ caller bug and still raises.
23
23
  from __future__ import annotations
24
24
 
25
25
  import difflib
26
+ import functools
27
+ import inspect
26
28
 
27
29
  # Canonical kwarg -> spellings other ecosystems use for the same thing.
28
30
  SYNONYMS: dict[str, tuple[str, ...]] = {
29
31
  "text": ("txt", "string", "content", "label", "caption", "value"),
30
- "font": ("font_family", "fontfamily", "font_name", "fontname", "typeface", "family", "face"),
32
+ "font": (
33
+ "font_family", "fontfamily", "font_name", "fontname", "typeface", "family", "face",
34
+ ),
31
35
  "size_pt": ("size", "font_size", "fontsize", "pt_size", "point_size"),
32
36
  "align": ("halign", "ha", "horizontal_align", "horizontal_alignment", "text_align", "text_alignment"),
33
37
  "anchor": ("valign", "va", "vertical_align", "vertical_alignment", "v_align"),
34
38
  "color": (
35
- "colour",
36
- "font_color",
37
- "font_colour",
38
- "text_color",
39
- "text_colour",
40
- "fg_color",
41
- "line_color",
42
- "stroke_color",
39
+ "colour", "font_color", "font_colour", "text_color", "text_colour",
40
+ "fg_color", "line_color", "stroke_color",
43
41
  ),
44
42
  "weight_pt": ("weight", "line_weight", "width_pt", "stroke_width"),
45
43
  "bold": ("font_bold", "is_bold"),
@@ -53,6 +51,8 @@ SYNONYMS: dict[str, tuple[str, ...]] = {
53
51
  "height": ("h",),
54
52
  "start": ("begin", "start_point", "start_shape", "from", "source"),
55
53
  "end": ("to", "end_point", "end_shape", "target"),
54
+ "image_file": ("image", "img", "path", "file", "filename", "image_path", "file_path"),
55
+ "steps": ("items", "stages", "nodes", "boxes"),
56
56
  }
57
57
 
58
58
  _ALIAS_TO_CANONICAL: dict[str, str] = {
@@ -89,17 +89,28 @@ def absorb_agent_kwargs(
89
89
  method: str,
90
90
  kwargs: dict,
91
91
  canonical_names: "list[str] | tuple[str, ...]",
92
+ extra_synonyms: "dict[str, tuple[str, ...]] | None" = None,
93
+ pass_through_unknown: bool = False,
92
94
  ) -> dict:
93
95
  """Map alias / near-miss *kwargs* onto canonical names; raise else.
94
96
 
95
97
  *canonical_names* lists the kwargs the method actually understands
96
- (including any already-bound explicit parameters). Returns a dict
97
- containing only canonical names. A synonym that matches a canonical
98
- the caller already supplied with a *different* value raises
98
+ (including any already-bound explicit parameters). *extra_synonyms*
99
+ adds call-site-specific spellings (e.g. ``{"cx": ("width", "w")}``
100
+ for ``add_chart``). Returns a dict containing only canonical names
101
+ — unless *pass_through_unknown* is set (for functions that accept
102
+ ``**kwargs`` themselves), in which case unabsorbable names are
103
+ passed through verbatim. A synonym that matches a canonical the
104
+ caller already supplied with a *different* value raises
99
105
  ``TypeError``; equal values are fine.
100
106
  """
101
107
  known = list(canonical_names)
102
- alias_space = [a for a in _ALIAS_TO_CANONICAL if a not in known]
108
+ alias_map = dict(_ALIAS_TO_CANONICAL)
109
+ if extra_synonyms:
110
+ for canonical, aliases in extra_synonyms.items():
111
+ for alias in aliases:
112
+ alias_map[alias] = canonical
113
+ alias_space = [a for a in alias_map if a not in known]
103
114
  candidates = known + alias_space
104
115
 
105
116
  resolved: dict = {}
@@ -112,7 +123,7 @@ def absorb_agent_kwargs(
112
123
  )
113
124
  resolved[name] = value
114
125
  continue
115
- canonical = _ALIAS_TO_CANONICAL.get(name)
126
+ canonical = alias_map.get(name)
116
127
  if canonical is not None and canonical not in known:
117
128
  # The alias resolves to an argument this method doesn't take
118
129
  # (e.g. ``to=`` on add_text); fall through to the fuzzy/error
@@ -121,6 +132,9 @@ def absorb_agent_kwargs(
121
132
  if canonical is None:
122
133
  canonical = _did_you_mean(name, candidates, known)
123
134
  if canonical is None:
135
+ if pass_through_unknown:
136
+ resolved[name] = value
137
+ continue
124
138
  raise TypeError(
125
139
  f"{method}(): got an unexpected keyword argument {name!r}. "
126
140
  f"Accepted: {', '.join(sorted(known))} "
@@ -134,3 +148,63 @@ def absorb_agent_kwargs(
134
148
  )
135
149
  resolved[canonical] = value
136
150
  return resolved
151
+
152
+
153
+ def agent_friendly(extra_synonyms=None):
154
+ """Decorator: make a method/function absorb alias and fuzzy kwargs.
155
+
156
+ Wrap any public helper so its keyword arguments get the full
157
+ treatment from :func:`absorb_agent_kwargs` — global synonyms,
158
+ per-call *extra_synonyms*, fuzzy near-misses, and didactic errors —
159
+ without touching its body. Usable bare (``@agent_friendly``) or
160
+ with per-method synonyms. A keyword that repeats a value already
161
+ bound positionally (through a synonym or exact name) is dropped when
162
+ equal and raises ``TypeError`` when it contradicts::
163
+
164
+ @agent_friendly({"cx": ("width", "w"), "cy": ("height", "h")})
165
+ def add_chart(self, x, y, cx, cy, chart_type, chart_data): ...
166
+ """
167
+ if callable(extra_synonyms): # used bare: @agent_friendly above def
168
+ return _decorate_friendly(extra_synonyms, None)
169
+
170
+ def decorator(func):
171
+ return _decorate_friendly(func, extra_synonyms)
172
+
173
+ return decorator
174
+
175
+
176
+ def _decorate_friendly(func, extra_synonyms):
177
+ sig = inspect.signature(func)
178
+ has_self = bool(sig.parameters) and next(iter(sig.parameters)) in ("self", "cls")
179
+ param_list = [
180
+ p
181
+ for p in sig.parameters.values()
182
+ if p.kind not in (inspect.Parameter.VAR_POSITIONAL, inspect.Parameter.VAR_KEYWORD)
183
+ and p.name not in ("self", "cls")
184
+ ]
185
+ known = tuple(p.name for p in param_list)
186
+ takes_var_kw = any(
187
+ p.kind == inspect.Parameter.VAR_KEYWORD for p in sig.parameters.values()
188
+ )
189
+
190
+ @functools.wraps(func)
191
+ def wrapper(*args, **kwargs):
192
+ if kwargs:
193
+ kwargs = absorb_agent_kwargs(
194
+ func.__name__, kwargs, known, extra_synonyms,
195
+ pass_through_unknown=takes_var_kw,
196
+ )
197
+ offset = 1 if has_self else 0
198
+ for i, p in enumerate(param_list[: len(args) - offset]):
199
+ if p.name in kwargs:
200
+ if kwargs[p.name] != args[offset + i]:
201
+ raise TypeError(
202
+ f"{func.__name__}(): {p.name} given positionally "
203
+ f"({args[offset + i]!r}) and by keyword "
204
+ f"({kwargs[p.name]!r}) with different values"
205
+ )
206
+ del kwargs[p.name]
207
+ return func(*args, **kwargs)
208
+
209
+ return wrapper
210
+
@@ -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 "
@@ -32,6 +32,7 @@ import math
32
32
  from dataclasses import dataclass, field
33
33
  from typing import TYPE_CHECKING, Any, Sequence
34
34
 
35
+ from pptx2._agent_friendly import agent_friendly
35
36
  from pptx2.enum.shapes import MSO_SHAPE
36
37
  from pptx2.geometry import BBox
37
38
  from pptx2.util import Emu, Inches, Pt
@@ -245,6 +246,14 @@ def _card(
245
246
  # ----------------------------------------------------------------------------- pipelines
246
247
 
247
248
 
249
+ @agent_friendly(
250
+ {
251
+ "text_color": ("color", "colour", "fg_color", "text_colour"),
252
+ "accent": ("accent_color", "primary", "primary_color"),
253
+ "fill": ("fill_color", "background", "bg"),
254
+ }
255
+
256
+ )
248
257
  def horizontal_pipeline(
249
258
  slide,
250
259
  bbox: BBox,
@@ -312,6 +321,14 @@ def horizontal_pipeline(
312
321
  return PipelineResult(cards=cards, arrows=arrows)
313
322
 
314
323
 
324
+ @agent_friendly(
325
+ {
326
+ "text_color": ("color", "colour", "fg_color", "text_colour"),
327
+ "accent": ("accent_color", "primary", "primary_color"),
328
+ "fill": ("fill_color", "background", "bg"),
329
+ }
330
+
331
+ )
315
332
  def vertical_pipeline(
316
333
  slide,
317
334
  bbox: BBox,
@@ -371,6 +388,15 @@ def vertical_pipeline(
371
388
  # ----------------------------------------------------------------------------- hub
372
389
 
373
390
 
391
+ @agent_friendly(
392
+ {
393
+ "text_color": ("color", "colour", "fg_color", "text_colour"),
394
+ "accent": ("accent_color", "primary", "primary_color"),
395
+ "fill": ("fill_color", "background", "bg"),
396
+ "spokes": ("items", "stages", "nodes"),
397
+ "centre": ("center", "hub", "hub_label", "title"),
398
+ }
399
+ )
374
400
  def hub_and_spoke(
375
401
  slide,
376
402
  bbox: BBox,
@@ -479,6 +505,14 @@ def hub_and_spoke(
479
505
  # ----------------------------------------------------------------------------- cycle
480
506
 
481
507
 
508
+ @agent_friendly(
509
+ {
510
+ "text_color": ("color", "colour", "fg_color", "text_colour"),
511
+ "accent": ("accent_color", "primary", "primary_color"),
512
+ "fill": ("fill_color", "background", "bg"),
513
+ }
514
+
515
+ )
482
516
  def cycle(
483
517
  slide,
484
518
  bbox: BBox,
@@ -553,6 +587,15 @@ def cycle(
553
587
  # ----------------------------------------------------------------------------- decision tree
554
588
 
555
589
 
590
+ @agent_friendly(
591
+ {
592
+ "text_color": ("color", "colour", "fg_color", "text_colour"),
593
+ "accent": ("accent_color", "primary", "primary_color"),
594
+ "fill": ("fill_color", "background", "bg"),
595
+ "branches": ("items", "nodes", "children", "steps"),
596
+ "root": ("root_label", "title", "center"),
597
+ }
598
+ )
556
599
  def decision_tree(
557
600
  slide,
558
601
  bbox: BBox,
@@ -675,6 +718,14 @@ def decision_tree(
675
718
  # ----------------------------------------------------------------------------- columns
676
719
 
677
720
 
721
+ @agent_friendly(
722
+ {
723
+ "text_color": ("color", "colour", "fg_color", "text_colour"),
724
+ "accent": ("accent_color", "primary", "primary_color"),
725
+ "fill": ("fill_color", "background", "bg"),
726
+ "columns": ("items", "cols", "sections"),
727
+ }
728
+ )
678
729
  def comparison_columns(
679
730
  slide,
680
731
  bbox: BBox,
@@ -34,6 +34,7 @@ from pptx2.shapes.placeholder import (
34
34
  TablePlaceholder,
35
35
  )
36
36
  from pptx2.shared import ParentedElementProxy
37
+ from pptx2._agent_friendly import agent_friendly
37
38
  from pptx2.util import Emu, _coerce_emu, lazyproperty
38
39
 
39
40
  if TYPE_CHECKING:
@@ -567,6 +568,7 @@ class _BaseGroupShapes(_BaseShapes):
567
568
  super(_BaseGroupShapes, self).__init__(grpSp, parent)
568
569
  self._grpSp = grpSp
569
570
 
571
+ @agent_friendly({"cx": ("width", "w"), "cy": ("height", "h"), "chart_data": ("data", "chartdata"), "chart_type": ("type", "charttype")})
570
572
  def add_chart(
571
573
  self,
572
574
  chart_type: XL_CHART_TYPE,
@@ -601,6 +603,7 @@ class _BaseGroupShapes(_BaseShapes):
601
603
  _apply_horizontal_bar_default(shape, chart_type)
602
604
  return cast("Chart", shape)
603
605
 
606
+ @agent_friendly({"connector_type": ("type", "kind", "connector"), "begin_x": ("x1", "start_x"), "begin_y": ("y1", "start_y"), "end_x": ("x2", "to_x"), "end_y": ("y2", "to_y")})
604
607
  def add_connector(
605
608
  self,
606
609
  connector_type: MSO_CONNECTOR_TYPE,
@@ -621,6 +624,7 @@ class _BaseGroupShapes(_BaseShapes):
621
624
  self._recalculate_extents()
622
625
  return cast(Connector, self._shape_factory(cxnSp))
623
626
 
627
+ @agent_friendly({"shapes": ("items", "members")})
624
628
  def add_group_shape(self, shapes: Iterable[BaseShape] = ()) -> GroupShape:
625
629
  """Return a |GroupShape| object newly appended to this shape tree.
626
630
 
@@ -639,6 +643,7 @@ class _BaseGroupShapes(_BaseShapes):
639
643
  grpSp.recalculate_extents()
640
644
  return cast(GroupShape, self._shape_factory(grpSp))
641
645
 
646
+ @agent_friendly
642
647
  def add_ole_object(
643
648
  self,
644
649
  object_file: str | IO[bytes],
@@ -700,6 +705,7 @@ class _BaseGroupShapes(_BaseShapes):
700
705
  self._recalculate_extents()
701
706
  return cast(GraphicFrame, self._shape_factory(graphicFrame))
702
707
 
708
+ @agent_friendly
703
709
  def add_picture(
704
710
  self,
705
711
  image_file: str | os.PathLike[str] | IO[bytes],
@@ -762,6 +768,7 @@ class _BaseGroupShapes(_BaseShapes):
762
768
  picture.top = Emu(ct + new_top)
763
769
  return picture
764
770
 
771
+ @agent_friendly({"svg_file": ("svg", "svg_path", "svg_source")})
765
772
  def add_svg_picture(
766
773
  self,
767
774
  svg_file,
@@ -825,6 +832,7 @@ class _BaseGroupShapes(_BaseShapes):
825
832
  self._recalculate_extents()
826
833
  return cast(Picture, self._shape_factory(pic))
827
834
 
835
+ @agent_friendly({"autoshape_type_id": ("shape_type", "autoshape_type", "shape", "preset_shape")})
828
836
  def add_shape(
829
837
  self,
830
838
  autoshape_type_id: MSO_SHAPE,
@@ -863,6 +871,7 @@ class _BaseGroupShapes(_BaseShapes):
863
871
  shape.top = Emu(ct + new_top)
864
872
  return shape
865
873
 
874
+ @agent_friendly
866
875
  def add_textbox(
867
876
  self,
868
877
  left: Length,
@@ -1498,6 +1507,7 @@ class _BaseGroupShapes(_BaseShapes):
1498
1507
  sp = self._spTree.add_textbox(id_, name, x, y, cx, cy)
1499
1508
  return sp
1500
1509
 
1510
+ @agent_friendly({"cols": ("columns", "num_cols", "col_count"), "rows": ("num_rows", "row_count")})
1501
1511
  def add_table(
1502
1512
  self,
1503
1513
  rows: int,
@@ -1549,6 +1559,7 @@ class _BaseGroupShapes(_BaseShapes):
1549
1559
  tbl.vert_banding = False
1550
1560
  return shape
1551
1561
 
1562
+ @agent_friendly({"movie_file": ("video", "video_file", "movie", "path", "file")})
1552
1563
  def add_movie(
1553
1564
  self,
1554
1565
  movie_file: str | IO[bytes],
@@ -452,9 +452,13 @@ end. `move` raises `IndexError` out of range; `reorder` raises
452
452
 
453
453
  ### Forgiving keyword arguments
454
454
 
455
- The one-call helpers (`add_text`, `add_equation`, `add_arrow`) absorb
456
- cross-library and near-miss kwargs, so the `font_family=` / `halign=` /
457
- `fontsize=` / `colour` / `x,y,w,h` / `begin,to` habits of other
458
- ecosystems just work. Synonyms substitute, never contradict (two
459
- different values for the same logical argument still raise), and a
460
- truly unknown kwarg raises a `TypeError` listing every accepted name.
455
+ Every shape helper (`add_text`, `add_shape`, `add_picture`,
456
+ `add_table`, `add_chart`, `add_textbox`, `add_connector`, `add_movie`,
457
+ `add_arrow`, `add_equation`, ...) and the diagram recipes
458
+ (`horizontal_pipeline`, `hub_and_spoke`, ...) absorb cross-library and
459
+ near-miss kwargs: `font_family=`, `halign=`/`valign=`, `fontsize=`,
460
+ `colour`, `x,y,w,h` geometry keywords, `shape_type=`, `image=`,
461
+ `columns=`, `data=`, `begin=`/`to=`, `items=`/`nodes=` ... Synonyms
462
+ substitute, never contradict (two different values for the same
463
+ logical argument still raise), and a truly unknown kwarg raises a
464
+ `TypeError` listing every accepted name.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.18.0
3
+ Version: 2.20.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
@@ -180,6 +180,66 @@ class DescribeAddArrowSynonyms:
180
180
  assert arrow.begin_x == Inches(0)
181
181
 
182
182
 
183
+ class DescribeAgentFriendlyShapeApi:
184
+ """Every shapes.add_* absorbs cross-library kwargs, not just add_text."""
185
+
186
+ def it_add_shape_takes_shape_type_and_xywh(self, slide):
187
+ rect = slide.shapes.add_shape(
188
+ shape_type=MSO_SHAPE.RECTANGLE,
189
+ x=Inches(1), y=Inches(1), w=Inches(2), h=Inches(1),
190
+ )
191
+ assert (rect.left, rect.top) == (Inches(1), Inches(1))
192
+
193
+ def it_add_picture_takes_image_and_xywh(self, slide, tmp_path):
194
+ import struct, zlib
195
+
196
+ def _png(path):
197
+ def chunk(tag, data):
198
+ c = struct.pack(">I", len(data)) + tag + data
199
+ return c + struct.pack(">I", zlib.crc32(tag + data) & 0xFFFFFFFF)
200
+ ihdr = struct.pack(">IIBBBBB", 1, 1, 8, 2, 0, 0, 0)
201
+ raw = b"\x00\xff\x00\x00"
202
+ blob = (b"\x89PNG\r\n\x1a\n" + chunk(b"IHDR", ihdr)
203
+ + chunk(b"IDAT", zlib.compress(raw)) + chunk(b"IEND", b""))
204
+ path.write_bytes(blob)
205
+
206
+ pic_path = tmp_path / "dot.png"
207
+ _png(pic_path)
208
+ pic = slide.shapes.add_picture(
209
+ image=str(pic_path), x=Inches(1), y=Inches(1), w=Inches(1), h=Inches(1)
210
+ )
211
+ assert pic.left == Inches(1)
212
+
213
+ def it_add_table_takes_columns_and_xywh(self, slide):
214
+ gf = slide.shapes.add_table(
215
+ rows=2, columns=3, x=Inches(1), y=Inches(1), w=Inches(6), h=Inches(2)
216
+ )
217
+ assert len(gf.table.columns) == 3
218
+
219
+ def it_add_textbox_takes_xywh(self, slide):
220
+ tb = slide.shapes.add_textbox(x=Inches(2), y=Inches(2), w=Inches(3), h=Inches(1))
221
+ assert tb.top == Inches(2)
222
+
223
+ def it_add_connector_takes_x1y1x2y2(self, slide):
224
+ cxn = slide.shapes.add_connector(
225
+ MSO_CONNECTOR_TYPE.STRAIGHT,
226
+ x1=Inches(0), y1=Inches(0), x2=Inches(2), y2=Inches(2),
227
+ )
228
+ assert cxn.begin_x == Inches(0)
229
+
230
+ def it_unknown_kwarg_error_lists_accepted_names(self, slide):
231
+ with pytest.raises(TypeError, match="Accepted"):
232
+ slide.shapes.add_textbox(Inches(0), Inches(0), Inches(1), Inches(1), bogus=1)
233
+
234
+ def it_diagram_recipes_absorb_item_and_colour_synonyms(self, slide):
235
+ from pptx2 import BBox
236
+ from pptx2.diagrams import horizontal_pipeline
237
+
238
+ horizontal_pipeline(
239
+ slide, BBox.from_inches(0.5, 1, 12, 1.5), items=["a", "b"], colour="#0D0D0D"
240
+ )
241
+
242
+
183
243
  class DescribeSetTextPreservingFormat:
184
244
  def it_preserves_font_attributes_across_replacement(self, slide):
185
245
  tx = slide.shapes.add_text(
@@ -368,3 +428,12 @@ class DescribeSlideHelpers:
368
428
  def it_rejects_unknown_near_type_in_find_empty_region(self, slide):
369
429
  with pytest.raises(TypeError):
370
430
  slide.find_empty_region(near="not-a-shape")
431
+
432
+
433
+ class DescribeCssHexShorthand:
434
+ def it_expands_three_digit_hex(self, slide):
435
+ rect = slide.shapes.add_shape(
436
+ MSO_SHAPE.RECTANGLE, Inches(0), Inches(0), Inches(2), Inches(1)
437
+ )
438
+ rect.fill_hex("#888")
439
+ assert str(rect.fill.fore_color.rgb) == "888888"
File without changes
File without changes
File without changes