python-pptx2 2.17.0__tar.gz → 2.18.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.17.0 → python_pptx2-2.18.0}/HISTORY.rst +19 -0
  2. {python_pptx2-2.17.0/src/python_pptx2.egg-info → python_pptx2-2.18.0}/PKG-INFO +1 -1
  3. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/__init__.py +1 -1
  4. python_pptx2-2.18.0/src/pptx2/_agent_friendly.py +136 -0
  5. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/shapetree.py +213 -46
  6. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/basics.md +9 -0
  7. {python_pptx2-2.17.0 → python_pptx2-2.18.0/src/python_pptx2.egg-info}/PKG-INFO +1 -1
  8. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/SOURCES.txt +1 -0
  9. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_shape_helpers.py +64 -0
  10. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/LICENSE +0 -0
  11. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/MANIFEST.in +0 -0
  12. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/README.rst +0 -0
  13. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/act-action.feature +0 -0
  14. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/act-hyperlink.feature +0 -0
  15. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-axis-props.feature +0 -0
  16. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-axistitle-props.feature +0 -0
  17. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-category-access.feature +0 -0
  18. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-category-props.feature +0 -0
  19. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-chart.feature +0 -0
  20. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-charttitle-props.feature +0 -0
  21. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-data-props.feature +0 -0
  22. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-datalabels.feature +0 -0
  23. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-gridlines-props.feature +0 -0
  24. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-legend-access.feature +0 -0
  25. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-legend-props.feature +0 -0
  26. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-marker-props.feature +0 -0
  27. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-plot-props.feature +0 -0
  28. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-point-access.feature +0 -0
  29. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-point-props.feature +0 -0
  30. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-replace-data.feature +0 -0
  31. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-series.feature +0 -0
  32. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/cht-ticklabels-props.feature +0 -0
  33. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/dml-color.feature +0 -0
  34. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/dml-effect.feature +0 -0
  35. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/dml-fill.feature +0 -0
  36. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/dml-line.feature +0 -0
  37. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/environment.py +0 -0
  38. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/ph-inherit-props.feature +0 -0
  39. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/ph-insert-shape.feature +0 -0
  40. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/ph-phfmt-props.feature +0 -0
  41. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/ph-placeholder-props.feature +0 -0
  42. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/prs-coreprops.feature +0 -0
  43. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/prs-default-template.feature +0 -0
  44. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/prs-open-save.feature +0 -0
  45. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/prs-presentation-props.feature +0 -0
  46. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-autoshape.feature +0 -0
  47. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-connector.feature +0 -0
  48. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-freeform.feature +0 -0
  49. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-graphicframe.feature +0 -0
  50. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-groupshape.feature +0 -0
  51. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-movie-props.feature +0 -0
  52. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-picture.feature +0 -0
  53. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-placeholder.feature +0 -0
  54. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-shapes.feature +0 -0
  55. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/shp-shared.feature +0 -0
  56. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/sld-background.feature +0 -0
  57. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/sld-slide.feature +0 -0
  58. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/sld-slides.feature +0 -0
  59. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/action.py +0 -0
  60. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/axis.py +0 -0
  61. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/background.py +0 -0
  62. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/category.py +0 -0
  63. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/chart.py +0 -0
  64. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/chartdata.py +0 -0
  65. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/color.py +0 -0
  66. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/coreprops.py +0 -0
  67. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/datalabel.py +0 -0
  68. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/effect.py +0 -0
  69. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/fill.py +0 -0
  70. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/font.py +0 -0
  71. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/font_color.py +0 -0
  72. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/helpers.py +0 -0
  73. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/legend.py +0 -0
  74. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/line.py +0 -0
  75. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/picture.py +0 -0
  76. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/placeholder.py +0 -0
  77. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/plot.py +0 -0
  78. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/presentation.py +0 -0
  79. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/series.py +0 -0
  80. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/shape.py +0 -0
  81. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/shapes.py +0 -0
  82. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/slide.py +0 -0
  83. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/slides.py +0 -0
  84. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/table.py +0 -0
  85. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/72-dpi.tiff +0 -0
  86. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
  87. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/act-props.pptm +0 -0
  88. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/calibriz.ttf +0 -0
  89. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
  90. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-category-access.pptx +0 -0
  91. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
  92. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
  93. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-charts.pptx +0 -0
  94. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
  95. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  96. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
  97. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-legend.pptx +0 -0
  98. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
  99. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
  100. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-point-access.pptx +0 -0
  101. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-point-props.pptx +0 -0
  102. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
  103. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-series.pptx +0 -0
  104. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  105. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/dml-effect.pptx +0 -0
  106. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/dml-fill.pptx +0 -0
  107. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/dml-line.pptx +0 -0
  108. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/ext-rels.pptx +0 -0
  109. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
  110. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
  111. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
  112. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
  113. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  114. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
  115. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
  116. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
  117. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  118. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  119. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  120. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  121. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  122. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  123. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  124. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  125. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  126. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  127. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  128. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  129. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  130. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  131. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  132. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  133. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  134. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  135. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  136. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  137. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  138. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  139. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  140. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  141. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  142. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  143. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
  144. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
  145. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
  146. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
  147. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/font-color.pptx +0 -0
  148. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
  149. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/just-two-mice.png +0 -0
  150. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
  151. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/minimal.pptx +0 -0
  152. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/monty-truth.png +0 -0
  153. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
  154. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/mst-shapes.pptx +0 -0
  155. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  156. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
  157. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  158. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  159. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/pic.emf +0 -0
  160. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
  161. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/prs-notes.pptx +0 -0
  162. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/prs-properties.pptx +0 -0
  163. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
  164. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/python-icon.jpeg +0 -0
  165. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/python-powered.png +0 -0
  166. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/python.bmp +0 -0
  167. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
  168. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  169. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  170. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  171. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-common-props.pptx +0 -0
  172. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
  173. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
  174. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  175. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  176. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-freeform.pptx +0 -0
  177. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
  178. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
  179. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-picture.pptx +0 -0
  180. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  181. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/shp-shapes.pptx +0 -0
  182. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-background.pptx +0 -0
  183. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-blank.pptx +0 -0
  184. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-notes.pptx +0 -0
  185. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-slide.pptx +0 -0
  186. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sld-slides.pptx +0 -0
  187. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/sonic.gif +0 -0
  188. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/tbl-cell.pptx +0 -0
  189. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  190. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/test.pptx +0 -0
  191. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
  192. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-font-props.pptx +0 -0
  193. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
  194. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  195. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
  196. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/test_files/txt-text.pptx +0 -0
  197. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/text.py +0 -0
  198. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/steps/text_frame.py +0 -0
  199. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/tbl-cell.feature +0 -0
  200. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/tbl-column.feature +0 -0
  201. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/tbl-table.feature +0 -0
  202. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-fit-text.feature +0 -0
  203. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-font-color.feature +0 -0
  204. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-font-props.feature +0 -0
  205. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-paragraph.feature +0 -0
  206. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-text.feature +0 -0
  207. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/features/txt-textframe.feature +0 -0
  208. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/pyproject.toml +0 -0
  209. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/setup.cfg +0 -0
  210. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_color.py +0 -0
  211. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_slide_importer.py +0 -0
  212. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_svg.py +0 -0
  213. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_template_applier.py +0 -0
  214. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/_textstyle.py +0 -0
  215. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/accessibility.py +0 -0
  216. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/action.py +0 -0
  217. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/animation.py +0 -0
  218. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/api.py +0 -0
  219. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/audit.py +0 -0
  220. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/__init__.py +0 -0
  221. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/analytics.py +0 -0
  222. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/axis.py +0 -0
  223. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/category.py +0 -0
  224. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/chart.py +0 -0
  225. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/data.py +0 -0
  226. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/datalabel.py +0 -0
  227. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/legend.py +0 -0
  228. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/marker.py +0 -0
  229. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/palettes.py +0 -0
  230. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/plot.py +0 -0
  231. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/point.py +0 -0
  232. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/quick_layouts.py +0 -0
  233. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/series.py +0 -0
  234. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/xlsx.py +0 -0
  235. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/chart/xmlwriter.py +0 -0
  236. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/compose/__init__.py +0 -0
  237. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/compose/from_spec.py +0 -0
  238. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/__init__.py +0 -0
  239. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/components.py +0 -0
  240. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/figures.py +0 -0
  241. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/layout.py +0 -0
  242. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/recipes.py +0 -0
  243. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/style.py +0 -0
  244. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/design/tokens.py +0 -0
  245. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/diagrams.py +0 -0
  246. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/__init__.py +0 -0
  247. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/chtfmt.py +0 -0
  248. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/color.py +0 -0
  249. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/effect.py +0 -0
  250. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/fill.py +0 -0
  251. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/line.py +0 -0
  252. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/picture.py +0 -0
  253. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/dml/three_d.py +0 -0
  254. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/__init__.py +0 -0
  255. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/action.py +0 -0
  256. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/animation.py +0 -0
  257. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/base.py +0 -0
  258. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/chart.py +0 -0
  259. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/dml.py +0 -0
  260. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/lang.py +0 -0
  261. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/presentation.py +0 -0
  262. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/shapes.py +0 -0
  263. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/enum/text.py +0 -0
  264. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/exc.py +0 -0
  265. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/formats.py +0 -0
  266. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/geometry.py +0 -0
  267. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/inherit.py +0 -0
  268. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/lint.py +0 -0
  269. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/math.py +0 -0
  270. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/mathml2omml.py +0 -0
  271. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/media.py +0 -0
  272. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/__init__.py +0 -0
  273. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/constants.py +0 -0
  274. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/oxml.py +0 -0
  275. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/package.py +0 -0
  276. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/packuri.py +0 -0
  277. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/serialized.py +0 -0
  278. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/shared.py +0 -0
  279. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/opc/spec.py +0 -0
  280. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/__init__.py +0 -0
  281. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/action.py +0 -0
  282. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/__init__.py +0 -0
  283. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/axis.py +0 -0
  284. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/chart.py +0 -0
  285. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
  286. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/legend.py +0 -0
  287. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/marker.py +0 -0
  288. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/plot.py +0 -0
  289. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/series.py +0 -0
  290. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/chart/shared.py +0 -0
  291. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/coreprops.py +0 -0
  292. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/customprops.py +0 -0
  293. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/__init__.py +0 -0
  294. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/color.py +0 -0
  295. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/effect.py +0 -0
  296. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/fill.py +0 -0
  297. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/line.py +0 -0
  298. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/dml/three_d.py +0 -0
  299. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/ns.py +0 -0
  300. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/presentation.py +0 -0
  301. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
  302. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
  303. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/connector.py +0 -0
  304. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
  305. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
  306. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/picture.py +0 -0
  307. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/shapes/shared.py +0 -0
  308. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/simpletypes.py +0 -0
  309. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/slide.py +0 -0
  310. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/table.py +0 -0
  311. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/text.py +0 -0
  312. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/theme.py +0 -0
  313. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/oxml/xmlchemy.py +0 -0
  314. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/package.py +0 -0
  315. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/__init__.py +0 -0
  316. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/chart.py +0 -0
  317. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/coreprops.py +0 -0
  318. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/customprops.py +0 -0
  319. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/diagram.py +0 -0
  320. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/embeddedpackage.py +0 -0
  321. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/image.py +0 -0
  322. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/media.py +0 -0
  323. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/presentation.py +0 -0
  324. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/parts/slide.py +0 -0
  325. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/presentation.py +0 -0
  326. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/py.typed +0 -0
  327. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/render.py +0 -0
  328. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/section.py +0 -0
  329. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/__init__.py +0 -0
  330. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/autoshape.py +0 -0
  331. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/base.py +0 -0
  332. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/connector.py +0 -0
  333. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/freeform.py +0 -0
  334. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/graphfrm.py +0 -0
  335. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/group.py +0 -0
  336. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/picture.py +0 -0
  337. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shapes/placeholder.py +0 -0
  338. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/shared.py +0 -0
  339. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/SKILL.md +0 -0
  340. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/__init__.py +0 -0
  341. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/__main__.py +0 -0
  342. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/animations.md +0 -0
  343. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/charts.md +0 -0
  344. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/compose.md +0 -0
  345. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/design.md +0 -0
  346. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/effects.md +0 -0
  347. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
  348. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
  349. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/lint.md +0 -0
  350. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/math.md +0 -0
  351. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/picture-effects.md +0 -0
  352. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/render.md +0 -0
  353. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/smart-art.md +0 -0
  354. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
  355. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/tables.md +0 -0
  356. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/theme.md +0 -0
  357. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/three-d.md +0 -0
  358. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/skill/references/transitions.md +0 -0
  359. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/slide.py +0 -0
  360. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/smart_art.py +0 -0
  361. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/spec.py +0 -0
  362. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/table.py +0 -0
  363. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/table_styles.py +0 -0
  364. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/default.pptx +0 -0
  365. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/docx-icon.emf +0 -0
  366. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/generic-icon.emf +0 -0
  367. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/notes.xml +0 -0
  368. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/notesMaster.xml +0 -0
  369. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/pptx-icon.emf +0 -0
  370. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/theme.xml +0 -0
  371. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
  372. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/text/__init__.py +0 -0
  373. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/text/fonts.py +0 -0
  374. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/text/layout.py +0 -0
  375. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/text/text.py +0 -0
  376. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/theme.py +0 -0
  377. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/types.py +0 -0
  378. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/pptx2/util.py +0 -0
  379. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
  380. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/entry_points.txt +0 -0
  381. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/requires.txt +0 -0
  382. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/src/python_pptx2.egg-info/top_level.txt +0 -0
  383. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/__init__.py +0 -0
  384. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/__init__.py +0 -0
  385. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_analytics.py +0 -0
  386. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_axis.py +0 -0
  387. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_category.py +0 -0
  388. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_chart.py +0 -0
  389. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_chart_toggles.py +0 -0
  390. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_collision_strategy.py +0 -0
  391. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_data.py +0 -0
  392. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_datalabel.py +0 -0
  393. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_legend.py +0 -0
  394. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_marker.py +0 -0
  395. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_palettes.py +0 -0
  396. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_plot.py +0 -0
  397. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_point.py +0 -0
  398. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_quick_layouts.py +0 -0
  399. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_series.py +0 -0
  400. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_xlsx.py +0 -0
  401. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/chart/test_xmlwriter.py +0 -0
  402. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/__init__.py +0 -0
  403. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_components.py +0 -0
  404. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_figures.py +0 -0
  405. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_layout.py +0 -0
  406. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_recipes.py +0 -0
  407. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_style.py +0 -0
  408. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/design/test_tokens.py +0 -0
  409. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/__init__.py +0 -0
  410. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_chtfmt.py +0 -0
  411. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_color.py +0 -0
  412. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_effect.py +0 -0
  413. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_fill.py +0 -0
  414. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_line.py +0 -0
  415. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/dml/test_three_d.py +0 -0
  416. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/enum/__init__.py +0 -0
  417. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/enum/test_base.py +0 -0
  418. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/enum/test_shapes.py +0 -0
  419. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/__init__.py +0 -0
  420. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/round_trip.py +0 -0
  421. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_add_slide_layout.py +0 -0
  422. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_apply_template.py +0 -0
  423. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_compose_package.py +0 -0
  424. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_import_slide.py +0 -0
  425. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/integration/test_round_trip.py +0 -0
  426. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/__init__.py +0 -0
  427. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/test_oxml.py +0 -0
  428. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/test_package.py +0 -0
  429. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/test_packuri.py +0 -0
  430. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/opc/test_serialized.py +0 -0
  431. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/__init__.py +0 -0
  432. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/__init__.py +0 -0
  433. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/test_autoshape.py +0 -0
  434. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
  435. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/test_groupshape.py +0 -0
  436. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/shapes/test_picture.py +0 -0
  437. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test___init__.py +0 -0
  438. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_dml.py +0 -0
  439. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_ns.py +0 -0
  440. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_presentation.py +0 -0
  441. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_simpletypes.py +0 -0
  442. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_slide.py +0 -0
  443. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_table.py +0 -0
  444. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_theme.py +0 -0
  445. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/test_xmlchemy.py +0 -0
  446. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/unitdata/__init__.py +0 -0
  447. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/unitdata/dml.py +0 -0
  448. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/unitdata/shape.py +0 -0
  449. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/oxml/unitdata/text.py +0 -0
  450. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/__init__.py +0 -0
  451. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_chart.py +0 -0
  452. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_coreprops.py +0 -0
  453. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_customprops.py +0 -0
  454. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_embeddedpackage.py +0 -0
  455. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_image.py +0 -0
  456. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_media.py +0 -0
  457. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_presentation.py +0 -0
  458. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/parts/test_slide.py +0 -0
  459. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/schema/__init__.py +0 -0
  460. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/schema/oxml_schema_validator.py +0 -0
  461. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/schema/test_schema_validity.py +0 -0
  462. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/__init__.py +0 -0
  463. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_anchor.py +0 -0
  464. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_animate.py +0 -0
  465. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_autoshape.py +0 -0
  466. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_base.py +0 -0
  467. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_connector.py +0 -0
  468. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_freeform.py +0 -0
  469. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_graphfrm.py +0 -0
  470. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_group.py +0 -0
  471. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_picture.py +0 -0
  472. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_placeholder.py +0 -0
  473. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/shapes/test_shapetree.py +0 -0
  474. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_accessibility.py +0 -0
  475. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_action.py +0 -0
  476. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_animation.py +0 -0
  477. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_api.py +0 -0
  478. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_audit.py +0 -0
  479. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_compose_from_spec.py +0 -0
  480. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_diagrams.py +0 -0
  481. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/calibriz.ttf +0 -0
  482. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/cdw-logo.eps +0 -0
  483. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/dummy.mp4 +0 -0
  484. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
  485. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
  486. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
  487. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
  488. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  489. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
  490. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
  491. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
  492. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  493. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  494. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  495. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  496. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  497. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  498. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  499. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  500. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  501. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  502. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  503. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  504. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  505. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  506. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  507. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  508. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  509. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  510. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  511. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  512. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  513. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  514. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  515. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  516. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  517. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  518. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
  519. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
  520. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
  521. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
  522. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/minimal.pptx +0 -0
  523. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/minimal_slide.xml +0 -0
  524. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/missing_rels_item.pptx +0 -0
  525. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/monty-truth.png +0 -0
  526. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/no-core-props.pptx +0 -0
  527. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/no-slides.pptx +0 -0
  528. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/presentation.xml +0 -0
  529. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/python-icon.jpeg +0 -0
  530. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/python-powered.png +0 -0
  531. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/python.bmp +0 -0
  532. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/slideLayout1.xml +0 -0
  533. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
  534. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
  535. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
  536. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
  537. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
  538. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-area.txt +0 -0
  539. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
  540. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
  541. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
  542. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
  543. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
  544. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
  545. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
  546. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
  547. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
  548. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
  549. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
  550. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
  551. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
  552. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
  553. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
  554. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x2-line.txt +0 -0
  555. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
  556. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
  557. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
  558. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
  559. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
  560. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
  561. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
  562. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
  563. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
  564. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
  565. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
  566. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
  567. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
  568. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
  569. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/cat-labels.txt +0 -0
  570. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
  571. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/default-notes.txt +0 -0
  572. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
  573. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/default-theme.txt +0 -0
  574. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/freeform.txt +0 -0
  575. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
  576. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/placeholders.txt +0 -0
  577. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
  578. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/relationships.txt +0 -0
  579. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
  580. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
  581. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/snippets/timing.txt +0 -0
  582. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/test.pptx +0 -0
  583. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_files/test_slides.pptx +0 -0
  584. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_formats.py +0 -0
  585. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_geometry.py +0 -0
  586. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_inherit.py +0 -0
  587. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_lint.py +0 -0
  588. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_lint_on_save.py +0 -0
  589. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_math.py +0 -0
  590. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_media.py +0 -0
  591. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_new_features.py +0 -0
  592. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_package.py +0 -0
  593. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_pathlike_inputs.py +0 -0
  594. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_powerpoint_strict_validation.py +0 -0
  595. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_presentation.py +0 -0
  596. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_render.py +0 -0
  597. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_render_slides_alias.py +0 -0
  598. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_section.py +0 -0
  599. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_shared.py +0 -0
  600. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_skill.py +0 -0
  601. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_slide.py +0 -0
  602. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_smart_art.py +0 -0
  603. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_svg_picture.py +0 -0
  604. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_table.py +0 -0
  605. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_table_extras.py +0 -0
  606. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_theme.py +0 -0
  607. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_transition_morph.py +0 -0
  608. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/test_util.py +0 -0
  609. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/text/__init__.py +0 -0
  610. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/text/test_fonts.py +0 -0
  611. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/text/test_layout.py +0 -0
  612. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/text/test_text.py +0 -0
  613. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitdata.py +0 -0
  614. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitutil/__init__.py +0 -0
  615. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitutil/cxml.py +0 -0
  616. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitutil/file.py +0 -0
  617. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tests/unitutil/mock.py +0 -0
  618. {python_pptx2-2.17.0 → python_pptx2-2.18.0}/tox.ini +0 -0
