PyMuPDF 1.24.14__tar.gz → 1.25.1__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 (247) hide show
  1. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/PKG-INFO +1 -1
  2. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/changes.txt +21 -0
  3. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/pipcl.py +54 -5
  4. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/scripts/gh_release.py +7 -5
  5. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/scripts/sysinstall.py +7 -7
  6. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/scripts/test.py +2 -2
  7. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/setup.py +5 -4
  8. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/__init__.py +101 -299
  9. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/__main__.py +2 -8
  10. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/extra.i +1 -67
  11. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/utils.py +7 -12
  12. pymupdf-1.25.1/tests/resources/test_3725.pdf +0 -0
  13. pymupdf-1.25.1/tests/resources/test_3780.pdf +0 -0
  14. pymupdf-1.25.1/tests/resources/test_3842.pdf +0 -0
  15. pymupdf-1.25.1/tests/resources/test_3854.pdf +920 -2
  16. pymupdf-1.25.1/tests/resources/test_3854_expected.png +0 -0
  17. pymupdf-1.25.1/tests/resources/test_4017.pdf +0 -0
  18. pymupdf-1.25.1/tests/resources/test_4034.pdf +0 -0
  19. pymupdf-1.25.1/tests/resources/test_4079.pdf +0 -0
  20. pymupdf-1.25.1/tests/resources/test_4079_after.pdf +0 -0
  21. pymupdf-1.25.1/tests/resources/test_4090.pdf +0 -0
  22. pymupdf-1.25.1/tests/resources/test_4125.pdf +0 -0
  23. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_2548.py +6 -16
  24. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_2904.py +1 -4
  25. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_annots.py +36 -5
  26. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_font.py +25 -9
  27. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_general.py +27 -27
  28. pymupdf-1.25.1/tests/test_memory.py +222 -0
  29. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_pixmap.py +21 -4
  30. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_pylint.py +1 -0
  31. PyMuPDF-1.24.14/tests/test-rtl.py → pymupdf-1.25.1/tests/test_rtl.py +4 -1
  32. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_tables.py +43 -0
  33. pymupdf-1.25.1/tests/test_tesseract.py +152 -0
  34. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_textextract.py +45 -50
  35. PyMuPDF-1.24.14/tests/resources/test_1645_expected_1.22.pdf +0 -0
  36. PyMuPDF-1.24.14/tests/test_2791.py +0 -87
  37. PyMuPDF-1.24.14/tests/test_tesseract.py +0 -68
  38. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/COPYING +0 -0
  39. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/README.md +0 -0
  40. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/READMEb.md +0 -0
  41. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/READMEd.md +0 -0
  42. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/pyproject.toml +0 -0
  43. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/pytest.ini +0 -0
  44. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/_apply_pages.py +0 -0
  45. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/fitz___init__.py +0 -0
  46. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/fitz_table.py +0 -0
  47. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/fitz_utils.py +0 -0
  48. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/pymupdf.py +0 -0
  49. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/table.py +0 -0
  50. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/__init__.py +0 -0
  51. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/__main__.py +0 -0
  52. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/_config.h +0 -0
  53. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/fitz_old.i +0 -0
  54. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-annot.i +0 -0
  55. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-convert.i +0 -0
  56. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-defines.i +0 -0
  57. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-devices.i +0 -0
  58. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-fields.i +0 -0
  59. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-fileobj.i +0 -0
  60. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-geo-c.i +0 -0
  61. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-geo-py.i +0 -0
  62. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-globals.i +0 -0
  63. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-other.i +0 -0
  64. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-pdfinfo.i +0 -0
  65. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-pixmap.i +0 -0
  66. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-portfolio.i +0 -0
  67. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-python.i +0 -0
  68. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-select.i +0 -0
  69. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-stext.i +0 -0
  70. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-xobject.i +0 -0
  71. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/utils.py +0 -0
  72. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/version.i +0 -0
  73. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/README.md +0 -0
  74. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/conftest.py +0 -0
  75. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/gentle_compare.py +0 -0
  76. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/001003ED.pdf +0 -0
  77. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/1.pdf +0 -0
  78. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/2.pdf +0 -0
  79. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/2201.00069.pdf +0 -0
  80. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/3.pdf +0 -0
  81. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/4.pdf +0 -0
  82. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/Bezier.epub +0 -0
  83. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/PragmaticaC.otf +0 -0
  84. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/battery-file-22.pdf +0 -0
  85. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/bug1945.pdf +0 -0
  86. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/bug1971.pdf +0 -0
  87. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/chinese-tables.pdf +0 -0
  88. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/chinese-tables.pickle +0 -0
  89. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/circular-toc.pdf +0 -0
  90. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/cython.pdf +0 -0
  91. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/cython.pickle +0 -0
  92. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/dotted-gridlines.pdf +0 -0
  93. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/full_toc.txt +0 -0
  94. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/github_sample.pdf +0 -0
  95. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/has-bad-fonts.pdf +0 -0
  96. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/image-file1.pdf +0 -0
  97. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/img-transparent.png +0 -0
  98. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/joined.pdf +0 -0
  99. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/metadata.txt +0 -0
  100. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/mupdf_explored.pdf +0 -0
  101. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/nur-ruhig.jpg +0 -0
  102. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/quad-calc-0.pdf +0 -0
  103. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/simple_toc.txt +0 -0
  104. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/small-table.pdf +0 -0
  105. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/strict-yes-no.pdf +0 -0
  106. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/symbol-list.pdf +0 -0
  107. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/symbols.txt +0 -0
  108. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-2333.pdf +0 -0
  109. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-2462.pdf +0 -0
  110. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-2812.pdf +0 -0
  111. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3143.pdf +0 -0
  112. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3150.pdf +0 -0
  113. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3207.pdf +0 -0
  114. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3591.pdf +0 -0
  115. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3820.pdf +0 -0
  116. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-707448.pdf +0 -0
  117. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-707673.pdf +0 -0
  118. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-E+A.pdf +0 -0
  119. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-linebreaks.pdf +0 -0
  120. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test2093.pdf +0 -0
  121. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test2182.pdf +0 -0
  122. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test2238.pdf +0 -0
  123. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_1645_expected_1.24.2.pdf +0 -0
  124. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_1645_expected_1.24.pdf +0 -0
  125. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_1645_expected_1.25.pdf +0 -0
  126. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_1824.pdf +0 -0
  127. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2108.pdf +0 -0
  128. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2270.pdf +0 -0
  129. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2533.pdf +0 -0
  130. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2548.pdf +0 -0
  131. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2553-2.pdf +0 -0
  132. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2553.pdf +0 -0
  133. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2596.pdf +0 -0
  134. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2608_expected +0 -0
  135. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2634.pdf +0 -0
  136. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2635.pdf +0 -0
  137. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2645_1.pdf +0 -0
  138. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2645_2.pdf +0 -0
  139. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2645_3.pdf +0 -0
  140. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2710.pdf +0 -0
  141. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2730.pdf +0 -0
  142. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2742.pdf +0 -0
  143. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2788.pdf +0 -0
  144. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2791_content.pdf +0 -0
  145. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2791_coverpage.pdf +0 -0
  146. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2861.pdf +0 -0
  147. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2871.pdf +0 -0
  148. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2885.pdf +0 -0
  149. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2904.pdf +0 -0
  150. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2907.pdf +0 -0
  151. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2954.pdf +0 -0
  152. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2957_1.pdf +0 -0
  153. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2957_2.pdf +0 -0
  154. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2969.pdf +0 -0
  155. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2979.pdf +0 -0
  156. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3058.pdf +0 -0
  157. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3062.pdf +0 -0
  158. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3070.pdf +0 -0
  159. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3072.pdf +0 -0
  160. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3087.pdf +0 -0
  161. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3179.pdf +0 -0
  162. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3186.pdf +0 -0
  163. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3197.pdf +0 -0
  164. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3357.pdf +0 -0
  165. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3362.pdf +0 -0
  166. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3376.pdf +0 -0
  167. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3448.pdf +0 -0
  168. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3448.pdf-expected.png +0 -0
  169. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3450.pdf +0 -0
  170. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3493.epub +0 -0
  171. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3569.pdf +0 -0
  172. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3594.pdf +0 -0
  173. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3615.epub +0 -0
  174. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3624.pdf +0 -0
  175. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3624_expected.png +0 -0
  176. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3650.pdf +0 -0
  177. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3654.docx +0 -0
  178. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3677.pdf +0 -0
  179. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3687-3.epub +0 -0
  180. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3687.epub +0 -0
  181. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3705.pdf +0 -0
  182. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3727.pdf +0 -0
  183. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3789.pdf +0 -0
  184. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3848.pdf +0 -0
  185. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf +0 -0
  186. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.0.png +0 -0
  187. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.1.png +0 -0
  188. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.2.png +0 -0
  189. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.3.png +0 -0
  190. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.4.png +0 -0
  191. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.5.png +0 -0
  192. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.6.png +0 -0
  193. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.7.png +0 -0
  194. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3933.pdf +0 -0
  195. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3950.pdf +0 -0
  196. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3994.pdf +0 -0
  197. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_4004.pdf +0 -0
  198. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_4026.pdf +0 -0
  199. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_4043.pdf +0 -0
  200. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_4047.pdf +0 -0
  201. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_annot_file_info.pdf +0 -0
  202. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_delete_image.pdf +0 -0
  203. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_toc_count.pdf +0 -0
  204. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/text-find-ligatures.pdf +0 -0
  205. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/type3font.pdf +0 -0
  206. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/v110-changes.pdf +0 -0
  207. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/widgettest.pdf +0 -0
  208. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/run_compound.py +0 -0
  209. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_2634.py +0 -0
  210. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_2907.py +0 -0
  211. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_badfonts.py +0 -0
  212. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_balance_count.py +0 -0
  213. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_cluster_drawings.py +0 -0
  214. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_codespell.py +0 -0
  215. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_crypting.py +0 -0
  216. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_docs_samples.py +0 -0
  217. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_drawings.py +0 -0
  218. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_embeddedfiles.py +0 -0
  219. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_extractimage.py +0 -0
  220. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_flake8.py +0 -0
  221. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_geometry.py +0 -0
  222. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_imagebbox.py +0 -0
  223. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_import.py +0 -0
  224. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_insertimage.py +0 -0
  225. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_insertpdf.py +0 -0
  226. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_linebreaks.py +0 -0
  227. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_linequad.py +0 -0
  228. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_metadata.py +0 -0
  229. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_mupdf_regressions.py +0 -0
  230. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_named_links.py +0 -0
  231. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_nonpdf.py +0 -0
  232. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_object_manipulation.py +0 -0
  233. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_objectstreams.py +0 -0
  234. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_optional_content.py +0 -0
  235. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_page_links.py +0 -0
  236. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_pagedelete.py +0 -0
  237. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_pagelabels.py +0 -0
  238. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_remove-rotation.py +0 -0
  239. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_showpdfpage.py +0 -0
  240. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_story.py +0 -0
  241. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_textbox.py +0 -0
  242. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_textsearch.py +0 -0
  243. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_toc.py +0 -0
  244. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_widgets.py +0 -0
  245. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_word_delimiters.py +0 -0
  246. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/valgrind.supp +0 -0
  247. {PyMuPDF-1.24.14 → pymupdf-1.25.1}/wdev.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyMuPDF
