python-pptx2 3.1.0__tar.gz → 3.2.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 (683) hide show
  1. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/HISTORY.rst +28 -0
  2. {python_pptx2-3.1.0/src/python_pptx2.egg-info → python_pptx2-3.2.0}/PKG-INFO +1 -1
  3. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/__init__.py +9 -3
  4. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/blocks.py +162 -3
  5. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/lint.py +4 -3
  6. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/render.py +17 -1
  7. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/SKILL.md +19 -5
  8. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/slide-design.md +550 -495
  9. {python_pptx2-3.1.0 → python_pptx2-3.2.0/src/python_pptx2.egg-info}/PKG-INFO +1 -1
  10. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/test_blocks.py +56 -2
  11. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_lint.py +2 -2
  12. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_render_contact_sheet.py +48 -11
  13. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/LICENSE +0 -0
  14. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/MANIFEST.in +0 -0
  15. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/README.rst +0 -0
  16. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/act-action.feature +0 -0
  17. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/act-hyperlink.feature +0 -0
  18. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-axis-props.feature +0 -0
  19. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-axistitle-props.feature +0 -0
  20. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-category-access.feature +0 -0
  21. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-category-props.feature +0 -0
  22. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-chart.feature +0 -0
  23. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-charttitle-props.feature +0 -0
  24. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-data-props.feature +0 -0
  25. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-datalabels.feature +0 -0
  26. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-gridlines-props.feature +0 -0
  27. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-legend-access.feature +0 -0
  28. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-legend-props.feature +0 -0
  29. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-marker-props.feature +0 -0
  30. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-plot-props.feature +0 -0
  31. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-point-access.feature +0 -0
  32. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-point-props.feature +0 -0
  33. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-replace-data.feature +0 -0
  34. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-series.feature +0 -0
  35. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/cht-ticklabels-props.feature +0 -0
  36. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/dml-color.feature +0 -0
  37. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/dml-effect.feature +0 -0
  38. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/dml-fill.feature +0 -0
  39. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/dml-line.feature +0 -0
  40. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/environment.py +0 -0
  41. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/ph-inherit-props.feature +0 -0
  42. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/ph-insert-shape.feature +0 -0
  43. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/ph-phfmt-props.feature +0 -0
  44. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/ph-placeholder-props.feature +0 -0
  45. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/prs-coreprops.feature +0 -0
  46. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/prs-default-template.feature +0 -0
  47. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/prs-open-save.feature +0 -0
  48. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/prs-presentation-props.feature +0 -0
  49. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-autoshape.feature +0 -0
  50. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-connector.feature +0 -0
  51. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-freeform.feature +0 -0
  52. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-graphicframe.feature +0 -0
  53. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-groupshape.feature +0 -0
  54. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-movie-props.feature +0 -0
  55. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-picture.feature +0 -0
  56. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-placeholder.feature +0 -0
  57. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-shapes.feature +0 -0
  58. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/shp-shared.feature +0 -0
  59. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/sld-background.feature +0 -0
  60. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/sld-slide.feature +0 -0
  61. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/sld-slides.feature +0 -0
  62. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/action.py +0 -0
  63. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/axis.py +0 -0
  64. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/background.py +0 -0
  65. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/category.py +0 -0
  66. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/chart.py +0 -0
  67. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/chartdata.py +0 -0
  68. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/color.py +0 -0
  69. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/coreprops.py +0 -0
  70. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/datalabel.py +0 -0
  71. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/effect.py +0 -0
  72. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/fill.py +0 -0
  73. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/font.py +0 -0
  74. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/font_color.py +0 -0
  75. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/helpers.py +0 -0
  76. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/legend.py +0 -0
  77. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/line.py +0 -0
  78. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/picture.py +0 -0
  79. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/placeholder.py +0 -0
  80. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/plot.py +0 -0
  81. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/presentation.py +0 -0
  82. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/series.py +0 -0
  83. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/shape.py +0 -0
  84. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/shapes.py +0 -0
  85. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/slide.py +0 -0
  86. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/slides.py +0 -0
  87. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/table.py +0 -0
  88. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/72-dpi.tiff +0 -0
  89. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/CVS_LOGO.WMF +0 -0
  90. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/act-props.pptm +0 -0
  91. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/calibriz.ttf +0 -0
  92. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-axis-props.pptx +0 -0
  93. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-category-access.pptx +0 -0
  94. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-chart-props.pptx +0 -0
  95. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-chart-type.pptx +0 -0
  96. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-charts.pptx +0 -0
  97. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-datalabels.pptx +0 -0
  98. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  99. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-legend-props.pptx +0 -0
  100. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-legend.pptx +0 -0
  101. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-marker-props.pptx +0 -0
  102. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-plot-props.pptx +0 -0
  103. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-point-access.pptx +0 -0
  104. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-point-props.pptx +0 -0
  105. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-replace-data.pptx +0 -0
  106. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-series.pptx +0 -0
  107. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  108. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/dml-effect.pptx +0 -0
  109. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/dml-fill.pptx +0 -0
  110. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/dml-line.pptx +0 -0
  111. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/ext-rels.pptx +0 -0
  112. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/[Content_Types].xml +0 -0
  113. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/_rels/.rels +0 -0
  114. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/docProps/app.xml +0 -0
  115. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/docProps/core.xml +0 -0
  116. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  117. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +0 -0
  118. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/presProps.xml +0 -0
  119. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/presentation.xml +0 -0
  120. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  121. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  122. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  123. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  124. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  125. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  126. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  127. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  128. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  129. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  130. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  131. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  132. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  133. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  134. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  135. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  136. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  137. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  138. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  139. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  140. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  141. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  142. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  143. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  144. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  145. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  146. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +0 -0
  147. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +0 -0
  148. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +0 -0
  149. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +0 -0
  150. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/font-color.pptx +0 -0
  151. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/just-two-mice.mp4 +0 -0
  152. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/just-two-mice.png +0 -0
  153. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/lyt-shapes.pptx +0 -0
  154. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/minimal.pptx +0 -0
  155. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/monty-truth.png +0 -0
  156. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/mst-placeholders.pptx +0 -0
  157. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/mst-shapes.pptx +0 -0
  158. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  159. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/ph-inherit-props.pptx +0 -0
  160. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  161. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  162. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/pic.emf +0 -0
  163. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/prs-add-slide.pptx +0 -0
  164. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/prs-notes.pptx +0 -0
  165. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/prs-properties.pptx +0 -0
  166. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/prs-slide-masters.pptx +0 -0
  167. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/python-icon.jpeg +0 -0
  168. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/python-powered.png +0 -0
  169. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/python.bmp +0 -0
  170. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-access-chart.pptx +0 -0
  171. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  172. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  173. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  174. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-common-props.pptx +0 -0
  175. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-connector-props.pptx +0 -0
  176. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-embedded-docx.docx +0 -0
  177. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  178. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  179. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-freeform.pptx +0 -0
  180. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-groupshape.pptx +0 -0
  181. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-movie-props.pptx +0 -0
  182. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-picture.pptx +0 -0
  183. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  184. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/shp-shapes.pptx +0 -0
  185. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/sld-background.pptx +0 -0
  186. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/sld-blank.pptx +0 -0
  187. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/sld-notes.pptx +0 -0
  188. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/sld-slide.pptx +0 -0
  189. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/sld-slides.pptx +0 -0
  190. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/sonic.gif +0 -0
  191. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/tbl-cell.pptx +0 -0
  192. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  193. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/test.pptx +0 -0
  194. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/txt-fit-text.pptx +0 -0
  195. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/txt-font-props.pptx +0 -0
  196. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/txt-font-typeface.pptx +0 -0
  197. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  198. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/txt-text-frame.pptx +0 -0
  199. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/test_files/txt-text.pptx +0 -0
  200. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/text.py +0 -0
  201. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/steps/text_frame.py +0 -0
  202. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/tbl-cell.feature +0 -0
  203. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/tbl-column.feature +0 -0
  204. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/tbl-table.feature +0 -0
  205. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/txt-fit-text.feature +0 -0
  206. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/txt-font-color.feature +0 -0
  207. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/txt-font-props.feature +0 -0
  208. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/txt-paragraph.feature +0 -0
  209. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/txt-text.feature +0 -0
  210. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/features/txt-textframe.feature +0 -0
  211. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/pyproject.toml +0 -0
  212. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/setup.cfg +0 -0
  213. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/paper_pptx_doctor/__init__.py +0 -0
  214. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/paper_pptx_doctor/__main__.py +0 -0
  215. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_agent_friendly.py +0 -0
  216. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_color.py +0 -0
  217. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_ownership.py +0 -0
  218. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_slide_importer.py +0 -0
  219. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_svg.py +0 -0
  220. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_template_applier.py +0 -0
  221. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_textstyle.py +0 -0
  222. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_transaction.py +0 -0
  223. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_version.py +0 -0
  224. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/_zipguard.py +0 -0
  225. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/accessibility.py +0 -0
  226. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/action.py +0 -0
  227. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/animation.py +0 -0
  228. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/api.py +0 -0
  229. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/audit.py +0 -0
  230. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/__init__.py +0 -0
  231. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/analytics.py +0 -0
  232. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/axis.py +0 -0
  233. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/category.py +0 -0
  234. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/chart.py +0 -0
  235. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/data.py +0 -0
  236. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/datalabel.py +0 -0
  237. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/legend.py +0 -0
  238. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/marker.py +0 -0
  239. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/palettes.py +0 -0
  240. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/plot.py +0 -0
  241. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/point.py +0 -0
  242. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/quick_layouts.py +0 -0
  243. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/series.py +0 -0
  244. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/xlsx.py +0 -0
  245. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/chart/xmlwriter.py +0 -0
  246. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/compose/__init__.py +0 -0
  247. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/compose/deck_compose.py +0 -0
  248. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/compose/from_spec.py +0 -0
  249. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/__init__.py +0 -0
  250. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/components.py +0 -0
  251. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/figures.py +0 -0
  252. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/layout.py +0 -0
  253. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/palettes.py +0 -0
  254. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/recipes.py +0 -0
  255. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/style.py +0 -0
  256. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/design/tokens.py +0 -0
  257. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/diagrams.py +0 -0
  258. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/diff.py +0 -0
  259. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/dml/__init__.py +0 -0
  260. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/dml/chtfmt.py +0 -0
  261. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/dml/color.py +0 -0
  262. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/dml/effect.py +0 -0
  263. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/dml/fill.py +0 -0
  264. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/dml/line.py +0 -0
  265. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/dml/picture.py +0 -0
  266. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/dml/three_d.py +0 -0
  267. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/edit.py +0 -0
  268. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/__init__.py +0 -0
  269. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/action.py +0 -0
  270. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/animation.py +0 -0
  271. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/base.py +0 -0
  272. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/chart.py +0 -0
  273. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/dml.py +0 -0
  274. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/lang.py +0 -0
  275. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/presentation.py +0 -0
  276. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/shapes.py +0 -0
  277. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/enum/text.py +0 -0
  278. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/errors.py +0 -0
  279. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/exc.py +0 -0
  280. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/formats.py +0 -0
  281. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/geometry.py +0 -0
  282. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/hf.py +0 -0
  283. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/inherit.py +0 -0
  284. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/inspect.py +0 -0
  285. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/math.py +0 -0
  286. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/mathml2omml.py +0 -0
  287. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/media.py +0 -0
  288. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/opc/__init__.py +0 -0
  289. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/opc/constants.py +0 -0
  290. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/opc/oxml.py +0 -0
  291. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/opc/package.py +0 -0
  292. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/opc/packuri.py +0 -0
  293. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/opc/serialized.py +0 -0
  294. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/opc/shared.py +0 -0
  295. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/opc/spec.py +0 -0
  296. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/__init__.py +0 -0
  297. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/action.py +0 -0
  298. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/__init__.py +0 -0
  299. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/axis.py +0 -0
  300. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/chart.py +0 -0
  301. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/datalabel.py +0 -0
  302. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/legend.py +0 -0
  303. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/marker.py +0 -0
  304. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/plot.py +0 -0
  305. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/series.py +0 -0
  306. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/chart/shared.py +0 -0
  307. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/coreprops.py +0 -0
  308. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/customprops.py +0 -0
  309. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/dml/__init__.py +0 -0
  310. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/dml/color.py +0 -0
  311. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/dml/effect.py +0 -0
  312. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/dml/fill.py +0 -0
  313. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/dml/line.py +0 -0
  314. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/dml/three_d.py +0 -0
  315. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/ns.py +0 -0
  316. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/presentation.py +0 -0
  317. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/shapes/__init__.py +0 -0
  318. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/shapes/autoshape.py +0 -0
  319. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/shapes/connector.py +0 -0
  320. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/shapes/graphfrm.py +0 -0
  321. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/shapes/groupshape.py +0 -0
  322. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/shapes/picture.py +0 -0
  323. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/shapes/shared.py +0 -0
  324. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/simpletypes.py +0 -0
  325. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/slide.py +0 -0
  326. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/table.py +0 -0
  327. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/text.py +0 -0
  328. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/theme.py +0 -0
  329. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/oxml/xmlchemy.py +0 -0
  330. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/package.py +0 -0
  331. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/__init__.py +0 -0
  332. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/chart.py +0 -0
  333. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/coreprops.py +0 -0
  334. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/customprops.py +0 -0
  335. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/diagram.py +0 -0
  336. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/embeddedpackage.py +0 -0
  337. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/image.py +0 -0
  338. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/media.py +0 -0
  339. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/presentation.py +0 -0
  340. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/parts/slide.py +0 -0
  341. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/presentation.py +0 -0
  342. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/py.typed +0 -0
  343. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/rebind.py +0 -0
  344. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/section.py +0 -0
  345. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/__init__.py +0 -0
  346. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/autoshape.py +0 -0
  347. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/base.py +0 -0
  348. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/connector.py +0 -0
  349. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/freeform.py +0 -0
  350. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/graphfrm.py +0 -0
  351. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/group.py +0 -0
  352. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/picture.py +0 -0
  353. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/placeholder.py +0 -0
  354. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shapes/shapetree.py +0 -0
  355. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/shared.py +0 -0
  356. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/__init__.py +0 -0
  357. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/__main__.py +0 -0
  358. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/animations.md +0 -0
  359. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/basics.md +0 -0
  360. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/charts.md +0 -0
  361. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/compose.md +0 -0
  362. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/design.md +0 -0
  363. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/editing.md +0 -0
  364. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/effects.md +0 -0
  365. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/end-to-end-deck.md +0 -0
  366. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/geometry-and-arrows.md +0 -0
  367. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/lint.md +0 -0
  368. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/math.md +0 -0
  369. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/picture-effects.md +0 -0
  370. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/render.md +0 -0
  371. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/smart-art.md +0 -0
  372. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/space-aware-authoring.md +0 -0
  373. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/tables.md +0 -0
  374. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/theme.md +0 -0
  375. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/three-d.md +0 -0
  376. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/skill/references/transitions.md +0 -0
  377. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/slide.py +0 -0
  378. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/slideops.py +0 -0
  379. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/smart_art.py +0 -0
  380. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/spec.py +0 -0
  381. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/table.py +0 -0
  382. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/table_styles.py +0 -0
  383. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/templates/default.pptx +0 -0
  384. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/templates/docx-icon.emf +0 -0
  385. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/templates/generic-icon.emf +0 -0
  386. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/templates/notes.xml +0 -0
  387. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/templates/notesMaster.xml +0 -0
  388. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/templates/pptx-icon.emf +0 -0
  389. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/templates/theme.xml +0 -0
  390. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/templates/xlsx-icon.emf +0 -0
  391. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/text/__init__.py +0 -0
  392. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/text/bullet.py +0 -0
  393. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/text/fonts.py +0 -0
  394. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/text/layout.py +0 -0
  395. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/text/text.py +0 -0
  396. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/theme.py +0 -0
  397. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/types.py +0 -0
  398. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/pptx2/util.py +0 -0
  399. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/python_pptx2.egg-info/SOURCES.txt +0 -0
  400. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/python_pptx2.egg-info/dependency_links.txt +0 -0
  401. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/python_pptx2.egg-info/entry_points.txt +0 -0
  402. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/python_pptx2.egg-info/requires.txt +0 -0
  403. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/src/python_pptx2.egg-info/top_level.txt +0 -0
  404. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/__init__.py +0 -0
  405. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/__init__.py +0 -0
  406. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_analytics.py +0 -0
  407. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_axis.py +0 -0
  408. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_category.py +0 -0
  409. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_chart.py +0 -0
  410. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_chart_toggles.py +0 -0
  411. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_collision_strategy.py +0 -0
  412. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_data.py +0 -0
  413. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_datalabel.py +0 -0
  414. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_legend.py +0 -0
  415. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_marker.py +0 -0
  416. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_palettes.py +0 -0
  417. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_plot.py +0 -0
  418. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_point.py +0 -0
  419. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_quick_layouts.py +0 -0
  420. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_series.py +0 -0
  421. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_xlsx.py +0 -0
  422. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/chart/test_xmlwriter.py +0 -0
  423. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/__init__.py +0 -0
  424. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/test_components.py +0 -0
  425. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/test_figures.py +0 -0
  426. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/test_layout.py +0 -0
  427. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/test_palettes.py +0 -0
  428. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/test_recipes.py +0 -0
  429. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/test_style.py +0 -0
  430. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/design/test_tokens.py +0 -0
  431. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/dml/__init__.py +0 -0
  432. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/dml/test_chtfmt.py +0 -0
  433. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/dml/test_color.py +0 -0
  434. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/dml/test_effect.py +0 -0
  435. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/dml/test_fill.py +0 -0
  436. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/dml/test_line.py +0 -0
  437. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/dml/test_three_d.py +0 -0
  438. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/enum/__init__.py +0 -0
  439. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/enum/test_base.py +0 -0
  440. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/enum/test_shapes.py +0 -0
  441. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/integration/__init__.py +0 -0
  442. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/integration/round_trip.py +0 -0
  443. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/integration/test_add_slide_layout.py +0 -0
  444. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/integration/test_apply_template.py +0 -0
  445. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/integration/test_compose_package.py +0 -0
  446. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/integration/test_import_slide.py +0 -0
  447. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/integration/test_round_trip.py +0 -0
  448. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/opc/__init__.py +0 -0
  449. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/opc/test_oxml.py +0 -0
  450. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/opc/test_package.py +0 -0
  451. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/opc/test_packuri.py +0 -0
  452. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/opc/test_serialized.py +0 -0
  453. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/__init__.py +0 -0
  454. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/shapes/__init__.py +0 -0
  455. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/shapes/test_autoshape.py +0 -0
  456. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/shapes/test_graphfrm.py +0 -0
  457. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/shapes/test_groupshape.py +0 -0
  458. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/shapes/test_picture.py +0 -0
  459. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test___init__.py +0 -0
  460. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test_dml.py +0 -0
  461. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test_ns.py +0 -0
  462. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test_presentation.py +0 -0
  463. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test_simpletypes.py +0 -0
  464. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test_slide.py +0 -0
  465. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test_table.py +0 -0
  466. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test_theme.py +0 -0
  467. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/test_xmlchemy.py +0 -0
  468. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/unitdata/__init__.py +0 -0
  469. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/unitdata/dml.py +0 -0
  470. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/unitdata/shape.py +0 -0
  471. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/oxml/unitdata/text.py +0 -0
  472. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/__init__.py +0 -0
  473. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/_authoring/build_fixtures.py +0 -0
  474. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/_authoring/update_goldens.py +0 -0
  475. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/clock.py +0 -0
  476. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/conftest.py +0 -0
  477. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/contract.py +0 -0
  478. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/corpus.py +0 -0
  479. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/fragval.py +0 -0
  480. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/idlists.py +0 -0
  481. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/lo.py +0 -0
  482. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/relint.py +0 -0
  483. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_autofit.py +0 -0
  484. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_batch.py +0 -0
  485. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_bullets.py +0 -0
  486. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_chart_routing.py +0 -0
  487. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_content_type_coverage.py +0 -0
  488. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_contract_harness.py +0 -0
  489. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_deck_manifest.py +0 -0
  490. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_diff.py +0 -0
  491. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_distribution_doctor.py +0 -0
  492. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_edit_text.py +0 -0
  493. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_effective_inspect.py +0 -0
  494. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_fields_hf.py +0 -0
  495. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_fixture_corpus.py +0 -0
  496. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_hf_apply.py +0 -0
  497. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_image_replace.py +0 -0
  498. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_import.py +0 -0
  499. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_inspect_text.py +0 -0
  500. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_notes.py +0 -0
  501. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_package_io_hardening.py +0 -0
  502. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_package_kernel.py +0 -0
  503. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_package_round_trip.py +0 -0
  504. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_rebind.py +0 -0
  505. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_save_destinations.py +0 -0
  506. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_shape_surgery.py +0 -0
  507. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_slide_ops.py +0 -0
  508. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_slide_partname_allocation.py +0 -0
  509. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_table_ops.py +0 -0
  510. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_transaction.py +0 -0
  511. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_walkthrough_pitchbook.py +0 -0
  512. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_walkthrough_qbr.py +0 -0
  513. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_zipguard_end_record.py +0 -0
  514. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/paper/test_zipguard_structural.py +0 -0
  515. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/__init__.py +0 -0
  516. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/test_chart.py +0 -0
  517. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/test_coreprops.py +0 -0
  518. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/test_customprops.py +0 -0
  519. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/test_embeddedpackage.py +0 -0
  520. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/test_image.py +0 -0
  521. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/test_media.py +0 -0
  522. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/test_presentation.py +0 -0
  523. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/parts/test_slide.py +0 -0
  524. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/schema/__init__.py +0 -0
  525. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/schema/oxml_schema_validator.py +0 -0
  526. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/schema/test_schema_validity.py +0 -0
  527. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/__init__.py +0 -0
  528. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_anchor.py +0 -0
  529. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_animate.py +0 -0
  530. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_autoshape.py +0 -0
  531. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_base.py +0 -0
  532. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_connector.py +0 -0
  533. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_freeform.py +0 -0
  534. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_graphfrm.py +0 -0
  535. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_group.py +0 -0
  536. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_picture.py +0 -0
  537. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_placeholder.py +0 -0
  538. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/shapes/test_shapetree.py +0 -0
  539. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_accessibility.py +0 -0
  540. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_action.py +0 -0
  541. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_animation.py +0 -0
  542. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_api.py +0 -0
  543. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_audit.py +0 -0
  544. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_compose_from_spec.py +0 -0
  545. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_diagrams.py +0 -0
  546. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/calibriz.ttf +0 -0
  547. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/cdw-logo.eps +0 -0
  548. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/dummy.mp4 +0 -0
  549. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/[Content_Types].xml +0 -0
  550. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/_rels/.rels +0 -0
  551. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/docProps/app.xml +0 -0
  552. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/docProps/core.xml +0 -0
  553. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  554. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +0 -0
  555. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/presProps.xml +0 -0
  556. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/presentation.xml +0 -0
  557. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  558. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
  559. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
  560. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
  561. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
  562. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
  563. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
  564. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
  565. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
  566. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
  567. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
  568. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
  569. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +0 -0
  570. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +0 -0
  571. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +0 -0
  572. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +0 -0
  573. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +0 -0
  574. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +0 -0
  575. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +0 -0
  576. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +0 -0
  577. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +0 -0
  578. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +0 -0
  579. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +0 -0
  580. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +0 -0
  581. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +0 -0
  582. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +0 -0
  583. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +0 -0
  584. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/tableStyles.xml +0 -0
  585. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +0 -0
  586. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/expanded_pptx/ppt/viewProps.xml +0 -0
  587. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/minimal.pptx +0 -0
  588. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/minimal_slide.xml +0 -0
  589. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/missing_rels_item.pptx +0 -0
  590. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/monty-truth.png +0 -0
  591. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/no-core-props.pptx +0 -0
  592. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/no-slides.pptx +0 -0
  593. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/presentation.xml +0 -0
  594. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/python-icon.jpeg +0 -0
  595. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/python-powered.png +0 -0
  596. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/python.bmp +0 -0
  597. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/slideLayout1.xml +0 -0
  598. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/smart_art_org_chart.pptx +0 -0
  599. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-area-date.txt +0 -0
  600. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-area-float.txt +0 -0
  601. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-area-stacked-100.txt +0 -0
  602. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-area-stacked.txt +0 -0
  603. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-area.txt +0 -0
  604. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-bar-clustered-date.txt +0 -0
  605. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-bar-clustered-float.txt +0 -0
  606. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-bar-clustered.txt +0 -0
  607. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-bar-stacked-100.txt +0 -0
  608. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-bar-stacked.txt +0 -0
  609. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-column-clustered.txt +0 -0
  610. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-column-stacked-100.txt +0 -0
  611. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-column-stacked.txt +0 -0
  612. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-line-date.txt +0 -0
  613. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-line-float.txt +0 -0
  614. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +0 -0
  615. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-line-markers-stacked.txt +0 -0
  616. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-line-markers.txt +0 -0
  617. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-line-stacked-100.txt +0 -0
  618. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-line-stacked.txt +0 -0
  619. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x2-line.txt +0 -0
  620. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x3-bubble-3d.txt +0 -0
  621. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x3-bubble.txt +0 -0
  622. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +0 -0
  623. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x3-xy-lines.txt +0 -0
  624. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +0 -0
  625. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x3-xy-smooth.txt +0 -0
  626. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x3-xy.txt +0 -0
  627. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/2x5-radar.txt +0 -0
  628. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/3x1-pie-exploded.txt +0 -0
  629. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/3x1-pie.txt +0 -0
  630. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/3x2-doughnut-exploded.txt +0 -0
  631. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/3x2-doughnut.txt +0 -0
  632. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/4x2-multi-cat-bar.txt +0 -0
  633. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/adjust-ser-count.txt +0 -0
  634. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/cat-labels.txt +0 -0
  635. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/content-types-xml.txt +0 -0
  636. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/default-notes.txt +0 -0
  637. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/default-notesMaster.txt +0 -0
  638. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/default-theme.txt +0 -0
  639. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/freeform.txt +0 -0
  640. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/package-rels-xml.txt +0 -0
  641. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/placeholders.txt +0 -0
  642. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/presentation-rels-xml.txt +0 -0
  643. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/relationships.txt +0 -0
  644. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/rels-load-from-xml.txt +0 -0
  645. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/rewrite-ser.txt +0 -0
  646. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/snippets/timing.txt +0 -0
  647. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/test.pptx +0 -0
  648. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_files/test_slides.pptx +0 -0
  649. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_formats.py +0 -0
  650. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_geometry.py +0 -0
  651. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_inherit.py +0 -0
  652. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_lint_on_save.py +0 -0
  653. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_math.py +0 -0
  654. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_media.py +0 -0
  655. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_new_features.py +0 -0
  656. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_package.py +0 -0
  657. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_pathlike_inputs.py +0 -0
  658. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_powerpoint_strict_validation.py +0 -0
  659. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_presentation.py +0 -0
  660. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_render.py +0 -0
  661. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_render_slides_alias.py +0 -0
  662. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_section.py +0 -0
  663. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_shape_helpers.py +0 -0
  664. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_shared.py +0 -0
  665. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_skill.py +0 -0
  666. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_slide.py +0 -0
  667. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_smart_art.py +0 -0
  668. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_svg_picture.py +0 -0
  669. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_table.py +0 -0
  670. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_table_extras.py +0 -0
  671. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_theme.py +0 -0
  672. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_transition_morph.py +0 -0
  673. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/test_util.py +0 -0
  674. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/text/__init__.py +0 -0
  675. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/text/test_fonts.py +0 -0
  676. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/text/test_layout.py +0 -0
  677. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/text/test_text.py +0 -0
  678. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/unitdata.py +0 -0
  679. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/unitutil/__init__.py +0 -0
  680. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/unitutil/cxml.py +0 -0
  681. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/unitutil/file.py +0 -0
  682. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tests/unitutil/mock.py +0 -0
  683. {python_pptx2-3.1.0 → python_pptx2-3.2.0}/tox.ini +0 -0