@@ -15,6 +15,25 @@ 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.18.0 (2026-08-30)
19
+ +++++++++++++++++++
20
+
21
+ Added
22
+ .....
23
+
24
+ * **Agent-friendly kwargs** on the one-call helpers. ``add_text()``,
25
+ ``add_equation()``, and ``add_arrow()`` now absorb cross-library
26
+ keyword spellings — matplotlib's ``ha`` / ``va`` / ``fontsize`` /
27
+ ``fontfamily``, CSS-flavored ``halign`` / ``text_color``, British
28
+ ``colour``, ``x`` / ``y`` / ``w`` / ``h`` geometry keywords,
29
+ ``begin`` / ``to`` arrow endpoints, and more — plus unambiguous
30
+ near-misses (``algn`` → ``align``). Synonyms substitute, never
31
+ contradict: two different values for the same logical argument still
32
+ raise. A genuinely unknown kwarg raises a ``TypeError`` that lists
33
+ every accepted argument, so a model reading the traceback
34
+ self-corrects in one step.
35
+
36
+
18
37
  2.17.0 (2026-08-30)
19
38
  +++++++++++++++++++
20
39
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.17.0
3
+ Version: 2.18.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.17.0"
60
+ __version__ = "2.18.0"
61
61
 
62
62
  sys.modules["pptx2.exceptions"] = exceptions