3
- Version: 1.24.14
3
+ Version: 1.25.1
4
4
  Summary: A high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents.
5
5
  Description-Content-Type: text/markdown
6
6
  Author: Artifex
@@ -2,6 +2,27 @@ Change Log
2
2
  ==========
3
3
 
4
4
 
5
+ **Changes in version 1.25.1 (2024-12-11)**
6
+
7
+ * Use MuPDF-1.25.2.
8
+
9
+ * Fixed issues:
10
+
11
+ * **Fixed** `4125 <https://github.com/pymupdf/PyMuPDF/issues/4125>`_: memory leak while convert Pixmap's colorspace
12
+ * **Fixed** `4034 <https://github.com/pymupdf/PyMuPDF/issues/4034>`_: Possible regression in pdf cleaning during save.
13
+
14
+
15
+ **Changes in version 1.25.0 (2024-12-05)**
16
+
17
+ * Use MuPDF-1.25.1.
18
+
19
+ * Fixed issues:
20
+
21
+ * **Fixed** `4026 <https://github.com/pymupdf/PyMuPDF/issues/4026>`_: page.get_text('blocks') output two piece of very similar text with different bbox
22
+ * **Fixed** `4004 <https://github.com/pymupdf/PyMuPDF/issues/4004>`_: Segmentation Fault When Updating PDF Form Field Value
23
+ * **Fixed** `3751 <https://github.com/pymupdf/PyMuPDF/issues/3751>`_: apply_redactions causes part of the page content to be hidden / transparent
24
+
25
+
5
26
  **Changes in version 1.24.14 (2024-11-19)**