@@ -15,6 +15,34 @@ can sit beside both ``python-pptx`` (``pptx``) and ``power-pptx``
15
15
  .. _`scanny/python-pptx`: https://github.com/scanny/python-pptx
16
16
 
17
17
 
18
+ 3.2.0 (2026-09-04)
19
+ ++++++++++++++++++
20
+
21
+ Added
22
+ .....
23
+
24
+ * ``add_code`` (``pptx2.design.blocks``, re-exported at the package root):
25
+ a source-code listing — monospace, one paragraph per line, verbatim and
26
+ unwrapped, on a rounded surface coloured after a Shiki theme
27
+ (``CODE_THEMES``), with optional line numbers and a height-only shrink
28
+ that never goes below the audit's legibility floor. The shape is named
29
+ ``fika:code:<language>:<theme>:<0|1>`` (``code_shape_name``) so an
30
+ editor with a native code block (Fika) restores a highlighted, editable
31
+ code element on import; PowerPoint sees a plain monospace box.
32
+
33
+
34
+ 3.1.1 (2026-09-03)
35
+ ++++++++++++++++++
36
+
37
+ Changed
38
+
39
+ - ``render_contact_sheet`` goes straight to the PDF export when a page
40
+ splitter (``pdftoppm`` or ``pypdfium2``) is available, instead of first
41
+ paying for a ``--convert-to png`` run that stock LibreOffice 7+ answers
42
+ with a single slide. Roughly halves the wall-clock of a visual check on
43
+ a multi-slide deck; ``"auto"`` remains the portable fallback.
44
+
45
+
18
46
  3.1.0 (2026-09-03)