63
63
  del sys
@@ -0,0 +1,136 @@
1
+ """Agent-friendly kwarg normalization for the one-call shape helpers.
2
+
3
+ Code generators (LLM-trained models among them) reliably spell keyword
4
+ arguments the way *other* libraries spell them — matplotlib's
5
+ ``fontfamily``/``fontsize``/``ha``/``va``, CSS-flavored ``text-align``,
6
+ ``colour`` — and die on ``TypeError: unexpected keyword argument``. This
7
+ module absorbs that whole error class for the ergonomic helpers
8
+ (``add_text`` / ``add_equation`` / ``add_arrow``) in three layers:
9
+
10
+ 1. **Synonyms** — a fixed map from common spellings onto each canonical
11
+ argument (``halign`` → ``align``, ``font_size`` → ``size_pt`` …).
12
+ 2. **Fuzzy matching** — a near-miss kwarg (``algn``, ``colr``) is resolved
13
+ to its closest canonical or synonym when unambiguous.
14
+ 3. **Didactic errors** — anything still unknown raises a ``TypeError``
15
+ that names the closest candidate and lists every accepted kwarg, so a
16
+ model reading the traceback self-corrects in one step.
17
+
18
+ An alias may *substitute* for its canonical but never contradict it:
19
+ passing two different values for the same logical argument is a genuine
20
+ caller bug and still raises.
21
+ """
22
+
23
+ from __future__ import annotations
24
+
25
+ import difflib
26
+
27
+ # Canonical kwarg -> spellings other ecosystems use for the same thing.
28
+ SYNONYMS: dict[str, tuple[str, ...]] = {
29
+ "text": ("txt", "string", "content", "label", "caption", "value"),
30
+ "font": ("font_family", "fontfamily", "font_name", "fontname", "typeface", "family", "face"),
31
+ "size_pt": ("size", "font_size", "fontsize", "pt_size", "point_size"),
32
+ "align": ("halign", "ha", "horizontal_align", "horizontal_alignment", "text_align", "text_alignment"),
33
+ "anchor": ("valign", "va", "vertical_align", "vertical_alignment", "v_align"),
34
+ "color": (
35
+ "colour",
36
+ "font_color",
37
+ "font_colour",
38
+ "text_color",
39
+ "text_colour",
40
+ "fg_color",
41
+ "line_color",
42
+ "stroke_color",
43
+ ),
44
+ "weight_pt": ("weight", "line_weight", "width_pt", "stroke_width"),
45
+ "bold": ("font_bold", "is_bold"),
46
+ "italic": ("font_italic", "is_italic", "oblique"),
47
+ "word_wrap": ("wrap", "wrap_text", "text_wrap"),
48
+ "margin_pt": ("margin", "padding", "padding_pt", "inset", "inset_pt"),
49
+ "latex": ("tex", "formula", "equation", "expression", "math"),
50
+ "left": ("x",),
51
+ "top": ("y",),
52
+ "width": ("w",),
53
+ "height": ("h",),
54
+ "start": ("begin", "start_point", "start_shape", "from", "source"),
55
+ "end": ("to", "end_point", "end_shape", "target"),
56
+ }
57
+
58
+ _ALIAS_TO_CANONICAL: dict[str, str] = {
59
+ alias: canonical
60
+ for canonical, aliases in SYNONYMS.items()
61
+ for alias in aliases
62
+ }
63
+
64
+ _FUZZY_CUTOFF = 0.85
65
+
66
+
67
+ def _did_you_mean(name: str, candidates: list[str], known: "list[str] | tuple[str, ...]") -> str | None:
68
+ """Return the canonical arg *name* points at, or None.
69
+
70
+ Near-misses that hit both a canonical and one of its own aliases
71
+ (``algn`` → ``align`` and ``halign``) are NOT ambiguous — they agree —
72
+ so candidates are collapsed to their canonical form before the
73
+ ambiguity check.
74
+ """
75
+ if not candidates:
76
+ return None
77
+ matches = difflib.get_close_matches(name, candidates, n=3, cutoff=_FUZZY_CUTOFF)
78
+ distinct = set()
79
+ for m in matches:
80
+ canonical = m if m in known else _ALIAS_TO_CANONICAL.get(m)
81
+ if canonical in known:
82
+ distinct.add(canonical)
83
+ if len(distinct) == 1:
84
+ return distinct.pop()
85
+ return None
86
+
87
+
88
+ def absorb_agent_kwargs(
89
+ method: str,
90
+ kwargs: dict,
91
+ canonical_names: "list[str] | tuple[str, ...]",
92
+ ) -> dict:
93
+ """Map alias / near-miss *kwargs* onto canonical names; raise else.
94
+
95
+ *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
99
+ ``TypeError``; equal values are fine.
100
+ """
101
+ known = list(canonical_names)
102
+ alias_space = [a for a in _ALIAS_TO_CANONICAL if a not in known]
103
+ candidates = known + alias_space
104
+
105
+ resolved: dict = {}
106
+ for name, value in kwargs.items():
107
+ if name in known or name in resolved:
108
+ if name in resolved and resolved[name] != value:
109
+ raise TypeError(
110
+ f"{method}(): got {name!r} twice with different values "
111
+ f"({resolved[name]!r} vs {value!r})"
112
+ )
113
+ resolved[name] = value
114
+ continue
115
+ canonical = _ALIAS_TO_CANONICAL.get(name)
116
+ if canonical is not None and canonical not in known:
117
+ # The alias resolves to an argument this method doesn't take
118
+ # (e.g. ``to=`` on add_text); fall through to the fuzzy/error
119
+ # path rather than silently dropping the value.
120
+ canonical = None
121
+ if canonical is None:
122
+ canonical = _did_you_mean(name, candidates, known)
123
+ if canonical is None:
124
+ raise TypeError(
125
+ f"{method}(): got an unexpected keyword argument {name!r}. "
126
+ f"Accepted: {', '.join(sorted(known))} "
127
+ f"(synonyms like font_family/halign/valign/colour are fine)"
128
+ )
129
+ if canonical in resolved and resolved[canonical] != value:
130
+ raise TypeError(
131
+ f"{method}(): {name!r} and the value already given for "
132
+ f"{canonical!r} disagree ({value!r} vs {resolved[canonical]!r}); "
133
+ f"pass one spelling only"
134
+ )
135
+ resolved[canonical] = value
136
+ return resolved
@@ -557,24 +557,6 @@ class _BaseShapes(ParentedElementProxy):
557
557
  return BaseShapeFactory(shape_elm, self)
