python-pptx2 2.14.0__tar.gz → 2.16.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.14.0 → python_pptx2-2.16.0}/HISTORY.rst +126 -0
  2. {python_pptx2-2.14.0/src/python_pptx2.egg-info → python_pptx2-2.16.0}/PKG-INFO +1 -1
  3. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/table.py +41 -1
  4. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/tbl-table.feature +28 -0
  5. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/__init__.py +4 -1
  6. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_slide_importer.py +35 -21
  7. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/api.py +11 -5
  8. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/audit.py +14 -2
  9. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/data.py +17 -0
  10. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/plot.py +19 -0
  11. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/xmlwriter.py +11 -2
  12. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/text.py +72 -0
  13. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/package.py +12 -11
  14. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/serialized.py +23 -14
  15. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/__init__.py +6 -0
  16. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/plot.py +13 -0
  17. python_pptx2-2.16.0/src/pptx2/oxml/customprops.py +170 -0
  18. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/ns.py +2 -0
  19. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/presentation.py +47 -0
  20. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/simpletypes.py +12 -0
  21. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/slide.py +66 -0
  22. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/text.py +33 -0
  23. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/package.py +14 -2
  24. python_pptx2-2.16.0/src/pptx2/parts/customprops.py +129 -0
  25. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/image.py +7 -5
  26. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/presentation.py +21 -6
  27. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/slide.py +68 -1
  28. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/presentation.py +15 -2
  29. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/shapetree.py +45 -4
  30. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/basics.md +30 -0
  31. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/charts.md +1 -0
  32. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/lint.md +9 -0
  33. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/tables.md +10 -0
  34. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/slide.py +104 -0
  35. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/table.py +193 -1
  36. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/text/text.py +134 -3
  37. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/util.py +3 -5
  38. {python_pptx2-2.14.0 → python_pptx2-2.16.0/src/python_pptx2.egg-info}/PKG-INFO +1 -1
  39. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/SOURCES.txt +5 -0
  40. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_chart_toggles.py +17 -0
  41. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_data.py +18 -0
  42. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_plot.py +47 -0
  43. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_xmlwriter.py +6 -0
  44. python_pptx2-2.16.0/tests/integration/test_add_slide_layout.py +216 -0
  45. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/test_round_trip.py +80 -0
  46. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/test_package.py +9 -0
  47. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/test_serialized.py +23 -0
  48. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_presentation.py +47 -1
  49. python_pptx2-2.16.0/tests/oxml/test_slide.py +66 -0
  50. python_pptx2-2.16.0/tests/parts/test_customprops.py +274 -0
  51. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_image.py +34 -1
  52. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_presentation.py +17 -5
  53. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_slide.py +89 -0
  54. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/schema/oxml_schema_validator.py +69 -2
  55. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/schema/test_schema_validity.py +146 -0
  56. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_shapetree.py +87 -0
  57. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_api.py +34 -0
  58. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_audit.py +24 -0
  59. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/minimal_slide.xml +1 -1
  60. python_pptx2-2.16.0/tests/test_pathlike_inputs.py +178 -0
  61. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_slide.py +188 -0
  62. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_table.py +457 -0
  63. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_util.py +35 -1
  64. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/text/test_text.py +204 -2
  65. python_pptx2-2.14.0/tests/oxml/test_slide.py +0 -23
  66. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/LICENSE +0 -0
  67. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/MANIFEST.in +0 -0
  68. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/README.rst +0 -0
  69. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/act-action.feature +0 -0
  70. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/act-hyperlink.feature +0 -0
  71. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-axis-props.feature +0 -0
  72. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-axistitle-props.feature +0 -0
  73. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-category-access.feature +0 -0
  74. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-category-props.feature +0 -0
  75. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-chart.feature +0 -0
  76. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-charttitle-props.feature +0 -0
  77. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-data-props.feature +0 -0
  78. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-datalabels.feature +0 -0
  79. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-gridlines-props.feature +0 -0
  80. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-legend-access.feature +0 -0
  81. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-legend-props.feature +0 -0
  82. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-marker-props.feature +0 -0
  83. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-plot-props.feature +0 -0
  84. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-point-access.feature +0 -0
  85. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-point-props.feature +0 -0
  86. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-replace-data.feature +0 -0
  87. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-series.feature +0 -0
  88. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/cht-ticklabels-props.feature +0 -0
  89. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/dml-color.feature +0 -0
  90. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/dml-effect.feature +0 -0
  91. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/dml-fill.feature +0 -0
  92. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/dml-line.feature +0 -0
  93. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/environment.py +0 -0
  94. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/ph-inherit-props.feature +0 -0
  95. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/ph-insert-shape.feature +0 -0
  96. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/ph-phfmt-props.feature +0 -0
  97. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/ph-placeholder-props.feature +0 -0
  98. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/prs-coreprops.feature +0 -0
  99. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/prs-default-template.feature +0 -0
  100. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/prs-open-save.feature +0 -0
  101. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/prs-presentation-props.feature +0 -0
  102. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-autoshape.feature +0 -0
  103. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-connector.feature +0 -0
  104. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-freeform.feature +0 -0
  105. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-graphicframe.feature +0 -0
  106. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-groupshape.feature +0 -0
  107. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-movie-props.feature +0 -0
  108. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-picture.feature +0 -0
  109. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-placeholder.feature +0 -0
  110. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-shapes.feature +0 -0
  111. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/shp-shared.feature +0 -0
  112. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/sld-background.feature +0 -0
  113. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/sld-slide.feature +0 -0
  114. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/sld-slides.feature +0 -0
  115. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/action.py +0 -0
  116. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/axis.py +0 -0
  117. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/background.py +0 -0
  118. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/category.py +0 -0
  119. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/chart.py +0 -0
  120. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/chartdata.py +0 -0
  121. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/color.py +0 -0
  122. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/coreprops.py +0 -0
  123. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/datalabel.py +0 -0
  124. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/effect.py +0 -0
  125. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/fill.py +0 -0
  126. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/font.py +0 -0
  127. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/font_color.py +0 -0
  128. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/helpers.py +0 -0
  129. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/legend.py +0 -0
  130. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/line.py +0 -0
  131. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/picture.py +0 -0
  132. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/placeholder.py +0 -0
  133. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/plot.py +0 -0
  134. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/presentation.py +0 -0
  135. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/series.py +0 -0
  136. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/shape.py +0 -0
  137. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/shapes.py +0 -0
  138. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/slide.py +0 -0
  139. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/slides.py +0 -0
  140. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/72-dpi.tiff +0 -0
  141. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
  142. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/act-props.pptm +0 -0
  143. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/calibriz.ttf +0 -0
  144. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
  145. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-category-access.pptx +0 -0
  146. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
  147. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
  148. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-charts.pptx +0 -0
  149. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
  150. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  151. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
  152. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-legend.pptx +0 -0
  153. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
  154. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
  155. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-point-access.pptx +0 -0
  156. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-point-props.pptx +0 -0
  157. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
  158. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-series.pptx +0 -0
  159. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  160. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/dml-effect.pptx +0 -0
  161. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/dml-fill.pptx +0 -0
  162. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/dml-line.pptx +0 -0
  163. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/ext-rels.pptx +0 -0
  164. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
  165. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
  166. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
  167. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
  168. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  169. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
  170. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
  171. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
  172. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  173. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  174. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  175. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  176. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  177. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  178. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  179. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  180. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  181. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  182. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  183. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  184. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  185. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  186. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  187. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  188. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  189. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  190. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  191. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  192. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  193. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  194. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  195. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  196. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  197. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  198. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
  199. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
  200. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
  201. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
  202. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/font-color.pptx +0 -0
  203. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
  204. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/just-two-mice.png +0 -0
  205. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
  206. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/minimal.pptx +0 -0
  207. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/monty-truth.png +0 -0
  208. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
  209. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/mst-shapes.pptx +0 -0
  210. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  211. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
  212. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  213. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  214. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/pic.emf +0 -0
  215. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
  216. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/prs-notes.pptx +0 -0
  217. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/prs-properties.pptx +0 -0
  218. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
  219. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/python-icon.jpeg +0 -0
  220. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/python-powered.png +0 -0
  221. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/python.bmp +0 -0
  222. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
  223. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  224. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  225. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  226. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-common-props.pptx +0 -0
  227. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
  228. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
  229. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  230. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  231. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-freeform.pptx +0 -0
  232. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
  233. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
  234. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-picture.pptx +0 -0
  235. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  236. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/shp-shapes.pptx +0 -0
  237. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-background.pptx +0 -0
  238. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-blank.pptx +0 -0
  239. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-notes.pptx +0 -0
  240. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-slide.pptx +0 -0
  241. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sld-slides.pptx +0 -0
  242. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/sonic.gif +0 -0
  243. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/tbl-cell.pptx +0 -0
  244. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  245. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/test.pptx +0 -0
  246. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
  247. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-font-props.pptx +0 -0
  248. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
  249. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  250. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
  251. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/test_files/txt-text.pptx +0 -0
  252. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/text.py +0 -0
  253. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/steps/text_frame.py +0 -0
  254. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/tbl-cell.feature +0 -0
  255. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/tbl-column.feature +0 -0
  256. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-fit-text.feature +0 -0
  257. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-font-color.feature +0 -0
  258. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-font-props.feature +0 -0
  259. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-paragraph.feature +0 -0
  260. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-text.feature +0 -0
  261. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/features/txt-textframe.feature +0 -0
  262. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/pyproject.toml +0 -0
  263. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/setup.cfg +0 -0
  264. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_color.py +0 -0
  265. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_svg.py +0 -0
  266. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_template_applier.py +0 -0
  267. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/_textstyle.py +0 -0
  268. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/accessibility.py +0 -0
  269. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/action.py +0 -0
  270. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/animation.py +0 -0
  271. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/__init__.py +0 -0
  272. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/analytics.py +0 -0
  273. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/axis.py +0 -0
  274. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/category.py +0 -0
  275. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/chart.py +0 -0
  276. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/datalabel.py +0 -0
  277. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/legend.py +0 -0
  278. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/marker.py +0 -0
  279. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/palettes.py +0 -0
  280. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/point.py +0 -0
  281. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/quick_layouts.py +0 -0
  282. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/series.py +0 -0
  283. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/chart/xlsx.py +0 -0
  284. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/compose/__init__.py +0 -0
  285. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/compose/from_spec.py +0 -0
  286. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/__init__.py +0 -0
  287. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/components.py +0 -0
  288. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/figures.py +0 -0
  289. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/layout.py +0 -0
  290. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/recipes.py +0 -0
  291. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/style.py +0 -0
  292. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/design/tokens.py +0 -0
  293. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/diagrams.py +0 -0
  294. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/__init__.py +0 -0
  295. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/chtfmt.py +0 -0
  296. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/color.py +0 -0
  297. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/effect.py +0 -0
  298. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/fill.py +0 -0
  299. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/line.py +0 -0
  300. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/picture.py +0 -0
  301. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/dml/three_d.py +0 -0
  302. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/__init__.py +0 -0
  303. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/action.py +0 -0
  304. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/animation.py +0 -0
  305. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/base.py +0 -0
  306. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/chart.py +0 -0
  307. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/dml.py +0 -0
  308. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/lang.py +0 -0
  309. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/presentation.py +0 -0
  310. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/enum/shapes.py +0 -0
  311. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/exc.py +0 -0
  312. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/formats.py +0 -0
  313. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/geometry.py +0 -0
  314. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/inherit.py +0 -0
  315. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/lint.py +0 -0
  316. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/math.py +0 -0
  317. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/mathml2omml.py +0 -0
  318. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/media.py +0 -0
  319. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/__init__.py +0 -0
  320. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/constants.py +0 -0
  321. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/oxml.py +0 -0
  322. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/packuri.py +0 -0
  323. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/shared.py +0 -0
  324. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/opc/spec.py +0 -0
  325. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/action.py +0 -0
  326. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/__init__.py +0 -0
  327. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/axis.py +0 -0
  328. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/chart.py +0 -0
  329. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
  330. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/legend.py +0 -0
  331. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/marker.py +0 -0
  332. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/series.py +0 -0
  333. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/chart/shared.py +0 -0
  334. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/coreprops.py +0 -0
  335. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/__init__.py +0 -0
  336. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/color.py +0 -0
  337. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/effect.py +0 -0
  338. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/fill.py +0 -0
  339. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/line.py +0 -0
  340. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/dml/three_d.py +0 -0
  341. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
  342. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
  343. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/connector.py +0 -0
  344. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
  345. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
  346. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/picture.py +0 -0
  347. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/shapes/shared.py +0 -0
  348. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/table.py +0 -0
  349. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/theme.py +0 -0
  350. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/oxml/xmlchemy.py +0 -0
  351. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/__init__.py +0 -0
  352. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/chart.py +0 -0
  353. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/coreprops.py +0 -0
  354. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/diagram.py +0 -0
  355. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/embeddedpackage.py +0 -0
  356. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/parts/media.py +0 -0
  357. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/py.typed +0 -0
  358. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/render.py +0 -0
  359. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/section.py +0 -0
  360. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/__init__.py +0 -0
  361. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/autoshape.py +0 -0
  362. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/base.py +0 -0
  363. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/connector.py +0 -0
  364. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/freeform.py +0 -0
  365. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/graphfrm.py +0 -0
  366. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/group.py +0 -0
  367. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/picture.py +0 -0
  368. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shapes/placeholder.py +0 -0
  369. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/shared.py +0 -0
  370. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/SKILL.md +0 -0
  371. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/__init__.py +0 -0
  372. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/__main__.py +0 -0
  373. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/animations.md +0 -0
  374. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/compose.md +0 -0
  375. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/design.md +0 -0
  376. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/effects.md +0 -0
  377. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
  378. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
  379. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/math.md +0 -0
  380. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/picture-effects.md +0 -0
  381. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/render.md +0 -0
  382. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/smart-art.md +0 -0
  383. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
  384. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/theme.md +0 -0
  385. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/three-d.md +0 -0
  386. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/skill/references/transitions.md +0 -0
  387. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/smart_art.py +0 -0
  388. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/spec.py +0 -0
  389. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/table_styles.py +0 -0
  390. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/default.pptx +0 -0
  391. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/docx-icon.emf +0 -0
  392. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/generic-icon.emf +0 -0
  393. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/notes.xml +0 -0
  394. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/notesMaster.xml +0 -0
  395. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/pptx-icon.emf +0 -0
  396. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/theme.xml +0 -0
  397. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
  398. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/text/__init__.py +0 -0
  399. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/text/fonts.py +0 -0
  400. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/text/layout.py +0 -0
  401. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/theme.py +0 -0
  402. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/pptx2/types.py +0 -0
  403. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
  404. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/entry_points.txt +0 -0
  405. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/requires.txt +0 -0
  406. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/src/python_pptx2.egg-info/top_level.txt +0 -0
  407. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/__init__.py +0 -0
  408. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/__init__.py +0 -0
  409. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_analytics.py +0 -0
  410. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_axis.py +0 -0
  411. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_category.py +0 -0
  412. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_chart.py +0 -0
  413. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_collision_strategy.py +0 -0
  414. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_datalabel.py +0 -0
  415. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_legend.py +0 -0
  416. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_marker.py +0 -0
  417. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_palettes.py +0 -0
  418. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_point.py +0 -0
  419. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_quick_layouts.py +0 -0
  420. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_series.py +0 -0
  421. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/chart/test_xlsx.py +0 -0
  422. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/__init__.py +0 -0
  423. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_components.py +0 -0
  424. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_figures.py +0 -0
  425. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_layout.py +0 -0
  426. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_recipes.py +0 -0
  427. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_style.py +0 -0
  428. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/design/test_tokens.py +0 -0
  429. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/__init__.py +0 -0
  430. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_chtfmt.py +0 -0
  431. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_color.py +0 -0
  432. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_effect.py +0 -0
  433. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_fill.py +0 -0
  434. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_line.py +0 -0
  435. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/dml/test_three_d.py +0 -0
  436. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/enum/__init__.py +0 -0
  437. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/enum/test_base.py +0 -0
  438. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/enum/test_shapes.py +0 -0
  439. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/__init__.py +0 -0
  440. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/round_trip.py +0 -0
  441. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/test_apply_template.py +0 -0
  442. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/test_compose_package.py +0 -0
  443. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/integration/test_import_slide.py +0 -0
  444. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/__init__.py +0 -0
  445. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/test_oxml.py +0 -0
  446. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/opc/test_packuri.py +0 -0
  447. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/__init__.py +0 -0
  448. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/__init__.py +0 -0
  449. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/test_autoshape.py +0 -0
  450. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
  451. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/test_groupshape.py +0 -0
  452. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/shapes/test_picture.py +0 -0
  453. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test___init__.py +0 -0
  454. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_dml.py +0 -0
  455. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_ns.py +0 -0
  456. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_simpletypes.py +0 -0
  457. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_table.py +0 -0
  458. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_theme.py +0 -0
  459. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/test_xmlchemy.py +0 -0
  460. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/unitdata/__init__.py +0 -0
  461. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/unitdata/dml.py +0 -0
  462. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/unitdata/shape.py +0 -0
  463. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/oxml/unitdata/text.py +0 -0
  464. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/__init__.py +0 -0
  465. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_chart.py +0 -0
  466. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_coreprops.py +0 -0
  467. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_embeddedpackage.py +0 -0
  468. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/parts/test_media.py +0 -0
  469. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/schema/__init__.py +0 -0
  470. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/__init__.py +0 -0
  471. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_anchor.py +0 -0
  472. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_animate.py +0 -0
  473. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_autoshape.py +0 -0
  474. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_base.py +0 -0
  475. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_connector.py +0 -0
  476. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_freeform.py +0 -0
  477. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_graphfrm.py +0 -0
  478. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_group.py +0 -0
  479. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_picture.py +0 -0
  480. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/shapes/test_placeholder.py +0 -0
  481. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_accessibility.py +0 -0
  482. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_action.py +0 -0
  483. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_animation.py +0 -0
  484. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_compose_from_spec.py +0 -0
  485. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_diagrams.py +0 -0
  486. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/calibriz.ttf +0 -0
  487. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/cdw-logo.eps +0 -0
  488. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/dummy.mp4 +0 -0
  489. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
  490. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
  491. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
  492. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
  493. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  494. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
  495. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
  496. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
  497. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  498. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  499. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  500. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  501. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  502. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  503. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  504. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  505. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  506. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  507. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  508. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  509. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  510. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  511. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  512. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  513. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  514. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  515. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  516. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  517. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  518. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  519. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  520. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  521. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  522. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  523. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
  524. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
  525. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
  526. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
  527. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/minimal.pptx +0 -0
  528. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/missing_rels_item.pptx +0 -0
  529. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/monty-truth.png +0 -0
  530. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/no-core-props.pptx +0 -0
  531. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/no-slides.pptx +0 -0
  532. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/presentation.xml +0 -0
  533. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/python-icon.jpeg +0 -0
  534. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/python-powered.png +0 -0
  535. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/python.bmp +0 -0
  536. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/slideLayout1.xml +0 -0
  537. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
  538. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
  539. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
  540. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
  541. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
  542. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-area.txt +0 -0
  543. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
  544. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
  545. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
  546. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
  547. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
  548. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
  549. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
  550. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
  551. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
  552. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
  553. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
  554. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
  555. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
  556. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
  557. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
  558. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x2-line.txt +0 -0
  559. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
  560. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
  561. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
  562. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
  563. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
  564. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
  565. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
  566. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
  567. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
  568. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
  569. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
  570. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
  571. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
  572. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
  573. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/cat-labels.txt +0 -0
  574. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
  575. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/default-notes.txt +0 -0
  576. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
  577. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/default-theme.txt +0 -0
  578. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/freeform.txt +0 -0
  579. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
  580. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/placeholders.txt +0 -0
  581. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
  582. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/relationships.txt +0 -0
  583. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
  584. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
  585. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/snippets/timing.txt +0 -0
  586. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/test.pptx +0 -0
  587. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_files/test_slides.pptx +0 -0
  588. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_formats.py +0 -0
  589. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_geometry.py +0 -0
  590. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_inherit.py +0 -0
  591. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_lint.py +0 -0
  592. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_lint_on_save.py +0 -0
  593. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_math.py +0 -0
  594. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_media.py +0 -0
  595. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_new_features.py +0 -0
  596. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_package.py +0 -0
  597. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_powerpoint_strict_validation.py +0 -0
  598. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_presentation.py +0 -0
  599. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_render.py +0 -0
  600. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_render_slides_alias.py +0 -0
  601. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_section.py +0 -0
  602. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_shape_helpers.py +0 -0
  603. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_shared.py +0 -0
  604. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_skill.py +0 -0
  605. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_smart_art.py +0 -0
  606. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_svg_picture.py +0 -0
  607. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_table_extras.py +0 -0
  608. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_theme.py +0 -0
  609. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/test_transition_morph.py +0 -0
  610. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/text/__init__.py +0 -0
  611. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/text/test_fonts.py +0 -0
  612. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/text/test_layout.py +0 -0
  613. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitdata.py +0 -0
  614. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitutil/__init__.py +0 -0
  615. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitutil/cxml.py +0 -0
  616. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitutil/file.py +0 -0
  617. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tests/unitutil/mock.py +0 -0
  618. {python_pptx2-2.14.0 → python_pptx2-2.16.0}/tox.ini +0 -0
