python-docx-oss 0.0.10__tar.gz → 0.0.12__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 (473) hide show
  1. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/HISTORY.md +8 -0
  2. {python_docx_oss-0.0.10/python_docx_oss.egg-info → python_docx_oss-0.0.12}/PKG-INFO +15 -3
  3. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/README.md +6 -2
  4. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/__init__.py +1 -1
  5. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/__init__.py +2 -1
  6. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/jpeg.py +45 -0
  7. python_docx_oss-0.0.12/docx/image/svg.py +118 -0
  8. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12/python_docx_oss.egg-info}/PKG-INFO +15 -3
  9. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/python_docx_oss.egg-info/SOURCES.txt +1 -0
  10. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_jpeg.py +81 -0
  11. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_svg.py +38 -0
  12. python_docx_oss-0.0.12/tests/test_files/jpeg_without_app0_and_app1.jpg +0 -0
  13. python_docx_oss-0.0.10/docx/image/svg.py +0 -65
  14. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/LICENSE +0 -0
  15. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/MANIFEST.in +0 -0
  16. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/Makefile +0 -0
  17. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_static/.gitignore +0 -0
  18. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_static/img/example-docx-01.png +0 -0
  19. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_static/img/hdrftr-01.png +0 -0
  20. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_static/img/hdrftr-02.png +0 -0
  21. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_static/img/oss.png +0 -0
  22. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_templates/layout.html +0 -0
  23. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_templates/sidebarlinks.html +0 -0
  24. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_themes/armstrong/LICENSE +0 -0
  25. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_themes/armstrong/layout.html +0 -0
  26. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_themes/armstrong/rtd-themes.conf +0 -0
  27. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_themes/armstrong/static/rtd.css_t +0 -0
  28. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_themes/armstrong/theme.conf +0 -0
  29. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/_themes/armstrong/theme.conf.orig +0 -0
  30. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/dml.rst +0 -0
  31. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/document.rst +0 -0
  32. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/MsoColorType.rst +0 -0
  33. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/MsoThemeColorIndex.rst +0 -0
  34. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdAlignParagraph.rst +0 -0
  35. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdBuiltinStyle.rst +0 -0
  36. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdCellVerticalAlignment.rst +0 -0
  37. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdColorIndex.rst +0 -0
  38. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdLineSpacing.rst +0 -0
  39. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdOrientation.rst +0 -0
  40. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdRowAlignment.rst +0 -0
  41. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdRowHeightRule.rst +0 -0
  42. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdSectionStart.rst +0 -0
  43. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdStyleType.rst +0 -0
  44. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdTabAlignment.rst +0 -0
  45. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdTabLeader.rst +0 -0
  46. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdTableDirection.rst +0 -0
  47. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/WdUnderline.rst +0 -0
  48. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/enum/index.rst +0 -0
  49. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/section.rst +0 -0
  50. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/settings.rst +0 -0
  51. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/shape.rst +0 -0
  52. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/shared.rst +0 -0
  53. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/style.rst +0 -0
  54. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/table.rst +0 -0
  55. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/api/text.rst +0 -0
  56. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/conf.py +0 -0
  57. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/coreprops.rst +0 -0
  58. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/header.rst +0 -0
  59. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/numbering.rst +0 -0
  60. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/sections.rst +0 -0
  61. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/settings.rst +0 -0
  62. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/shapes/index.rst +0 -0
  63. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/shapes/picture.rst +0 -0
  64. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/shapes/shapes-inline-size.rst +0 -0
  65. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/shapes/shapes-inline.rst +0 -0
  66. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/styles/character-style.rst +0 -0
  67. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/styles/index.rst +0 -0
  68. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/styles/latent-styles.rst +0 -0
  69. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/styles/paragraph-style.rst +0 -0
  70. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/styles/style.rst +0 -0
  71. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/styles/styles.rst +0 -0
  72. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/table/cell-merge.rst +0 -0
  73. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/table/index.rst +0 -0
  74. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/table/table-cell.rst +0 -0
  75. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/table/table-props.rst +0 -0
  76. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/table/table-row.rst +0 -0
  77. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/breaks.rst +0 -0
  78. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/font-color.rst +0 -0
  79. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/font-highlight-color.rst +0 -0
  80. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/font.rst +0 -0
  81. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/index.rst +0 -0
  82. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/paragraph-format.rst +0 -0
  83. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/run-content.rst +0 -0
  84. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/tab-stops.rst +0 -0
  85. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/features/text/underline.rst +0 -0
  86. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/index.rst +0 -0
  87. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/schema/ct_body.rst +0 -0
  88. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/schema/ct_document.rst +0 -0
  89. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/dev/analysis/schema/ct_p.rst +0 -0
  90. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/index.rst +0 -0
  91. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/requirements.txt +0 -0
  92. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/api-concepts.rst +0 -0
  93. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/custom-properties.rst +0 -0
  94. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/custom-xml.rst +0 -0
  95. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/documents.rst +0 -0
  96. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/hdrftr.rst +0 -0
  97. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/install.rst +0 -0
  98. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/quickstart.rst +0 -0
  99. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/sections.rst +0 -0
  100. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/shapes.rst +0 -0
  101. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/styles-understanding.rst +0 -0
  102. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/styles-using.rst +0 -0
  103. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docs/user/text.rst +0 -0
  104. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/api.py +0 -0
  105. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/blkcntnr.py +0 -0
  106. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/compat.py +0 -0
  107. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/dml/__init__.py +0 -0
  108. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/dml/color.py +0 -0
  109. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/document.py +0 -0
  110. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/enum/__init__.py +0 -0
  111. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/enum/base.py +0 -0
  112. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/enum/dml.py +0 -0
  113. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/enum/section.py +0 -0
  114. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/enum/shape.py +0 -0
  115. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/enum/style.py +0 -0
  116. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/enum/table.py +0 -0
  117. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/enum/text.py +0 -0
  118. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/exceptions.py +0 -0
  119. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/bmp.py +0 -0
  120. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/constants.py +0 -0
  121. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/emf.py +0 -0
  122. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/exceptions.py +0 -0
  123. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/gif.py +0 -0
  124. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/helpers.py +0 -0
  125. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/image.py +0 -0
  126. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/png.py +0 -0
  127. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/image/tiff.py +0 -0
  128. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/__init__.py +0 -0
  129. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/compat.py +0 -0
  130. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/constants.py +0 -0
  131. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/coreprops.py +0 -0
  132. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/customprops.py +0 -0
  133. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/exceptions.py +0 -0
  134. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/oxml.py +0 -0
  135. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/package.py +0 -0
  136. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/packuri.py +0 -0
  137. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/part.py +0 -0
  138. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/parts/__init__.py +0 -0
  139. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/parts/coreprops.py +0 -0
  140. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/parts/customprops.py +0 -0
  141. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/phys_pkg.py +0 -0
  142. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/pkgreader.py +0 -0
  143. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/pkgwriter.py +0 -0
  144. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/rel.py +0 -0
  145. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/shared.py +0 -0
  146. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/opc/spec.py +0 -0
  147. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/__init__.py +0 -0
  148. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/coreprops.py +0 -0
  149. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/customprops.py +0 -0
  150. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/document.py +0 -0
  151. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/exceptions.py +0 -0
  152. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/ns.py +0 -0
  153. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/numbering.py +0 -0
  154. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/section.py +0 -0
  155. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/settings.py +0 -0
  156. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/shape.py +0 -0
  157. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/shared.py +0 -0
  158. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/simpletypes.py +0 -0
  159. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/styles.py +0 -0
  160. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/table.py +0 -0
  161. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/text/__init__.py +0 -0
  162. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/text/font.py +0 -0
  163. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/text/paragraph.py +0 -0
  164. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/text/parfmt.py +0 -0
  165. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/text/run.py +0 -0
  166. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/oxml/xmlchemy.py +0 -0
  167. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/package.py +0 -0
  168. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/__init__.py +0 -0
  169. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/customxml.py +0 -0
  170. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/document.py +0 -0
  171. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/hdrftr.py +0 -0
  172. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/image.py +0 -0
  173. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/numbering.py +0 -0
  174. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/settings.py +0 -0
  175. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/story.py +0 -0
  176. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/parts/styles.py +0 -0
  177. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/section.py +0 -0
  178. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/settings.py +0 -0
  179. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/shape.py +0 -0
  180. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/shared.py +0 -0
  181. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/styles/__init__.py +0 -0
  182. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/styles/latent.py +0 -0
  183. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/styles/style.py +0 -0
  184. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/styles/styles.py +0 -0
  185. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/table.py +0 -0
  186. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/[Content_Types].xml +0 -0
  187. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/_rels/.rels +0 -0
  188. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/customXml/_rels/item1.xml.rels +0 -0
  189. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/customXml/item1.xml +0 -0
  190. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/customXml/itemProps1.xml +0 -0
  191. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/docProps/app.xml +0 -0
  192. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/docProps/core.xml +0 -0
  193. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/docProps/thumbnail.jpeg +0 -0
  194. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/_rels/document.xml.rels +0 -0
  195. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/document.xml +0 -0
  196. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/fontTable.xml +0 -0
  197. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/numbering.xml +0 -0
  198. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/settings.xml +0 -0
  199. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/styles.xml +0 -0
  200. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/stylesWithEffects.xml +0 -0
  201. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/theme/theme1.xml +0 -0
  202. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-docx-template/word/webSettings.xml +0 -0
  203. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-footer.xml +0 -0
  204. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-header.xml +0 -0
  205. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-numbering.xml +0 -0
  206. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-settings.xml +0 -0
  207. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default-styles.xml +0 -0
  208. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/templates/default.docx +0 -0
  209. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/text/__init__.py +0 -0
  210. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/text/font.py +0 -0
  211. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/text/paragraph.py +0 -0
  212. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/text/parfmt.py +0 -0
  213. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/text/run.py +0 -0
  214. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/docx/text/tabstops.py +0 -0
  215. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/_scratch/test_out.docx +0 -0
  216. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/api-open-document.feature +0 -0
  217. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/blk-add-paragraph.feature +0 -0
  218. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/blk-add-table.feature +0 -0
  219. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/cel-add-table.feature +0 -0
  220. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/cel-text.feature +0 -0
  221. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-access-collections.feature +0 -0
  222. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-access-sections.feature +0 -0
  223. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-add-heading.feature +0 -0
  224. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-add-page-break.feature +0 -0
  225. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-add-paragraph.feature +0 -0
  226. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-add-picture.feature +0 -0
  227. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-add-section.feature +0 -0
  228. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-add-table.feature +0 -0
  229. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-coreprops.feature +0 -0
  230. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-customprops.feature +0 -0
  231. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-settings.feature +0 -0
  232. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/doc-styles.feature +0 -0
  233. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/environment.py +0 -0
  234. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/hdr-header-footer.feature +0 -0
  235. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/img-characterize-image.feature +0 -0
  236. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/num-access-numbering-part.feature +0 -0
  237. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/par-access-parfmt.feature +0 -0
  238. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/par-add-run.feature +0 -0
  239. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/par-alignment-prop.feature +0 -0
  240. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/par-clear-paragraph.feature +0 -0
  241. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/par-insert-paragraph.feature +0 -0
  242. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/par-set-text.feature +0 -0
  243. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/par-style-prop.feature +0 -0
  244. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/run-access-content.feature +0 -0
  245. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/run-access-font.feature +0 -0
  246. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/run-add-content.feature +0 -0
  247. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/run-add-picture.feature +0 -0
  248. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/run-char-style.feature +0 -0
  249. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/run-clear-run.feature +0 -0
  250. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/run-enum-props.feature +0 -0
  251. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sct-section.feature +0 -0
  252. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/shp-inline-shape-access.feature +0 -0
  253. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/shp-inline-shape-size.feature +0 -0
  254. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/api.py +0 -0
  255. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/block.py +0 -0
  256. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/cell.py +0 -0
  257. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/coreprops.py +0 -0
  258. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/customprops.py +0 -0
  259. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/document.py +0 -0
  260. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/font.py +0 -0
  261. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/hdrftr.py +0 -0
  262. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/helpers.py +0 -0
  263. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/image.py +0 -0
  264. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/numbering.py +0 -0
  265. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/paragraph.py +0 -0
  266. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/parfmt.py +0 -0
  267. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/section.py +0 -0
  268. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/settings.py +0 -0
  269. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/shape.py +0 -0
  270. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/shared.py +0 -0
  271. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/styles.py +0 -0
  272. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/table.py +0 -0
  273. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/tabstops.py +0 -0
  274. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/blk-containing-table.docx +0 -0
  275. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/court-exif.jpg +0 -0
  276. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-access-sections.docx +0 -0
  277. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-add-section.docx +0 -0
  278. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-coreprops.docx +0 -0
  279. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-customprops-legacy.docx +0 -0
  280. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-customprops.docx +0 -0
  281. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-default.docx +0 -0
  282. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-no-coreprops.docx +0 -0
  283. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-no-customprops.docx +0 -0
  284. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-odd-even-hdrs.docx +0 -0
  285. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/doc-word-default-blank.docx +0 -0
  286. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/fnt-color.docx +0 -0
  287. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/hdr-header-footer.docx +0 -0
  288. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/jfif-300-dpi.jpg +0 -0
  289. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/jpeg420exif.jpg +0 -0
  290. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/lena.bmp +0 -0
  291. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/lena.gif +0 -0
  292. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/lena.tif +0 -0
  293. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/lena_std.jpg +0 -0
  294. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/monty-truth.png +0 -0
  295. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/mountain.bmp +0 -0
  296. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/num-having-numbering-part.docx +0 -0
  297. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/par-alignment.docx +0 -0
  298. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/par-known-paragraphs.docx +0 -0
  299. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/par-known-styles.docx +0 -0
  300. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/python-icon.jpeg +0 -0
  301. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/run-char-style.docx +0 -0
  302. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/run-enumerated-props.docx +0 -0
  303. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/sample.tif +0 -0
  304. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/sct-first-page-hdrftr.docx +0 -0
  305. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/sct-section-props.docx +0 -0
  306. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/set-no-settings-part.docx +0 -0
  307. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/shp-inline-shape-access.docx +0 -0
  308. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/sty-behav-props.docx +0 -0
  309. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/sty-having-no-styles-part.docx +0 -0
  310. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/sty-having-styles-part.docx +0 -0
  311. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/sty-known-styles.docx +0 -0
  312. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/tab-stops.docx +0 -0
  313. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/tbl-2x2-table.docx +0 -0
  314. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/tbl-cell-access.docx +0 -0
  315. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/tbl-col-props.docx +0 -0
  316. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/tbl-having-applied-style.docx +0 -0
  317. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/tbl-having-tables.docx +0 -0
  318. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/tbl-on-off-props.docx +0 -0
  319. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/tbl-props.docx +0 -0
  320. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/test.png +0 -0
  321. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/txt-font-highlight-color.docx +0 -0
  322. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/test_files/txt-font-props.docx +0 -0
  323. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/steps/text.py +0 -0
  324. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sty-access-font.feature +0 -0
  325. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sty-access-latent-styles.feature +0 -0
  326. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sty-access-parfmt.feature +0 -0
  327. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sty-add-style.feature +0 -0
  328. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sty-delete-style.feature +0 -0
  329. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sty-latent-add-del.feature +0 -0
  330. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sty-latent-props.feature +0 -0
  331. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/sty-style-props.feature +0 -0
  332. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tab-access-tabs.feature +0 -0
  333. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tab-tabstop-props.feature +0 -0
  334. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-add-row-or-col.feature +0 -0
  335. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-cell-access.feature +0 -0
  336. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-cell-props.feature +0 -0
  337. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-col-props.feature +0 -0
  338. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-item-access.feature +0 -0
  339. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-merge-cells.feature +0 -0
  340. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-props.feature +0 -0
  341. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-row-props.feature +0 -0
  342. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/tbl-style.feature +0 -0
  343. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/txt-add-break.feature +0 -0
  344. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/txt-font-color.feature +0 -0
  345. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/txt-font-props.feature +0 -0
  346. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/features/txt-parfmt-props.feature +0 -0
  347. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/python_docx_oss.egg-info/dependency_links.txt +0 -0
  348. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/python_docx_oss.egg-info/not-zip-safe +0 -0
  349. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/python_docx_oss.egg-info/requires.txt +0 -0
  350. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/python_docx_oss.egg-info/top_level.txt +0 -0
  351. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/setup.cfg +0 -0
  352. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/setup.py +0 -0
  353. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/__init__.py +0 -0
  354. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/dml/__init__.py +0 -0
  355. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/dml/test_color.py +0 -0
  356. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/__init__.py +0 -0
  357. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_bmp.py +0 -0
  358. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_emf.py +0 -0
  359. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_gif.py +0 -0
  360. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_helpers.py +0 -0
  361. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_image.py +0 -0
  362. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_png.py +0 -0
  363. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/image/test_tiff.py +0 -0
  364. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/__init__.py +0 -0
  365. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/parts/__init__.py +0 -0
  366. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/parts/test_coreprops.py +0 -0
  367. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/parts/test_customprops.py +0 -0
  368. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_coreprops.py +0 -0
  369. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_customprops.py +0 -0
  370. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_oxml.py +0 -0
  371. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_package.py +0 -0
  372. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_packuri.py +0 -0
  373. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_part.py +0 -0
  374. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_phys_pkg.py +0 -0
  375. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_pkgreader.py +0 -0
  376. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_pkgwriter.py +0 -0
  377. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/test_rel.py +0 -0
  378. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/unitdata/__init__.py +0 -0
  379. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/unitdata/rels.py +0 -0
  380. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/opc/unitdata/types.py +0 -0
  381. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/__init__.py +0 -0
  382. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/parts/__init__.py +0 -0
  383. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/parts/test_document.py +0 -0
  384. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/parts/unitdata/__init__.py +0 -0
  385. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/parts/unitdata/document.py +0 -0
  386. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/test__init__.py +0 -0
  387. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/test_ns.py +0 -0
  388. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/test_styles.py +0 -0
  389. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/test_table.py +0 -0
  390. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/test_xmlchemy.py +0 -0
  391. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/text/__init__.py +0 -0
  392. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/text/test_run.py +0 -0
  393. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/unitdata/__init__.py +0 -0
  394. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/unitdata/dml.py +0 -0
  395. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/unitdata/numbering.py +0 -0
  396. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/unitdata/section.py +0 -0
  397. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/unitdata/shared.py +0 -0
  398. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/unitdata/styles.py +0 -0
  399. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/unitdata/table.py +0 -0
  400. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/oxml/unitdata/text.py +0 -0
  401. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/__init__.py +0 -0
  402. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/test_customxml.py +0 -0
  403. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/test_document.py +0 -0
  404. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/test_hdrftr.py +0 -0
  405. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/test_image.py +0 -0
  406. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/test_numbering.py +0 -0
  407. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/test_settings.py +0 -0
  408. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/test_story.py +0 -0
  409. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/parts/test_styles.py +0 -0
  410. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/styles/__init__.py +0 -0
  411. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/styles/test_latent.py +0 -0
  412. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/styles/test_style.py +0 -0
  413. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/styles/test_styles.py +0 -0
  414. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_api.py +0 -0
  415. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_blkcntnr.py +0 -0
  416. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_document.py +0 -0
  417. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_enum.py +0 -0
  418. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/150-dpi.png +0 -0
  419. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/300-dpi.TIF +0 -0
  420. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/300-dpi.jpg +0 -0
  421. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/300-dpi.png +0 -0
  422. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/72-dpi.tiff +0 -0
  423. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/CVS_LOGO.WMF +0 -0
  424. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/exif-420-dpi.jpg +0 -0
  425. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/[Content_Types].xml +0 -0
  426. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/_rels/.rels +0 -0
  427. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/customXml/_rels/item1.xml.rels +0 -0
  428. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/customXml/item1.xml +0 -0
  429. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/customXml/itemProps1.xml +0 -0
  430. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/docProps/app.xml +0 -0
  431. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/docProps/core.xml +0 -0
  432. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/docProps/thumbnail.jpeg +0 -0
  433. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/_rels/document.xml.rels +0 -0
  434. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/document.xml +0 -0
  435. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/fontTable.xml +0 -0
  436. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/numbering.xml +0 -0
  437. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/settings.xml +0 -0
  438. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/styles.xml +0 -0
  439. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/stylesWithEffects.xml +0 -0
  440. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/theme/theme1.xml +0 -0
  441. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/expanded_docx/word/webSettings.xml +0 -0
  442. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/having-images.docx +0 -0
  443. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/jfif-iguana.jpg +0 -0
  444. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/little-endian.tif +0 -0
  445. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/monty-truth.png +0 -0
  446. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/python-icon.jpeg +0 -0
  447. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/python-icon.png +0 -0
  448. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/python-powered.png +0 -0
  449. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/python.bmp +0 -0
  450. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/snippets/add-row-col.txt +0 -0
  451. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/snippets/inline.txt +0 -0
  452. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/snippets/new-tbl.txt +0 -0
  453. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/snippets/tbl-cells.txt +0 -0
  454. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/sonic.gif +0 -0
  455. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_files/test.docx +0 -0
  456. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_package.py +0 -0
  457. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_section.py +0 -0
  458. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_settings.py +0 -0
  459. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_shape.py +0 -0
  460. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_shared.py +0 -0
  461. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/test_table.py +0 -0
  462. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/text/__init__.py +0 -0
  463. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/text/test_font.py +0 -0
  464. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/text/test_paragraph.py +0 -0
  465. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/text/test_parfmt.py +0 -0
  466. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/text/test_run.py +0 -0
  467. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/text/test_tabstops.py +0 -0
  468. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/unitdata.py +0 -0
  469. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/unitutil/__init__.py +0 -0
  470. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/unitutil/cxml.py +0 -0
  471. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/unitutil/file.py +0 -0
  472. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tests/unitutil/mock.py +0 -0
  473. {python_docx_oss-0.0.10 → python_docx_oss-0.0.12}/tox.ini +0 -0