558
558
 
559
559
 
560
- def _resolve_alias(method: str, arg: str, canonical, alias):
561
- """Return *canonical*, falling back to its *alias* kwarg (both nullable).
562
-
563
- Code generators (matplotlib-trained models among them) habitually spell
564
- ``font`` as ``font_family`` and ``anchor`` as ``valign``; accepting the
565
- alias removes a whole class of one-keyword-away TypeErrors. Passing
566
- both with different values is a genuine caller bug and still raises.
567
- """
568
- if canonical is not None:
569
- if alias is not None and alias != canonical:
570
- raise TypeError(
571
- f"{method}(): pass either {arg}= or its alias, not two "
572
- f"different values ({canonical!r} vs {alias!r})"
573
- )
574
- return canonical
575
- return alias
576
-
577
-
578
560
  class _BaseGroupShapes(_BaseShapes):
579
561
  """Base class for shape-trees that can add shapes."""
580
562
 
@@ -918,53 +900,115 @@ class _BaseGroupShapes(_BaseShapes):
918
900
  *bbox_or_positional,
919
901
  text: str = "",
920
902
  font: str | None = None,
921
- font_family: str | None = None,
922
903
  size_pt: float | None = None,
923
904
  bold: bool | None = None,
924
905
  italic: bool | None = None,