@@ -15,6 +15,126 @@ 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.16.0 (2026-08-30)
19
+ +++++++++++++++++++
20
+
21
+ Added
22
+ .....
23
+
24
+ * ``audit(..., extra_safe_fonts=[...])`` — the font-warning probe now
25
+ accepts additional fonts to treat as safe (case-insensitive), on top
26
+ of the built-in common Windows/macOS/Office list. For rendering
27
+ environments that genuinely ship a font the built-in list doesn't
28
+ know — e.g. a Linux sandbox whose font policy standardizes on
29
+ ``DejaVu Sans`` — this keeps the audit signal instead of drowning it
30
+ in per-slide warnings.
31
+
32
+
33
+ 2.15.0 (2026-08-30)
34
+ +++++++++++++++++++
35
+
36
+ Twelve ports from the upstream ``scanny/python-pptx`` pull-request
37
+ backlog, triaged against this fork's existing surface: four correctness
38
+ fixes (notes-master registration, ``.potx`` opening, MPO images,
39
+ ``PathLike`` inputs) and eight features (``add_paragraph(text=...)``,
40
+ ``get_by_name()`` on shape collections, doughnut first-slice angle,
41
+ ``Slides.remove()``, table row/column add & remove, custom document
42
+ properties, slide-number/date fields, slide-layout authoring).
43
+
44
+ Added
45
+ .....
46
+
47
+ * ``TextFrame.add_paragraph()`` accepts an optional ``text`` argument.
48
+ When given, the new paragraph carries that text as a single run
49
+ (``add_paragraph("Hello")`` is equivalent to ``add_paragraph()``
50
+ followed by setting ``.text``); when omitted, an empty paragraph is
51
+ added exactly as before (upstream feature by kckaiwei,
52
+ ``scanny/python-pptx#602``).
53
+ * ``get_by_name(name, default=None)`` on shape collections
54
+ (``slide.shapes``, layout/master/notes shape trees, group shapes, and
55
+ placeholder collections via ``_BaseShapes``) — returns the first
56
+ shape whose ``name`` matches, or ``default`` when none does
57
+ (port of `scanny/python-pptx#798`_ by lthamm).
58
+
59
+ .. _`scanny/python-pptx#798`: https://github.com/scanny/python-pptx/pull/798
60
+ * ``DoughnutPlot.first_slice_angle`` — read/write angle in degrees
61
+ (0–359) of the first doughnut slice, mapped to the
62
+ ``<c:firstSliceAng>`` element. ``CategoryChartData.first_slice_angle``
63
+ bakes the angle into charts created with ``add_chart``; the plot
64
+ property also works on charts opened from a file.
65
+ * ``prs.slides.remove(slide)`` — delete a slide from the presentation,
66
+ accepting either the |Slide| object or its integer slide id (upstream's
67
+ ``remove_slide`` signature). Purges ``p14:section`` membership and drops
68
+ the presentation→slide relationship so the slide part (and its notes
69
+ slide) fall out of the saved package. Raises ``ValueError`` for a slide
70
+ not in the collection. Removing the last slide yields a valid, empty
71
+ deck.
72
+ * ``table.rows.add_row()`` / ``table.rows.remove(row_or_idx)`` and
73
+ ``table.columns.add_column(width=None)`` /
74
+ ``table.columns.remove(col_or_idx)`` — grow and shrink an existing
75
+ table. A new row/column copies the height/width and cell formatting
76
+ of the last row/column and arrives empty and unmerged; removal keeps
77
+ the one-``a:tc``-per-``a:gridCol`` invariant, resizes the graphic
78
+ frame, and raises ``ValueError`` rather than truncate a merged cell
79
+ spanning multiple rows/columns. Port of scanny/python-pptx#399 by
80
+ Ignisor.
81
+ * ``prs.custom_properties`` — mapping-style read/write access to the
82
+ user-defined document properties in ``/docProps/custom.xml``.
83
+ ``get``/``set``/``delete`` with ``str``, ``int``, ``float``, and
84
+ ``bool`` values (stored as ``vt:lpstr``, ``vt:i4``, ``vt:r8``, and
85
+ ``vt:bool``); the part and its package-root relationship are created
86
+ lazily by the first assignment, and files that already carry a
87
+ custom-properties part open mapped to the new part class. Port of
88
+ ``scanny/python-pptx#342`` by stadlerism.
89
+ * ``SlideLayouts.add_layout()`` appends a blank slide layout to a slide
90
+ master, named ``"Layout %s"`` by default (the ``%s`` is substituted with
91
+ the new master-to-layout relationship id). ``SlideLayouts.clone()``
92
+ deep-copies an existing layout of the same presentation — placeholders,
93
+ shapes, and referenced images included — under a non-colliding name, and
94
+ ``LayoutShapes.add_placeholder()`` adds a placeholder to a layout,
95
+ defaulting its idx to the matching master placeholder so inheritance and
96
+ ``slide.shapes.title`` keep working.
97
+
98
+
99
+ Fixed
100
+ .....
101
+
102
+ * Creating a notes master (``prs.notes_master`` on a deck without one,
103
+ e.g. the default template) related the new part but never wrote the
104
+ matching ``p:notesMasterIdLst`` / ``p:notesMasterId`` entry into
105
+ ``presentation.xml``, so PowerPoint could flag the saved file for
106
+ repair. The id list is now registered on creation and reconciled on
107
+ access for decks saved by older versions (port of
108
+ scanny/python-pptx#1128 by robbybrodie).
109
+ * ``@lazyproperty`` now caches a getter that legitimately returns
110
+ ``None``. The instance-cache hit test compared the cached value to
111
+ ``None``, so a ``None``-returning getter was silently re-evaluated on
112
+ every access, contradicting the decorator's documented evaluate-once
113
+ guarantee. The check is now key presence in the host object's
114
+ ``__dict__`` (upstream fix by Afonso Januário,
115
+ ``fix/lazyproperty-none-value-caching``).
116
+ * MPO-encoded JPEG images (multi-picture object files common from
117
+ cameras, ``.mpo``) are accepted by ``add_picture()`` and
118
+ ``Image.from_file()`` instead of raising ``ValueError: unsupported
119
+ image format``. Pillow reports these as format ``MPO``; they are
120
+ mapped to the canonical ``jpg`` extension and ``image/jpeg``
121
+ content type (port of scanny/python-pptx#1075 by riparuk).
122
+ * ``Presentation()`` now opens ``.potx`` template files. The main-document
123
+ part check only accepted the presentation and macro-enabled presentation
124
+ content types, so a template package raised ``ValueError``; the
125
+ ``presentationml.template.main+xml`` type is now accepted as well (port
126
+ of scanny/python-pptx#1071 by 9021007).
127
+ * ``os.PathLike`` inputs (e.g. ``pathlib.Path``) are now accepted
128
+ wherever a file path was: ``Presentation()`` open and ``save()``,
129
+ ``Image.from_file()``, ``shapes.add_picture()``, and picture-placeholder
130
+ ``insert_picture()``. Previously a ``Path`` raised ``TypeError`` from
131
+ ``Image.from_file()`` and was misrouted as a stream by the package
132
+ reader. No behavior change for ``str`` or file-like inputs (port of
133
+ `scanny/python-pptx#1123`_ by AlexanderWillner).
134
+
135
+ .. _`scanny/python-pptx#1123`: https://github.com/scanny/python-pptx/pull/1123
136
+
137
+
18
138
  2.14.0 (2026-08-26)
19
139
  +++++++++++++++++++
20
140
 
@@ -28,6 +148,12 @@ to concatenated digits (``7/10`` → ``710``). Slides now declare the
28
148
  Added
29
149
  .....
30
150
 
151
+ * ``Paragraph.add_field()`` appends slide-number and date/time fields
152
+ (``a:fld``) to a paragraph, with the new ``MSO_TEXT_FIELD_TYPE``
153
+ enumeration covering the ``slidenum`` / ``datetime*`` tokens. Fields are
154
+ created with the schema-required braced GUID ``id`` and a cached-text
155
+ (``a:t``) placeholder PowerPoint replaces with the computed value at
156
+ render time; ``_Field`` exposes ``type``, ``text``, and ``font``.
31
157
  * **Bundled ``pptx2.mathml2omml``** — spec-compliant ``m:f`` / ``m:rad``
32
158
  / ``m:nary`` / ``m:sSub`` / matrices / accents. ``python-pptx2[math]``
33
159
  now only needs ``latex2mathml``.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 2.14.0
3
+ Version: 2.16.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
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from behave import given, then, when
6
- from helpers import test_pptx
6
+ from helpers import saved_pptx_path, test_pptx
7
7
 
8
8
  from pptx2 import Presentation
9
9
  from pptx2.enum.text import MSO_ANCHOR # noqa # pyright: ignore[reportUnusedImport]
@@ -16,6 +16,8 @@ from pptx2.util import Inches
16
16
  @given("a 2x2 Table object as table")
17
17
  def given_a_2x2_Table_object_as_table(context):
18
18
  prs = Presentation(test_pptx("shp-shapes"))
19
+ # ---prs is stashed so a later "I save the presentation" step can save it---
20
+ context.prs = prs
19
21
  context.table_ = prs.slides[0].shapes[3].table
20
22
 
21
23
 
@@ -152,6 +154,26 @@ def when_I_call_origin_cell_merge_other_cell(context):
152
154
  context.origin_cell.merge(context.other_cell)
153
155
 
154
156
 
157
+ @when("I add a row to the table")
158
+ def when_I_add_a_row_to_the_table(context):
159
+ context.table_.rows.add_row()
160
+
161
+
162
+ @when("I add a column to the table")
163
+ def when_I_add_a_column_to_the_table(context):
164
+ context.table_.columns.add_column()
165
+
166
+
167
+ @when("I remove the second row of the table")
168
+ def when_I_remove_the_second_row_of_the_table(context):
169
+ context.table_.rows.remove(1)
170
+
171
+
172
+ @when("I remove the second column of the table")
173
+ def when_I_remove_the_second_column_of_the_table(context):
174
+ context.table_.columns.remove(1)
175
+
176
+
155
177
  # then ====================================================
156
178
 
157
179
 
@@ -298,6 +320,24 @@ def then_table_rows_is_a_type_object(context, type_name):
298
320
  assert actual == expected, "table.rows is a %s object" % actual
299
321
 
300
322
 
323
+ @then("the saved table has {int_lit} rows")
324
+ @then("the saved table has {int_lit} row")
325
+ def then_the_saved_table_has_n_rows(context, int_lit):
326
+ table = Presentation(saved_pptx_path).slides[0].shapes[3].table
327
+ actual = len(table.rows)
328
+ expected = int(int_lit)
329
+ assert actual == expected, "the saved table has %s rows" % actual
330
+
331
+
332
+ @then("the saved table has {int_lit} columns")
333
+ @then("the saved table has {int_lit} column")
334
+ def then_the_saved_table_has_n_columns(context, int_lit):
335
+ table = Presentation(saved_pptx_path).slides[0].shapes[3].table
336
+ actual = len(table.columns)
337
+ expected = int(int_lit)
338
+ assert actual == expected, "the saved table has %s columns" % actual
339
+
340
+
301
341
  @then("table.vert_banding is {bool_lit}")
302
342
  def then_table_vert_banding_is_value(context, bool_lit):
303
343
  actual = context.table_.vert_banding
@@ -58,3 +58,31 @@ Feature: Table properties and methods
58
58
  Given a 2x2 Table object as table
59
59
  When I assign table.vert_banding = True
60
60
  Then table.vert_banding is True
61
+
62
+
63
+ Scenario: Append table row
64
+ Given a 2x2 Table object as table
65
+ When I add a row to the table
66
+ And I save the presentation
67
+ Then the saved table has 3 rows
68
+
69
+
70
+ Scenario: Remove table row
71
+ Given a 2x2 Table object as table
72
+ When I remove the second row of the table
73
+ And I save the presentation
74
+ Then the saved table has 1 row
75
+
76
+
77
+ Scenario: Append table column
78
+ Given a 2x2 Table object as table
79
+ When I add a column to the table
80
+ And I save the presentation
81
+ Then the saved table has 3 columns
82
+
83
+
84
+ Scenario: Remove table column
85
+ Given a 2x2 Table object as table
86
+ When I remove the second column of the table
87
+ And I save the presentation
88
+ Then the saved table has 1 column
@@ -35,6 +35,7 @@ from pptx2.opc.constants import CONTENT_TYPE as CT
35
35
  from pptx2.opc.package import PartFactory
36
36
  from pptx2.parts.chart import ChartPart
37
37
  from pptx2.parts.coreprops import CorePropertiesPart
38
+ from pptx2.parts.customprops import CustomPropertiesPart
38
39
  from pptx2.parts.diagram import (
39
40
  DiagramColorsPart,
40
41
  DiagramDataPart,
@@ -56,7 +57,7 @@ from pptx2.parts.slide import (
56
57
  if TYPE_CHECKING:
57
58
  from pptx2.opc.package import Part
58
59
 
59
- __version__ = "2.14.0"
60
+ __version__ = "2.16.0"
60
61
 
61
62
  sys.modules["pptx2.exceptions"] = exceptions
62
63
  del sys
@@ -98,6 +99,7 @@ content_type_to_part_class_map: dict[str, type[Part]] = {
98
99
  CT.PML_TEMPLATE_MAIN: PresentationPart,
99
100
  CT.PML_SLIDESHOW_MAIN: PresentationPart,
100
101
  CT.OPC_CORE_PROPERTIES: CorePropertiesPart,
102
+ CT.OFC_CUSTOM_PROPERTIES: CustomPropertiesPart,
101
103
  CT.PML_NOTES_MASTER: NotesMasterPart,
102
104
  CT.PML_NOTES_SLIDE: NotesSlidePart,
103
105
  CT.PML_SLIDE: SlidePart,
@@ -136,6 +138,7 @@ PartFactory.part_type_for.update(content_type_to_part_class_map)
136
138
  del (
137
139
  ChartPart,
138
140
  CorePropertiesPart,
141
+ CustomPropertiesPart,
139
142
  DiagramColorsPart,
140
143
  DiagramDataPart,
141
144
  DiagramLayoutPart,
@@ -93,6 +93,37 @@ def import_slide(
93
93
  return importer.run()
94
94
 
95
95
 
96
+ def next_layout_hierarchy_id(prs_part: PresentationPart) -> int:
97
+ """Return a fresh unique id for a `p:sldMasterId` / `p:sldLayoutId` entry.
98
+
99
+ These share one id space starting at 2147483648 (ST_SlideMasterId /
100
+ ST_SlideLayoutId minimum); duplicates across the presentation are a
101
+ repair trigger, so scan every master's layout-id list plus the
102
+ presentation's master-id list for the current maximum. Used both when
103
+ cloning masters (import_slide) and when adding or cloning slide layouts.
104
+ """
105
+ used = [2147483647]
106
+ prs_element = prs_part._element # pyright: ignore[reportPrivateUsage]
107
+ used += [int(v) for v in prs_element.xpath("p:sldMasterIdLst/p:sldMasterId/@id")]
108
+ for dst_master_part in _iter_master_parts(prs_part):
109
+ used += [
110
+ int(v)
111
+ for v in dst_master_part._element.xpath( # pyright: ignore[reportPrivateUsage]
112
+ "p:sldLayoutIdLst/p:sldLayoutId/@id"
113
+ )
114
+ ]
115
+ return max(used) + 1
116
+
117
+
118
+ def _iter_master_parts(prs_part: PresentationPart):
119
+ """Yield each SlideMasterPart referenced from *prs_part*'s `p:sldMasterIdLst`."""
120
+ prs_element = prs_part._element # pyright: ignore[reportPrivateUsage]
121
+ if prs_element.sldMasterIdLst is None:
122
+ return
123
+ for entry in prs_element.sldMasterIdLst.sldMasterId_lst:
124
+ yield prs_part.related_part(entry.rId)
125
+
126
+
96
127
  # ---------------------------------------------------------------------------
97
128
  # Internal implementation
98
129
  # ---------------------------------------------------------------------------
@@ -169,13 +200,9 @@ class _SlideImporter:
169
200
  return dst_master_part
170
201
  return None
171
202
 
172
- def _iter_dst_masters(self): # type: ignore[return]
203
+ def _iter_dst_masters(self):
173
204
  """Yield each SlideMasterPart already in the destination presentation."""
174
- prs_element = self._dst_prs_part._element # pyright: ignore[reportPrivateUsage]
175
- if prs_element.sldMasterIdLst is None:
176
- return
177
- for entry in prs_element.sldMasterIdLst.sldMasterId_lst:
178
- yield self._dst_prs_part.related_part(entry.rId)
205
+ yield from _iter_master_parts(self._dst_prs_part)
179
206
 
180
207
  def _find_or_clone_layout_in_master(
181
208
  self, src_layout_part: SlideLayoutPart, dst_master_part: SlideMasterPart
@@ -325,22 +352,9 @@ class _SlideImporter:
325
352
  def _next_hierarchy_id(self) -> int:
326
353
  """Return a fresh unique id for a `p:sldMasterId` / `p:sldLayoutId` entry.
327
354
 
328
- These share one id space starting at 2147483648 (ST_SlideMasterId /
329
- ST_SlideLayoutId minimum); duplicates across the presentation are a
330
- repair trigger, so scan every master's layout-id list plus the
331
- presentation's master-id list for the current maximum.
355
+ See :func:`next_layout_hierarchy_id`.
332
356
  """
333
- used = [2147483647]
334
- prs_element = self._dst_prs_part._element # pyright: ignore[reportPrivateUsage]
335
- used += [int(v) for v in prs_element.xpath("p:sldMasterIdLst/p:sldMasterId/@id")]
336
- for dst_master_part in self._iter_dst_masters():
337
- used += [
338
- int(v)
339
- for v in dst_master_part._element.xpath( # pyright: ignore[reportPrivateUsage]
340
- "p:sldLayoutIdLst/p:sldLayoutId/@id"
341
- )
342
- ]
343
- return max(used) + 1
357
+ return next_layout_hierarchy_id(self._dst_prs_part)
344
358
 
345
359
  # ------------------------------------------------------------------
346
360
  # Slide copy
@@ -18,12 +18,14 @@ if TYPE_CHECKING:
18
18
  from pptx2.parts.presentation import PresentationPart
19
19
 
20
20
 
21
- def Presentation(pptx: str | IO[bytes] | None = None) -> presentation.Presentation:
21
+ def Presentation(
22
+ pptx: str | os.PathLike[str] | IO[bytes] | None = None,
23
+ ) -> presentation.Presentation:
22
24
  """
23
25
  Return a |Presentation| object loaded from *pptx*, where *pptx* can be
24
- either a path to a ``.pptx`` file (a string) or a file-like object. If
25
- *pptx* is missing or ``None``, the built-in default presentation
26
- "template" is loaded.
26
+ either a path to a ``.pptx`` file (a string or ``pathlib.Path``) or a
27
+ file-like object. If *pptx* is missing or ``None``, the built-in default
28
+ presentation "template" is loaded.
27
29
  """
28
30
  if pptx is None:
29
31
  pptx = _default_pptx_path()
@@ -45,5 +47,9 @@ def _default_pptx_path() -> str:
45
47
 
46
48
  def _is_pptx_package(prs_part: PresentationPart):
47
49
  """Return |True| if *prs_part* is a valid main document part, |False| otherwise."""
48
- valid_content_types = (CT.PML_PRESENTATION_MAIN, CT.PML_PRES_MACRO_MAIN)
50
+ valid_content_types = (
51
+ CT.PML_PRESENTATION_MAIN,
52
+ CT.PML_PRES_MACRO_MAIN,
53
+ CT.PML_TEMPLATE_MAIN,
54
+ )
49
55
  return prs_part.content_type in valid_content_types
@@ -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
@@ -174,15 +174,27 @@ def audit(
174
174
  *,
175
175
  size_warn_bytes: int = 2_000_000,
176
176
  check_fonts: bool = True,
177
+ extra_safe_fonts: "Iterable[str] | None" = None,
177
178
  ) -> AuditReport:
178
179
  """Walk the deck and return an :class:`AuditReport` summary.
179
180
 
180
181
  Read-only — never mutates the presentation. Each slide is linted
181
182
  in passing-defaults mode; per-slide overrides should be supplied
182
183
  via the slide-level ``slide.lint(...)`` API directly.
184
+
185
+ *extra_safe_fonts* names additional fonts to treat as safe for the
186
+ font-warning probe, on top of the common Windows/macOS/Office set
187
+ (matching is case-insensitive). Use it where the rendering
188
+ environment genuinely ships the font — e.g. ``DejaVu Sans`` in a
189
+ sandbox whose font policy standardizes on it, or a corporate font
190
+ you embed in every deck.
183
191
  """
184
192
  from pptx2.shapes.picture import Picture
185
193
 
194
+ safe_fonts = _COMMON_FONTS
195
+ if extra_safe_fonts is not None:
196
+ safe_fonts = _COMMON_FONTS | frozenset(f.lower() for f in extra_safe_fonts)
197
+
186
198
  report = AuditReport()
187
199
  slides = list(prs.slides)
188
200
  report.total_slides = len(slides)
@@ -249,7 +261,7 @@ def audit(
249
261
  for para in tf.paragraphs:
250
262
  for run in para.runs:
251
263
  name = run.font.name
252
- if name and name.lower() not in _COMMON_FONTS:
264
+ if name and name.lower() not in safe_fonts:
253
265
  report.font_warnings.append((idx, name))
254
266
 
255
267
  if content_shapes == 0:
@@ -12,6 +12,7 @@ from pptx2.chart.xlsx import (
12
12
  XyWorkbookWriter,
13
13
  )
14
14
  from pptx2.chart.xmlwriter import ChartXmlWriter
15
+ from pptx2.oxml.simpletypes import ST_FirstSliceAng
15
16
  from pptx2.util import lazyproperty
16
17
 
17
18
 
@@ -268,6 +269,8 @@ class CategoryChartData(_BaseChartData):
268
269
  The corresponding X value is inferred by its position in the sequence.
269
270
  """
270
271
 
272
+ _first_slice_angle = 0
273
+
271
274
  def add_category(self, label):
272
275
  """
273
276
  Return a newly created |data.Category| object having *label* and
@@ -323,6 +326,20 @@ class CategoryChartData(_BaseChartData):
323
326
  """
324
327
  return self._workbook_writer.categories_ref
325
328
 
329
+ @property
330
+ def first_slice_angle(self):
331
+ """
332
+ Read/write int in range 0..359 specifying the angle in degrees of
333
+ the first slice for a doughnut chart created from this chart data,
334
+ clockwise from 12 o'clock. The default is 0, the PowerPoint default.
335
+ """
336
+ return self._first_slice_angle
337
+
338
+ @first_slice_angle.setter
339
+ def first_slice_angle(self, value):
340
+ ST_FirstSliceAng.validate(value)
341
+ self._first_slice_angle = int(value)
342
+
326
343
  def values_ref(self, series):
327
344
  """
328
345
  The Excel worksheet reference to the values for *series* (not
@@ -220,6 +220,25 @@ class DoughnutPlot(_BasePlot):
220
220
  holeSize = self._element.get_or_add_holeSize()
221
221
  holeSize.val = value
222
222
 
223
+ @property
224
+ def first_slice_angle(self):
225
+ """
226
+ Read/write int in range 0..359 specifying the angle in degrees of
227
+ the first slice of this doughnut, clockwise from 12 o'clock. The
228
+ PowerPoint default for a new doughnut chart is 0, which is what this
229
+ property reports when no explicit ``<c:firstSliceAng>`` element is
230
+ present.
231
+ """
232
+ firstSliceAng = self._element.firstSliceAng
233
+ if firstSliceAng is None:
234
+ return 0
235
+ return firstSliceAng.val
236
+
237
+ @first_slice_angle.setter
238
+ def first_slice_angle(self, value):
239
+ firstSliceAng = self._element.get_or_add_firstSliceAng()
240
+ firstSliceAng.val = value
241
+
223
242
 
224
243
  class LinePlot(_BasePlot):
225
244
  """
@@ -669,7 +669,7 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
669
669
  ' <c:showBubbleSize val="0"/>\n'
670
670
  ' <c:showLeaderLines val="1"/>\n'
671
671
  " </c:dLbls>\n"
672
- ' <c:firstSliceAng val="0"/>\n'
672
+ ' <c:firstSliceAng val="{firstSliceAng}"/>\n'
673
673
  ' <c:holeSize val="50"/>\n'
674
674
  " </c:doughnutChart>\n"
675
675
  " </c:plotArea>\n"
@@ -693,7 +693,7 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
693
693
  " </a:p>\n"
694
694
  " </c:txPr>\n"
695
695
  "</c:chartSpace>\n"
696
- ).format(**{"ser_xml": self._ser_xml})
696
+ ).format(**{"ser_xml": self._ser_xml, "firstSliceAng": self._firstSliceAng})
697
697
 
698
698
  @property
699
699
  def _explosion_xml(self):
@@ -701,6 +701,15 @@ class _DoughnutChartXmlWriter(_BaseChartXmlWriter):
701
701
  return ' <c:explosion val="25"/>\n'
702
702
  return ""
703
703
 
704
+ @property
705
+ def _firstSliceAng(self):
706
+ """
707
+ The integer angle in degrees for the ``<c:firstSliceAng>`` element,
708
+ taken from the chart data object when it specifies one and 0
709
+ (the PowerPoint default) otherwise.
710
+ """
711
+ return getattr(self._chart_data, "first_slice_angle", 0)
712
+
704
713
  @property
705
714
  def _ser_xml(self):
706
715
  xml = ""
@@ -228,3 +228,75 @@ class PP_PARAGRAPH_ALIGNMENT(BaseXmlEnum):
228
228
 
229
229
 
230
230
  PP_ALIGN = PP_PARAGRAPH_ALIGNMENT
231
+
232
+
233
+ class MSO_TEXT_FIELD_TYPE(BaseXmlEnum):
234
+ """Specifies the kind of value a text field (`a:fld`) displays.
235
+
236
+ Used with :meth:`.Paragraph.add_field` to add a run-like field element to a paragraph.
237
+ The field's displayed text (the actual slide number, the current date, ...) is computed by
238
+ PowerPoint when the slide is rendered; the `a:t` child element holds only the "cached"
239
+ placeholder text readers that do not compute fields will show.
240
+
241
+ Example::
242
+
243
+ from pptx2.enum.text import MSO_TEXT_FIELD_TYPE
244
+
245
+ paragraph.add_field(MSO_TEXT_FIELD_TYPE.SLIDE_NUMBER)
246
+
247
+ The XML tokens are the ST_TextFieldType values DrawingML defines ("slidenum", "datetime",
248
+ "datetime1" through "datetime13") plus "datetimeFigureOut", the token PowerPoint writes for
249
+ an automatically updated date.
250
+ """
251
+
252
+ SLIDE_NUMBER = (1, "slidenum", "The number of the slide the field appears on.")
253
+ """The number of the slide the field appears on."""
254
+
255
+ DATETIME = (2, "datetime", "The date and time in the containing document's default format.")
256
+ """The date and time in the containing document's default format."""
257
+
258
+ DATETIME_1 = (3, "datetime1", "Predefined date/time format 1 (locale-dependent rendering).")
259
+ """Predefined date/time format 1 (locale-dependent rendering)."""
260
+
261
+ DATETIME_2 = (4, "datetime2", "Predefined date/time format 2 (locale-dependent rendering).")
262
+ """Predefined date/time format 2 (locale-dependent rendering)."""
263
+
264
+ DATETIME_3 = (5, "datetime3", "Predefined date/time format 3 (locale-dependent rendering).")
265
+ """Predefined date/time format 3 (locale-dependent rendering)."""
266
+
267
+ DATETIME_4 = (6, "datetime4", "Predefined date/time format 4 (locale-dependent rendering).")
268
+ """Predefined date/time format 4 (locale-dependent rendering)."""
269
+
270
+ DATETIME_5 = (7, "datetime5", "Predefined date/time format 5 (locale-dependent rendering).")
271
+ """Predefined date/time format 5 (locale-dependent rendering)."""
272
+
273
+ DATETIME_6 = (8, "datetime6", "Predefined date/time format 6 (locale-dependent rendering).")
274
+ """Predefined date/time format 6 (locale-dependent rendering)."""
275
+
276
+ DATETIME_7 = (9, "datetime7", "Predefined date/time format 7 (locale-dependent rendering).")
277
+ """Predefined date/time format 7 (locale-dependent rendering)."""
278
+
279
+ DATETIME_8 = (10, "datetime8", "Predefined date/time format 8 (locale-dependent rendering).")
280
+ """Predefined date/time format 8 (locale-dependent rendering)."""
281
+
282
+ DATETIME_9 = (11, "datetime9", "Predefined date/time format 9 (locale-dependent rendering).")
283
+ """Predefined date/time format 9 (locale-dependent rendering)."""
284
+
285
+ DATETIME_10 = (12, "datetime10", "Predefined date/time format 10 (locale-dependent rendering).")
286
+ """Predefined date/time format 10 (locale-dependent rendering)."""
287
+
288
+ DATETIME_11 = (13, "datetime11", "Predefined date/time format 11 (locale-dependent rendering).")
289
+ """Predefined date/time format 11 (locale-dependent rendering)."""
290
+
291
+ DATETIME_12 = (14, "datetime12", "Predefined date/time format 12 (locale-dependent rendering).")
292
+ """Predefined date/time format 12 (locale-dependent rendering)."""
293
+
294
+ DATETIME_13 = (15, "datetime13", "Predefined date/time format 13 (locale-dependent rendering).")
295
+ """Predefined date/time format 13 (locale-dependent rendering)."""
296
+
297
+ DATETIME_FIGURE_OUT = (
298
+ 16,
299
+ "datetimeFigureOut",
300
+ "The current date, in the format PowerPoint figures out automatically.",
301
+ )
302
+ """The current date, in the format PowerPoint figures out automatically."""