python-pptx2 2.15.0__tar.gz → 2.17.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 (617) hide show
  1. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/HISTORY.rst +37 -0
  2. {python_pptx2-2.15.0/src/python_pptx2.egg-info → python_pptx2-2.17.0}/PKG-INFO +1 -1
  3. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/__init__.py +1 -1
  4. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/_textstyle.py +1 -0
  5. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/audit.py +36 -3
  6. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/shapetree.py +35 -3
  7. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/lint.md +16 -0
  8. {python_pptx2-2.15.0 → python_pptx2-2.17.0/src/python_pptx2.egg-info}/PKG-INFO +1 -1
  9. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/schema/oxml_schema_validator.py +63 -0
  10. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_audit.py +55 -0
  11. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/minimal_slide.xml +1 -1
  12. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_shape_helpers.py +29 -0
  13. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/LICENSE +0 -0
  14. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/MANIFEST.in +0 -0
  15. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/README.rst +0 -0
  16. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/act-action.feature +0 -0
  17. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/act-hyperlink.feature +0 -0
  18. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-axis-props.feature +0 -0
  19. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-axistitle-props.feature +0 -0
  20. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-category-access.feature +0 -0
  21. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-category-props.feature +0 -0
  22. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-chart.feature +0 -0
  23. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-charttitle-props.feature +0 -0
  24. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-data-props.feature +0 -0
  25. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-datalabels.feature +0 -0
  26. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-gridlines-props.feature +0 -0
  27. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-legend-access.feature +0 -0
  28. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-legend-props.feature +0 -0
  29. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-marker-props.feature +0 -0
  30. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-plot-props.feature +0 -0
  31. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-point-access.feature +0 -0
  32. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-point-props.feature +0 -0
  33. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-replace-data.feature +0 -0
  34. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-series.feature +0 -0
  35. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/cht-ticklabels-props.feature +0 -0
  36. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/dml-color.feature +0 -0
  37. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/dml-effect.feature +0 -0
  38. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/dml-fill.feature +0 -0
  39. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/dml-line.feature +0 -0
  40. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/environment.py +0 -0
  41. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/ph-inherit-props.feature +0 -0
  42. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/ph-insert-shape.feature +0 -0
  43. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/ph-phfmt-props.feature +0 -0
  44. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/ph-placeholder-props.feature +0 -0
  45. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/prs-coreprops.feature +0 -0
  46. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/prs-default-template.feature +0 -0
  47. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/prs-open-save.feature +0 -0
  48. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/prs-presentation-props.feature +0 -0
  49. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-autoshape.feature +0 -0
  50. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-connector.feature +0 -0
  51. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-freeform.feature +0 -0
  52. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-graphicframe.feature +0 -0
  53. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-groupshape.feature +0 -0
  54. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-movie-props.feature +0 -0
  55. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-picture.feature +0 -0
  56. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-placeholder.feature +0 -0
  57. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-shapes.feature +0 -0
  58. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/shp-shared.feature +0 -0
  59. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/sld-background.feature +0 -0
  60. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/sld-slide.feature +0 -0
  61. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/sld-slides.feature +0 -0
  62. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/action.py +0 -0
  63. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/axis.py +0 -0
  64. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/background.py +0 -0
  65. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/category.py +0 -0
  66. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/chart.py +0 -0
  67. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/chartdata.py +0 -0
  68. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/color.py +0 -0
  69. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/coreprops.py +0 -0
  70. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/datalabel.py +0 -0
  71. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/effect.py +0 -0
  72. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/fill.py +0 -0
  73. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/font.py +0 -0
  74. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/font_color.py +0 -0
  75. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/helpers.py +0 -0
  76. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/legend.py +0 -0
  77. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/line.py +0 -0
  78. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/picture.py +0 -0
  79. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/placeholder.py +0 -0
  80. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/plot.py +0 -0
  81. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/presentation.py +0 -0
  82. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/series.py +0 -0
  83. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/shape.py +0 -0
  84. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/shapes.py +0 -0
  85. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/slide.py +0 -0
  86. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/slides.py +0 -0
  87. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/table.py +0 -0
  88. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/72-dpi.tiff +0 -0
  89. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
  90. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/act-props.pptm +0 -0
  91. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/calibriz.ttf +0 -0
  92. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
  93. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-category-access.pptx +0 -0
  94. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
  95. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
  96. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-charts.pptx +0 -0
  97. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
  98. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  99. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
  100. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-legend.pptx +0 -0
  101. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
  102. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
  103. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-point-access.pptx +0 -0
  104. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-point-props.pptx +0 -0
  105. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
  106. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-series.pptx +0 -0
  107. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  108. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/dml-effect.pptx +0 -0
  109. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/dml-fill.pptx +0 -0
  110. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/dml-line.pptx +0 -0
  111. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/ext-rels.pptx +0 -0
  112. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
  113. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
  114. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
  115. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
  116. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  117. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
  118. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
  119. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
  120. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  121. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  122. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  123. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  124. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  125. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  126. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  127. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  128. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  129. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  130. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  131. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  132. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  133. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  134. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  135. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  136. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  137. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  138. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  139. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  140. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  141. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  142. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  143. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  144. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  145. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  146. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
  147. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
  148. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
  149. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
  150. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/font-color.pptx +0 -0
  151. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
  152. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/just-two-mice.png +0 -0
  153. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
  154. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/minimal.pptx +0 -0
  155. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/monty-truth.png +0 -0
  156. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
  157. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/mst-shapes.pptx +0 -0
  158. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  159. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
  160. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  161. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  162. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/pic.emf +0 -0
  163. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
  164. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/prs-notes.pptx +0 -0
  165. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/prs-properties.pptx +0 -0
  166. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
  167. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/python-icon.jpeg +0 -0
  168. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/python-powered.png +0 -0
  169. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/python.bmp +0 -0
  170. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
  171. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  172. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  173. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  174. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-common-props.pptx +0 -0
  175. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
  176. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
  177. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  178. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  179. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-freeform.pptx +0 -0
  180. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
  181. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
  182. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-picture.pptx +0 -0
  183. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  184. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/shp-shapes.pptx +0 -0
  185. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/sld-background.pptx +0 -0
  186. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/sld-blank.pptx +0 -0
  187. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/sld-notes.pptx +0 -0
  188. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/sld-slide.pptx +0 -0
  189. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/sld-slides.pptx +0 -0
  190. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/sonic.gif +0 -0
  191. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/tbl-cell.pptx +0 -0
  192. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  193. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/test.pptx +0 -0
  194. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
  195. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/txt-font-props.pptx +0 -0
  196. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
  197. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  198. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
  199. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/test_files/txt-text.pptx +0 -0
  200. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/text.py +0 -0
  201. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/steps/text_frame.py +0 -0
  202. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/tbl-cell.feature +0 -0
  203. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/tbl-column.feature +0 -0
  204. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/tbl-table.feature +0 -0
  205. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/txt-fit-text.feature +0 -0
  206. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/txt-font-color.feature +0 -0
  207. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/txt-font-props.feature +0 -0
  208. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/txt-paragraph.feature +0 -0
  209. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/txt-text.feature +0 -0
  210. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/features/txt-textframe.feature +0 -0
  211. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/pyproject.toml +0 -0
  212. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/setup.cfg +0 -0
  213. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/_color.py +0 -0
  214. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/_slide_importer.py +0 -0
  215. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/_svg.py +0 -0
  216. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/_template_applier.py +0 -0
  217. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/accessibility.py +0 -0
  218. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/action.py +0 -0
  219. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/animation.py +0 -0
  220. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/api.py +0 -0
  221. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/__init__.py +0 -0
  222. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/analytics.py +0 -0
  223. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/axis.py +0 -0
  224. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/category.py +0 -0
  225. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/chart.py +0 -0
  226. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/data.py +0 -0
  227. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/datalabel.py +0 -0
  228. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/legend.py +0 -0
  229. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/marker.py +0 -0
  230. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/palettes.py +0 -0
  231. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/plot.py +0 -0
  232. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/point.py +0 -0
  233. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/quick_layouts.py +0 -0
  234. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/series.py +0 -0
  235. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/xlsx.py +0 -0
  236. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/chart/xmlwriter.py +0 -0
  237. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/compose/__init__.py +0 -0
  238. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/compose/from_spec.py +0 -0
  239. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/design/__init__.py +0 -0
  240. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/design/components.py +0 -0
  241. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/design/figures.py +0 -0
  242. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/design/layout.py +0 -0
  243. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/design/recipes.py +0 -0
  244. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/design/style.py +0 -0
  245. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/design/tokens.py +0 -0
  246. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/diagrams.py +0 -0
  247. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/dml/__init__.py +0 -0
  248. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/dml/chtfmt.py +0 -0
  249. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/dml/color.py +0 -0
  250. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/dml/effect.py +0 -0
  251. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/dml/fill.py +0 -0
  252. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/dml/line.py +0 -0
  253. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/dml/picture.py +0 -0
  254. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/dml/three_d.py +0 -0
  255. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/__init__.py +0 -0
  256. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/action.py +0 -0
  257. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/animation.py +0 -0
  258. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/base.py +0 -0
  259. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/chart.py +0 -0
  260. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/dml.py +0 -0
  261. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/lang.py +0 -0
  262. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/presentation.py +0 -0
  263. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/shapes.py +0 -0
  264. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/enum/text.py +0 -0
  265. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/exc.py +0 -0
  266. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/formats.py +0 -0
  267. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/geometry.py +0 -0
  268. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/inherit.py +0 -0
  269. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/lint.py +0 -0
  270. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/math.py +0 -0
  271. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/mathml2omml.py +0 -0
  272. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/media.py +0 -0
  273. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/opc/__init__.py +0 -0
  274. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/opc/constants.py +0 -0
  275. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/opc/oxml.py +0 -0
  276. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/opc/package.py +0 -0
  277. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/opc/packuri.py +0 -0
  278. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/opc/serialized.py +0 -0
  279. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/opc/shared.py +0 -0
  280. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/opc/spec.py +0 -0
  281. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/__init__.py +0 -0
  282. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/action.py +0 -0
  283. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/__init__.py +0 -0
  284. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/axis.py +0 -0
  285. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/chart.py +0 -0
  286. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
  287. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/legend.py +0 -0
  288. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/marker.py +0 -0
  289. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/plot.py +0 -0
  290. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/series.py +0 -0
  291. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/chart/shared.py +0 -0
  292. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/coreprops.py +0 -0
  293. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/customprops.py +0 -0
  294. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/dml/__init__.py +0 -0
  295. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/dml/color.py +0 -0
  296. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/dml/effect.py +0 -0
  297. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/dml/fill.py +0 -0
  298. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/dml/line.py +0 -0
  299. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/dml/three_d.py +0 -0
  300. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/ns.py +0 -0
  301. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/presentation.py +0 -0
  302. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
  303. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
  304. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/shapes/connector.py +0 -0
  305. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
  306. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
  307. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/shapes/picture.py +0 -0
  308. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/shapes/shared.py +0 -0
  309. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/simpletypes.py +0 -0
  310. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/slide.py +0 -0
  311. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/table.py +0 -0
  312. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/text.py +0 -0
  313. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/theme.py +0 -0
  314. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/oxml/xmlchemy.py +0 -0
  315. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/package.py +0 -0
  316. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/__init__.py +0 -0
  317. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/chart.py +0 -0
  318. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/coreprops.py +0 -0
  319. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/customprops.py +0 -0
  320. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/diagram.py +0 -0
  321. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/embeddedpackage.py +0 -0
  322. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/image.py +0 -0
  323. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/media.py +0 -0
  324. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/presentation.py +0 -0
  325. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/parts/slide.py +0 -0
  326. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/presentation.py +0 -0
  327. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/py.typed +0 -0
  328. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/render.py +0 -0
  329. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/section.py +0 -0
  330. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/__init__.py +0 -0
  331. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/autoshape.py +0 -0
  332. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/base.py +0 -0
  333. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/connector.py +0 -0
  334. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/freeform.py +0 -0
  335. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/graphfrm.py +0 -0
  336. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/group.py +0 -0
  337. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/picture.py +0 -0
  338. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shapes/placeholder.py +0 -0
  339. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/shared.py +0 -0
  340. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/SKILL.md +0 -0
  341. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/__init__.py +0 -0
  342. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/__main__.py +0 -0
  343. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/animations.md +0 -0
  344. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/basics.md +0 -0
  345. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/charts.md +0 -0
  346. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/compose.md +0 -0
  347. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/design.md +0 -0
  348. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/effects.md +0 -0
  349. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
  350. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
  351. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/math.md +0 -0
  352. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/picture-effects.md +0 -0
  353. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/render.md +0 -0
  354. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/smart-art.md +0 -0
  355. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
  356. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/tables.md +0 -0
  357. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/theme.md +0 -0
  358. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/three-d.md +0 -0
  359. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/skill/references/transitions.md +0 -0
  360. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/slide.py +0 -0
  361. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/smart_art.py +0 -0
  362. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/spec.py +0 -0
  363. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/table.py +0 -0
  364. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/table_styles.py +0 -0
  365. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/templates/default.pptx +0 -0
  366. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/templates/docx-icon.emf +0 -0
  367. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/templates/generic-icon.emf +0 -0
  368. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/templates/notes.xml +0 -0
  369. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/templates/notesMaster.xml +0 -0
  370. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/templates/pptx-icon.emf +0 -0
  371. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/templates/theme.xml +0 -0
  372. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
  373. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/text/__init__.py +0 -0
  374. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/text/fonts.py +0 -0
  375. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/text/layout.py +0 -0
  376. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/text/text.py +0 -0
  377. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/theme.py +0 -0
  378. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/types.py +0 -0
  379. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/pptx2/util.py +0 -0
  380. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/python_pptx2.egg-info/SOURCES.txt +0 -0
  381. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
  382. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/python_pptx2.egg-info/entry_points.txt +0 -0
  383. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/python_pptx2.egg-info/requires.txt +0 -0
  384. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/src/python_pptx2.egg-info/top_level.txt +0 -0
  385. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/__init__.py +0 -0
  386. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/__init__.py +0 -0
  387. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_analytics.py +0 -0
  388. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_axis.py +0 -0
  389. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_category.py +0 -0
  390. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_chart.py +0 -0
  391. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_chart_toggles.py +0 -0
  392. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_collision_strategy.py +0 -0
  393. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_data.py +0 -0
  394. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_datalabel.py +0 -0
  395. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_legend.py +0 -0
  396. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_marker.py +0 -0
  397. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_palettes.py +0 -0
  398. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_plot.py +0 -0
  399. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_point.py +0 -0
  400. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_quick_layouts.py +0 -0
  401. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_series.py +0 -0
  402. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_xlsx.py +0 -0
  403. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/chart/test_xmlwriter.py +0 -0
  404. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/design/__init__.py +0 -0
  405. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/design/test_components.py +0 -0
  406. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/design/test_figures.py +0 -0
  407. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/design/test_layout.py +0 -0
  408. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/design/test_recipes.py +0 -0
  409. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/design/test_style.py +0 -0
  410. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/design/test_tokens.py +0 -0
  411. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/dml/__init__.py +0 -0
  412. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/dml/test_chtfmt.py +0 -0
  413. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/dml/test_color.py +0 -0
  414. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/dml/test_effect.py +0 -0
  415. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/dml/test_fill.py +0 -0
  416. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/dml/test_line.py +0 -0
  417. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/dml/test_three_d.py +0 -0
  418. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/enum/__init__.py +0 -0
  419. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/enum/test_base.py +0 -0
  420. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/enum/test_shapes.py +0 -0
  421. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/integration/__init__.py +0 -0
  422. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/integration/round_trip.py +0 -0
  423. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/integration/test_add_slide_layout.py +0 -0
  424. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/integration/test_apply_template.py +0 -0
  425. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/integration/test_compose_package.py +0 -0
  426. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/integration/test_import_slide.py +0 -0
  427. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/integration/test_round_trip.py +0 -0
  428. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/opc/__init__.py +0 -0
  429. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/opc/test_oxml.py +0 -0
  430. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/opc/test_package.py +0 -0
  431. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/opc/test_packuri.py +0 -0
  432. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/opc/test_serialized.py +0 -0
  433. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/__init__.py +0 -0
  434. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/shapes/__init__.py +0 -0
  435. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/shapes/test_autoshape.py +0 -0
  436. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
  437. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/shapes/test_groupshape.py +0 -0
  438. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/shapes/test_picture.py +0 -0
  439. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test___init__.py +0 -0
  440. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test_dml.py +0 -0
  441. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test_ns.py +0 -0
  442. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test_presentation.py +0 -0
  443. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test_simpletypes.py +0 -0
  444. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test_slide.py +0 -0
  445. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test_table.py +0 -0
  446. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test_theme.py +0 -0
  447. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/test_xmlchemy.py +0 -0
  448. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/unitdata/__init__.py +0 -0
  449. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/unitdata/dml.py +0 -0
  450. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/unitdata/shape.py +0 -0
  451. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/oxml/unitdata/text.py +0 -0
  452. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/__init__.py +0 -0
  453. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/test_chart.py +0 -0
  454. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/test_coreprops.py +0 -0
  455. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/test_customprops.py +0 -0
  456. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/test_embeddedpackage.py +0 -0
  457. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/test_image.py +0 -0
  458. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/test_media.py +0 -0
  459. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/test_presentation.py +0 -0
  460. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/parts/test_slide.py +0 -0
  461. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/schema/__init__.py +0 -0
  462. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/schema/test_schema_validity.py +0 -0
  463. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/__init__.py +0 -0
  464. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_anchor.py +0 -0
  465. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_animate.py +0 -0
  466. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_autoshape.py +0 -0
  467. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_base.py +0 -0
  468. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_connector.py +0 -0
  469. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_freeform.py +0 -0
  470. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_graphfrm.py +0 -0
  471. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_group.py +0 -0
  472. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_picture.py +0 -0
  473. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_placeholder.py +0 -0
  474. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/shapes/test_shapetree.py +0 -0
  475. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_accessibility.py +0 -0
  476. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_action.py +0 -0
  477. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_animation.py +0 -0
  478. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_api.py +0 -0
  479. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_compose_from_spec.py +0 -0
  480. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_diagrams.py +0 -0
  481. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/calibriz.ttf +0 -0
  482. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/cdw-logo.eps +0 -0
  483. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/dummy.mp4 +0 -0
  484. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
  485. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
  486. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
  487. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
  488. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  489. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
  490. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
  491. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
  492. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  493. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  494. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  495. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  496. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  497. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  498. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  499. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  500. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  501. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  502. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  503. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  504. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  505. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  506. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  507. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  508. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  509. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  510. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  511. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  512. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  513. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  514. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  515. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  516. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  517. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  518. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
  519. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
  520. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
  521. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
  522. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/minimal.pptx +0 -0
  523. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/missing_rels_item.pptx +0 -0
  524. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/monty-truth.png +0 -0
  525. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/no-core-props.pptx +0 -0
  526. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/no-slides.pptx +0 -0
  527. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/presentation.xml +0 -0
  528. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/python-icon.jpeg +0 -0
  529. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/python-powered.png +0 -0
  530. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/python.bmp +0 -0
  531. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/slideLayout1.xml +0 -0
  532. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
  533. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
  534. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
  535. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
  536. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
  537. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-area.txt +0 -0
  538. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
  539. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
  540. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
  541. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
  542. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
  543. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
  544. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
  545. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
  546. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
  547. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
  548. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
  549. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
  550. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
  551. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
  552. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
  553. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x2-line.txt +0 -0
  554. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
  555. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
  556. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
  557. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
  558. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
  559. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
  560. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
  561. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
  562. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
  563. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
  564. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
  565. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
  566. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
  567. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
  568. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/cat-labels.txt +0 -0
  569. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
  570. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/default-notes.txt +0 -0
  571. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
  572. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/default-theme.txt +0 -0
  573. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/freeform.txt +0 -0
  574. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
  575. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/placeholders.txt +0 -0
  576. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
  577. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/relationships.txt +0 -0
  578. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
  579. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
  580. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/snippets/timing.txt +0 -0
  581. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/test.pptx +0 -0
  582. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_files/test_slides.pptx +0 -0
  583. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_formats.py +0 -0
  584. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_geometry.py +0 -0
  585. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_inherit.py +0 -0
  586. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_lint.py +0 -0
  587. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_lint_on_save.py +0 -0
  588. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_math.py +0 -0
  589. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_media.py +0 -0
  590. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_new_features.py +0 -0
  591. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_package.py +0 -0
  592. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_pathlike_inputs.py +0 -0
  593. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_powerpoint_strict_validation.py +0 -0
  594. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_presentation.py +0 -0
  595. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_render.py +0 -0
  596. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_render_slides_alias.py +0 -0
  597. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_section.py +0 -0
  598. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_shared.py +0 -0
  599. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_skill.py +0 -0
  600. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_slide.py +0 -0
  601. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_smart_art.py +0 -0
  602. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_svg_picture.py +0 -0
  603. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_table.py +0 -0
  604. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_table_extras.py +0 -0
  605. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_theme.py +0 -0
  606. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_transition_morph.py +0 -0
  607. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/test_util.py +0 -0
  608. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/text/__init__.py +0 -0
  609. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/text/test_fonts.py +0 -0
  610. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/text/test_layout.py +0 -0
  611. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/text/test_text.py +0 -0
  612. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/unitdata.py +0 -0
  613. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/unitutil/__init__.py +0 -0
  614. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/unitutil/cxml.py +0 -0
  615. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/unitutil/file.py +0 -0
  616. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tests/unitutil/mock.py +0 -0
  617. {python_pptx2-2.15.0 → python_pptx2-2.17.0}/tox.ini +0 -0