925
906
  color=None,
926
907
  align: str | None = None,
927
908
  anchor: str | None = None,
928
- valign: str | None = None,
929
909
  margin_pt: float | tuple[float, float, float, float] | None = None,
930
910
  word_wrap: bool | None = True,
911
+ **kwargs,
931
912
  ) -> Shape:
932
913
  """Add a textbox carrying *text* with one-call styling.
933
914
 
934
- Accepts either a :class:`~pptx2.geometry.BBox` positionally
935
- or the four ``(left, top, width, height)`` lengths::
915
+ Accepts either a :class:`~pptx2.geometry.BBox` positionally, the
916
+ four ``(left, top, width, height)`` lengths positionally, *or* the
917
+ same four as keyword arguments (``x`` / ``y`` / ``w`` / ``h``
918
+ synonyms included)::
936
919
 
937
920
  slide.shapes.add_text(bbox, text="Hello", size_pt=24, bold=True,
938
921
  color="#0B5CFF", align="center")
939
922
  slide.shapes.add_text(Inches(1), Inches(2), Inches(4), Inches(1),
940
923
  text="Hello")
924
+ slide.shapes.add_text(x=Inches(1), y=Inches(2), w=Inches(4),
925
+ h=Inches(1), text="Hello")
941
926
 
942
927
  Keyword args:
943
928
 
929
+ * ``text`` — the string (``label`` / ``content`` synonyms work).
944
930
  * ``font`` — typeface name (e.g. ``"Inter"``); ``None`` inherits.
945
- ``font_family`` is accepted as an alias (matplotlib habits die
946
- hard).
947
- * ``size_pt`` — font size in points; ``None`` inherits.
931
+ * ``size_pt`` font size in points (synonyms: ``size``,
932
+ ``font_size``, ``fontsize``).
948
933
  * ``bold`` / ``italic`` — ``True``/``False``/``None``.
949
934
  * ``color`` — any "color-like" (``"#RRGGBB"``, ``RGBColor``,
950
- ``(r, g, b)``).
935
+ ``(r, g, b)``); ``colour`` / ``text_color`` synonyms work.
951
936
  * ``align`` — ``"left"`` / ``"center"`` / ``"right"`` /
952
- ``"justify"``; ``None`` inherits.
937
+ ``"justify"``; ``halign`` is a synonym.
953
938
  * ``anchor`` — vertical anchor: ``"top"`` / ``"middle"`` (also
954
- ``"mid"`` / ``"center"``) / ``"bottom"``; ``None`` inherits.
955
- ``valign`` is accepted as an alias.
939
+ ``"mid"`` / ``"center"``) / ``"bottom"``; ``valign`` is a
940
+ synonym.
956
941
  * ``margin_pt`` — uniform margin in points, or a 4-tuple
957
942
  ``(top, right, bottom, left)``.
958
943
  * ``word_wrap`` — defaults to ``True``.
959
944
 
945
+ Misspelled or cross-library kwargs are absorbed when unambiguous
946
+ (``font_family`` → ``font``, ``fontsize`` → ``size_pt``, ``algn``
947
+ → ``align`` …); anything unrecognizable raises a ``TypeError``
948
+ naming the accepted arguments.
949
+
960
950
  Returns the textbox :class:`Shape` so further mutation works as
961
951
  normal.
962
952
  """
