power-pptx 1.1.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 (549) hide show
  1. power_pptx-1.1.0/HISTORY.rst +948 -0
  2. power_pptx-1.1.0/LICENSE +21 -0
  3. power_pptx-1.1.0/MANIFEST.in +5 -0
  4. power_pptx-1.1.0/PKG-INFO +138 -0
  5. power_pptx-1.1.0/README.rst +99 -0
  6. power_pptx-1.1.0/features/act-action.feature +88 -0
  7. power_pptx-1.1.0/features/act-hyperlink.feature +53 -0
  8. power_pptx-1.1.0/features/cht-axis-props.feature +187 -0
  9. power_pptx-1.1.0/features/cht-axistitle-props.feature +44 -0
  10. power_pptx-1.1.0/features/cht-category-access.feature +72 -0
  11. power_pptx-1.1.0/features/cht-category-props.feature +24 -0
  12. power_pptx-1.1.0/features/cht-chart.feature +108 -0
  13. power_pptx-1.1.0/features/cht-charttitle-props.feature +44 -0
  14. power_pptx-1.1.0/features/cht-data-props.feature +107 -0
  15. power_pptx-1.1.0/features/cht-datalabels.feature +208 -0
  16. power_pptx-1.1.0/features/cht-gridlines-props.feature +11 -0
  17. power_pptx-1.1.0/features/cht-legend-access.feature +31 -0
  18. power_pptx-1.1.0/features/cht-legend-props.feature +82 -0
  19. power_pptx-1.1.0/features/cht-marker-props.feature +59 -0
  20. power_pptx-1.1.0/features/cht-plot-props.feature +121 -0
  21. power_pptx-1.1.0/features/cht-point-access.feature +37 -0
  22. power_pptx-1.1.0/features/cht-point-props.feature +21 -0
  23. power_pptx-1.1.0/features/cht-replace-data.feature +40 -0
  24. power_pptx-1.1.0/features/cht-series.feature +144 -0
  25. power_pptx-1.1.0/features/cht-ticklabels-props.feature +26 -0
  26. power_pptx-1.1.0/features/dml-color.feature +22 -0
  27. power_pptx-1.1.0/features/dml-effect.feature +29 -0
  28. power_pptx-1.1.0/features/dml-fill.feature +106 -0
  29. power_pptx-1.1.0/features/dml-line.feature +62 -0
  30. power_pptx-1.1.0/features/environment.py +24 -0
  31. power_pptx-1.1.0/features/ph-inherit-props.feature +33 -0
  32. power_pptx-1.1.0/features/ph-insert-shape.feature +33 -0
  33. power_pptx-1.1.0/features/ph-phfmt-props.feature +25 -0
  34. power_pptx-1.1.0/features/ph-placeholder-props.feature +53 -0
  35. power_pptx-1.1.0/features/prs-coreprops.feature +20 -0
  36. power_pptx-1.1.0/features/prs-default-template.feature +9 -0
  37. power_pptx-1.1.0/features/prs-open-save.feature +39 -0
  38. power_pptx-1.1.0/features/prs-presentation-props.feature +38 -0
  39. power_pptx-1.1.0/features/shp-autoshape.feature +26 -0
  40. power_pptx-1.1.0/features/shp-connector.feature +83 -0
  41. power_pptx-1.1.0/features/shp-freeform.feature +45 -0
  42. power_pptx-1.1.0/features/shp-graphicframe.feature +50 -0
  43. power_pptx-1.1.0/features/shp-groupshape.feature +46 -0
  44. power_pptx-1.1.0/features/shp-movie-props.feature +24 -0
  45. power_pptx-1.1.0/features/shp-picture.feature +73 -0
  46. power_pptx-1.1.0/features/shp-placeholder.feature +16 -0
  47. power_pptx-1.1.0/features/shp-shapes.feature +384 -0
  48. power_pptx-1.1.0/features/shp-shared.feature +211 -0
  49. power_pptx-1.1.0/features/sld-background.feature +15 -0
  50. power_pptx-1.1.0/features/sld-slide.feature +142 -0
  51. power_pptx-1.1.0/features/sld-slides.feature +78 -0
  52. power_pptx-1.1.0/features/steps/action.py +105 -0
  53. power_pptx-1.1.0/features/steps/axis.py +303 -0
  54. power_pptx-1.1.0/features/steps/background.py +27 -0
  55. power_pptx-1.1.0/features/steps/category.py +157 -0
  56. power_pptx-1.1.0/features/steps/chart.py +380 -0
  57. power_pptx-1.1.0/features/steps/chartdata.py +210 -0
  58. power_pptx-1.1.0/features/steps/color.py +70 -0
  59. power_pptx-1.1.0/features/steps/coreprops.py +73 -0
  60. power_pptx-1.1.0/features/steps/datalabel.py +195 -0
  61. power_pptx-1.1.0/features/steps/effect.py +35 -0
  62. power_pptx-1.1.0/features/steps/fill.py +156 -0
  63. power_pptx-1.1.0/features/steps/font.py +150 -0
  64. power_pptx-1.1.0/features/steps/font_color.py +94 -0
  65. power_pptx-1.1.0/features/steps/helpers.py +51 -0
  66. power_pptx-1.1.0/features/steps/legend.py +90 -0
  67. power_pptx-1.1.0/features/steps/line.py +96 -0
  68. power_pptx-1.1.0/features/steps/picture.py +77 -0
  69. power_pptx-1.1.0/features/steps/placeholder.py +312 -0
  70. power_pptx-1.1.0/features/steps/plot.py +135 -0
  71. power_pptx-1.1.0/features/steps/presentation.py +222 -0
  72. power_pptx-1.1.0/features/steps/series.py +345 -0
  73. power_pptx-1.1.0/features/steps/shape.py +671 -0
  74. power_pptx-1.1.0/features/steps/shapes.py +342 -0
  75. power_pptx-1.1.0/features/steps/slide.py +206 -0
  76. power_pptx-1.1.0/features/steps/slides.py +142 -0
  77. power_pptx-1.1.0/features/steps/table.py +305 -0
  78. power_pptx-1.1.0/features/steps/test_files/72-dpi.tiff +0 -0
  79. power_pptx-1.1.0/features/steps/test_files/CVS_LOGO.WMF +0 -0
  80. power_pptx-1.1.0/features/steps/test_files/act-props.pptm +0 -0
  81. power_pptx-1.1.0/features/steps/test_files/calibriz.ttf +0 -0
  82. power_pptx-1.1.0/features/steps/test_files/cht-axis-props.pptx +0 -0
  83. power_pptx-1.1.0/features/steps/test_files/cht-category-access.pptx +0 -0
  84. power_pptx-1.1.0/features/steps/test_files/cht-chart-props.pptx +0 -0
  85. power_pptx-1.1.0/features/steps/test_files/cht-chart-type.pptx +0 -0
  86. power_pptx-1.1.0/features/steps/test_files/cht-charts.pptx +0 -0
  87. power_pptx-1.1.0/features/steps/test_files/cht-datalabels.pptx +0 -0
  88. power_pptx-1.1.0/features/steps/test_files/cht-gridlines-props.pptx +0 -0
  89. power_pptx-1.1.0/features/steps/test_files/cht-legend-props.pptx +0 -0
  90. power_pptx-1.1.0/features/steps/test_files/cht-legend.pptx +0 -0
  91. power_pptx-1.1.0/features/steps/test_files/cht-marker-props.pptx +0 -0
  92. power_pptx-1.1.0/features/steps/test_files/cht-plot-props.pptx +0 -0
  93. power_pptx-1.1.0/features/steps/test_files/cht-point-access.pptx +0 -0
  94. power_pptx-1.1.0/features/steps/test_files/cht-point-props.pptx +0 -0
  95. power_pptx-1.1.0/features/steps/test_files/cht-replace-data.pptx +0 -0
  96. power_pptx-1.1.0/features/steps/test_files/cht-series.pptx +0 -0
  97. power_pptx-1.1.0/features/steps/test_files/cht-ticklabels-props.pptx +0 -0
  98. power_pptx-1.1.0/features/steps/test_files/dml-effect.pptx +0 -0
  99. power_pptx-1.1.0/features/steps/test_files/dml-fill.pptx +0 -0
  100. power_pptx-1.1.0/features/steps/test_files/dml-line.pptx +0 -0
  101. power_pptx-1.1.0/features/steps/test_files/ext-rels.pptx +0 -0
  102. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/[Content_Types].xml +27 -0
  103. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/_rels/.rels +7 -0
  104. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/docProps/app.xml +42 -0
  105. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/docProps/core.xml +13 -0
  106. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/docProps/thumbnail.jpeg +0 -0
  107. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/_rels/presentation.xml.rels +10 -0
  108. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/presProps.xml +11 -0
  109. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/presentation.xml +106 -0
  110. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  111. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +4 -0
  112. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +4 -0
  113. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +4 -0
  114. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +4 -0
  115. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +4 -0
  116. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +4 -0
  117. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +4 -0
  118. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +4 -0
  119. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +4 -0
  120. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +4 -0
  121. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +4 -0
  122. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout1.xml +237 -0
  123. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout10.xml +165 -0
  124. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout11.xml +175 -0
  125. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout2.xml +165 -0
  126. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout3.xml +241 -0
  127. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout4.xml +283 -0
  128. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout5.xml +417 -0
  129. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout6.xml +113 -0
  130. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout7.xml +90 -0
  131. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout8.xml +272 -0
  132. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideLayouts/slideLayout9.xml +248 -0
  133. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +15 -0
  134. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slideMasters/slideMaster1.xml +505 -0
  135. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slides/_rels/slide1.xml.rels +4 -0
  136. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/slides/slide1.xml +74 -0
  137. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/tableStyles.xml +2 -0
  138. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/theme/theme1.xml +281 -0
  139. power_pptx-1.1.0/features/steps/test_files/extracted-pptx/ppt/viewProps.xml +32 -0
  140. power_pptx-1.1.0/features/steps/test_files/font-color.pptx +0 -0
  141. power_pptx-1.1.0/features/steps/test_files/just-two-mice.mp4 +0 -0
  142. power_pptx-1.1.0/features/steps/test_files/just-two-mice.png +0 -0
  143. power_pptx-1.1.0/features/steps/test_files/lyt-shapes.pptx +0 -0
  144. power_pptx-1.1.0/features/steps/test_files/minimal.pptx +0 -0
  145. power_pptx-1.1.0/features/steps/test_files/monty-truth.png +0 -0
  146. power_pptx-1.1.0/features/steps/test_files/mst-placeholders.pptx +0 -0
  147. power_pptx-1.1.0/features/steps/test_files/mst-shapes.pptx +0 -0
  148. power_pptx-1.1.0/features/steps/test_files/mst-slide-layouts.pptx +0 -0
  149. power_pptx-1.1.0/features/steps/test_files/ph-inherit-props.pptx +0 -0
  150. power_pptx-1.1.0/features/steps/test_files/ph-populated-placeholders.pptx +0 -0
  151. power_pptx-1.1.0/features/steps/test_files/ph-unpopulated-placeholders.pptx +0 -0
  152. power_pptx-1.1.0/features/steps/test_files/pic.emf +0 -0
  153. power_pptx-1.1.0/features/steps/test_files/prs-add-slide.pptx +0 -0
  154. power_pptx-1.1.0/features/steps/test_files/prs-notes.pptx +0 -0
  155. power_pptx-1.1.0/features/steps/test_files/prs-properties.pptx +0 -0
  156. power_pptx-1.1.0/features/steps/test_files/prs-slide-masters.pptx +0 -0
  157. power_pptx-1.1.0/features/steps/test_files/python-icon.jpeg +0 -0
  158. power_pptx-1.1.0/features/steps/test_files/python-powered.png +0 -0
  159. power_pptx-1.1.0/features/steps/test_files/python.bmp +0 -0
  160. power_pptx-1.1.0/features/steps/test_files/shp-access-chart.pptx +0 -0
  161. power_pptx-1.1.0/features/steps/test_files/shp-access-ole-object.pptx +0 -0
  162. power_pptx-1.1.0/features/steps/test_files/shp-autoshape-adjustments.pptx +0 -0
  163. power_pptx-1.1.0/features/steps/test_files/shp-autoshape-props.pptx +0 -0
  164. power_pptx-1.1.0/features/steps/test_files/shp-common-props.pptx +0 -0
  165. power_pptx-1.1.0/features/steps/test_files/shp-connector-props.pptx +0 -0
  166. power_pptx-1.1.0/features/steps/test_files/shp-embedded-docx.docx +0 -0
  167. power_pptx-1.1.0/features/steps/test_files/shp-embedded-pptx.pptx +0 -0
  168. power_pptx-1.1.0/features/steps/test_files/shp-embedded-xlsx.xlsx +0 -0
  169. power_pptx-1.1.0/features/steps/test_files/shp-freeform.pptx +0 -0
  170. power_pptx-1.1.0/features/steps/test_files/shp-groupshape.pptx +0 -0
  171. power_pptx-1.1.0/features/steps/test_files/shp-movie-props.pptx +0 -0
  172. power_pptx-1.1.0/features/steps/test_files/shp-picture.pptx +0 -0
  173. power_pptx-1.1.0/features/steps/test_files/shp-pos-and-size.pptx +0 -0
  174. power_pptx-1.1.0/features/steps/test_files/shp-shapes.pptx +0 -0
  175. power_pptx-1.1.0/features/steps/test_files/sld-background.pptx +0 -0
  176. power_pptx-1.1.0/features/steps/test_files/sld-blank.pptx +0 -0
  177. power_pptx-1.1.0/features/steps/test_files/sld-notes.pptx +0 -0
  178. power_pptx-1.1.0/features/steps/test_files/sld-slide.pptx +0 -0
  179. power_pptx-1.1.0/features/steps/test_files/sld-slides.pptx +0 -0
  180. power_pptx-1.1.0/features/steps/test_files/sonic.gif +0 -0
  181. power_pptx-1.1.0/features/steps/test_files/tbl-cell.pptx +0 -0
  182. power_pptx-1.1.0/features/steps/test_files/test-image-jpg-mime.pptx +0 -0
  183. power_pptx-1.1.0/features/steps/test_files/test.pptx +0 -0
  184. power_pptx-1.1.0/features/steps/test_files/txt-fit-text.pptx +0 -0
  185. power_pptx-1.1.0/features/steps/test_files/txt-font-props.pptx +0 -0
  186. power_pptx-1.1.0/features/steps/test_files/txt-font-typeface.pptx +0 -0
  187. power_pptx-1.1.0/features/steps/test_files/txt-paragraph-spacing.pptx +0 -0
  188. power_pptx-1.1.0/features/steps/test_files/txt-text-frame.pptx +0 -0
  189. power_pptx-1.1.0/features/steps/test_files/txt-text.pptx +0 -0
  190. power_pptx-1.1.0/features/steps/text.py +248 -0
  191. power_pptx-1.1.0/features/steps/text_frame.py +129 -0
  192. power_pptx-1.1.0/features/tbl-cell.feature +113 -0
  193. power_pptx-1.1.0/features/tbl-column.feature +10 -0
  194. power_pptx-1.1.0/features/tbl-table.feature +60 -0
  195. power_pptx-1.1.0/features/txt-fit-text.feature +11 -0
  196. power_pptx-1.1.0/features/txt-font-color.feature +55 -0
  197. power_pptx-1.1.0/features/txt-font-props.feature +149 -0
  198. power_pptx-1.1.0/features/txt-paragraph.feature +95 -0
  199. power_pptx-1.1.0/features/txt-text.feature +23 -0
  200. power_pptx-1.1.0/features/txt-textframe.feature +75 -0
  201. power_pptx-1.1.0/pyproject.toml +150 -0
  202. power_pptx-1.1.0/setup.cfg +4 -0
  203. power_pptx-1.1.0/src/power_pptx.egg-info/PKG-INFO +138 -0
  204. power_pptx-1.1.0/src/power_pptx.egg-info/SOURCES.txt +547 -0
  205. power_pptx-1.1.0/src/power_pptx.egg-info/dependency_links.txt +1 -0
  206. power_pptx-1.1.0/src/power_pptx.egg-info/requires.txt +4 -0
  207. power_pptx-1.1.0/src/power_pptx.egg-info/top_level.txt +1 -0
  208. power_pptx-1.1.0/src/pptx/__init__.py +99 -0
  209. power_pptx-1.1.0/src/pptx/_slide_importer.py +412 -0
  210. power_pptx-1.1.0/src/pptx/_svg.py +155 -0
  211. power_pptx-1.1.0/src/pptx/_template_applier.py +292 -0
  212. power_pptx-1.1.0/src/pptx/action.py +270 -0
  213. power_pptx-1.1.0/src/pptx/animation.py +1358 -0
  214. power_pptx-1.1.0/src/pptx/api.py +49 -0
  215. power_pptx-1.1.0/src/pptx/chart/__init__.py +0 -0
  216. power_pptx-1.1.0/src/pptx/chart/axis.py +523 -0
  217. power_pptx-1.1.0/src/pptx/chart/category.py +200 -0
  218. power_pptx-1.1.0/src/pptx/chart/chart.py +317 -0
  219. power_pptx-1.1.0/src/pptx/chart/data.py +864 -0
  220. power_pptx-1.1.0/src/pptx/chart/datalabel.py +288 -0
  221. power_pptx-1.1.0/src/pptx/chart/legend.py +79 -0
  222. power_pptx-1.1.0/src/pptx/chart/marker.py +70 -0
  223. power_pptx-1.1.0/src/pptx/chart/palettes.py +129 -0
  224. power_pptx-1.1.0/src/pptx/chart/plot.py +412 -0
  225. power_pptx-1.1.0/src/pptx/chart/point.py +101 -0
  226. power_pptx-1.1.0/src/pptx/chart/quick_layouts.py +237 -0
  227. power_pptx-1.1.0/src/pptx/chart/series.py +258 -0
  228. power_pptx-1.1.0/src/pptx/chart/xlsx.py +272 -0
  229. power_pptx-1.1.0/src/pptx/chart/xmlwriter.py +1840 -0
  230. power_pptx-1.1.0/src/pptx/compose/__init__.py +28 -0
  231. power_pptx-1.1.0/src/pptx/compose/from_spec.py +350 -0
  232. power_pptx-1.1.0/src/pptx/design/__init__.py +8 -0
  233. power_pptx-1.1.0/src/pptx/design/layout.py +325 -0
  234. power_pptx-1.1.0/src/pptx/design/recipes.py +529 -0
  235. power_pptx-1.1.0/src/pptx/design/style.py +209 -0
  236. power_pptx-1.1.0/src/pptx/design/tokens.py +353 -0
  237. power_pptx-1.1.0/src/pptx/dml/__init__.py +0 -0
  238. power_pptx-1.1.0/src/pptx/dml/chtfmt.py +40 -0
  239. power_pptx-1.1.0/src/pptx/dml/color.py +463 -0
  240. power_pptx-1.1.0/src/pptx/dml/effect.py +545 -0
  241. power_pptx-1.1.0/src/pptx/dml/fill.py +560 -0
  242. power_pptx-1.1.0/src/pptx/dml/line.py +287 -0
  243. power_pptx-1.1.0/src/pptx/dml/picture.py +195 -0
  244. power_pptx-1.1.0/src/pptx/dml/three_d.py +305 -0
  245. power_pptx-1.1.0/src/pptx/enum/__init__.py +0 -0
  246. power_pptx-1.1.0/src/pptx/enum/action.py +71 -0
  247. power_pptx-1.1.0/src/pptx/enum/animation.py +31 -0
  248. power_pptx-1.1.0/src/pptx/enum/base.py +206 -0
  249. power_pptx-1.1.0/src/pptx/enum/chart.py +492 -0
  250. power_pptx-1.1.0/src/pptx/enum/dml.py +652 -0
  251. power_pptx-1.1.0/src/pptx/enum/lang.py +685 -0
  252. power_pptx-1.1.0/src/pptx/enum/presentation.py +126 -0
  253. power_pptx-1.1.0/src/pptx/enum/shapes.py +1029 -0
  254. power_pptx-1.1.0/src/pptx/enum/text.py +230 -0
  255. power_pptx-1.1.0/src/pptx/exc.py +28 -0
  256. power_pptx-1.1.0/src/pptx/inherit.py +109 -0
  257. power_pptx-1.1.0/src/pptx/lint.py +359 -0
  258. power_pptx-1.1.0/src/pptx/media.py +197 -0
  259. power_pptx-1.1.0/src/pptx/opc/__init__.py +0 -0
  260. power_pptx-1.1.0/src/pptx/opc/constants.py +332 -0
  261. power_pptx-1.1.0/src/pptx/opc/oxml.py +188 -0
  262. power_pptx-1.1.0/src/pptx/opc/package.py +762 -0
  263. power_pptx-1.1.0/src/pptx/opc/packuri.py +109 -0
  264. power_pptx-1.1.0/src/pptx/opc/serialized.py +296 -0
  265. power_pptx-1.1.0/src/pptx/opc/shared.py +20 -0
  266. power_pptx-1.1.0/src/pptx/opc/spec.py +45 -0
  267. power_pptx-1.1.0/src/pptx/oxml/__init__.py +546 -0
  268. power_pptx-1.1.0/src/pptx/oxml/action.py +53 -0
  269. power_pptx-1.1.0/src/pptx/oxml/chart/__init__.py +0 -0
  270. power_pptx-1.1.0/src/pptx/oxml/chart/axis.py +297 -0
  271. power_pptx-1.1.0/src/pptx/oxml/chart/chart.py +282 -0
  272. power_pptx-1.1.0/src/pptx/oxml/chart/datalabel.py +252 -0
  273. power_pptx-1.1.0/src/pptx/oxml/chart/legend.py +72 -0
  274. power_pptx-1.1.0/src/pptx/oxml/chart/marker.py +61 -0
  275. power_pptx-1.1.0/src/pptx/oxml/chart/plot.py +345 -0
  276. power_pptx-1.1.0/src/pptx/oxml/chart/series.py +254 -0
  277. power_pptx-1.1.0/src/pptx/oxml/chart/shared.py +219 -0
  278. power_pptx-1.1.0/src/pptx/oxml/coreprops.py +288 -0
  279. power_pptx-1.1.0/src/pptx/oxml/dml/__init__.py +0 -0
  280. power_pptx-1.1.0/src/pptx/oxml/dml/color.py +135 -0
  281. power_pptx-1.1.0/src/pptx/oxml/dml/effect.py +180 -0
  282. power_pptx-1.1.0/src/pptx/oxml/dml/fill.py +310 -0
  283. power_pptx-1.1.0/src/pptx/oxml/dml/line.py +12 -0
  284. power_pptx-1.1.0/src/pptx/oxml/dml/three_d.py +79 -0
  285. power_pptx-1.1.0/src/pptx/oxml/ns.py +133 -0
  286. power_pptx-1.1.0/src/pptx/oxml/presentation.py +130 -0
  287. power_pptx-1.1.0/src/pptx/oxml/shapes/__init__.py +19 -0
  288. power_pptx-1.1.0/src/pptx/oxml/shapes/autoshape.py +465 -0
  289. power_pptx-1.1.0/src/pptx/oxml/shapes/connector.py +107 -0
  290. power_pptx-1.1.0/src/pptx/oxml/shapes/graphfrm.py +342 -0
  291. power_pptx-1.1.0/src/pptx/oxml/shapes/groupshape.py +308 -0
  292. power_pptx-1.1.0/src/pptx/oxml/shapes/picture.py +270 -0
  293. power_pptx-1.1.0/src/pptx/oxml/shapes/shared.py +572 -0
  294. power_pptx-1.1.0/src/pptx/oxml/simpletypes.py +750 -0
  295. power_pptx-1.1.0/src/pptx/oxml/slide.py +389 -0
  296. power_pptx-1.1.0/src/pptx/oxml/table.py +612 -0
  297. power_pptx-1.1.0/src/pptx/oxml/text.py +618 -0
  298. power_pptx-1.1.0/src/pptx/oxml/theme.py +36 -0
  299. power_pptx-1.1.0/src/pptx/oxml/xmlchemy.py +717 -0
  300. power_pptx-1.1.0/src/pptx/package.py +222 -0
  301. power_pptx-1.1.0/src/pptx/parts/__init__.py +0 -0
  302. power_pptx-1.1.0/src/pptx/parts/chart.py +95 -0
  303. power_pptx-1.1.0/src/pptx/parts/coreprops.py +167 -0
  304. power_pptx-1.1.0/src/pptx/parts/diagram.py +37 -0
  305. power_pptx-1.1.0/src/pptx/parts/embeddedpackage.py +93 -0
  306. power_pptx-1.1.0/src/pptx/parts/image.py +275 -0
  307. power_pptx-1.1.0/src/pptx/parts/media.py +37 -0
  308. power_pptx-1.1.0/src/pptx/parts/presentation.py +126 -0
  309. power_pptx-1.1.0/src/pptx/parts/slide.py +333 -0
  310. power_pptx-1.1.0/src/pptx/presentation.py +264 -0
  311. power_pptx-1.1.0/src/pptx/py.typed +0 -0
  312. power_pptx-1.1.0/src/pptx/render.py +280 -0
  313. power_pptx-1.1.0/src/pptx/shapes/__init__.py +26 -0
  314. power_pptx-1.1.0/src/pptx/shapes/autoshape.py +355 -0
  315. power_pptx-1.1.0/src/pptx/shapes/base.py +326 -0
  316. power_pptx-1.1.0/src/pptx/shapes/connector.py +297 -0
  317. power_pptx-1.1.0/src/pptx/shapes/freeform.py +337 -0
  318. power_pptx-1.1.0/src/pptx/shapes/graphfrm.py +208 -0
  319. power_pptx-1.1.0/src/pptx/shapes/group.py +95 -0
  320. power_pptx-1.1.0/src/pptx/shapes/picture.py +216 -0
  321. power_pptx-1.1.0/src/pptx/shapes/placeholder.py +407 -0
  322. power_pptx-1.1.0/src/pptx/shapes/shapetree.py +1245 -0
  323. power_pptx-1.1.0/src/pptx/shared.py +82 -0
  324. power_pptx-1.1.0/src/pptx/slide.py +747 -0
  325. power_pptx-1.1.0/src/pptx/smart_art.py +220 -0
  326. power_pptx-1.1.0/src/pptx/spec.py +633 -0
  327. power_pptx-1.1.0/src/pptx/table.py +630 -0
  328. power_pptx-1.1.0/src/pptx/templates/default.pptx +0 -0
  329. power_pptx-1.1.0/src/pptx/templates/docx-icon.emf +0 -0
  330. power_pptx-1.1.0/src/pptx/templates/generic-icon.emf +0 -0
  331. power_pptx-1.1.0/src/pptx/templates/notes.xml +23 -0
  332. power_pptx-1.1.0/src/pptx/templates/notesMaster.xml +352 -0
  333. power_pptx-1.1.0/src/pptx/templates/pptx-icon.emf +0 -0
  334. power_pptx-1.1.0/src/pptx/templates/theme.xml +321 -0
  335. power_pptx-1.1.0/src/pptx/templates/xlsx-icon.emf +0 -0
  336. power_pptx-1.1.0/src/pptx/text/__init__.py +0 -0
  337. power_pptx-1.1.0/src/pptx/text/fonts.py +434 -0
  338. power_pptx-1.1.0/src/pptx/text/layout.py +342 -0
  339. power_pptx-1.1.0/src/pptx/text/text.py +726 -0
  340. power_pptx-1.1.0/src/pptx/theme.py +362 -0
  341. power_pptx-1.1.0/src/pptx/types.py +36 -0
  342. power_pptx-1.1.0/src/pptx/util.py +214 -0
  343. power_pptx-1.1.0/tests/__init__.py +0 -0
  344. power_pptx-1.1.0/tests/chart/__init__.py +0 -0
  345. power_pptx-1.1.0/tests/chart/test_axis.py +1219 -0
  346. power_pptx-1.1.0/tests/chart/test_category.py +249 -0
  347. power_pptx-1.1.0/tests/chart/test_chart.py +686 -0
  348. power_pptx-1.1.0/tests/chart/test_data.py +893 -0
  349. power_pptx-1.1.0/tests/chart/test_datalabel.py +663 -0
  350. power_pptx-1.1.0/tests/chart/test_legend.py +176 -0
  351. power_pptx-1.1.0/tests/chart/test_marker.py +134 -0
  352. power_pptx-1.1.0/tests/chart/test_palettes.py +60 -0
  353. power_pptx-1.1.0/tests/chart/test_plot.py +471 -0
  354. power_pptx-1.1.0/tests/chart/test_point.py +221 -0
  355. power_pptx-1.1.0/tests/chart/test_quick_layouts.py +162 -0
  356. power_pptx-1.1.0/tests/chart/test_series.py +551 -0
  357. power_pptx-1.1.0/tests/chart/test_xlsx.py +425 -0
  358. power_pptx-1.1.0/tests/chart/test_xmlwriter.py +726 -0
  359. power_pptx-1.1.0/tests/design/__init__.py +0 -0
  360. power_pptx-1.1.0/tests/design/test_layout.py +207 -0
  361. power_pptx-1.1.0/tests/design/test_recipes.py +257 -0
  362. power_pptx-1.1.0/tests/design/test_style.py +94 -0
  363. power_pptx-1.1.0/tests/design/test_tokens.py +119 -0
  364. power_pptx-1.1.0/tests/dml/__init__.py +0 -0
  365. power_pptx-1.1.0/tests/dml/test_chtfmt.py +87 -0
  366. power_pptx-1.1.0/tests/dml/test_color.py +360 -0
  367. power_pptx-1.1.0/tests/dml/test_effect.py +203 -0
  368. power_pptx-1.1.0/tests/dml/test_fill.py +907 -0
  369. power_pptx-1.1.0/tests/dml/test_line.py +337 -0
  370. power_pptx-1.1.0/tests/dml/test_three_d.py +202 -0
  371. power_pptx-1.1.0/tests/enum/__init__.py +0 -0
  372. power_pptx-1.1.0/tests/enum/test_base.py +97 -0
  373. power_pptx-1.1.0/tests/enum/test_shapes.py +46 -0
  374. power_pptx-1.1.0/tests/integration/__init__.py +1 -0
  375. power_pptx-1.1.0/tests/integration/round_trip.py +90 -0
  376. power_pptx-1.1.0/tests/integration/test_apply_template.py +175 -0
  377. power_pptx-1.1.0/tests/integration/test_compose_package.py +42 -0
  378. power_pptx-1.1.0/tests/integration/test_import_slide.py +200 -0
  379. power_pptx-1.1.0/tests/integration/test_round_trip.py +160 -0
  380. power_pptx-1.1.0/tests/opc/__init__.py +0 -0
  381. power_pptx-1.1.0/tests/opc/test_oxml.py +211 -0
  382. power_pptx-1.1.0/tests/opc/test_package.py +1037 -0
  383. power_pptx-1.1.0/tests/opc/test_packuri.py +94 -0
  384. power_pptx-1.1.0/tests/opc/test_serialized.py +410 -0
  385. power_pptx-1.1.0/tests/oxml/__init__.py +0 -0
  386. power_pptx-1.1.0/tests/oxml/shapes/__init__.py +0 -0
  387. power_pptx-1.1.0/tests/oxml/shapes/test_autoshape.py +266 -0
  388. power_pptx-1.1.0/tests/oxml/shapes/test_graphfrm.py +80 -0
  389. power_pptx-1.1.0/tests/oxml/shapes/test_groupshape.py +297 -0
  390. power_pptx-1.1.0/tests/oxml/shapes/test_picture.py +107 -0
  391. power_pptx-1.1.0/tests/oxml/test___init__.py +105 -0
  392. power_pptx-1.1.0/tests/oxml/test_dml.py +152 -0
  393. power_pptx-1.1.0/tests/oxml/test_ns.py +94 -0
  394. power_pptx-1.1.0/tests/oxml/test_presentation.py +63 -0
  395. power_pptx-1.1.0/tests/oxml/test_simpletypes.py +283 -0
  396. power_pptx-1.1.0/tests/oxml/test_slide.py +23 -0
  397. power_pptx-1.1.0/tests/oxml/test_table.py +255 -0
  398. power_pptx-1.1.0/tests/oxml/test_theme.py +23 -0
  399. power_pptx-1.1.0/tests/oxml/test_xmlchemy.py +604 -0
  400. power_pptx-1.1.0/tests/oxml/unitdata/__init__.py +0 -0
  401. power_pptx-1.1.0/tests/oxml/unitdata/dml.py +102 -0
  402. power_pptx-1.1.0/tests/oxml/unitdata/shape.py +215 -0
  403. power_pptx-1.1.0/tests/oxml/unitdata/text.py +85 -0
  404. power_pptx-1.1.0/tests/parts/__init__.py +0 -0
  405. power_pptx-1.1.0/tests/parts/test_chart.py +152 -0
  406. power_pptx-1.1.0/tests/parts/test_coreprops.py +198 -0
  407. power_pptx-1.1.0/tests/parts/test_embeddedpackage.py +74 -0
  408. power_pptx-1.1.0/tests/parts/test_image.py +246 -0
  409. power_pptx-1.1.0/tests/parts/test_media.py +33 -0
  410. power_pptx-1.1.0/tests/parts/test_presentation.py +225 -0
  411. power_pptx-1.1.0/tests/parts/test_slide.py +589 -0
  412. power_pptx-1.1.0/tests/shapes/__init__.py +0 -0
  413. power_pptx-1.1.0/tests/shapes/test_autoshape.py +491 -0
  414. power_pptx-1.1.0/tests/shapes/test_base.py +619 -0
  415. power_pptx-1.1.0/tests/shapes/test_connector.py +427 -0
  416. power_pptx-1.1.0/tests/shapes/test_freeform.py +565 -0
  417. power_pptx-1.1.0/tests/shapes/test_graphfrm.py +168 -0
  418. power_pptx-1.1.0/tests/shapes/test_group.py +73 -0
  419. power_pptx-1.1.0/tests/shapes/test_picture.py +306 -0
  420. power_pptx-1.1.0/tests/shapes/test_placeholder.py +564 -0
  421. power_pptx-1.1.0/tests/shapes/test_shapetree.py +2358 -0
  422. power_pptx-1.1.0/tests/test_action.py +373 -0
  423. power_pptx-1.1.0/tests/test_animation.py +347 -0
  424. power_pptx-1.1.0/tests/test_api.py +48 -0
  425. power_pptx-1.1.0/tests/test_files/calibriz.ttf +0 -0
  426. power_pptx-1.1.0/tests/test_files/cdw-logo.eps +420 -0
  427. power_pptx-1.1.0/tests/test_files/dummy.mp4 +1 -0
  428. power_pptx-1.1.0/tests/test_files/expanded_pptx/[Content_Types].xml +27 -0
  429. power_pptx-1.1.0/tests/test_files/expanded_pptx/_rels/.rels +7 -0
  430. power_pptx-1.1.0/tests/test_files/expanded_pptx/docProps/app.xml +41 -0
  431. power_pptx-1.1.0/tests/test_files/expanded_pptx/docProps/core.xml +13 -0
  432. power_pptx-1.1.0/tests/test_files/expanded_pptx/docProps/thumbnail.jpeg +0 -0
  433. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/_rels/presentation.xml.rels +10 -0
  434. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/presProps.xml +4 -0
  435. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/presentation.xml +109 -0
  436. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/printerSettings/printerSettings1.bin +0 -0
  437. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels +4 -0
  438. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels +4 -0
  439. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels +4 -0
  440. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels +4 -0
  441. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels +4 -0
  442. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels +4 -0
  443. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels +4 -0
  444. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels +4 -0
  445. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels +4 -0
  446. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels +4 -0
  447. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels +4 -0
  448. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout1.xml +242 -0
  449. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout10.xml +165 -0
  450. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout11.xml +175 -0
  451. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout2.xml +170 -0
  452. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout3.xml +246 -0
  453. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout4.xml +288 -0
  454. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout5.xml +422 -0
  455. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout6.xml +118 -0
  456. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout7.xml +95 -0
  457. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout8.xml +277 -0
  458. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideLayouts/slideLayout9.xml +253 -0
  459. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels +15 -0
  460. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slideMasters/slideMaster1.xml +507 -0
  461. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slides/_rels/slide1.xml.rels +4 -0
  462. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/slides/slide1.xml +76 -0
  463. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/tableStyles.xml +2 -0
  464. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/theme/theme1.xml +281 -0
  465. power_pptx-1.1.0/tests/test_files/expanded_pptx/ppt/viewProps.xml +34 -0
  466. power_pptx-1.1.0/tests/test_files/minimal.pptx +0 -0
  467. power_pptx-1.1.0/tests/test_files/minimal_slide.xml +15 -0
  468. power_pptx-1.1.0/tests/test_files/missing_rels_item.pptx +0 -0
  469. power_pptx-1.1.0/tests/test_files/monty-truth.png +0 -0
  470. power_pptx-1.1.0/tests/test_files/no-core-props.pptx +0 -0
  471. power_pptx-1.1.0/tests/test_files/no-slides.pptx +0 -0
  472. power_pptx-1.1.0/tests/test_files/presentation.xml +109 -0
  473. power_pptx-1.1.0/tests/test_files/python-icon.jpeg +0 -0
  474. power_pptx-1.1.0/tests/test_files/python-powered.png +0 -0
  475. power_pptx-1.1.0/tests/test_files/python.bmp +0 -0
  476. power_pptx-1.1.0/tests/test_files/slideLayout1.xml +265 -0
  477. power_pptx-1.1.0/tests/test_files/smart_art_org_chart.pptx +0 -0
  478. power_pptx-1.1.0/tests/test_files/snippets/2x2-area-date.txt +166 -0
  479. power_pptx-1.1.0/tests/test_files/snippets/2x2-area-float.txt +167 -0
  480. power_pptx-1.1.0/tests/test_files/snippets/2x2-area-stacked-100.txt +165 -0
  481. power_pptx-1.1.0/tests/test_files/snippets/2x2-area-stacked.txt +165 -0
  482. power_pptx-1.1.0/tests/test_files/snippets/2x2-area.txt +165 -0
  483. power_pptx-1.1.0/tests/test_files/snippets/2x2-bar-clustered-date.txt +145 -0
  484. power_pptx-1.1.0/tests/test_files/snippets/2x2-bar-clustered-float.txt +145 -0
  485. power_pptx-1.1.0/tests/test_files/snippets/2x2-bar-clustered.txt +143 -0
  486. power_pptx-1.1.0/tests/test_files/snippets/2x2-bar-stacked-100.txt +144 -0
  487. power_pptx-1.1.0/tests/test_files/snippets/2x2-bar-stacked.txt +144 -0
  488. power_pptx-1.1.0/tests/test_files/snippets/2x2-column-clustered.txt +143 -0
  489. power_pptx-1.1.0/tests/test_files/snippets/2x2-column-stacked-100.txt +144 -0
  490. power_pptx-1.1.0/tests/test_files/snippets/2x2-column-stacked.txt +144 -0
  491. power_pptx-1.1.0/tests/test_files/snippets/2x2-line-date.txt +162 -0
  492. power_pptx-1.1.0/tests/test_files/snippets/2x2-line-float.txt +162 -0
  493. power_pptx-1.1.0/tests/test_files/snippets/2x2-line-markers-stacked-100.txt +154 -0
  494. power_pptx-1.1.0/tests/test_files/snippets/2x2-line-markers-stacked.txt +154 -0
  495. power_pptx-1.1.0/tests/test_files/snippets/2x2-line-markers.txt +154 -0
  496. power_pptx-1.1.0/tests/test_files/snippets/2x2-line-stacked-100.txt +160 -0
  497. power_pptx-1.1.0/tests/test_files/snippets/2x2-line-stacked.txt +160 -0
  498. power_pptx-1.1.0/tests/test_files/snippets/2x2-line.txt +160 -0
  499. power_pptx-1.1.0/tests/test_files/snippets/2x3-bubble-3d.txt +215 -0
  500. power_pptx-1.1.0/tests/test_files/snippets/2x3-bubble.txt +215 -0
  501. power_pptx-1.1.0/tests/test_files/snippets/2x3-xy-lines-no-markers.txt +172 -0
  502. power_pptx-1.1.0/tests/test_files/snippets/2x3-xy-lines.txt +166 -0
  503. power_pptx-1.1.0/tests/test_files/snippets/2x3-xy-smooth-no-markers.txt +172 -0
  504. power_pptx-1.1.0/tests/test_files/snippets/2x3-xy-smooth.txt +166 -0
  505. power_pptx-1.1.0/tests/test_files/snippets/2x3-xy.txt +176 -0
  506. power_pptx-1.1.0/tests/test_files/snippets/2x5-radar.txt +205 -0
  507. power_pptx-1.1.0/tests/test_files/snippets/3x1-pie-exploded.txt +73 -0
  508. power_pptx-1.1.0/tests/test_files/snippets/3x1-pie.txt +72 -0
  509. power_pptx-1.1.0/tests/test_files/snippets/3x2-doughnut-exploded.txt +145 -0
  510. power_pptx-1.1.0/tests/test_files/snippets/3x2-doughnut.txt +143 -0
  511. power_pptx-1.1.0/tests/test_files/snippets/4x2-multi-cat-bar.txt +181 -0
  512. power_pptx-1.1.0/tests/test_files/snippets/adjust-ser-count.txt +157 -0
  513. power_pptx-1.1.0/tests/test_files/snippets/cat-labels.txt +146 -0
  514. power_pptx-1.1.0/tests/test_files/snippets/content-types-xml.txt +9 -0
  515. power_pptx-1.1.0/tests/test_files/snippets/default-notes.txt +22 -0
  516. power_pptx-1.1.0/tests/test_files/snippets/default-notesMaster.txt +347 -0
  517. power_pptx-1.1.0/tests/test_files/snippets/default-theme.txt +317 -0
  518. power_pptx-1.1.0/tests/test_files/snippets/freeform.txt +44 -0
  519. power_pptx-1.1.0/tests/test_files/snippets/package-rels-xml.txt +7 -0
  520. power_pptx-1.1.0/tests/test_files/snippets/placeholders.txt +54 -0
  521. power_pptx-1.1.0/tests/test_files/snippets/presentation-rels-xml.txt +6 -0
  522. power_pptx-1.1.0/tests/test_files/snippets/relationships.txt +2 -0
  523. power_pptx-1.1.0/tests/test_files/snippets/rels-load-from-xml.txt +6 -0
  524. power_pptx-1.1.0/tests/test_files/snippets/rewrite-ser.txt +488 -0
  525. power_pptx-1.1.0/tests/test_files/snippets/timing.txt +101 -0
  526. power_pptx-1.1.0/tests/test_files/test.pptx +0 -0
  527. power_pptx-1.1.0/tests/test_files/test_slides.pptx +0 -0
  528. power_pptx-1.1.0/tests/test_inherit.py +110 -0
  529. power_pptx-1.1.0/tests/test_media.py +134 -0
  530. power_pptx-1.1.0/tests/test_package.py +377 -0
  531. power_pptx-1.1.0/tests/test_presentation.py +268 -0
  532. power_pptx-1.1.0/tests/test_render.py +327 -0
  533. power_pptx-1.1.0/tests/test_shared.py +83 -0
  534. power_pptx-1.1.0/tests/test_slide.py +1233 -0
  535. power_pptx-1.1.0/tests/test_smart_art.py +145 -0
  536. power_pptx-1.1.0/tests/test_svg_picture.py +180 -0
  537. power_pptx-1.1.0/tests/test_table.py +975 -0
  538. power_pptx-1.1.0/tests/test_theme.py +141 -0
  539. power_pptx-1.1.0/tests/test_util.py +52 -0
  540. power_pptx-1.1.0/tests/text/__init__.py +0 -0
  541. power_pptx-1.1.0/tests/text/test_fonts.py +736 -0
  542. power_pptx-1.1.0/tests/text/test_layout.py +287 -0
  543. power_pptx-1.1.0/tests/text/test_text.py +1261 -0
  544. power_pptx-1.1.0/tests/unitdata.py +120 -0
  545. power_pptx-1.1.0/tests/unitutil/__init__.py +13 -0
  546. power_pptx-1.1.0/tests/unitutil/cxml.py +283 -0
  547. power_pptx-1.1.0/tests/unitutil/file.py +57 -0
  548. power_pptx-1.1.0/tests/unitutil/mock.py +130 -0
  549. power_pptx-1.1.0/tox.ini +9 -0