6
27
 
7
28
  * Use MuPDF-1.24.11.
@@ -690,7 +690,7 @@ class Package:
690
690
  else:
691
691
  items = self.fn_sdist()
692
692
 
693
- prefix = f'{self.name}-{self.version}'
693
+ prefix = f'{_normalise(self.name)}-{self.version}'
694
694
  os.makedirs(sdist_directory, exist_ok=True)
695
695
  tarpath = f'{sdist_directory}/{prefix}.tar.gz'
696
696
  log2(f'Creating sdist: {tarpath}')
@@ -823,7 +823,7 @@ class Package:
823
823
  return ret
824
824
 
825
825
  def wheel_name(self):
826
- return f'{self.name}-{self.version}-{self.tag_python()}-{self.tag_abi()}-{self.tag_platform()}.whl'
826
+ return f'{_normalise(self.name)}-{self.version}-{self.tag_python()}-{self.tag_abi()}-{self.tag_platform()}.whl'
827
827
 
828
828
  def wheel_name_match(self, wheel):
829
829
  '''
@@ -852,7 +852,7 @@ class Package:
852
852
  log2(f'py_limited_api; {tag_python=} compatible with {self.tag_python()=}.')
853
853
  py_limited_api_compatible = True
854
854
 
855
- log2(f'{self.name == name=}')
855
+ log2(f'{_normalise(self.name) == name=}')
856
856
  log2(f'{self.version == version=}')
857
857
  log2(f'{self.tag_python() == tag_python=} {self.tag_python()=} {tag_python=}')
858
858
  log2(f'{py_limited_api_compatible=}')
@@ -861,7 +861,7 @@ class Package:
861
861
  log2(f'{self.tag_platform()=}')
862
862
  log2(f'{tag_platform.split(".")=}')
863
863
  ret = (1
864
- and self.name == name
864
+ and _normalise(self.name) == name
865
865
  and self.version == version
866
866
  and (self.tag_python() == tag_python or py_limited_api_compatible)
867
867
  and self.tag_abi() == tag_abi
@@ -1245,7 +1245,7 @@ class Package:
1245
1245
  )
1246
1246
 
1247
1247
  def _dist_info_dir( self):
1248
- return f'{self.name}-{self.version}.dist-info'
1248
+ return f'{_normalise(self.name)}-{self.version}.dist-info'
1249
1249
 
1250
1250
  def _metainfo(self):
1251
1251
  '''