953
+ from pptx2._agent_friendly import absorb_agent_kwargs
963
954
  from pptx2._textstyle import apply_margins, apply_text_style, coerce_anchor
964
955
  from pptx2.geometry import BBox
965
956
 
966
- font = _resolve_alias("add_text", "font", font, font_family)
967
- anchor = _resolve_alias("add_text", "anchor", anchor, valign)
957
+ if kwargs:
958
+ kwargs = absorb_agent_kwargs(
959
+ "add_text",
960
+ kwargs,
961
+ (
962
+ "text", "font", "size_pt", "bold", "italic", "color",
963
+ "align", "anchor", "margin_pt", "word_wrap",
964
+ "left", "top", "width", "height",
965
+ ),
966
+ )
967
+ geo_names = ("left", "top", "width", "height")
968
+ if any(g in kwargs for g in geo_names):
969
+ if bbox_or_positional:
970
+ raise TypeError(
971
+ "add_text(): got both positional geometry and geometry "
972
+ "keyword arguments; pass one form only"
973
+ )
974
+ if not all(g in kwargs for g in geo_names):
975
+ missing = [g for g in geo_names if g not in kwargs]
976
+ raise TypeError(
977
+ "add_text(): geometry keywords need all of "
978
+ f"left/top/width/height; missing {', '.join(missing)}"
979
+ )
980
+ bbox_or_positional = tuple(kwargs[g] for g in geo_names)
981
+ defaults = {
982
+ "text": "", "font": None, "size_pt": None, "bold": None,
983
+ "italic": None, "color": None, "align": None, "anchor": None,
984
+ "margin_pt": None, "word_wrap": True,
985
+ }
986
+ given = {
987
+ "text": text, "font": font, "size_pt": size_pt, "bold": bold,
988
+ "italic": italic, "color": color, "align": align,
989
+ "anchor": anchor, "margin_pt": margin_pt,
990
+ "word_wrap": word_wrap,
991
+ }
992
+ for name in defaults:
993
+ if name not in kwargs:
994
+ continue
995
+ value = kwargs[name]
996
+ if given[name] != defaults[name] and given[name] != value:
997
+ raise TypeError(
998
+ f"add_text(): {name!r} given twice with different "
999
+ f"values ({given[name]!r} vs {value!r})"
1000
+ )
1001
+ given[name] = value
1002
+ text = given["text"]
1003
+ font = given["font"]
1004
+ size_pt = given["size_pt"]
1005
+ bold = given["bold"]
1006
+ italic = given["italic"]
1007
+ color = given["color"]
1008
+ align = given["align"]
1009
+ anchor = given["anchor"]
1010
+ margin_pt = given["margin_pt"]
1011
+ word_wrap = given["word_wrap"]
968
1012
 
969
1013
  if len(bbox_or_positional) == 1 and isinstance(bbox_or_positional[0], BBox):
970
1014
  box = bbox_or_positional[0]
@@ -1009,21 +1053,21 @@ class _BaseGroupShapes(_BaseShapes):
1009
1053
  def add_equation(
1010
1054
  self,
1011
1055
  *bbox_or_positional,
1012
- latex: str,
1056
+ latex: str | None = None,
1013
1057
  display: bool = True,
1014
1058
  font: str | None = None,
1015
- font_family: str | None = None,
1016
1059
  size_pt: float | None = None,
1017
1060
  color=None,
1018
1061
  align: str | None = "center",
1019
1062
  anchor: str | None = "middle",
1020
- valign: str | None = None,
1021
1063
  margin_pt: float | tuple[float, float, float, float] | None = None,
1064
+ **kwargs,
1022
1065
  ) -> Shape:
1023
1066
  """Add a text box containing a native PowerPoint equation from LaTeX.
1024
1067
 
1025
- Accepts either a :class:`~pptx2.geometry.BBox` or
1026
- ``(left, top, width, height)``::
1068
+ Accepts either a :class:`~pptx2.geometry.BBox`, the four
1069
+ ``(left, top, width, height)`` lengths positionally, or the same
1070
+ four as keyword arguments (``x`` / ``y`` / ``w`` / ``h`` included)::
1027
1071
 
1028
1072
  slide.shapes.add_equation(bbox, latex=r"\\frac{a}{b}", size_pt=28)
1029
1073
  slide.shapes.add_equation(
@@ -1036,16 +1080,74 @@ class _BaseGroupShapes(_BaseShapes):
1036
1080
  equation editor.
1037
1081
 
1038
1082
  Keyword args match :meth:`add_text` for *font* / *size_pt* /
1039
- *color* / *align* / *anchor* / *margin_pt* (including the
1040
- ``font_family`` / ``valign`` aliases). *display* (default
1041
- |True|) emits a display-math paragraph; set |False| for inline
1042
- OMML.
1083
+ *color* / *align* / *anchor* / *margin_pt*, and *latex* accepts
1084
+ the ``tex`` / ``formula`` / ``equation`` synonyms. Misspelled or
1085
+ cross-library kwargs are absorbed when unambiguous (see
1086
+ :meth:`add_text`). *display* (default |True|) emits a display-math
1087
+ paragraph; set |False| for inline OMML.
1043
1088
  """