19
47
  ++++++++++++++++++
20
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pptx2
3
- Version: 3.1.0
3
+ Version: 3.2.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
@@ -8,15 +8,16 @@ from typing import TYPE_CHECKING
8
8
  import pptx2.exc as exceptions
9
9
  from pptx2.api import Presentation
10
10
  from pptx2.audit import AuditReport, audit
11
- from pptx2.geometry import BBox
12
11
  from pptx2.design.blocks import (
12
+ CODE_THEMES,
13
13
  Card,
14
14
  FittedPicture,
15
15
  add_bullets,
16
16
  add_card,
17
+ add_code,
17
18
  add_picture_fit,
19
+ code_shape_name,
18
20
  )
19
- from pptx2.design.palettes import PALETTES, Palette, palette
20
21
  from pptx2.design.components import (
21
22
  ArticleCard,
22
23
  Gauge,
@@ -38,6 +39,8 @@ from pptx2.design.figures import (
38
39
  add_plotly_figure,
39
40
  add_svg_figure,
40
41
  )
42
+ from pptx2.design.palettes import PALETTES, Palette, palette
43
+ from pptx2.geometry import BBox
41
44
  from pptx2.math import MathBackendUnavailable
42
45
  from pptx2.opc.constants import CONTENT_TYPE as CT
43
46
  from pptx2.opc.package import PartFactory
@@ -65,7 +68,7 @@ from pptx2.parts.slide import (
65
68
  if TYPE_CHECKING:
66
69
  from pptx2.opc.package import Part
67
70
 
68
- __version__ = "3.1.0"
71
+ __version__ = "3.2.0"
69
72
 
70
73
  sys.modules["pptx2.exceptions"] = exceptions
71
74
  del sys
@@ -103,6 +106,9 @@ __all__ = [
103
106
  "add_card",
104
107
  "add_bullets",
105
108
  "add_picture_fit",
109
+ "add_code",
110
+ "code_shape_name",
111
+ "CODE_THEMES",
106
112
  "Card",
107
113
  "FittedPicture",
108
114
  # Curated colour sets.
@@ -14,6 +14,11 @@ driven by plain hex colours and points so a script needs no token setup:
14
14
  * :func:`add_picture_fit` — a picture placed *inside* a box, either
15
15
  letter-boxed (``mode="contain"``) or cropped to fill (``mode="cover"``),
16
16
  centred, with an optional caption underneath.
17
+ * :func:`add_code` — a source listing: monospace, one paragraph per line,
18
+ no wrapping, on a rounded editor-coloured surface. The shape is *named*
19
+ ``fika:code:<language>:<theme>:<0|1>`` so an editor that has a native
20
+ code block (Fika) restores a syntax-highlighted element from it instead
21
+ of a plain text box; PowerPoint just sees a tidy monospace box.
17
22
 
18
23
  Every block tags the shapes it stacks with ``lint_group`` so the linter
19
24
  treats a card and the text on it as one deliberate cluster, and every
@@ -36,11 +41,14 @@ if TYPE_CHECKING:
36
41
  from pptx2.slide import Slide
37
42
 
38
43
  __all__ = (
44
+ "CODE_THEMES",
39
45
  "Card",
40
46
  "FittedPicture",
41
47
  "add_card",
42
48
  "add_bullets",
49
+ "add_code",
43
50
  "add_picture_fit",
51
+ "code_shape_name",
44
52
  )
45
53
 
46
54
 
@@ -99,7 +107,7 @@ def add_bullets(
99
107
  align: str = "left",
100
108
  anchor: str = "top",
101
109
  margin_pt: float = 0.0,
102
- min_size_pt: float = 12.0,
110
+ min_size_pt: float = 18.0,
103
111
  ) -> "Shape":
104
112
  """Add a bulleted (or numbered) list that fits its box.
105
113
 
@@ -199,7 +207,7 @@ def add_card(
199
207
  align: str = "left",
200
208
  anchor: str = "top",
201
209
  title_gap_pt: float = 6.0,
202
- body_min_size_pt: float = 12.0,
210
+ body_min_size_pt: float = 16.0,
203
211
  numbered: bool = False,
204
212
  ) -> Card:
205
213
  """Add a card: one surface, padded title and body, nothing else.
@@ -260,7 +268,7 @@ def add_card(
260
268
  run.font.size = Pt(title_size_pt)
261
269
  run.font.bold = True
262
270
  run.font.color.rgb = coerce_color(title_color)
263
- _fit(tf, font=font, max_pt=title_size_pt, min_pt=max(12.0, title_size_pt * 0.7), bold=True)
271
+ _fit(tf, font=font, max_pt=title_size_pt, min_pt=max(18.0, title_size_pt * 0.7), bold=True)
264
272
  cursor_top += title_h + int(Pt(title_gap_pt))
265
273
  remaining = int(inner.bottom) - cursor_top
266
274
 
@@ -431,3 +439,154 @@ def add_picture_fit(
431
439
 
432
440
  _tag([picture, caption_box], f"picture@{int(bb.left)},{int(bb.top)}")
433
441
  return FittedPicture(picture=picture, caption_box=caption_box, frame=frame)
442
+
443
+
444
+ # ----------------------------------------------------------------------------- code
445
+
446
+ CODE_SHAPE_NAME_PREFIX = "fika:code"
447
+
448
+ #: Editor themes a listing can be painted in: ``theme -> (background, foreground)``.
449
+ #: The ids are Shiki's, so the tag round-trips into the editor's highlighter;
450
+ #: PowerPoint only sees the two flat colours.
451
+ CODE_THEMES: dict[str, tuple[str, str]] = {
452
+ "github-dark": ("#24292E", "#E1E4E8"),
453
+ "github-light": ("#FFFFFF", "#24292E"),
454
+ "one-dark-pro": ("#282C34", "#ABB2BF"),
455
+ "one-light": ("#FAFAFA", "#383A42"),
456
+ "dracula": ("#282A36", "#F8F8F2"),
457
+ "monokai": ("#272822", "#F8F8F2"),
458
+ "nord": ("#2E3440", "#D8DEE9"),
459
+ "tokyo-night": ("#1A1B26", "#A9B1D6"),
460
+ "night-owl": ("#011627", "#D6DEEB"),
461
+ "catppuccin-mocha": ("#1E1E2E", "#CDD6F4"),
462
+ "catppuccin-latte": ("#EFF1F5", "#4C4F69"),
463
+ "vitesse-dark": ("#121212", "#DBD7CA"),
464
+ "vitesse-light": ("#FFFFFF", "#393A34"),
465
+ "min-dark": ("#1F1F1F", "#B392F0"),
466
+ "min-light": ("#FFFFFF", "#24292E"),
467
+ }
468
+
469
+ _CODE_LANGUAGE_ALIASES = {
470
+ "js": "javascript",
471
+ "ts": "typescript",
472
+ "py": "python",
473
+ "sh": "bash",
474
+ "shell": "bash",
475
+ "zsh": "bash",
476
+ "yml": "yaml",
477
+ "md": "markdown",
478
+ "c++": "cpp",
479
+ "c#": "csharp",
480
+ "cs": "csharp",
481
+ "text": "plaintext",
482
+ "txt": "plaintext",
483
+ "plain": "plaintext",
484
+ }
485
+
486
+
487
+ def _code_language(language: str) -> str:
488
+ key = (language or "plaintext").strip().lower()
489
+ return _CODE_LANGUAGE_ALIASES.get(key, key) or "plaintext"
490
+
491
+
492
+ def code_shape_name(language: str, theme: str = "github-dark", line_numbers: bool = False) -> str:
493
+ """The shape name that marks a text box as a code block for the editor.
494
+
495
+ ``fika:code:<language>:<theme>:<0|1>`` — the same tag Fika writes when it
496
+ exports one of its native code elements, so a deck authored here and a
497
+ deck exported from the editor import identically.
498
+ """
499
+ lang = _code_language(language)
500
+ if ":" in lang or ":" in theme:
501
+ raise ValueError("language and theme must not contain ':'")
502
+ return f"{CODE_SHAPE_NAME_PREFIX}:{lang}:{theme}:{1 if line_numbers else 0}"
503
+
504
+
505
+ def add_code(
506
+ slide: "Slide",
507
+ *bbox_or_positional,
508
+ code: str,
509
+ language: str = "plaintext",
510
+ theme: str = "github-dark",
511
+ size_pt: float = 16.0,
512
+ line_numbers: bool = False,
513
+ font: str = "Consolas",
514
+ pad_pt: float = 12.0,
515
+ radius_pt: float = 10.0,
516
+ line_spacing: float = 1.2,
517
+ tab_width: int = 4,
518
+ min_size_pt: float = 12.0,
519
+ ) -> "Shape":
520
+ """Add a source-code listing that the editor recognises as a code block.
521
+
522
+ ``code`` is written verbatim — one paragraph per line, leading spaces and
523
+ blank lines kept, tabs expanded to ``tab_width`` spaces, never wrapped —
524
+ in a monospace ``font`` on a rounded surface coloured after ``theme``
525
+ (a key of :data:`CODE_THEMES`; unknown names fall back to a dark
526
+ surface). ``language`` is a Shiki id or common alias (``py``, ``cs``,
527
+ ``c#``, ``ts`` …). When the listing is taller than the box the type
528
+ shrinks, never below ``min_size_pt`` — beyond that, split the listing
529
+ across slides instead of squeezing it.
530
+
531
+ The shape is named with :func:`code_shape_name`; an editor with native
532
+ code blocks (Fika) turns it into a highlighted, editable code element
533
+ on import. PowerPoint shows a plain monospace box in the theme colours.
534
+
535
+ Returns the :class:`Shape`.
536
+ """
537
+ from pptx2._color import coerce_color
538
+ from pptx2.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE, PP_ALIGN
539
+
540
+ bb = _as_bbox(bbox_or_positional)
541
+ lines = code.replace("\r\n", "\n").replace("\r", "\n").expandtabs(tab_width).split("\n")
542
+ while lines and not lines[-1].strip():
543
+ lines.pop()
544
+ while lines and not lines[0].strip():
545
+ lines.pop(0)
546
+ if not lines:
547
+ raise ValueError("code must not be empty")
548
+
549
+ bg_hex, fg_hex = CODE_THEMES.get(theme, CODE_THEMES["github-dark"])
550
+ bg, fg = coerce_color(bg_hex), coerce_color(fg_hex)
551
+
552
+ box = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, *bb)
553
+ box.name = code_shape_name(language, theme, line_numbers)
554
+ box.fill.solid()
555
+ box.fill.fore_color.rgb = bg
556
+ box.line.fill.background()
557
+ box.shadow.clear()
558
+ short_edge = min(int(bb.width), int(bb.height))
559
+ box.corner_radius = Emu(min(int(Pt(radius_pt)), short_edge // 2))
560
+
561
+ tf = box.text_frame
562
+ tf.word_wrap = False
563
+ tf.vertical_anchor = MSO_ANCHOR.TOP
564
+ pad = Pt(pad_pt)
565
+ tf.margin_left = tf.margin_right = tf.margin_top = tf.margin_bottom = pad
566
+
567
+ width = len(str(len(lines)))
568
+ for i, line in enumerate(lines):
569
+ para = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
570
+ para.alignment = PP_ALIGN.LEFT
571
+ para.line_spacing = float(line_spacing)
572
+ text = f"{i + 1:>{width}} {line}" if line_numbers else line
573
+ run = para.add_run()
574
+ run.text = text if text else " "
575
+ run.font.name = font
576
+ run.font.size = Pt(size_pt)
577
+ run.font.color.rgb = fg
578
+
579
+ # Fit by height only: a listing must never wrap, so shrink the type until
580
+ # every line has room, then let PowerPoint clip the rest rather than reflow.
581
+ avail_h = int(bb.height) - 2 * int(pad)
582
+ per_line = size_pt * 1.2 * line_spacing
583
+ needed_h = int(Pt(per_line * len(lines)))
584
+ if needed_h > avail_h > 0:
585
+ fitted = max(min_size_pt, size_pt * avail_h / needed_h)
586
+ for para in tf.paragraphs:
587
+ for run in para.runs:
588
+ run.font.size = Pt(fitted)
589
+ tf.auto_size = MSO_AUTO_SIZE.NONE
590
+
591
+ _tag([box], f"code@{int(bb.left)},{int(bb.top)}")
592
+ return box
@@ -293,7 +293,7 @@ class MinFontSize(LintIssue):
293
293
  """A text run uses a font size below the configured legibility threshold."""
294
294
 
295
295
  pt: float = 0.0
296
- threshold_pt: float = 9.0
296
+ threshold_pt: float = 12.0
297
297
 
298
298
  def __init__(self, shape: BaseShape, pt: float, threshold_pt: float):
299
299
  super().__init__(
@@ -1819,10 +1819,11 @@ def _check_collisions(
1819
1819
 
1820
1820
 
1821
1821
  # ---------------------------------------------------------------------------
1822
- # Min font size — flag any run below the legibility threshold (default 9pt).
1822
+ # Min font size — flag any run below the legibility threshold (default 12pt:
1823
+ # projected slides are read from the back of a room, not from a desk).
1823
1824
  # ---------------------------------------------------------------------------
1824
1825
 
1825
- _DEFAULT_MIN_FONT_PT = 9.0
1826
+ _DEFAULT_MIN_FONT_PT = 12.0
1826
1827
  _PT_TO_EMU = 12700
1827
1828
 
1828
1829
 
@@ -324,6 +324,17 @@ def _render_via_pdf(
324
324
  pass
325
325
 
326
326
 
327
+ def _pdf_splitter_available() -> bool:
328
+ """True when the PDF→PNG step can run (Poppler's pdftoppm or pypdfium2)."""
329
+ if shutil.which("pdftoppm") is not None:
330
+ return True
331
+ try:
332
+ import pypdfium2 # type: ignore[import-not-found] # noqa: F401
333
+ except ImportError:
334
+ return False
335
+ return True
336
+
337
+
327
338
  def _pdf_to_pngs(pdf_path: Path, out_dir: Path, *, dpi: int) -> List[Path]:
328
339
  """Split a PDF into one PNG per page in *out_dir* and return the paths.
329
340
 
@@ -615,13 +626,18 @@ def render_contact_sheet(
615
626
 
616
627
  work_dir = Path(tempfile.mkdtemp(prefix="pptx-sheet-"))
617
628
  try:
629
+ # Stock LibreOffice 7+ writes only the first slide through the PNG
630
+ # filter, so for a multi-slide deck "auto" pays for a wasted soffice
631
+ # start before falling back to PDF. Go straight to PDF whenever a
632
+ # page splitter is available; "auto" remains the portable fallback.
633
+ strategy = "pdf" if _pdf_splitter_available() else "auto"
618
634
  paths = render_slide_thumbnails(
619
635
  prs,
620
636
  out_dir=work_dir,
621
637
  slide_indexes=slides,
622
638
  soffice_bin=soffice_bin,
623
639
  timeout=timeout,
624
- strategy="auto",
640
+ strategy=strategy,
625
641
  dpi=dpi,
626
642
  )
627
643
  if not paths:
@@ -38,14 +38,22 @@ helpers that implement it:
38
38
  - one **palette** (`PALETTES["slate"]` → `P.paper / P.ink / P.accent /
39
39
  P.surface / P.muted`; `P.dark()` for title and section slides),
40
40
  - one **grid** (`TITLE` band + `BODY` region; `BODY.columns(n, gap=…)`),
41
- - a **type scale** (title 32, body 2024, card body 16–18, caption 12),
41
+ - a **type scale** read from the back row (title 32–36, body 2226, card
42
+ body 18–20, caption 14 — nothing under 14 pt),
42
43
  - **surfaces done well** — `add_card` is one tinted rounded rectangle with
43
44
  padded text inside, nothing attached to it,
44
45
  - real **bullets** with hanging indents (`add_bullets`), pictures that
45
- keep their aspect (`add_picture_fit`), palette-driven diagrams and
46
+ keep their aspect (`add_picture_fit`), **code listings** the editor
47
+ recognises as code blocks (`add_code`), palette-driven diagrams and
46
48
  tables,
47
- - a catalog of **slide archetypes** (title, section, statement, bullets +
48
- picture, three cards, process, comparison, quote, question, summary),
49
+ - a catalog of **slide archetypes** (title, section, statement, big
50
+ number, bullets + picture, three cards, process, comparison, quote,
51
+ full-bleed photo, question, summary) — planned as a sequence before
52
+ slide 2, consecutive slides never sharing one, dense alternating with
53
+ light,
54
+ - a **visual per slide** chosen for its content: a photo for a real
55
+ thing, a chart for numbers, a diagram for a process, a table for a
56
+ comparison, typeset math for formulas,
49
57
  - and a **visual check**: `prs.render_contact_sheet("preview.png")` — one
50
58
  PNG of every slide, looked at once before shipping.
51
59
 
@@ -61,7 +69,7 @@ working set:
61
69
 
62
70
  ```python
63
71
  from pptx2 import Presentation, BBox, audit, PALETTES
64
- from pptx2 import add_card, add_bullets, add_picture_fit
72
+ from pptx2 import add_card, add_bullets, add_picture_fit, add_code
65
73
  from pptx2.diagrams import horizontal_pipeline, hub_and_spoke, cycle
66
74
  from pptx2.enum.shapes import MSO_SHAPE
67
75
  from pptx2.util import Inches, Pt
@@ -104,6 +112,12 @@ add_bullets(slide, left, items=["First point", "Second point"],
104
112
  add_picture_fit(slide, "photo.jpg", right, mode="contain", # or "cover" to fill + crop
105
113
  caption="Source: Wikimedia", caption_color=P.muted)
106
114
 
115
+ # --- source code: monospace listing, never a plain text box ---
116
+ add_code(slide, right, code='for i in range(3):\n print(i)', language="python",
117
+ size_pt=18) # theme="github-dark" | "github-light" | …; line_numbers=True
118
+ # the shape is named fika:code:<lang>:<theme>:<0|1> — editors with a native
119
+ # code block (Fika) turn it into a highlighted, editable element on import
120
+
107
121
  # --- native equation from LaTeX (pip install "python-pptx2[math]") ---
108
122
  slide.shapes.add_equation(bb, latex=r"\frac{a}{b}", size_pt=28)
109
123
  para = slide.shapes.add_text(bb, text="Euler: ").text_frame.paragraphs[0]