@@ -0,0 +1,948 @@
1
+ .. :changelog:
2
+
3
+ Release History
4
+ ---------------
5
+
6
+ This project was forked from `scanny/python-pptx`_ at version 1.0.2.
7
+ Releases prior to 1.1.0 are upstream history, preserved here verbatim and
8
+ attributed to Steve Canny and the original contributors. Releases from
9
+ 1.1.0 onward are made under the ``power-pptx`` distribution name on
10
+ PyPI; the importable package name (``pptx``) is unchanged.
11
+
12
+ .. _`scanny/python-pptx`: https://github.com/scanny/python-pptx
13
+
14
+
15
+ 1.1.0 (2026-04-28)
16
+ ++++++++++++++++++
17
+
18
+ This is the inaugural release under the ``power-pptx`` distribution name
19
+ on PyPI. It is a drop-in replacement for ``python-pptx`` 1.0.2:
20
+ ``import pptx`` continues to work and existing user code is unaffected.
21
+ It bundles every feature from Phases 1 through 10 of the fork's roadmap —
22
+ visual effects, animations, transitions, theme reader/writer, JSON
23
+ authoring, the layout linter, design tokens and slide recipes, chart
24
+ palettes and quick layouts, slide thumbnails, and more.
25
+
26
+ The Sphinx documentation has also been rebuilt: every new module ships
27
+ with a user-guide chapter and an API-reference page, the substitution
28
+ table covers every public class added by the fork, and Read-the-Docs
29
+ builds now fail on Sphinx warnings.
30
+
31
+ The full per-phase changelog follows; the project changes summary is
32
+ collected near the end under "Project changes".
33
+
34
+ Phase 9 — design-system layer
35
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36
+
37
+ - ``pptx.design.tokens.DesignTokens``: source-agnostic container for
38
+ brand tokens — ``palette`` (str → ``RGBColor``), ``typography``
39
+ (``TypographyToken`` with ``family``/``size``/``bold``/``italic``/
40
+ ``color``), ``radii`` and ``spacings`` (str → ``Length``), and
41
+ ``shadows`` (``ShadowToken``). Constructors: ``from_dict``,
42
+ ``from_yaml`` (optional ``pyyaml``), and ``from_pptx`` (extracts
43
+ accent palette + major/minor fonts from a deck's theme).
44
+ ``DesignTokens.merge(other)`` layers an override token set on top of
45
+ a base.
46
+
47
+ - ``shape.style``: token-resolving ``ShapeStyle`` facade exposed on
48
+ every shape. Setters fan out to the low-level proxies::
49
+
50
+ shape.style.fill = tokens.palette["primary"]
51
+ shape.style.line = tokens.palette["primary"]
52
+ shape.style.shadow = tokens.shadows["card"]
53
+ shape.style.font = tokens.typography["body"]
54
+ shape.style.text_color = tokens.palette["neutral"]
55
+
56
+ ``ShadowToken`` assignment leaves unset fields untouched so partial
57
+ tokens are non-destructive; ``None`` clears the corresponding effect.
58
+
59
+ - ``pptx.design.recipes``: opinionated parameterized slide
60
+ constructors. Five recipes are included — ``title_slide``,
61
+ ``bullet_slide``, ``kpi_slide``, ``quote_slide``, and
62
+ ``image_hero_slide`` — each taking the host ``Presentation``, the
63
+ recipe-specific content kwargs (e.g. ``title=``, ``bullets=``,
64
+ ``kpis=``), an optional ``DesignTokens`` for palette/typography
65
+ resolution, and an optional ``transition=`` name. Recipes use the
66
+ ``Blank`` layout and place every shape themselves so the rendered
67
+ geometry doesn't depend on the host template's master. ``kpi_slide``
68
+ honors ``palette["positive"]`` / ``palette["negative"]`` when
69
+ tinting deltas (falling back to green/red), and applies
70
+ ``tokens.shadows["card"]`` to each card when present.
71
+
72
+ - A starter pack of three example token sets — ``modern``, ``classic``,
73
+ and ``editorial`` — lives at ``examples/starter_pack/``. Each
74
+ module exports both a ``SPEC`` dict (suitable for serialising) and
75
+ a ready-to-use ``TOKENS`` (a built ``DesignTokens``).
76
+ ``examples/starter_pack/build_preview.py`` renders a comparison
77
+ deck per set into ``examples/starter_pack/_out/`` (gitignored).
78
+
79
+ Phase 10 — additional motion-path presets
80
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81
+
82
+ - ``pptx.animation.MotionPath`` gains five new convenience constructors
83
+ alongside the existing ``line`` / ``custom``: ``diagonal``,
84
+ ``circle`` (closed cubic-bezier loop with a ``clockwise`` flag),
85
+ ``arc`` (quadratic-bezier hop with a configurable ``height``
86
+ fraction), ``zigzag`` (configurable ``segments`` / ``amplitude``),
87
+ and ``spiral`` (configurable ``turns`` and direction). All
88
+ normalize EMU inputs against the slide's dimensions and route
89
+ through ``slide.animations.add_motion``, so they honor the Phase 5
90
+ trigger model and round-trip cleanly.
91
+
92
+ Phase 10 — chart palette presets
93
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
94
+
95
+ - ``Chart.apply_palette(palette)`` recolors every series in a chart
96
+ from a named built-in preset or an iterable of color-likes,
97
+ independently of ``chart_style``. Series are recolored in
98
+ declaration order; palettes wrap when the chart has more series
99
+ than colors.
100
+
101
+ - New module ``pptx.chart.palettes`` exposes ``CHART_PALETTES`` (six
102
+ built-in palettes — ``modern``, ``classic``, ``editorial``,
103
+ ``vibrant``, ``monochrome_blue``, ``monochrome_warm``),
104
+ ``palette_names()``, and ``resolve_palette()`` for callers that want
105
+ to share the same color set with non-chart shapes.
106
+
107
+ - Per-series gradient and pattern fills work out of the box through
108
+ ``chart.series[i].format.fill`` (a regular ``FillFormat``) — locked
109
+ in with regression tests covering the four gradient kinds and
110
+ ``MSO_PATTERN_TYPE`` patterns.
111
+
112
+ Phase 6 — theme-aware color inheritance
113
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
114
+
115
+ - New ``pptx.inherit.resolve_color(color_format, theme=...)`` returns
116
+ the effective ``RGBColor`` for any ``ColorFormat`` (including the
117
+ ``_LazyColorFormat`` proxy returned by ``Font.color`` /
118
+ ``LineFormat.color``). Explicit RGB colors are returned as-is,
119
+ scheme colors resolve through ``theme.colors[…]``, and unset colors
120
+ return ``None`` without mutating XML. ``brightness`` is applied by
121
+ blending the resolved RGB toward white or black, mirroring
122
+ PowerPoint's ``lumMod`` / ``lumOff`` model.
123
+
124
+ Phase 6 — native SVG in ``add_picture``
125
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
126
+
127
+ - New ``slide.shapes.add_svg_picture(svg_file, left, top, width=None,
128
+ height=None, *, png_fallback=None)`` embeds both an
129
+ ``<asvg:svgBlip>`` (Office 2016+ SVG extension) and a PNG fallback
130
+ inside the same ``<a:blip>``. When ``png_fallback`` is omitted the
131
+ SVG is rasterised through the optional ``cairosvg`` dependency; a
132
+ clear ``CairoSvgUnavailable`` error guides callers to install it or
133
+ supply their own fallback. ``image/svg+xml`` is registered as a
134
+ first-class image content type so SVG parts round-trip cleanly.
135
+
136
+ Phase 7 — ``pptx.compose`` package
137
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
138
+
139
+ - ``pptx.compose`` is now a real package re-exporting ``from_spec``,
140
+ ``import_slide``, and ``apply_template`` from a single import path::
141
+
142
+ from pptx.compose import from_spec, import_slide, apply_template
143
+
144
+ The implementations live in private submodules
145
+ (``pptx.compose.from_spec``, ``pptx._slide_importer``,
146
+ ``pptx._template_applier``). Existing imports (``from pptx.compose
147
+ import from_spec``) are unchanged.
148
+
149
+ Phase 10 — chart quick layouts
150
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
151
+
152
+ - ``Chart.apply_quick_layout(layout)`` toggles title / legend /
153
+ axis-title / gridline visibility in opinionated combinations. Ten
154
+ built-in presets ship in ``pptx.chart.quick_layouts``
155
+ (``title_legend_right``, ``title_legend_bottom``,
156
+ ``title_legend_top``, ``title_legend_left``, ``title_no_legend``,
157
+ ``no_title_no_legend``, ``title_axes_legend_right``,
158
+ ``title_axes_legend_bottom``, ``minimal``, ``dense``); custom layouts
159
+ can be supplied as a dict spec.
160
+
161
+ Phase 10 — slide-thumbnail renderer
162
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
163
+
164
+ - New ``pptx.render`` module with
165
+ ``render_slide_thumbnails(prs, ...)`` and
166
+ ``render_slide_thumbnail(slide, ...)``, plus convenience methods
167
+ ``Presentation.render_thumbnails()`` and ``Slide.render_thumbnail()``.
168
+ Drives a headless ``soffice --headless --convert-to png`` shell-out
169
+ to rasterise slides; supports custom binary path
170
+ (``soffice_bin=`` or ``POWER_PPTX_SOFFICE`` env var), per-slide
171
+ selection (``slide_indexes=``), bytes-or-paths return
172
+ (``return_bytes=True``), custom output directory, and a configurable
173
+ timeout. Raises ``ThumbnailRendererUnavailable`` with an install
174
+ hint when ``soffice`` isn't on PATH and ``ThumbnailRendererError``
175
+ on conversion failure.
176
+
177
+ Phase 6 — text-fit estimator on Linux / minimal runtimes
178
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
179
+
180
+ - ``TextFrame.fit_text()`` now works on Linux and on runtimes without
181
+ the requested font installed. ``FontFiles._font_directories()``
182
+ enumerates ``/usr/share/fonts``, ``/usr/local/share/fonts``,
183
+ ``/usr/share/fonts/truetype``, ``~/.fonts``, and
184
+ ``~/.local/share/fonts``; unrecognised platforms now return an empty
185
+ directory list instead of raising ``OSError``. When no matching
186
+ system font can be located, ``_best_fit_font_size`` falls back to
187
+ ``ImageFont.load_default(size=...)`` (Pillow ≥10.1, with a graceful
188
+ fallback to the unsized bitmap default on older Pillow), so a call
189
+ with no ``font_file=`` argument produces a usable estimate rather
190
+ than a ``KeyError``. Malformed font files encountered during the
191
+ directory scan are skipped silently.
192
+
193
+
194
+ Phase 8 — 3D primitives and SmartArt text substitution
195
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
196
+
197
+ - ``shape.three_d`` accessor: ``ThreeDFormat`` facade exposing
198
+ ``bevel_top``/``bevel_bottom`` (``_BevelFormat`` with ``preset``,
199
+ ``width``, ``height``), ``extrusion_height``, ``extrusion_color``,
200
+ ``contour_width``, ``contour_color``, and ``preset_material``.
201
+ Backed by ``CT_Shape3D`` and ``CT_Scene3D`` element classes in
202
+ ``pptx.oxml.dml.three_d``. ``BevelPreset`` and ``PresetMaterial``
203
+ enumerations added to ``pptx.enum.dml``.
204
+
205
+ - ``slide.smart_art``: ``SmartArtCollection`` providing indexed and
206
+ iterable access to SmartArt graphics on a slide. Each item is a
207
+ ``SmartArtShape`` with:
208
+
209
+ - ``texts`` property — ordered list of node text strings.
210
+ - ``set_text(values, *, strict=True)`` — replaces node text in
211
+ document order without touching layout, style, or colour parts.
212
+
213
+ ``DiagramDataPart`` and sibling part classes registered so SmartArt
214
+ ``diagrams/data#.xml``, ``layout#``, ``quickStyle#``, and ``colors#``
215
+ parts are handled as typed ``XmlPart`` subclasses.
216
+
217
+
218
+ Phase 7 — slide composition
219
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
220
+
221
+ - ``Presentation.import_slide(source_slide, merge_master='dedupe'|'clone')``:
222
+ clones a slide from any ``Presentation`` into the receiver. Copies
223
+ the slide part and all its dependencies (images, charts, media,
224
+ notes, SmartArt diagram parts, …). Master/layout/theme parts are
225
+ either deduped against existing masters (``'dedupe'``) or always
226
+ cloned fresh (``'clone'``). Slide IDs and partnames are guaranteed
227
+ collision-free.
228
+
229
+ - ``Presentation.apply_template(path_or_stream)``: re-points every
230
+ slide's layout/master/theme at masters from a ``.potx`` or ``.pptx``
231
+ template. Slide content is preserved. Layout matching: name → type
232
+ → first layout. Unreferenced old masters/layouts/themes are dropped
233
+ from the saved package.
234
+
235
+
236
+ Project changes
237
+ ~~~~~~~~~~~~~~~
238
+
239
+ - Renamed the PyPI distribution from ``python-pptx-next`` to
240
+ ``power-pptx``. The importable package remains ``pptx``.
241
+ - Repository moved to ``codehalwell/power-pptx``.
242
+ - Original ``LICENSE`` (MIT, Steve Canny, 2013) preserved verbatim;
243
+ fork copyright added on a second line per MIT requirements.
244
+ - Dropped the vestigial ``pyparsing`` line from ``requirements.txt``;
245
+ it was not in ``pyproject.toml`` runtime deps and is not imported
246
+ anywhere in ``src/pptx/``.
247
+ - Added Python 3.13 to the supported-versions classifier list.
248
+ - Dropped Python 3.8 (EOL October 2024). Minimum supported version is
249
+ now 3.9, matching ``pyright``'s configured ``pythonVersion``.
250
+
251
+ Documentation
252
+ ~~~~~~~~~~~~~
253
+
254
+ - Sphinx config rebuilt for ``power-pptx``: switched to the
255
+ ``sphinx-rtd-theme``, removed dead upstream-specific hacks, refreshed
256
+ the substitution table, and turned on ``fail_on_warning`` for
257
+ Read-the-Docs builds.
258
+ - New user-guide chapters: visual effects, animations, slide
259
+ transitions, layout linter, JSON authoring + cross-presentation
260
+ composition, themes, design-system layer, advanced charts (palettes
261
+ / quick layouts / per-series fills), and slide thumbnails.
262
+ - New API reference pages: ``pptx.animation``, ``pptx.lint``,
263
+ ``pptx.compose``, ``pptx.theme`` (plus ``pptx.inherit.resolve_color``),
264
+ ``pptx.design`` (tokens, style, layout, recipes), ``pptx.render``,
265
+ ``pptx.smart_art``, plus enum pages for ``MSO_LINE_CAP_STYLE``,
266
+ ``MSO_LINE_COMPOUND_STYLE``, ``MSO_LINE_JOIN_STYLE``,
267
+ ``MSO_LINE_END_TYPE``, ``MSO_LINE_END_SIZE``, ``MSO_TRANSITION_TYPE``,
268
+ and ``PP_ANIM_TRIGGER``.
269
+ - ``ShadowFormat`` and the ``DrawingML`` reference page surface the
270
+ full Phase 3/6 effect family (``GlowFormat``, ``SoftEdgeFormat``,
271
+ ``BlurFormat``, ``ReflectionFormat``, ``LineEndFormat``,
272
+ ``PictureEffects``).
273
+
274
+ Deprecations (scheduled for removal in 2.0)
275
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
276
+
277
+ - ``ShadowFormat.inherit`` now emits a ``DeprecationWarning`` on both
278
+ read and write. Read individual properties (``blur_radius``,
279
+ ``distance``, ``direction``, ``color``) for ``None`` instead. The
280
+ ``inherit`` property is scheduled for removal in 2.0.
281
+ - ``MSO_PATTERN_TYPE.ERCENT_40`` is now an aliased member of
282
+ ``PERCENT_40`` and emits a ``DeprecationWarning`` on access.
283
+ - ``shapes.turbo_add_enabled`` setter remains a no-op and emits a
284
+ ``DeprecationWarning`` (shape-id allocation is now always O(1)).
285
+
286
+ New API
287
+ ~~~~~~~
288
+
289
+ - Radial / rectangular / shape-path gradients (Phase 6): ``FillFormat.gradient``
290
+ now accepts a ``kind`` argument. ``fill.gradient(kind="radial")`` writes a
291
+ ``<a:path path="circle"/>`` shading element; ``"rectangular"`` writes
292
+ ``"rect"``; ``"shape"`` follows the bounding shape. ``fill.gradient_kind``
293
+ reports the resolved value (``"linear"``/``"radial"``/``"rectangular"``/
294
+ ``"shape"``/``None``). Switching kinds preserves existing gradient stops.
295
+ ``GradientStops`` is now mutable: ``stops.append(position, color)``,
296
+ ``stops.replace([(pos, color), ...])``, and ``del stops[i]`` (the OOXML
297
+ 2-stop minimum is enforced). ``color`` accepts ``RGBColor``, hex strings
298
+ (with or without leading ``#``), 3-tuples, or ``None`` (placeholder
299
+ ``schemeClr accent1`` color).
300
+ - ``pptx.design.layout`` (Phase 9): build-time geometry helpers that compute
301
+ ``Box(left, top, width, height)`` rectangles so callers don't eyeball EMUs.
302
+ ``Grid(slide, cols=12, rows=6, gutter=Pt(12), margin=Inches(0.5))`` allocates
303
+ rectangles via ``grid.cell(col=, row=, col_span=, row_span=)`` or applies
304
+ them directly with ``grid.place(shape, ...)``. ``Stack(direction="vertical"
305
+ | "horizontal", gap=Pt(8), left=, top=, width=, height=)`` walks a running
306
+ cursor via ``stack.next(width=, height=)`` / ``stack.place(shape, ...)``;
307
+ ``stack.reset()`` rewinds. Pure geometry — no XML is read or mutated until
308
+ the caller invokes a ``place()``.
309
+ - ``MotionPath`` (Phase 5): convenience class for adding motion-path
310
+ animations. ``MotionPath.line(slide, shape, dx, dy)`` accepts EMU
311
+ deltas (typically built with ``Inches(...)``/``Pt(...)``) and
312
+ normalizes them against the slide's dimensions before emitting the
313
+ motion-path attribute, so the *absolute* travel distance is preserved
314
+ across slide sizes. ``MotionPath.custom(slide, shape, path_str)``
315
+ passes an OOXML motion-path expression through verbatim. Both
316
+ delegate to ``SlideAnimations.add_motion`` and inherit the trigger /
317
+ delay / duration model from the rest of Phase 5.
318
+ - ``SlideAnimations.sequence()`` (Phase 5): context manager that
319
+ groups the contained ``Entrance``/``Exit``/``Emphasis``/``MotionPath``
320
+ effects into a single click-driven chain. Inside the block, the
321
+ first effect (whose ``trigger`` was not explicitly supplied) fires on
322
+ ``Trigger.ON_CLICK`` (or whatever ``start=`` is passed) and every
323
+ subsequent effect defaults to ``Trigger.AFTER_PREVIOUS``, producing
324
+ effects that play one after another. Explicit per-call triggers
325
+ still override the sequence default; sequences cannot be nested.
326
+ - ``Entrance.fade(slide, text_frame, by_paragraph=True)`` (Phase 5):
327
+ by-paragraph entrance animations. Accepts a ``TextFrame`` or any
328
+ shape with a ``text_frame``; emits one entrance effect per paragraph,
329
+ each targeting ``<p:txEl>/<p:pRg st=N end=N/>`` so PowerPoint reveals
330
+ paragraphs one at a time. The first paragraph fires on the supplied
331
+ trigger and subsequent paragraphs on ``Trigger.AFTER_PREVIOUS``.
332
+ Available presets: ``appear``, ``fade``, ``wipe``, ``zoom``, ``wheel``,
333
+ ``random_bars``. The ``by_paragraph=`` keyword is also exposed on
334
+ ``SlideAnimations.add_entrance`` for advanced use.
335
+ - ``Theme`` writer (Phase 7): ``prs.theme`` is now read/write.
336
+ ``theme.colors[MSO_THEME_COLOR.ACCENT_1] = RGBColor(0xFF, 0x66, 0x00)``
337
+ rewrites the requested ``clrScheme`` slot with a fresh ``<a:srgbClr>``;
338
+ alias slots (``BACKGROUND_1``/``BACKGROUND_2``/``TEXT_1``/``TEXT_2``)
339
+ resolve to their canonical ``lt1``/``lt2``/``dk1``/``dk2`` target.
340
+ ``theme.fonts.major = "Inter"`` and ``theme.fonts.minor = "Inter"``
341
+ rewrite the ``<a:majorFont>/<a:minorFont>/<a:latin typeface=…/>``
342
+ typeface. ``theme.apply(other_prs.theme)`` bulk-copies the palette
343
+ and font pair. ``theme.name`` is now writable. Themes are loaded
344
+ via a typed ``ThemePart(XmlPart)`` so writes round-trip on save.
345
+ - ``Cell.borders`` (Phase 4): per-edge line formatting on table cells.
346
+ ``cell.borders.left``/``.right``/``.top``/``.bottom``/``.diagonal_down``/
347
+ ``.diagonal_up`` each return a ``LineFormat``. Convenience helpers
348
+ ``cell.borders.all(width=, color=)``, ``cell.borders.outer(...)``, and
349
+ ``cell.borders.none()`` apply or clear border settings across multiple
350
+ edges in one call. Backed by the OOXML ``a:lnL/lnR/lnT/lnB/lnTlToBr/
351
+ lnBlToTr`` children of ``a:tcPr``.
352
+ - ``run.hyperlink.target_slide`` (Phase 4): assign a ``Slide`` to make
353
+ a text run an internal hyperlink. Writes a relationship-based
354
+ ``ppaction://hlinksldjump`` action; assigning ``None`` clears it. The
355
+ symmetric getter resolves the relationship back to the target slide,
356
+ mirroring ``Shape.click_action.target_slide``.
357
+ - ``ColorFormat.alpha`` (Phase 3): per-color transparency. Read/write
358
+ float in ``[0.0, 1.0]`` (``1.0`` is fully opaque, the default; ``0.0``
359
+ is fully transparent). Maps to the ``<a:alpha>`` child of any
360
+ ``<a:srgbClr>``/``<a:schemeClr>``/etc. Available on the lazy proxy
361
+ returned by ``Font.color`` and ``LineFormat.color`` with the same
362
+ non-mutating read semantics as the rest of that proxy.
363
+ - ``LineFormat`` line-style additions (Phase 6): ``line.cap``
364
+ (``MSO_LINE_CAP``: ``FLAT``/``ROUND``/``SQUARE``), ``line.compound``
365
+ (``MSO_LINE_COMPOUND``: single, double, thick-thin, thin-thick,
366
+ triple), ``line.join`` (``MSO_LINE_JOIN``: round/bevel/miter mapping
367
+ to the ``<a:round/>``/``<a:bevel/>``/``<a:miter/>`` children), plus
368
+ ``line.head_end`` and ``line.tail_end`` ``LineEndFormat`` proxies
369
+ exposing ``.type`` (``MSO_LINE_END_TYPE``), ``.width`` and
370
+ ``.length`` (``MSO_LINE_END_SIZE``). All reads are non-mutating;
371
+ clearing the last attribute on a head/tail end drops the element so
372
+ theme inheritance is preserved.
373
+ - ``Slide.transition`` (Phase 4): a ``SlideTransition`` proxy exposing
374
+ ``.kind`` (``MSO_TRANSITION_TYPE``, including PowerPoint 2010+
375
+ ``p14`` extension transitions like ``MORPH``, ``CONVEYOR``,
376
+ ``VORTEX``), ``.duration`` (milliseconds, via ``p14:dur`` with
377
+ fallback mapping for the legacy ``spd`` bucket), ``.advance_on_click``
378
+ and ``.advance_after``. Reads on a slide with no explicit
379
+ ``<p:transition>`` return ``None`` and never mutate; ``.clear()``
380
+ removes the element entirely.
381
+ - ``Presentation.set_transition`` (Phase 4): deck-wide convenience that
382
+ applies the same transition (or partial update) to every slide in a
383
+ single call. Accepts ``kind``, ``duration``, ``advance_on_click``,
384
+ and ``advance_after``; unspecified arguments are left untouched on
385
+ each slide so callers can bump the duration without disturbing the
386
+ kind. Passing ``kind=None`` removes the ``<p:transition>`` element
387
+ on every slide.
388
+ - ``BaseShape.blur`` and ``BaseShape.reflection`` (Phase 3): two
389
+ additional non-mutating effect proxies. ``shape.blur`` exposes
390
+ ``.radius`` (EMU) and ``.grow``; ``shape.reflection`` exposes
391
+ ``.blur_radius``, ``.distance``, ``.direction``, ``.start_alpha``,
392
+ and ``.end_alpha``. Reads on a shape with no explicit effect return
393
+ ``None`` and never mutate the XML; the underlying ``<a:blur>`` /
394
+ ``<a:reflection>`` element is created on first write and dropped
395
+ again when the last explicit attribute is cleared, preserving theme
396
+ inheritance.
397
+ - New OOXML element classes ``CT_BlurEffect``, ``CT_InnerShadowEffect``,
398
+ and ``CT_ReflectionEffect`` (Phase 3) registered for ``<a:blur>``,
399
+ ``<a:innerShdw>``, and ``<a:reflection>`` so PowerPoint-authored
400
+ effects round-trip without loss even when no high-level proxy is
401
+ used.
402
+
403
+
404
+ 1.0.2 (2024-08-07)
405
+ ++++++++++++++++++
406
+
407
+ - fix: #1003 restore read-only enum members
408
+
409
+ 1.0.1 (2024-08-05)
410
+ ++++++++++++++++++
411
+
412
+ - fix: #1000 add py.typed
413
+
414
+
415
+ 1.0.0 (2024-08-03)
416
+ ++++++++++++++++++
417
+
418
+ - fix: #929 raises on JPEG with image/jpg MIME-type
419
+ - fix: #943 remove mention of a Px Length subtype
420
+ - fix: #972 next-slide-id fails in rare cases
421
+ - fix: #990 do not require strict timestamps for Zip
422
+ - Add type annotations
423
+
424
+
425
+ 0.6.23 (2023-11-02)
426
+ +++++++++++++++++++
427
+
428
+ - fix: #912 Pillow<=9.5 constraint entails security vulnerability
429
+
430
+
431
+ 0.6.22 (2023-08-28)
432
+ +++++++++++++++++++
433
+
434
+ - Add #909 Add imgW, imgH params to `shapes.add_ole_object()`
435
+ - fix: #754 _Relationships.items() raises
436
+ - fix: #758 quote in autoshape name must be escaped
437
+ - fix: #746 update Python 3.x support in docs
438
+ - fix: #748 setup's `license` should be short string
439
+ - fix: #762 AttributeError: module 'collections' has no attribute 'abc'
440
+ (Windows Python 3.10+)
441
+
442
+
443
+ 0.6.21 (2021-09-20)
444
+ +++++++++++++++++++
445
+
446
+ - Fix #741 _DirPkgReader must implement .__contains__()
447
+
448
+
449
+ 0.6.20 (2021-09-14)
450
+ +++++++++++++++++++
451
+
452
+ - Fix #206 accommodate NULL target-references in relationships.
453
+ - Fix #223 escape image filename that appears as literal in XML.
454
+ - Fix #517 option to display chart categories/values in reverse order.
455
+ - Major refactoring of ancient package loading code.
456
+
457
+
458
+ 0.6.19 (2021-05-17)
459
+ +++++++++++++++++++
460
+
461
+ - Add shapes.add_ole_object(), allowing arbitrary Excel or other binary file to be
462
+ embedded as a shape on a slide. The OLE object is represented as an icon.
463
+
464
+
465
+ 0.6.18 (2019-05-02)
466
+ +++++++++++++++++++
467
+
468
+ - .text property getters encode line-break as a vertical-tab (VT, '\v', ASCII 11/x0B).
469
+ This is consistent with PowerPoint's copy/paste behavior and allows like-breaks (soft
470
+ carriage-return) to be distinguished from paragraph boundary. Previously, a line-break
471
+ was encoded as a newline ('\n') and was not distinguishable from a paragraph boundary.
472
+
473
+ .text properties include Shape.text, _Cell.text, TextFrame.text, _Paragraph.text and
474
+ _Run.text.
475
+
476
+ - .text property setters accept vertical-tab character and place a line-break element in
477
+ that location. All other control characters other than horizontal-tab ('\t') and
478
+ newline ('\n') in range \x00-\x1F are accepted and escaped with plain-text like
479
+ "_x001B" for ESC (ASCII 27).
480
+
481
+ Previously a control character other than tab or newline in an assigned string would
482
+ trigger an exception related to invalid XML character.
483
+
484
+
485
+ 0.6.17 (2018-12-16)
486
+ +++++++++++++++++++
487
+
488
+ - Add SlideLayouts.remove() - Delete unused slide-layout
489
+ - Add SlideLayout.used_by_slides - Get slides based on this slide-layout
490
+ - Add SlideLayouts.index() - Get index of slide-layout in master
491
+ - Add SlideLayouts.get_by_name() - Get slide-layout by its str name
492
+
493
+
494
+ 0.6.16 (2018-11-09)
495
+ +++++++++++++++++++
496
+
497
+ - Feature #395 DataLabels.show_* properties, e.g. .show_percentage
498
+ - Feature #453 Chart data tolerates None for labels
499
+
500
+
501
+ 0.6.15 (2018-09-24)
502
+ +++++++++++++++++++
503
+
504
+ - Fix #436 ValueAxis._cross_xAx fails on c:dateAxis
505
+
506
+
507
+ 0.6.14 (2018-09-24)
508
+ +++++++++++++++++++
509
+
510
+ - Add _Cell.merge()
511
+ - Add _Cell.split()
512
+ - Add _Cell.__eq__()
513
+ - Add _Cell.is_merge_origin
514
+ - Add _Cell.is_spanned
515
+ - Add _Cell.span_height
516
+ - Add _Cell.span_width
517
+ - Add _Cell.text getter
518
+ - Add Table.iter_cells()
519
+ - Move pptx.shapes.table module to pptx.table
520
+ - Add user documentation 'Working with tables'
521
+
522
+
523
+ 0.6.13 (2018-09-10)
524
+ +++++++++++++++++++
525
+
526
+ - Add Chart.font
527
+ - Fix #293 Can't hide title of single-series Chart
528
+ - Fix shape.width value is not type Emu
529
+ - Fix add a:defRPr with c:rich (fixes some font inheritance breakage)
530
+
531
+
532
+ 0.6.12 (2018-08-11)
533
+ +++++++++++++++++++
534
+
535
+ - Add Picture.auto_shape_type
536
+ - Remove Python 2.6 testing from build
537
+ - Update dependencies to avoid vulnerable Pillow version
538
+ - Fix #260, #301, #382, #401
539
+ - Add _Paragraph.add_line_break()
540
+ - Add Connector.line
541
+
542
+
543
+ 0.6.11 (2018-07-25)
544
+ +++++++++++++++++++
545
+
546
+ - Add gradient fill.
547
+ - Add experimental "turbo-add" option for producing large shape-count slides.
548
+
549
+
550
+ 0.6.10 (2018-06-11)
551
+ +++++++++++++++++++
552
+
553
+ - Add `shape.shadow` property to autoshape, connector, picture, and group
554
+ shape, returning a `ShadowFormat` object.
555
+ - Add `ShadowFormat` object with read/write (boolean) `.inherit` property.
556
+ - Fix #328 add support for 26+ series in a chart
557
+
558
+
559
+ 0.6.9 (2018-05-08)
560
+ ++++++++++++++++++
561
+
562
+ - Add `Picture.crop_x` setters, allowing picture cropping values to be set,
563
+ in addition to interrogated.
564
+ - Add `Slide.background` and `SlideMaster.background`, allowing the
565
+ background fill to be set for an individual slide or for all slides based
566
+ on a slide master.
567
+ - Add option `shapes` parameter to `Shapes.add_group_shape`, allowing a group
568
+ shape to be formed from a number of existing shapes.
569
+ - Improve efficiency of `Shapes._next_shape_id` property to improve
570
+ performance on high shape-count slides.
571
+
572
+
573
+ 0.6.8 (2018-04-18)
574
+ ++++++++++++++++++
575
+
576
+ - Add `GroupShape`, providing properties specific to a group shape, including
577
+ its `shapes` property.
578
+ - Add `GroupShapes`, providing access to shapes contained in a group shape.
579
+ - Add `SlideShapes.add_group_shape()`, allowing a group shape to be added to
580
+ a slide.
581
+ - Add `GroupShapes.add_group_shape()`, allowing a group shape to be added to
582
+ a group shape, enabling recursive, multi-level groups.
583
+ - Add support for adding jump-to-named-slide behavior to shape and run
584
+ hyperlinks.
585
+
586
+
587
+ 0.6.7 (2017-10-30)
588
+ ++++++++++++++++++
589
+
590
+ - Add `SlideShapes.build_freeform()`, allowing freeform shapes (such as maps)
591
+ to be specified and added to a slide.
592
+ - Add support for patterned fills.
593
+ - Add `LineFormat.dash_style` to allow interrogation and setting of dashed
594
+ line styles.
595
+
596
+
597
+ 0.6.6 (2017-06-17)
598
+ ++++++++++++++++++
599
+
600
+ - Add `SlideShapes.add_movie()`, allowing video media to be added to a slide.
601
+
602
+ - fix #190 Accommodate non-conforming part names having '00' index segment.
603
+ - fix #273 Accommodate non-conforming part names having no index segment.
604
+ - fix #277 ASCII/Unicode error on non-ASCII multi-level category names
605
+ - fix #279 BaseShape.id warning appearing on placeholder access.
606
+
607
+
608
+ 0.6.5 (2017-03-21)
609
+ ++++++++++++++++++
610
+
611
+ - #267 compensate for non-conforming PowerPoint behavior on c:overlay element
612
+
613
+ - compensate for non-conforming (to spec) PowerPoint behavior related to
614
+ c:dLbl/c:tx that results in "can't save" error when explicit data labels
615
+ are added to bubbles on a bubble chart.
616
+
617
+
618
+ 0.6.4 (2017-03-17)
619
+ ++++++++++++++++++
620
+
621
+ - add Chart.chart_title and ChartTitle object
622
+ - #263 Use Number type to test for numeric category
623
+
624
+
625
+ 0.6.3 (2017-02-28)
626
+ ++++++++++++++++++
627
+
628
+ - add DataLabel.font
629
+ - add Axis.axis_title
630
+
631
+
632
+ 0.6.2 (2017-01-03)
633
+ ++++++++++++++++++
634
+
635
+ - add support for NotesSlide (slide notes, aka. notes page)
636
+ - add support for arbitrary series ordering in XML
637
+ - add Plot.categories providing access to hierarchical categories in an
638
+ existing chart.
639
+ - add support for date axes on category charts, including writing a dateAx
640
+ element for the category axis when ChartData categories are date or
641
+ datetime.
642
+
643
+ **BACKWARD INCOMPATIBILITIES:**
644
+
645
+ Some changes were made to the boilerplate XML used to create new charts. This
646
+ was done to more closely adhere to the settings PowerPoint uses when creating
647
+ a chart using the UI. This may result in some appearance changes in charts
648
+ after upgrading. In particular:
649
+
650
+ * Chart.has_legend now defaults to True for Line charts.
651
+ * Plot.vary_by_categories now defaults to False for Line charts.
652
+
653
+
654
+ 0.6.1 (2016-10-09)
655
+ ++++++++++++++++++
656
+
657
+ - add Connector shape type
658
+
659
+
660
+ 0.6.0 (2016-08-18)
661
+ ++++++++++++++++++
662
+
663
+ - add XY chart types
664
+ - add Bubble chart types
665
+ - add Radar chart types
666
+ - add Area chart types
667
+ - add Doughnut chart types
668
+ - add Series.points and Point
669
+ - add Point.data_label
670
+ - add DataLabel.text_frame
671
+ - add DataLabel.position
672
+ - add Axis.major_gridlines
673
+ - add ChartFormat with .fill and .line
674
+ - add Axis.format (fill and line formatting)
675
+ - add ValueAxis.crosses and .crosses_at
676
+ - add Point.format (fill and line formatting)
677
+ - add Slide.slide_id
678
+ - add Slides.get() (by slide id)
679
+ - add Font.language_id
680
+ - support blank (None) data points in created charts
681
+ - add Series.marker
682
+ - add Point.marker
683
+ - add Marker.format, .style, and .size
684
+
685
+
686
+ 0.5.8 (2015-11-27)
687
+ ++++++++++++++++++
688
+
689
+ - add Shape.click_action (hyperlink on shape)
690
+ - fix: #128 Chart cat and ser names not escaped
691
+ - fix: #153 shapes.title raises on no title shape
692
+ - fix: #170 remove seek(0) from Image.from_file()
693
+
694
+
695
+ 0.5.7 (2015-01-17)
696
+ ++++++++++++++++++
697
+
698
+ - add PicturePlaceholder with .insert_picture() method
699
+ - add TablePlaceholder with .insert_table() method
700
+ - add ChartPlaceholder with .insert_chart() method
701
+ - add Picture.image property, returning Image object
702
+ - add Picture.crop_left, .crop_top, .crop_right, and .crop_bottom
703
+ - add Shape.placeholder_format and PlaceholderFormat object
704
+
705
+ **BACKWARD INCOMPATIBILITIES:**
706
+
707
+ Shape.shape_type is now unconditionally `MSO_SHAPE_TYPE.PLACEHOLDER` for all
708
+ placeholder shapes. Previously, some placeholder shapes reported
709
+ `MSO_SHAPE_TYPE.AUTO_SHAPE`, `MSO_SHAPE_TYPE.CHART`,
710
+ `MSO_SHAPE_TYPE.PICTURE`, or `MSO_SHAPE_TYPE.TABLE` for that property.
711
+
712
+
713
+ 0.5.6 (2014-12-06)
714
+ ++++++++++++++++++
715
+
716
+ - fix #138 - UnicodeDecodeError in setup.py on Windows 7 Python 3.4
717
+
718
+
719
+ 0.5.5 (2014-11-17)
720
+ ++++++++++++++++++
721
+
722
+ - feature #51 - add Python 3 support
723
+
724
+
725
+ 0.5.4 (2014-11-15)
726
+ ++++++++++++++++++
727
+
728
+ - feature #43 - image native size in shapes.add_picture() is now calculated
729
+ based on DPI attribute in image file, if present, defaulting to 72 dpi.
730
+ - feature #113 - Add Paragraph.space_before, Paragraph.space_after, and
731
+ Paragraph.line_spacing
732
+
733
+
734
+ 0.5.3 (2014-11-09)
735
+ ++++++++++++++++++
736
+
737
+ - add experimental feature TextFrame.fit_text()
738
+
739
+
740
+ 0.5.2 (2014-10-26)
741
+ ++++++++++++++++++
742
+
743
+ - fix #127 - Shape.text_frame fails on shape having no txBody
744
+
745
+
746
+ 0.5.1 (2014-09-22)
747
+ ++++++++++++++++++
748
+
749
+ - feature #120 - add Shape.rotation
750
+ - feature #97 - add Font.underline
751
+ - issue #117 - add BMP image support
752
+ - issue #95 - add BaseShape.name setter
753
+ - issue #107 - all .text properties should return unicode, not str
754
+ - feature #106 - add .text getters to Shape, TextFrame, and Paragraph
755
+
756
+ - Rename Shape.textframe to Shape.text_frame.
757
+ **Shape.textframe property (by that name) is deprecated.**
758
+
759
+
760
+ 0.5.0 (2014-09-13)
761
+ ++++++++++++++++++
762
+
763
+ - Add support for creating and manipulating bar, column, line, and pie charts
764
+ - Major refactoring of XML layer (oxml)
765
+ - Rationalized graphical object shape access
766
+ **Note backward incompatibilities below**
767
+
768
+ **BACKWARD INCOMPATIBILITIES:**
769
+
770
+ A table is no longer treated as a shape. Rather it is a graphical object
771
+ contained in a GraphicFrame shape, as are Chart and SmartArt objects.
772
+
773
+ Example::
774
+
775
+ table = shapes.add_table(...)
776
+
777
+ # becomes
778
+
779
+ graphic_frame = shapes.add_table(...)
780
+ table = graphic_frame.table
781
+
782
+ # or
783
+
784
+ table = shapes.add_table(...).table
785
+
786
+ As the enclosing shape, the id, name, shape type, position, and size are
787
+ attributes of the enclosing GraphicFrame object.
788
+
789
+ The contents of a GraphicFrame shape can be identified using three available
790
+ properties on a shape: has_table, has_chart, and has_smart_art. The enclosed
791
+ graphical object is obtained using the properties GraphicFrame.table and
792
+ GraphicFrame.chart. SmartArt is not yet supported. Accessing one of these
793
+ properties on a GraphicFrame not containing the corresponding object raises
794
+ an exception.
795
+
796
+
797
+ 0.4.2 (2014-04-29)
798
+ ++++++++++++++++++
799
+
800
+ - fix: issue #88 -- raises on supported image file having uppercase extension
801
+ - fix: issue #89 -- raises on add_slide() where non-contiguous existing ids
802
+
803
+
804
+ 0.4.1 (2014-04-29)
805
+ ++++++++++++++++++
806
+
807
+ - Rename Presentation.slidemasters to Presentation.slide_masters.
808
+ Presentation.slidemasters property is deprecated.
809
+ - Rename Presentation.slidelayouts to Presentation.slide_layouts.
810
+ Presentation.slidelayouts property is deprecated.
811
+ - Rename SlideMaster.slidelayouts to SlideMaster.slide_layouts.
812
+ SlideMaster.slidelayouts property is deprecated.
813
+ - Rename SlideLayout.slidemaster to SlideLayout.slide_master.
814
+ SlideLayout.slidemaster property is deprecated.
815
+ - Rename Slide.slidelayout to Slide.slide_layout. Slide.slidelayout property
816
+ is deprecated.
817
+ - Add SlideMaster.shapes to access shapes on slide master.
818
+ - Add SlideMaster.placeholders to access placeholder shapes on slide master.
819
+ - Add _MasterPlaceholder class.
820
+ - Add _LayoutPlaceholder class with position and size inheritable from master
821
+ placeholder.
822
+ - Add _SlidePlaceholder class with position and size inheritable from layout
823
+ placeholder.
824
+ - Add Table.left, top, width, and height read/write properties.
825
+ - Add rudimentary GroupShape with left, top, width, and height properties.
826
+ - Add rudimentary Connector with left, top, width, and height properties.
827
+ - Add TextFrame.auto_size property.
828
+ - Add Presentation.slide_width and .slide_height read/write properties.
829
+ - Add LineFormat class providing access to read and change line color and
830
+ width.
831
+ - Add AutoShape.line
832
+ - Add Picture.line
833
+
834
+ - Rationalize enumerations. **Note backward incompatibilities below**
835
+
836
+ **BACKWARD INCOMPATIBILITIES:**
837
+
838
+ The following enumerations were moved/renamed during the rationalization of
839
+ enumerations:
840
+
841
+ - ``pptx.enum.MSO_COLOR_TYPE`` --> ``pptx.enum.dml.MSO_COLOR_TYPE``
842
+ - ``pptx.enum.MSO_FILL`` --> ``pptx.enum.dml.MSO_FILL``
843
+ - ``pptx.enum.MSO_THEME_COLOR`` --> ``pptx.enum.dml.MSO_THEME_COLOR``
844
+ - ``pptx.constants.MSO.ANCHOR_*`` --> ``pptx.enum.text.MSO_ANCHOR.*``
845
+ - ``pptx.constants.MSO_SHAPE`` --> ``pptx.enum.shapes.MSO_SHAPE``
846
+ - ``pptx.constants.PP.ALIGN_*`` --> ``pptx.enum.text.PP_ALIGN.*``
847
+ - ``pptx.constants.MSO.{SHAPE_TYPES}`` -->
848
+ ``pptx.enum.shapes.MSO_SHAPE_TYPE.*``
849
+
850
+ Documentation for all enumerations is available in the Enumerations section
851
+ of the User Guide.
852
+
853
+
854
+ 0.3.2 (2014-02-07)
855
+ ++++++++++++++++++
856
+
857
+ - Hotfix: issue #80 generated presentations fail to load in Keynote and other
858
+ Apple applications
859
+
860
+
861
+ 0.3.1 (2014-01-10)
862
+ ++++++++++++++++++
863
+
864
+ - Hotfix: failed to load certain presentations containing images with
865
+ uppercase extension
866
+
867
+
868
+ 0.3.0 (2013-12-12)
869
+ ++++++++++++++++++
870
+
871
+ - Add read/write font color property supporting RGB, theme color, and inherit
872
+ color types
873
+ - Add font typeface and italic support
874
+ - Add text frame margins and word-wrap
875
+ - Add support for external relationships, e.g. linked spreadsheet
876
+ - Add hyperlink support for text run in shape and table cell
877
+ - Add fill color and brightness for shape and table cell, fill can also be set
878
+ to transparent (no fill)
879
+ - Add read/write position and size properties to shape and picture
880
+ - Replace PIL dependency with Pillow
881
+ - Restructure modules to better suit size of library
882
+
883
+
884
+ 0.2.6 (2013-06-22)
885
+ ++++++++++++++++++
886
+
887
+ - Add read/write access to core document properties
888
+ - Hotfix to accomodate connector shapes in _AutoShapeType
889
+ - Hotfix to allow customXml parts to load when present
890
+
891
+
892
+ 0.2.5 (2013-06-11)
893
+ ++++++++++++++++++
894
+
895
+ - Add paragraph alignment property (left, right, centered, etc.)
896
+ - Add vertical alignment within table cell (top, middle, bottom)
897
+ - Add table cell margin properties
898
+ - Add table boolean properties: first column (row header), first row (column
899
+ headings), last row (for e.g. totals row), last column (for e.g. row
900
+ totals), horizontal banding, and vertical banding.
901
+ - Add support for auto shape adjustment values, e.g. change radius of corner
902
+ rounding on rounded rectangle, position of callout arrow, etc.
903
+
904
+
905
+ 0.2.4 (2013-05-16)
906
+ ++++++++++++++++++
907
+
908
+ - Add support for auto shapes (e.g. polygons, flowchart symbols, etc.)
909
+
910
+
911
+ 0.2.3 (2013-05-05)
912
+ ++++++++++++++++++
913
+
914
+ - Add support for table shapes
915
+ - Add indentation support to textbox shapes, enabling multi-level bullets on
916
+ bullet slides.
917
+
918
+
919
+ 0.2.2 (2013-03-25)
920
+ ++++++++++++++++++
921
+
922
+ - Add support for opening and saving a presentation from/to a file-like
923
+ object.
924
+ - Refactor XML handling to use lxml objectify
925
+
926
+
927
+ 0.2.1 (2013-02-25)
928
+ ++++++++++++++++++
929
+
930
+ - Add support for Python 2.6
931
+ - Add images from a stream (e.g. StringIO) in addition to a path, allowing
932
+ images retrieved from a database or network resource to be inserted without
933
+ saving first.
934
+ - Expand text methods to accept unicode and UTF-8 encoded 8-bit strings.
935
+ - Fix potential install bug triggered by importing ``__version__`` from
936
+ package ``__init__.py`` file.
937
+
938
+
939
+ 0.2.0 (2013-02-10)
940
+ ++++++++++++++++++
941
+
942
+ First non-alpha release with basic capabilities:
943
+
944
+ - open presentation/template or use built-in default template
945
+ - add slide
946
+ - set placeholder text (e.g. bullet slides)
947
+ - add picture
948
+ - add text box