1089
+ from pptx2._agent_friendly import absorb_agent_kwargs
1044
1090
  from pptx2._textstyle import apply_margins, coerce_align, coerce_anchor
1045
1091
  from pptx2.geometry import BBox
1046
1092
 
1047
- font = _resolve_alias("add_equation", "font", font, font_family)
1048
- anchor = _resolve_alias("add_equation", "anchor", anchor, valign)
1093
+ if kwargs:
1094
+ kwargs = absorb_agent_kwargs(
1095
+ "add_equation",
1096
+ kwargs,
1097
+ (
1098
+ "latex", "display", "font", "size_pt", "color", "align",
1099
+ "anchor", "margin_pt", "left", "top", "width", "height",
1100
+ ),
1101
+ )
1102
+ geo_names = ("left", "top", "width", "height")
1103
+ if any(g in kwargs for g in geo_names):
1104
+ if bbox_or_positional:
1105
+ raise TypeError(
1106
+ "add_equation(): got both positional geometry and "
1107
+ "geometry keyword arguments; pass one form only"
1108
+ )
1109
+ if not all(g in kwargs for g in geo_names):
1110
+ missing = [g for g in geo_names if g not in kwargs]
1111
+ raise TypeError(
1112
+ "add_equation(): geometry keywords need all of "
1113
+ f"left/top/width/height; missing {', '.join(missing)}"
1114
+ )
1115
+ bbox_or_positional = tuple(kwargs[g] for g in geo_names)
1116
+ defaults = {
1117
+ "latex": None, "display": True, "font": None, "size_pt": None,
1118
+ "color": None, "align": "center", "anchor": "middle",
1119
+ "margin_pt": None,
1120
+ }
1121
+ given = {
1122
+ "latex": latex, "display": display, "font": font,
1123
+ "size_pt": size_pt, "color": color, "align": align,
1124
+ "anchor": anchor, "margin_pt": margin_pt,
1125
+ }
1126
+ for name in defaults:
1127
+ if name not in kwargs:
1128
+ continue
1129
+ value = kwargs[name]
1130
+ if given[name] != defaults[name] and given[name] != value:
1131
+ raise TypeError(
1132
+ f"add_equation(): {name!r} given twice with different "
1133
+ f"values ({given[name]!r} vs {value!r})"
1134
+ )
1135
+ given[name] = value
1136
+ latex = given["latex"]
1137
+ display = given["display"]
1138
+ font = given["font"]
1139
+ size_pt = given["size_pt"]
1140
+ color = given["color"]
1141
+ align = given["align"]
1142
+ anchor = given["anchor"]
1143
+ margin_pt = given["margin_pt"]
1144
+
1145
+ if latex is None:
1146
+ raise TypeError(
1147
+ "add_equation() missing required argument: 'latex' "
1148
+ "(synonyms 'tex' / 'formula' / 'equation' accepted)"
1149
+ )
1150
+
1049
1151
 
1050
1152
  if len(bbox_or_positional) == 1 and isinstance(bbox_or_positional[0], BBox):
1051
1153
  box = bbox_or_positional[0]
@@ -1080,8 +1182,8 @@ class _BaseGroupShapes(_BaseShapes):
1080
1182
 
1081
1183
  def add_arrow(
1082
1184
  self,
1083
- start,
1084
- end,
1185
+ start=None,
1186
+ end=None,
1085
1187
  *,
1086
1188
  head: str | None = "triangle",
1087
1189
  tail: str | None = None,
@@ -1094,6 +1196,7 @@ class _BaseGroupShapes(_BaseShapes):
1094
1196
  inset_pt: float = 0.0,
1095
1197
  end_side: str = "auto",
1096
1198
  start_side: str = "auto",
1199
+ **kwargs,
1097
1200
  ) -> Connector:
1098
1201
  """Add an arrow connector with proper arrowhead and inset routing.
1099
1202
 
@@ -1116,12 +1219,18 @@ class _BaseGroupShapes(_BaseShapes):
1116
1219
 
1117
1220
  ``style`` is ``"solid"`` / ``"dashed"`` / ``"dotted"``.
1118
1221
 
1119
- ``route`` is ``"straight"`` (default), ``"elbow"``, or
1120
- ``"curved"`` — picks the underlying
1222
+ ``route`` is ``"straight"`` (default), ``"elbow"``, or ``"curved"``
1223
+ — picks the underlying
1121
1224
  :class:`~pptx2.enum.shapes.MSO_CONNECTOR_TYPE`.
1122
1225
 
1226
+ Keyword synonyms are absorbed: ``begin`` / ``from`` / ``source``
1227
+ for ``start``, ``to`` / ``target`` for ``end``, ``stroke_color`` /
1228
+ ``colour`` for ``color``, ``weight`` / ``line_weight`` for
1229
+ ``weight_pt`` — see :meth:`add_text` for the full aliasing story.
1230
+
1123
1231
  Returns the :class:`Connector` so callers can tweak further.
1124
1232
  """
1233
+ from pptx2._agent_friendly import absorb_agent_kwargs
1125
1234
  from pptx2._color import coerce_color