@@ -15,6 +15,43 @@ 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.17.0 (2026-08-30)
19
+ +++++++++++++++++++
20
+
21
+ Added
22
+ .....
23
+
24
+ * ``add_text()`` / ``add_equation()`` accept ``font_family`` and
25
+ ``valign`` as aliases for ``font`` and ``anchor`` (with ``"mid"``
26
+ now a valid anchor token). Code generators trained on matplotlib
27
+ habitually reach for the longer spellings and died with
28
+ ``TypeError: unexpected keyword argument 'font_family'``; passing
29
+ both an alias and its canonical with *different* values still
30
+ raises.
31
+
32
+ * The audit font-warning safe-list now recognizes the **Aptos**
33
+ family — the Microsoft 365 default theme fonts since 2024 — and
34
+ merges the ``PPTX2_SAFE_FONTS`` environment variable (comma- or
35
+ semicolon-separated) into the safe-list on every ``audit()`` call,
36
+ so a rendering environment can declare its font inventory once
37
+ instead of every caller passing ``extra_safe_fonts``.
38
+
39
+
40
+ 2.16.0 (2026-08-30)
41
+ +++++++++++++++++++
42
+
43
+ Added
44
+ .....
45
+
46
+ * ``audit(..., extra_safe_fonts=[...])`` — the font-warning probe now
47
+ accepts additional fonts to treat as safe (case-insensitive), on top
48
+ of the built-in common Windows/macOS/Office list. For rendering
49
+ environments that genuinely ship a font the built-in list doesn't
50
+ know — e.g. a Linux sandbox whose font policy standardizes on
51
+ ``DejaVu Sans`` — this keeps the audit signal instead of drowning it
52
+ in per-slide warnings.
53
+
54
+
18
55
  2.15.0 (2026-08-30)