@@ -2373,6 +2373,11 @@ def _fs_mtime( filename, default=0):
2373
2373
  return default
2374
2374
 
2375
2375
 
2376
+ def _normalise(name):
2377
+ # https://packaging.python.org/en/latest/specifications/name-normalization/#name-normalization
2378
+ return re.sub(r"[-_.]+", "-", name).lower()
2379
+
2380
+
2376
2381
  def _assert_version_pep_440(version):
2377
2382
  assert re.match(
2378
2383
  r'^([1-9][0-9]*!)?(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))*((a|b|rc)(0|[1-9][0-9]*))?(\.post(0|[1-9][0-9]*))?(\.dev(0|[1-9][0-9]*))?$',
@@ -2439,6 +2444,50 @@ def relpath(path, start=None):
2439
2444
  else:
2440
2445
  return os.path.relpath(path, start)
2441
2446
 
2447
+
2448
+ def number_sep( s):
2449
+ '''
2450
+ Simple number formatter, adds commas in-between thousands. `s` can be a
2451
+ number or a string. Returns a string.
2452
+
2453
+ >>> number_sep(1)
2454
+ '1'
2455
+ >>> number_sep(12)
2456
+ '12'
2457
+ >>> number_sep(123)
2458
+ '123'
2459
+ >>> number_sep(1234)
2460
+ '1,234'
2461
+ >>> number_sep(12345)
2462
+ '12,345'
2463
+ >>> number_sep(123456)
2464
+ '123,456'
2465
+ >>> number_sep(1234567)
2466
+ '1,234,567'
2467
+ >>> number_sep(-131072)
2468
+ '-131,072'
2469
+ '''
2470
+ if not isinstance( s, str):
2471
+ s = str( s)
2472
+ ret = ''
2473
+ if s.startswith('-'):
2474
+ ret += '-'
2475
+ s = s[1:]
2476
+ c = s.find( '.')
2477
+ if c==-1: c = len(s)
2478
+ end = s.find('e')
2479
+ if end == -1: end = s.find('E')
2480
+ if end == -1: end = len(s)
2481
+ for i in range( end):
2482
+ ret += s[i]
2483
+ if i<c-1 and (c-i-1)%3==0:
2484
+ ret += ','
2485
+ elif i>c and i<end-1 and (i-c)%3==0:
2486
+ ret += ','
2487
+ ret += s[end:]
2488
+ return ret
2489
+
2490
+
2442
2491
  def _so_suffix(use_so_versioning=True):
2443
2492
  '''
2444
2493
  Filename suffix for shared libraries is defined in pep-3149. The
@@ -245,14 +245,14 @@ def build( platform_=None, valgrind=False):
245
245
  os.chdir( pymupdf_dir)
246
246
  # Create PyMuPDF sdist.
247
247
  run(f'{sys.executable} setup.py sdist')
248
- assert glob.glob('dist/PyMuPDF-*.tar.gz')
248
+ assert glob.glob('dist/pymupdf-*.tar.gz')
249
249
  if inputs_flavours:
250
250
  # Create PyMuPDFb sdist.
251
251
  run(
252
252
  f'{sys.executable} setup.py sdist',
253
253
  env_extra=dict(PYMUPDF_SETUP_FLAVOUR='b'),
254
254
  )
255
- assert glob.glob('dist/PyMuPDFb-*.tar.gz')
255
+ assert glob.glob('dist/pymupdfb-*.tar.gz')
256
256
 
257
257
  # Build wheels.
258
258
  #
@@ -292,11 +292,11 @@ def build( platform_=None, valgrind=False):
292
292
  ret.append(item)
293
293
  return ' '.join(ret)
294
294
 
295
- cps = inputs_wheels_cps if inputs_wheels_cps else 'cp39* cp310* cp311* cp312* cp313'
295
+ cps = inputs_wheels_cps if inputs_wheels_cps else 'cp39* cp310* cp311* cp312* cp313*'
296
296
  set_if_unset( 'CIBW_BUILD', cps)
297
297
  for cp in cps.split():
298
298
  m = re.match('cp([0-9]+)[*]', cp)
299
- assert m
299
+ assert m, f'{cps=} {cp=}'
300
300
  v = int(m.group(1))
301
301
  if v == 314:
302
302
  # Need to set CIBW_PRERELEASE_PYTHONS, otherwise cibuildwheel
@@ -359,6 +359,8 @@ def build( platform_=None, valgrind=False):
359
359
  if pass_:
360
360
  env_pass(name)
361
361
 
362
+ env_pass('PYMUPDF_SETUP_PY_LIMITED_API')
363
+
362
364
  if os.environ.get('PYMUPDF_SETUP_LIBCLANG'):
363
365
  env_pass('PYMUPDF_SETUP_LIBCLANG')
364
366
 
@@ -473,7 +475,7 @@ def build( platform_=None, valgrind=False):
473
475
  # careful to avoid incompatible wheels, e.g. 32 vs 64-bit wheels
474
476
  # coexist during Windows builds.
475
477
  #
476
- env_set('CIBW_BEFORE_TEST', f'python scripts/gh_release.py pip_install wheelhouse/PyMuPDFb')
478
+ env_set('CIBW_BEFORE_TEST', f'python scripts/gh_release.py pip_install wheelhouse/pymupdfb')
477
479
 
478
480
  set_cibuild_test()
479
481
 
@@ -190,8 +190,8 @@ def main():
190
190
  sudo = ''
191
191
  if root == '/':
192
192
  sudo = f'sudo PATH={os.environ["PATH"]} '
193
- def run(command):
194
- return run_command(command, doit=mupdf_do)
193
+ def run(command, env_extra=None):
194
+ return run_command(command, doit=mupdf_do, env_extra=env_extra)
195
195
  # Get MuPDF from git if specified.
196
196
  #
197
197
  if mupdf_git:
@@ -334,8 +334,8 @@ def main():
334
334
  # Run pytest tests.
335
335
  #
336
336
  log('## Run PyMuPDF pytest tests.')
337
- def run(command):
338
- return run_command(command, doit=pytest_do)
337
+ def run(command, env_extra=None):
338
+ return run_command(command, doit=pytest_do, env_extra=env_extra)
339
339
  import gh_release
340
340
  if pip == 'venv':
341
341
  # Create venv.
@@ -387,12 +387,12 @@ def main():
387
387
  command += f' -p {shlex.quote(pytest_args)}'
388
388
  if pytest_do:
389
389
  command += ' test'
390
- run(command)
390
+ run(command, env_extra=dict(PYMUPDF_SYSINSTALL_TEST='1'))
391
391
 
392
392
 
393
- def run_command(command, capture=False, check=True, doit=True):
393
+ def run_command(command, capture=False, check=True, doit=True, env_extra=None):
394
394
  if doit:
395
- return pipcl.run(command, capture=capture, check=check, caller=2)
395
+ return pipcl.run(command, capture=capture, check=check, caller=2, env_extra=env_extra)
396
396
  else:
397
397
  log(f'## Would have run: {command}', caller=2)
398
398
 
@@ -13,8 +13,8 @@ Examples:
13
13
  ./PyMuPDF/scripts/test.py --mupdf 'git:https://git.ghostscript.com/mupdf.git' buildtest
14
14
  Build and test with internal checkout of mupdf master.
15
15
 
16
- ./PyMuPDF/scripts/test.py --mupdf 'git:--branch 1.24.x https://github.com/ArtifexSoftware/mupdf.git' buildtest
17
- Build and test using internal checkout of mupdf 1.24.x branch from Github.
16
+ ./PyMuPDF/scripts/test.py --mupdf 'git:--branch 1.25.x https://github.com/ArtifexSoftware/mupdf.git' buildtest
17
+ Build and test using internal checkout of mupdf 1.25.x branch from Github.
18
18
 
19
19
  Usage:
20
20
  scripts/test.py <options> <command(s)>
@@ -425,7 +425,7 @@ def get_mupdf_internal(out, location=None, sha=None, local_tgz=None):
425
425
  log(f'get_mupdf_internal(): {out=} {location=} {sha=}')
426
426
  assert out in ('dir', 'tgz')
427
427
  if location is None:
428
- location = f'https://mupdf.com/downloads/archive/mupdf-{version_b}-source.tar.gz'
428
+ location = f'https://mupdf.com/downloads/archive/mupdf-{version_mupdf}-source.tar.gz'
429
429
  #location = 'git:--branch master https://github.com/ArtifexSoftware/mupdf.git'
430
430
 
431
431
  if location == '':
@@ -647,7 +647,7 @@ def build():
647
647
  # Add Windows .lib files.
648
648
  mupdf_build_dir2 = _windows_lib_directory(mupdf_local, build_type)
649
649
  add('d', f'{mupdf_build_dir2}/mupdfcpp{wp.cpu.windows_suffix}.lib', f'{to_dir_d}/lib/')
650
- if mupdf_version_tuple >= (1, 25):
650
+ if mupdf_version_tuple >= (1, 26):
651
651
  # MuPDF-1.25+ language bindings build also builds libmuthreads.
652
652
  add('d', f'{mupdf_build_dir2}/libmuthreads.lib', f'{to_dir_d}/lib/')
653
653
  elif darwin:
@@ -1157,8 +1157,9 @@ classifier = [
1157
1157
  # We generate different wheels depending on PYMUPDF_SETUP_FLAVOUR.
1158
1158
  #
1159
1159
 
1160
- version_p = '1.24.14'
1161
- version_b = '1.24.11'
1160
+ version_p = '1.25.1'
1161
+ version_b = '1.25.1'
1162
+ version_mupdf = '1.25.2'
1162
1163
 
1163
1164
  if os.path.exists(f'{g_root}/{g_pymupdfb_sdist_marker}'):
1164
1165