1126
1235
  from pptx2.enum.dml import (
1127
1236
  MSO_LINE_DASH_STYLE,
@@ -1131,6 +1240,64 @@ class _BaseGroupShapes(_BaseShapes):
1131
1240
  from pptx2.enum.shapes import MSO_CONNECTOR_TYPE
1132
1241
  from pptx2.util import Pt
1133
1242
 
1243
+ if kwargs:
1244
+ kwargs = absorb_agent_kwargs(
1245
+ "add_arrow",
1246
+ kwargs,
1247
+ (
1248
+ "start", "end", "head", "tail", "head_size", "tail_size",
1249
+ "color", "weight_pt", "style", "route", "inset_pt",
1250
+ "end_side", "start_side",
1251
+ ),
1252
+ )
1253
+ defaults = {
1254
+ "head": "triangle", "tail": None, "head_size": "medium",
1255
+ "tail_size": "medium", "color": None, "weight_pt": 1.5,
1256
+ "style": "solid", "route": "straight", "inset_pt": 0.0,
1257
+ "end_side": "auto", "start_side": "auto",
1258
+ }
1259
+ given = {
1260
+ "head": head, "tail": tail, "head_size": head_size,
1261
+ "tail_size": tail_size, "color": color, "weight_pt": weight_pt,
1262
+ "style": style, "route": route, "inset_pt": inset_pt,
1263
+ "end_side": end_side, "start_side": start_side,
1264
+ }
1265
+ for name in defaults:
1266
+ if name not in kwargs:
1267
+ continue
1268
+ value = kwargs[name]
1269
+ if given[name] != defaults[name] and given[name] != value:
1270
+ raise TypeError(
1271
+ f"add_arrow(): {name!r} given twice with different "
1272
+ f"values ({given[name]!r} vs {value!r})"
1273
+ )
1274
+ given[name] = value
1275
+ head = given["head"]
1276
+ tail = given["tail"]
1277
+ head_size = given["head_size"]
1278
+ tail_size = given["tail_size"]
1279
+ color = given["color"]
1280
+ weight_pt = given["weight_pt"]
1281
+ style = given["style"]
1282
+ route = given["route"]
1283
+ inset_pt = given["inset_pt"]
1284
+ end_side = given["end_side"]
1285
+ start_side = given["start_side"]
1286
+ # start/end synonyms (from=/to=/begin=/source=/target=)
1287
+ if "start" in kwargs:
1288
+ start = kwargs["start"]
1289
+ if "end" in kwargs:
1290
+ end = kwargs["end"]
1291
+ if start is None or end is None:
1292
+ raise TypeError(
1293
+ "add_arrow() missing required argument(s): "
1294
+ + ", ".join(
1295
+ name for name, value in (("start", start), ("end", end))
1296
+ if value is None
1297
+ )
1298
+ + " (synonyms begin/from/source and to/target accepted)"
1299
+ )
1300
+
1134
1301
  _CONNECTOR = {
1135
1302
  "straight": MSO_CONNECTOR_TYPE.STRAIGHT,
1136
1303
  "elbow": MSO_CONNECTOR_TYPE.ELBOW,
@@ -449,3 +449,12 @@ print(slide.notes) # "" when the slide has no notes
449
449
  `start_slide_index` claims every slide from that position to the deck
450
450
  end. `move` raises `IndexError` out of range; `reorder` raises
451
451
  `ValueError` unless given a clean permutation.
452
+
453
+ ### Forgiving keyword arguments
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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.17.0
3
+ Version: 2.18.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
@@ -200,6 +200,7 @@ features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml
200
200
  features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels
201
201
  features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml
202
202
  src/pptx2/__init__.py
203
+ src/pptx2/_agent_friendly.py
203
204
  src/pptx2/_color.py
204
205
  src/pptx2/_slide_importer.py
205
206
  src/pptx2/_svg.py
@@ -115,6 +115,70 @@ class DescribeAddText:
115
115
  BBox.from_inches(0, 0, 4, 1), text="x", anchor="top", valign="bottom"
116
116
  )
117
117
 
118
+ def it_absorbs_halign_font_size_and_colour_synonyms(self, slide):
119
+ from pptx2.enum.text import PP_PARAGRAPH_ALIGNMENT
120
+
121
+ tx = slide.shapes.add_text(
122
+ BBox.from_inches(1, 1, 4, 1),
123
+ text="Hi",
124
+ halign="center",
125
+ font_size=20,
126
+ colour="#FF0000",
127
+ )
128
+ run = tx.text_frame.paragraphs[0].runs[0]
129
+ assert tx.text_frame.paragraphs[0].alignment == PP_PARAGRAPH_ALIGNMENT.CENTER
130
+ assert run.font.size == Pt(20)
131
+ assert str(run.font.color.rgb) == "FF0000"
132
+
133
+ def it_absorbs_matplotlib_ha_va_and_label(self, slide):
134
+ from pptx2.enum.text import MSO_VERTICAL_ANCHOR
135
+
136
+ tx = slide.shapes.add_text(
137
+ BBox.from_inches(1, 1, 4, 1), label="Hi", ha="center", va="middle"
138
+ )
139
+ assert tx.text_frame.text == "Hi"
140
+ assert tx.text_frame.vertical_anchor == MSO_VERTICAL_ANCHOR.MIDDLE
141
+
142
+ def it_fuzzy_matches_near_miss_kwargs(self, slide):
143
+ from pptx2.enum.text import PP_PARAGRAPH_ALIGNMENT
144
+
145
+ tx = slide.shapes.add_text(BBox.from_inches(1, 1, 4, 1), text="x", algn="right")
146
+ assert tx.text_frame.paragraphs[0].alignment == PP_PARAGRAPH_ALIGNMENT.RIGHT
147
+
148
+ def it_accepts_geometry_keywords_and_xywh_shorts(self, slide):
149
+ tx = slide.shapes.add_text(
150
+ x=Inches(1), y=Inches(2), w=Inches(3), h=Inches(1), text="xywh"
151
+ )
152
+ assert (tx.left, tx.top, tx.width, tx.height) == (
153
+ Inches(1), Inches(2), Inches(3), Inches(1)
154
+ )
155
+
156
+ def it_rejects_unknown_kwargs_with_a_didactic_error(self, slide):
157
+ with pytest.raises(TypeError, match="totally_bogus.*Accepted"):
158
+ slide.shapes.add_text(
159
+ BBox.from_inches(1, 1, 4, 1), text="x", totally_bogus=1
160
+ )
161
+
162
+ def it_rejects_partial_geometry_keywords(self, slide):
163
+ with pytest.raises(TypeError, match="left/top/width/height"):
164
+ slide.shapes.add_text(x=Inches(1), y=Inches(2), text="partial")
165
+
166
+
167
+ class DescribeAddArrowSynonyms:
168
+ def it_absorbs_begin_to_colour_and_weight(self, slide):
169
+ arrow = slide.shapes.add_arrow(
170
+ begin=(Inches(1), Inches(1)),
171
+ to=(Inches(3), Inches(1)),
172
+ colour="#00FF00",
173
+ weight=2.5,
174
+ )
175
+ assert arrow.begin_x == Inches(1)
176
+ assert arrow.end_x == Inches(3)
177
+
178
+ def it_still_accepts_positional_endpoints(self, slide):
179
+ arrow = slide.shapes.add_arrow((Inches(0), Inches(3)), (Inches(2), Inches(3)))
180
+ assert arrow.begin_x == Inches(0)
181
+
118
182
 
119
183
  class DescribeSetTextPreservingFormat:
120
184
  def it_preserves_font_attributes_across_replacement(self, slide):
File without changes
File without changes
File without changes