19
56
  +++++++++++++++++++
20
57
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.15.0
3
+ Version: 2.17.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.15.0"
60
+ __version__ = "2.17.0"
61
61
 
62
62
  sys.modules["pptx2.exceptions"] = exceptions
63
63
  del sys
@@ -28,6 +28,7 @@ ALIGN_MAP = {
28
28
  ANCHOR_MAP = {
29
29
  "top": MSO_VERTICAL_ANCHOR.TOP,
30
30
  "middle": MSO_VERTICAL_ANCHOR.MIDDLE,
31
+ "mid": MSO_VERTICAL_ANCHOR.MIDDLE,
31
32
  "center": MSO_VERTICAL_ANCHOR.MIDDLE,
32
33
  "centre": MSO_VERTICAL_ANCHOR.MIDDLE,
33
34
  "bottom": MSO_VERTICAL_ANCHOR.BOTTOM,
@@ -30,7 +30,7 @@ The audit is read-only — it never mutates the deck.
30
30
  from __future__ import annotations
31
31
 
32
32
  from dataclasses import dataclass, field
33
- from typing import TYPE_CHECKING, Any
33
+ from typing import TYPE_CHECKING, Any, Iterable
34
34
 
35
35
  if TYPE_CHECKING:
36
36
  from pptx2.api import Presentation
@@ -41,7 +41,8 @@ __all__ = ["AuditReport", "audit"]
41
41
 
42
42
 
43
43
  # Fonts that ship with stock Windows / macOS / Office installs. Used as
44
- # a (very conservative) safe-list for the font_warnings probe.
44
+ # a (very conservative) safe-list for the font_warnings probe. Aptos and
45
+ # family are the Microsoft 365 default theme fonts since 2024.
45
46
  _COMMON_FONTS = frozenset(
46
47
  name.lower()
47
48
  for name in (
@@ -51,9 +52,17 @@ _COMMON_FONTS = frozenset(
51
52
  "Lucida Console", "Palatino", "Palatino Linotype", "Symbol",
52
53
  "Wingdings", "Wingdings 2", "Wingdings 3", "Webdings",
53
54
  "Inter", "Roboto", "Open Sans", "Lato", "Noto Sans",
55
+ "Aptos", "Aptos Display", "Aptos Narrow", "Aptos Serif", "Aptos Mono",
56
+ "Aptos Symbols",
54
57
  )
55
58
  )
56
59
 
60
+ # Environment variable merged into the safe-list on every audit() call, so
61
+ # rendering environments (sandboxes, CI) can declare their font inventory
62
+ # once instead of every caller passing ``extra_safe_fonts``. Comma- or
63
+ # semicolon-separated font names.
64
+ _SAFE_FONTS_ENV_VAR = "PPTX2_SAFE_FONTS"
65
+
57
66
 
58
67
  @dataclass
59
68
  class AuditReport:
@@ -174,15 +183,39 @@ def audit(
174
183
  *,
175
184
  size_warn_bytes: int = 2_000_000,
176
185
  check_fonts: bool = True,
186
+ extra_safe_fonts: "Iterable[str] | None" = None,
177
187
  ) -> AuditReport:
178
188
  """Walk the deck and return an :class:`AuditReport` summary.
179
189
 
180
190
  Read-only — never mutates the presentation. Each slide is linted
181
191
  in passing-defaults mode; per-slide overrides should be supplied
182
192
  via the slide-level ``slide.lint(...)`` API directly.
193
+
194
+ *extra_safe_fonts* names additional fonts to treat as safe for the
195
+ font-warning probe, on top of the common Windows/macOS/Office set
196
+ (matching is case-insensitive). Use it where the rendering
197
+ environment genuinely ships the font — e.g. ``DejaVu Sans`` in a
198
+ sandbox whose font policy standardizes on it, or a corporate font
199
+ you embed in every deck.
200
+
201
+ The ``PPTX2_SAFE_FONTS`` environment variable (comma- or
202
+ semicolon-separated font names) is merged into the safe-list on
203
+ every call, so an environment can declare its font inventory once
204
+ for all callers.
183
205
  """
206
+ import os
207
+
184
208
  from pptx2.shapes.picture import Picture
185
209
 
210
+ safe_fonts = _COMMON_FONTS
211
+ extra_names = list(extra_safe_fonts) if extra_safe_fonts else []
212
+ for env_raw in os.environ.get(_SAFE_FONTS_ENV_VAR, "").replace(";", ",").split(","):
213
+ env_name = env_raw.strip()
214
+ if env_name:
215
+ extra_names.append(env_name)
216
+ if extra_names:
217
+ safe_fonts = _COMMON_FONTS | frozenset(f.lower() for f in extra_names)
218
+
186
219
  report = AuditReport()
187
220
  slides = list(prs.slides)
188
221
  report.total_slides = len(slides)
@@ -249,7 +282,7 @@ def audit(
249
282
  for para in tf.paragraphs:
250
283
  for run in para.runs:
251
284
  name = run.font.name
252
- if name and name.lower() not in _COMMON_FONTS:
285
+ if name and name.lower() not in safe_fonts:
253
286
  report.font_warnings.append((idx, name))
254
287
 
255
288
  if content_shapes == 0:
@@ -557,6 +557,24 @@ 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
+
560
578
  class _BaseGroupShapes(_BaseShapes):
561
579
  """Base class for shape-trees that can add shapes."""
562
580
 
@@ -900,12 +918,14 @@ class _BaseGroupShapes(_BaseShapes):
900
918
  *bbox_or_positional,
901
919
  text: str = "",
902
920
  font: str | None = None,
921
+ font_family: str | None = None,
903
922
  size_pt: float | None = None,
904
923
  bold: bool | None = None,
905
924
  italic: bool | None = None,
906
925
  color=None,
907
926
  align: str | None = None,
908
927
  anchor: str | None = None,
928
+ valign: str | None = None,
909
929
  margin_pt: float | tuple[float, float, float, float] | None = None,
910
930
  word_wrap: bool | None = True,
911
931
  ) -> Shape:
@@ -922,14 +942,17 @@ class _BaseGroupShapes(_BaseShapes):
922
942
  Keyword args:
923
943
 
924
944
  * ``font`` — typeface name (e.g. ``"Inter"``); ``None`` inherits.
945
+ ``font_family`` is accepted as an alias (matplotlib habits die
946
+ hard).
925
947
  * ``size_pt`` — font size in points; ``None`` inherits.
926
948
  * ``bold`` / ``italic`` — ``True``/``False``/``None``.
927
949
  * ``color`` — any "color-like" (``"#RRGGBB"``, ``RGBColor``,
928
950
  ``(r, g, b)``).
929
951
  * ``align`` — ``"left"`` / ``"center"`` / ``"right"`` /
930
952
  ``"justify"``; ``None`` inherits.
931
- * ``anchor`` — vertical anchor: ``"top"`` / ``"middle"`` /
932
- ``"bottom"``; ``None`` inherits.
953
+ * ``anchor`` — vertical anchor: ``"top"`` / ``"middle"`` (also
954
+ ``"mid"`` / ``"center"``) / ``"bottom"``; ``None`` inherits.
955
+ ``valign`` is accepted as an alias.
933
956
  * ``margin_pt`` — uniform margin in points, or a 4-tuple
934
957
  ``(top, right, bottom, left)``.
935
958
  * ``word_wrap`` — defaults to ``True``.
@@ -940,6 +963,9 @@ class _BaseGroupShapes(_BaseShapes):
940
963
  from pptx2._textstyle import apply_margins, apply_text_style, coerce_anchor
941
964
  from pptx2.geometry import BBox
942
965
 
966
+ font = _resolve_alias("add_text", "font", font, font_family)
967
+ anchor = _resolve_alias("add_text", "anchor", anchor, valign)
968
+
943
969
  if len(bbox_or_positional) == 1 and isinstance(bbox_or_positional[0], BBox):
944
970
  box = bbox_or_positional[0]
945
971
  left, top, width, height = box.left, box.top, box.width, box.height
@@ -986,10 +1012,12 @@ class _BaseGroupShapes(_BaseShapes):
986
1012
  latex: str,
987
1013
  display: bool = True,
988
1014
  font: str | None = None,
1015
+ font_family: str | None = None,
989
1016
  size_pt: float | None = None,
990
1017
  color=None,
991
1018
  align: str | None = "center",
992
1019
  anchor: str | None = "middle",
1020
+ valign: str | None = None,
993
1021
  margin_pt: float | tuple[float, float, float, float] | None = None,
994
1022
  ) -> Shape:
995
1023
  """Add a text box containing a native PowerPoint equation from LaTeX.
@@ -1008,13 +1036,17 @@ class _BaseGroupShapes(_BaseShapes):
1008
1036
  equation editor.
1009
1037
 
1010
1038
  Keyword args match :meth:`add_text` for *font* / *size_pt* /
1011
- *color* / *align* / *anchor* / *margin_pt*. *display* (default
1039
+ *color* / *align* / *anchor* / *margin_pt* (including the
1040
+ ``font_family`` / ``valign`` aliases). *display* (default
1012
1041
  |True|) emits a display-math paragraph; set |False| for inline
1013
1042
  OMML.
1014
1043
  """
1015
1044
  from pptx2._textstyle import apply_margins, coerce_align, coerce_anchor
1016
1045
  from pptx2.geometry import BBox
1017
1046
 
1047
+ font = _resolve_alias("add_equation", "font", font, font_family)
1048
+ anchor = _resolve_alias("add_equation", "anchor", anchor, valign)
1049
+
1018
1050
  if len(bbox_or_positional) == 1 and isinstance(bbox_or_positional[0], BBox):
1019
1051
  box = bbox_or_positional[0]
1020
1052
  left, top, width, height = box.left, box.top, box.width, box.height
@@ -178,6 +178,22 @@ if data["has_errors"]:
178
178
  ... # hand `data` straight to the model to fix
179
179
  ```
180
180
 
181
+ `audit()` also warns on fonts outside the common Windows/macOS/Office
182
+ safe-list. When the rendering environment genuinely ships a font (e.g.
183
+ DejaVu Sans in a Linux sandbox), pass it instead of letting the deck
184
+ drown in noise:
185
+
186
+ ```python
187
+ report = audit(prs, extra_safe_fonts=["DejaVu Sans", "Noto Sans CJK JP"])
188
+ ```
189
+
190
+ Or declare the inventory once for every caller via the environment
191
+ (merged into the safe-list on each `audit()`):
192
+
193
+ ```bash
194
+ export PPTX2_SAFE_FONTS="DejaVu Sans; Noto Sans CJK JP"
195
+ ```
196
+
181
197
  ## Save-time hooks (via `from_spec`)
182
198
 
183
199
  If you build the deck through `pptx2.compose.from_spec`, the spec dict
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.15.0
3
+ Version: 2.17.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
@@ -130,6 +130,68 @@ def _resolve_mce(doc):
130
130
  return doc
131
131
 
132
132
 
133
+ def _strip_mce_ignorables(doc):
134
+ """Drop markup an ISO-pure processor must ignore, in place.
135
+
136
+ ISO/IEC 29500-3 (Markup Compatibility): a processor that does not
137
+ understand a namespace listed in ``mc:Ignorable`` MUST ignore every
138
+ element and attribute in that namespace — and the ``mc:*`` compatibility
139
+ attributes themselves are outside the base schemas. The bundled XSDs are
140
+ exactly such an "MCE-unaware" consumer, so before strict validation this
141
+ removes:
142
+
143
+ * every attribute in the ``mc`` compatibility namespace (``mc:Ignorable``,
144
+ ``mc:MustUnderstand``, ``mc:ProcessConflicts``, ``mc:PreserveIgnorable``);
145
+ * every element and attribute in any namespace declared ignorable via
146
+ ``mc:Ignorable`` (e.g. the ``a14`` equation host namespace 2.14.0+
147
+ slides declare so PowerPoint tolerates their ``a14:m`` runs).
148
+
149
+ Without this, every generated slide fails validation on the
150
+ ``mc:Ignorable`` attribute alone, deafening the gate to real violations.
151
+ """
152
+ # -- 1. collect the namespaces declared ignorable anywhere in the part --
153
+ ignorable_ns = set()
154
+ for el in doc.iter():
155
+ declared = el.get("{%s}Ignorable" % _MC_NS)
156
+ if not declared:
157
+ continue
158
+ for prefix in declared.split():
159
+ # nsmap is the full in-scope prefix map at this element, so it
160
+ # resolves prefixes declared on ancestors as well.
161
+ uri = el.nsmap.get(prefix)
162
+ if uri is not None:
163
+ ignorable_ns.add(uri)
164
+
165
+ # -- 2. drop elements in ignorable namespaces (root cannot be ignorable:
166
+ # -- a part whose root is outside the base schema has no schema here) --
167
+ if ignorable_ns:
168
+ root = doc.getroottree().getroot()
169
+ for el in list(doc.iter()):
170
+ if el is root:
171
+ continue
172
+ if etree.QName(el).namespace in ignorable_ns:
173
+ parent = el.getparent()
174
+ if parent is not None:
175
+ parent.remove(el)
176
+
177
+ # -- 3. drop mc:* compatibility attributes and ignorable-ns attributes --
178
+ mc_attrs = [
179
+ "{%s}Ignorable" % _MC_NS,
180
+ "{%s}MustUnderstand" % _MC_NS,
181
+ "{%s}ProcessConflicts" % _MC_NS,
182
+ "{%s}PreserveIgnorable" % _MC_NS,
183
+ ]
184
+ for el in doc.iter():
185
+ for attr in list(el.attrib):
186
+ if attr in mc_attrs:
187
+ del el.attrib[attr]
188
+ continue
189
+ brace = attr.find("}")
190
+ if brace != -1 and attr[1:brace] in ignorable_ns:
191
+ del el.attrib[attr]
192
+ return doc
193
+
194
+
133
195
  def _should_check(partname: str) -> bool:
134
196
  return partname in _CHECKED_EXACT or partname.startswith(_CHECKED_PREFIXES)
135
197
 
@@ -440,6 +502,7 @@ def iter_schema_violations(
440
502
  schema = _schema_for_namespace(etree.QName(doc).namespace)
441
503
  if schema is None:
442
504
  continue
505
+ _strip_mce_ignorables(doc)
443
506
  _resolve_mce(doc)
444
507
  if not schema.validate(doc):
445
508
  for err in schema.error_log: # type: ignore[attr-defined]
@@ -54,6 +54,61 @@ class DescribeAudit:
54
54
  assert any(font == "Definitely-Not-A-Real-Font-Name"
55
55
  for _, font in report.font_warnings)
56
56
 
57
+ def it_accepts_extra_safe_fonts(self, prs):
58
+ slide = prs.slides.add_slide(prs.slide_layouts[6])
59
+ slide.shapes.add_text(
60
+ BBox.from_inches(1, 1, 4, 1),
61
+ text="Hi",
62
+ font="DejaVu Sans",
63
+ )
64
+ # -- without the override the sandbox font is flagged --
65
+ report = audit(prs)
66
+ assert any(font == "DejaVu Sans" for _, font in report.font_warnings)
67
+ # -- and with it (case-insensitively) the warning disappears --
68
+ report = audit(prs, extra_safe_fonts=["DEJAVU SANS"])
69
+ assert not any(font == "DejaVu Sans" for _, font in report.font_warnings)
70
+ # -- other unknown fonts are still flagged alongside the override --
71
+ slide.shapes.add_text(
72
+ BBox.from_inches(1, 2.5, 4, 1),
73
+ text="Also hi",
74
+ font="Definitely-Not-A-Real-Font-Name",
75
+ )
76
+ report = audit(prs, extra_safe_fonts=["DejaVu Sans"])
77
+ assert any(font == "Definitely-Not-A-Real-Font-Name"
78
+ for _, font in report.font_warnings)
79
+ assert not any(font == "DejaVu Sans" for _, font in report.font_warnings)
80
+
81
+ def it_treats_aptos_the_m365_default_as_safe(self, prs):
82
+ slide = prs.slides.add_slide(prs.slide_layouts[6])
83
+ for variant in ("Aptos", "Aptos Display", "Aptos Serif", "Aptos Mono"):
84
+ slide.shapes.add_text(
85
+ BBox.from_inches(1, 1, 4, 0.6),
86
+ text="Hi",
87
+ font=variant,
88
+ )
89
+ report = audit(prs)
90
+ assert report.font_warnings == []
91
+
92
+ def it_merges_the_safe_fonts_environment_variable(self, prs, monkeypatch):
93
+ slide = prs.slides.add_slide(prs.slide_layouts[6])
94
+ slide.shapes.add_text(
95
+ BBox.from_inches(1, 1, 4, 1), text="Hi", font="DejaVu Sans"
96
+ )
97
+ slide.shapes.add_text(
98
+ BBox.from_inches(1, 2.5, 4, 1), text="Ho", font="Corporate Brand Face"
99
+ )
100
+ monkeypatch.setenv(
101
+ "PPTX2_SAFE_FONTS", "DejaVu Sans ; Corporate Brand Face"
102
+ )
103
+ report = audit(prs)
104
+ assert report.font_warnings == []
105
+ # -- the parameter still stacks on top of the environment --
106
+ slide.shapes.add_text(
107
+ BBox.from_inches(1, 4, 4, 1), text="Hmm", font="One More Face"
108
+ )
109
+ report = audit(prs, extra_safe_fonts=["One More Face"])
110
+ assert report.font_warnings == []
111
+
57
112
  def it_treats_full_bleed_only_slide_as_empty(self, prs):
58
113
  # A slide whose only shape is a slide-spanning background rect
59
114
  # should be reported as empty (it has no content).
@@ -1,4 +1,4 @@
1
- <p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
1
+ <p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" mc:Ignorable="a14">
2
2
  <p:cSld>
3
3
  <p:spTree>
4
4
  <p:nvGrpSpPr>
@@ -86,6 +86,35 @@ class DescribeAddText:
86
86
  with pytest.raises(ValueError):
87
87
  slide.shapes.add_text(BBox.from_inches(0, 0, 4, 1), text="x", align="diagonal")
88
88
 
89
+ def it_accepts_font_family_as_an_alias_for_font(self, slide):
90
+ # -- matplotlib-trained generators habitually write font_family= --
91
+ tx = slide.shapes.add_text(BBox.from_inches(1, 1, 4, 1), text="Hi", font_family="Inter")
92
+ assert tx.text_frame.paragraphs[0].runs[0].font.name == "Inter"
93
+
94
+ def it_accepts_identical_font_and_font_family(self, slide):
95
+ tx = slide.shapes.add_text(
96
+ BBox.from_inches(1, 1, 4, 1), text="Hi", font="Inter", font_family="Inter"
97
+ )
98
+ assert tx.text_frame.paragraphs[0].runs[0].font.name == "Inter"
99
+
100
+ def it_rejects_conflicting_font_and_font_family(self, slide):
101
+ with pytest.raises(TypeError, match="font"):
102
+ slide.shapes.add_text(
103
+ BBox.from_inches(1, 1, 4, 1), text="Hi", font="Inter", font_family="Roboto"
104
+ )
105
+
106
+ def it_accepts_valign_mid_as_an_alias_for_anchor(self, slide):
107
+ from pptx2.enum.text import MSO_VERTICAL_ANCHOR
108
+
109
+ tx = slide.shapes.add_text(BBox.from_inches(0, 0, 4, 1), text="x", valign="mid")
110
+ assert tx.text_frame.vertical_anchor == MSO_VERTICAL_ANCHOR.MIDDLE
111
+
112
+ def it_rejects_conflicting_anchor_and_valign(self, slide):
113
+ with pytest.raises(TypeError, match="anchor"):
114
+ slide.shapes.add_text(
115
+ BBox.from_inches(0, 0, 4, 1), text="x", anchor="top", valign="bottom"
116
+ )
117
+
89
118
 
90
119
  class DescribeSetTextPreservingFormat:
91
120
  def it_preserves_font_attributes_across_replacement(self, slide):
File without changes
File without changes
File without changes