@@ -1,5 +1,13 @@
1
1
  ## Release History
2
2
 
3
+ 0.0.12 (2025-12-03)
4
+
5
+ - default dpi for jpeg #33
6
+
7
+ 0.0.11 (2025-11-17)
8
+
9
+ - round-float viewbox and enhance svg unit parsing #31
10
+
3
11
  **0.0.10 (2025-11-13)**
4
12
 
5
13
  - Fix modern bool representations in .docx files. #29
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-docx-oss
3
- Version: 0.0.10
3
+ Version: 0.0.12
4
4
  Summary: CRUD Microsoft Word .docx files.
5
5
  Home-page: https://github.com/lsaint/python-docx-oss
6
6
  Author: Ethan St. Lee
@@ -69,7 +69,7 @@ _As a Brazilian jiu-jitsu player, OSS means anything and everything. It's a term
69
69
  <a href="https://github.com/lsaint/python-docx-oss/blob/master/LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
70
70
  </p>
71
71
 
72
- ---
72
+ ______________________________________________________________________
73
73
 
74
74
  ### FAQ
75
75
 
@@ -77,15 +77,27 @@ _As a Brazilian jiu-jitsu player, OSS means anything and everything. It's a term
77
77
 
78
78
  **A:** [HISTORY](https://github.com/lsaint/python-docx-oss/blob/master/HISTORY.md)
79
79
 
80
- ---
80
+ ______________________________________________________________________
81
81
 
82
82
  More information is available in the [python-docx-oss documentation](https://python-docx-oss.readthedocs.io/en/latest/)
83
83
 
84
84
  This project is based on the original work by [Steve Canny](https://github.com/scanny) and has been modified by [Ethan St. Lee](https://github.com/lsaint).
85
85
 
86
+ ### Donation
87
+
88
+ [https://lsaint.github.io/donation/](https://lsaint.github.io/donation/)
89
+
86
90
 
87
91
  ## Release History
88
92
 
93
+ 0.0.12 (2025-12-03)
94
+
95
+ - default dpi for jpeg #33
96
+
97
+ 0.0.11 (2025-11-17)
98
+
99
+ - round-float viewbox and enhance svg unit parsing #31
100
+
89
101
  **0.0.10 (2025-11-13)**
90
102
 
91
103
  - Fix modern bool representations in .docx files. #29
@@ -13,7 +13,7 @@ _As a Brazilian jiu-jitsu player, OSS means anything and everything. It's a term
13
13
  <a href="https://github.com/lsaint/python-docx-oss/blob/master/LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
14
14
  </p>
15
15
 
16
- ---
16
+ ______________________________________________________________________
17
17
 
18
18
  ### FAQ
19
19
 
@@ -21,8 +21,12 @@ _As a Brazilian jiu-jitsu player, OSS means anything and everything. It's a term
21
21
 
22
22
  **A:** [HISTORY](https://github.com/lsaint/python-docx-oss/blob/master/HISTORY.md)
23
23
 
24
- ---
24
+ ______________________________________________________________________
25
25
 
26
26
  More information is available in the [python-docx-oss documentation](https://python-docx-oss.readthedocs.io/en/latest/)
27
27
 
28
28
  This project is based on the original work by [Steve Canny](https://github.com/scanny) and has been modified by [Ethan St. Lee](https://github.com/lsaint).
29
+
30
+ ### Donation
31
+
32
+ [https://lsaint.github.io/donation/](https://lsaint.github.io/donation/)
@@ -12,7 +12,7 @@ from docx.parts.numbering import NumberingPart
12
12
  from docx.parts.settings import SettingsPart
13
13
  from docx.parts.styles import StylesPart # noqa
14
14
 
15
- __version__ = "0.0.10"
15
+ __version__ = "0.0.12"
16
16
 
17
17
 
18
18
  # register custom Part classes with opc package reader
@@ -10,7 +10,7 @@ from __future__ import absolute_import, division, print_function, unicode_litera
10
10
  from docx.image.bmp import Bmp
11
11
  from docx.image.emf import Emf
12
12
  from docx.image.gif import Gif
13
- from docx.image.jpeg import Exif, Jfif
13
+ from docx.image.jpeg import Exif, Jfif, Jpeg
14
14
  from docx.image.png import Png
15
15
  from docx.image.svg import Svg
16
16
  from docx.image.tiff import Tiff
@@ -21,6 +21,7 @@ SIGNATURES = (
21
21
  (Png, 0, b"\x89PNG\x0D\x0A\x1A\x0A"),
22
22
  (Jfif, 6, b"JFIF"),
23
23
  (Exif, 6, b"Exif"),
24
+ (Jpeg, 0, b"\xff\xd8"),
24
25
  (Gif, 0, b"GIF87a"),
25
26
  (Gif, 0, b"GIF89a"),
26
27
  (Tiff, 0, b"MM\x00*"), # big-endian (Motorola) TIFF
@@ -29,6 +29,51 @@ class Jpeg(BaseImageHeader):
29
29
  """
30
30
  return "jpg"
31
31
 
32
+ DEFAULT_DPI = 72
33
+
34
+ @classmethod
35
+ def from_stream(cls, stream):
36
+ """
37
+ If APP0 or APP1 is missing, the DPI values will be set to the default value of |DEFAULT_DPI|(72).
38
+ """
39
+ markers = _JfifMarkers.from_stream(stream)
40
+ px_width = markers.sof.px_width
41
+ px_height = markers.sof.px_height
42
+ horz_dpi, vert_dpi = cls._get_horz_dpi_and_vert_dpi(markers)
43
+ return cls(px_width, px_height, horz_dpi, vert_dpi)
44
+
45
+ @classmethod
46
+ def _get_horz_dpi_and_vert_dpi(cls, markers):
47
+ horz_dpi, vert_dpi = cls._try_get_dpi_from_app0(markers)
48
+ if horz_dpi is None or vert_dpi is None:
49
+ horz_dpi, vert_dpi = cls._try_get_dpi_from_app1(markers)
50
+ if horz_dpi is None or vert_dpi is None:
51
+ horz_dpi = vert_dpi = cls.DEFAULT_DPI
52
+ # DPI values in APP0 or APP1 may be 0, which is invalid. should use default value.
53
+ if horz_dpi == 0:
54
+ horz_dpi = cls.DEFAULT_DPI
55
+ if vert_dpi == 0:
56
+ vert_dpi = cls.DEFAULT_DPI
57
+ return horz_dpi, vert_dpi
58
+
59
+ @staticmethod
60
+ def _try_get_dpi_from_app0(markers):
61
+ try:
62
+ horz_dpi = markers.app0.horz_dpi
63
+ vert_dpi = markers.app0.vert_dpi
64
+ return horz_dpi, vert_dpi
65
+ except KeyError:
66
+ return None, None
67
+
68
+ @staticmethod
69
+ def _try_get_dpi_from_app1(markers):
70
+ try:
71
+ horz_dpi = markers.app1.horz_dpi
72
+ vert_dpi = markers.app1.vert_dpi
73
+ return horz_dpi, vert_dpi
74
+ except KeyError:
75
+ return None, None
76
+
32
77
 
33
78
  class Exif(Jpeg):
34
79
  """
@@ -0,0 +1,118 @@
1
+ import re
2
+ import xml.etree.ElementTree as ET
3
+
4
+ from .constants import MIME_TYPE
5
+ from .image import BaseImageHeader
6
+
7
+ BASE_PX = 72
8
+
9
+
10
+ class Svg(BaseImageHeader):
11
+ """
12
+ Image header parser for SVG images.
13
+ """
14
+
15
+ @classmethod
16
+ def from_stream(cls, stream):
17
+ """
18
+ Return |Svg| instance having header properties parsed from SVG image
19
+ in *stream*.
20
+ """
21
+ px_width, px_height = cls._dimensions_from_stream(stream)
22
+ return cls(px_width, px_height, BASE_PX, BASE_PX)
23
+
24
+ @property
25
+ def content_type(self):
26
+ """
27
+ MIME content type for this image, unconditionally `image/svg+xml` for
28
+ SVG images.
29
+ """
30
+ return MIME_TYPE.SVG
31
+
32
+ @property
33
+ def default_ext(self):
34
+ """
35
+ Default filename extension, always 'svg' for SVG images.
36
+ """
37
+ return "svg"
38
+
39
+ @classmethod
40
+ def _parse_svg_unit_value(cls, value_str: str) -> float:
41
+ """
42
+ Parse an SVG length value and return it in points (which are 1/72 of an inch).
43
+ Handles units like px, pt, cm, mm, in, pc.
44
+ """
45
+ if not value_str:
46
+ return 0.0
47
+
48
+ value_str = value_str.strip().lower()
49
+
50
+ # Regex to separate the numeric value from the unit, allowing for spaces
51
+ match = re.match(r"^(-?\d*\.?\d+)\s*([a-z%]*)$", value_str)
52
+ if not match:
53
+ # Handle case where there is no unit (treat as px, as per SVG spec)
54
+ try:
55
+ return float(value_str)
56
+ except ValueError:
57
+ return 0.0
58
+
59
+ value, unit = match.groups()
60
+ numeric_value = float(value)
61
+
62
+ # ---conversion factors to points (assuming 72 DPI, where 1pt = 1px)---
63
+ # This matches the existing behavior of the Svg class.
64
+ # 1 inch = BASE_PX points
65
+ # 1 cm = 1/2.54 inch = BASE_PX/2.54 points
66
+ # 1 mm = 1/25.4 inch = BASE_PX/25.4 points
67
+ # 1 pc = 12 points
68
+ # 1 px = 1 point (at BASE_PX DPI)
69
+
70
+ if unit in ("pt", "px", ""):
71
+ return numeric_value
72
+ elif unit == "in":
73
+ return numeric_value * float(BASE_PX)
74
+ elif unit == "pc":
75
+ return numeric_value * 12.0
76
+ elif unit == "cm":
77
+ return numeric_value * float(BASE_PX) / 2.54
78
+ elif unit == "mm":
79
+ return numeric_value * float(BASE_PX) / 25.4
80
+ # ---treat other units as px for now---
81
+ else:
82
+ return numeric_value
83
+
84
+ @classmethod
85
+ def _dimensions_from_stream(cls, stream):
86
+ stream.seek(0)
87
+ data = stream.read()
88
+ root = ET.fromstring(data)
89
+
90
+ width_str = root.attrib.get("width")
91
+ height_str = root.attrib.get("height")
92
+
93
+ if width_str and height_str:
94
+ width = round(cls._parse_svg_unit_value(width_str))
95
+ height = round(cls._parse_svg_unit_value(height_str))
96
+ return width, height
97
+
98
+ if root.attrib.get("viewBox"):
99
+ return cls._calculate_scaled_dimensions(root.attrib["viewBox"])
100
+
101
+ return 0, 0
102
+
103
+ @classmethod
104
+ def _calculate_scaled_dimensions(
105
+ cls, viewbox: str, base_px: int = BASE_PX
106
+ ) -> tuple[int, int]:
107
+ _, _, logical_width, logical_height = map(float, viewbox.split())
108
+
109
+ aspect_ratio = logical_width / logical_height
110
+
111
+ if aspect_ratio >= 1:
112
+ final_width = base_px
113
+ final_height = base_px / aspect_ratio
114
+ else:
115
+ final_height = base_px
116
+ final_width = base_px * aspect_ratio
117
+
118
+ return round(final_width), round(final_height)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-docx-oss
3
- Version: 0.0.10
3
+ Version: 0.0.12
4
4
  Summary: CRUD Microsoft Word .docx files.
5
5
  Home-page: https://github.com/lsaint/python-docx-oss
6
6
  Author: Ethan St. Lee
@@ -69,7 +69,7 @@ _As a Brazilian jiu-jitsu player, OSS means anything and everything. It's a term
69
69
  <a href="https://github.com/lsaint/python-docx-oss/blob/master/LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
70
70
  </p>
71
71
 
72
- ---
72
+ ______________________________________________________________________
73
73
 
74
74
  ### FAQ
75
75
 
@@ -77,15 +77,27 @@ _As a Brazilian jiu-jitsu player, OSS means anything and everything. It's a term
77
77
 
78
78
  **A:** [HISTORY](https://github.com/lsaint/python-docx-oss/blob/master/HISTORY.md)
79
79
 
80
- ---
80
+ ______________________________________________________________________
81
81
 
82
82
  More information is available in the [python-docx-oss documentation](https://python-docx-oss.readthedocs.io/en/latest/)
83
83
 
84
84
  This project is based on the original work by [Steve Canny](https://github.com/scanny) and has been modified by [Ethan St. Lee](https://github.com/lsaint).
85
85
 
86
+ ### Donation
87
+
88
+ [https://lsaint.github.io/donation/](https://lsaint.github.io/donation/)
89
+
86
90
 
87
91
  ## Release History
88
92
 
93
+ 0.0.12 (2025-12-03)
94
+
95
+ - default dpi for jpeg #33
96
+
97
+ 0.0.11 (2025-11-17)
98
+
99
+ - round-float viewbox and enhance svg unit parsing #31
100
+
89
101
  **0.0.10 (2025-11-13)**
90
102
 
91
103
  - Fix modern bool representations in .docx files. #29
@@ -428,6 +428,7 @@ tests/test_files/CVS_LOGO.WMF
428
428
  tests/test_files/exif-420-dpi.jpg
429
429
  tests/test_files/having-images.docx
430
430
  tests/test_files/jfif-iguana.jpg
431
+ tests/test_files/jpeg_without_app0_and_app1.jpg
431
432
  tests/test_files/little-endian.tif
432
433
  tests/test_files/monty-truth.png
433
434
  tests/test_files/python-icon.jpeg
@@ -31,6 +31,8 @@ from ..unitutil.mock import (
31
31
  initializer_mock,
32
32
  instance_mock,
33
33
  method_mock,
34
+ MagicMock,
35
+ PropertyMock
34
36
  )
35
37
 
36
38
 
@@ -43,6 +45,14 @@ class DescribeJpeg(object):
43
45
  jpeg = Jpeg(None, None, None, None)
44
46
  assert jpeg.default_ext == "jpg"
45
47
 
48
+ def it_not_contains_app0_or_app1(self):
49
+ with open("tests/test_files/jpeg_without_app0_and_app1.jpg", "rb") as f:
50
+ jpeg = Jpeg.from_stream(f)
51
+ assert jpeg.horz_dpi == 72
52
+ assert jpeg.vert_dpi == 72
53
+ assert jpeg.px_width == 1190
54
+ assert jpeg.px_height == 1190
55
+
46
56
  class DescribeExif(object):
47
57
  def it_can_construct_from_an_exif_stream(self, from_exif_fixture):
48
58
  # fixture ----------------------
@@ -637,3 +647,74 @@ class Describe_MarkerParser(object):
637
647
  @pytest.fixture
638
648
  def stream_reader_(self, request):
639
649
  return instance_mock(request, StreamReader)
650
+
651
+
652
+ class TestJpegMethods:
653
+ def test_get_horz_dpi_and_vert_dpi_from_app0(self, mocker):
654
+ markers = MagicMock()
655
+ mocker.patch.object(Jpeg, "_try_get_dpi_from_app0", return_value=(96, 96))
656
+ horz_dpi,vert_dpi = Jpeg._get_horz_dpi_and_vert_dpi(markers)
657
+ assert horz_dpi == 96
658
+ assert vert_dpi == 96
659
+
660
+ def test_get_horz_dpi_and_vert_dpi_from_app0_but_return_zero(self, mocker):
661
+ markers = MagicMock()
662
+ mocker.patch.object(Jpeg, "_try_get_dpi_from_app0", return_value=(0, 0))
663
+ horz_dpi,vert_dpi = Jpeg._get_horz_dpi_and_vert_dpi(markers)
664
+ assert horz_dpi == 72
665
+ assert vert_dpi == 72
666
+
667
+
668
+ def test_get_horz_dpi_and_vert_dpi_from_app1(self, mocker):
669
+ markers = MagicMock()
670
+ mocker.patch.object(Jpeg, "_try_get_dpi_from_app0", return_value=(None, None))
671
+ mocker.patch.object(Jpeg, "_try_get_dpi_from_app1", return_value=(96, 96))
672
+ horz_dpi,vert_dpi = Jpeg._get_horz_dpi_and_vert_dpi(markers)
673
+ assert horz_dpi == 96
674
+ assert vert_dpi == 96
675
+
676
+ def test_get_horz_dpi_and_vert_dpi_from_app1_but_return_zero(self, mocker):
677
+ markers = MagicMock()
678
+ mocker.patch.object(Jpeg, "_try_get_dpi_from_app0", return_value=(None, None))
679
+ mocker.patch.object(Jpeg, "_try_get_dpi_from_app1", return_value=(0, 0))
680
+ horz_dpi,vert_dpi = Jpeg._get_horz_dpi_and_vert_dpi(markers)
681
+ assert horz_dpi == 72
682
+ assert vert_dpi == 72
683
+
684
+ def test_get_horz_dpi_and_vert_dpi_from_DEFAULT_DPI(self, mocker):
685
+ markers = MagicMock()
686
+ mocker.patch.object(Jpeg, "_try_get_dpi_from_app0", return_value=(None, None))
687
+ mocker.patch.object(Jpeg, "_try_get_dpi_from_app1", return_value=(None, None))
688
+ horz_dpi,vert_dpi = Jpeg._get_horz_dpi_and_vert_dpi(markers)
689
+ assert horz_dpi == 72
690
+ assert vert_dpi == 72
691
+
692
+ def test__try_get_dpi_from_app0_returns_None(self, mocker):
693
+ markers = MagicMock()
694
+ type(markers).app0 = PropertyMock(side_effect=KeyError("APP0 not found"))
695
+ horz_dpi,vert_dpi = Jpeg._try_get_dpi_from_app0(markers)
696
+ assert horz_dpi is None
697
+ assert vert_dpi is None
698
+
699
+ def test__try_get_dpi_from_app0(self, mocker):
700
+ markers = MagicMock()
701
+ markers.app0.horz_dpi = 96
702
+ markers.app0.vert_dpi = 96
703
+ horz_dpi,vert_dpi = Jpeg._try_get_dpi_from_app0(markers)
704
+ assert horz_dpi == 96
705
+ assert vert_dpi == 96
706
+
707
+ def test__try_get_dpi_from_app1_returns_None(self, mocker):
708
+ markers = MagicMock()
709
+ type(markers).app1 = PropertyMock(side_effect=KeyError("APP1 not found"))
710
+ horz_dpi,vert_dpi = Jpeg._try_get_dpi_from_app1(markers)
711
+ assert horz_dpi is None
712
+ assert vert_dpi is None
713
+
714
+ def test__try_get_dpi_from_app1(self, mocker):
715
+ markers = MagicMock()
716
+ markers.app1.horz_dpi = 96
717
+ markers.app1.vert_dpi = 96
718
+ horz_dpi,vert_dpi = Jpeg._try_get_dpi_from_app1(markers)
719
+ assert horz_dpi == 96
720
+ assert vert_dpi == 96
@@ -25,6 +25,7 @@ def svg_with_viewbox():
25
25
  ("0 0 400 200", 72, 36, 72), # Landscape
26
26
  ("0 0 200 400", 100, 200, 200), # Portrait
27
27
  ("0 0 100 100", 50, 50, 50), # Square
28
+ ("0 0 100.5 100.5", 50, 50, 50), # Float
28
29
  ]
29
30
  )
30
31
  def viewbox_data(request):
@@ -35,13 +36,49 @@ def viewbox_data(request):
35
36
  @pytest.fixture(
36
37
  params=[
37
38
  (b'<svg width="200" height="100"/>', 200, 100),
39
+ (b'<svg width="200.5" height="100.5"/>', 200, 100), # round-half-to-even
38
40
  (b'<svg viewBox="0 0 400 200"/>', BASE_PX, BASE_PX // 2),
41
+ (b'<svg viewBox="0 0 400.5 200.5"/>', BASE_PX, 36),
42
+ (b'<svg width="1in" height="0.5in"/>', 72, 36),
43
+ (b'<svg width="2.54cm" height="1.27cm"/>', 72, 36),
44
+ (b'<svg width="25.4mm" height="12.7mm"/>', 72, 36),
45
+ (b'<svg width="6pc" height="3pc"/>', 72, 36),
46
+ (b'<svg width="72pt" height="36pt"/>', 72, 36),
47
+ (b'<svg width="96px" height="48px"/>', 96, 48),
48
+ (b"<svg/>", 0, 0),
39
49
  ]
40
50
  )
41
51
  def svg_stream_data(request):
42
52
  return request.param
43
53
 
44
54
 
55
+ @pytest.fixture(
56
+ params=[
57
+ ("100", 100.0),
58
+ ("150.5", 150.5),
59
+ ("100pt", 100.0),
60
+ ("100px", 100.0),
61
+ ("1in", 72.0),
62
+ ("1pc", 12.0),
63
+ ("2.54cm", 72.0),
64
+ ("25.4mm", 72.0),
65
+ (" 150.5 px ", 150.5),
66
+ ("-20.5", -20.5),
67
+ ("", 0.0),
68
+ ("invalid", 0.0),
69
+ ("12em", 12.0), # fallback to px
70
+ ]
71
+ )
72
+ def unit_value_data(request):
73
+ """Fixture for different SVG unit value strings."""
74
+ return request.param
75
+
76
+
77
+ def test_parse_svg_unit_value(unit_value_data):
78
+ value_str, expected_value = unit_value_data
79
+ assert Svg._parse_svg_unit_value(value_str) == pytest.approx(expected_value)
80
+
81
+
45
82
  def test_dimensions_from_stream(svg_stream_data):
46
83
  stream_data, expected_width, expected_height = svg_stream_data
47
84
  stream = io.BytesIO(stream_data)
@@ -55,3 +92,4 @@ def test_calculate_scaled_dimensions(viewbox_data):
55
92
  width, height = Svg._calculate_scaled_dimensions(viewbox, base_px)
56
93
  assert width == expected_width
57
94
  assert height == expected_height
95
+
@@ -1,65 +0,0 @@
1
- import xml.etree.ElementTree as ET
2
-
3
- from .constants import MIME_TYPE
4
- from .image import BaseImageHeader
5
-
6
- BASE_PX = 72
7
-
8
-
9
- class Svg(BaseImageHeader):
10
- """
11
- Image header parser for SVG images.
12
- """
13
-
14
- @classmethod
15
- def from_stream(cls, stream):
16
- """
17
- Return |Svg| instance having header properties parsed from SVG image
18
- in *stream*.
19
- """
20
- px_width, px_height = cls._dimensions_from_stream(stream)
21
- return cls(px_width, px_height, 72, 72)
22
-
23
- @property
24
- def content_type(self):
25
- """
26
- MIME content type for this image, unconditionally `image/svg+xml` for
27
- SVG images.
28
- """
29
- return MIME_TYPE.SVG
30
-
31
- @property
32
- def default_ext(self):
33
- """
34
- Default filename extension, always 'svg' for SVG images.
35
- """
36
- return "svg"
37
-
38
- @classmethod
39
- def _dimensions_from_stream(cls, stream):
40
- stream.seek(0)
41
- data = stream.read()
42
- root = ET.fromstring(data)
43
- if root.attrib.get("width") is None:
44
- return cls._calculate_scaled_dimensions(root.attrib["viewBox"])
45
-
46
- width = int(float(root.attrib["width"].replace("pt", "")))
47
- height = int(float(root.attrib["height"].replace("pt", "")))
48
- return width, height
49
-
50
- @classmethod
51
- def _calculate_scaled_dimensions(
52
- cls, viewbox: str, base_px: int = BASE_PX
53
- ) -> tuple[int, int]:
54
- _, _, logical_width, logical_height = map(int, viewbox.split())
55
-
56
- aspect_ratio = logical_width / logical_height
57
-
58
- if aspect_ratio >= 1:
59
- final_width = base_px
60
- final_height = base_px / aspect_ratio
61
- else:
62
- final_height = base_px
63
- final_width = base_px * aspect_ratio
64
-
65
- return int(final_width), int(final_height)