PyMuPDF 1.25.5__tar.gz → 1.26.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. {pymupdf-1.25.5 → pymupdf-1.26.0}/PKG-INFO +1 -1
  2. {pymupdf-1.25.5 → pymupdf-1.26.0}/changes.txt +32 -0
  3. {pymupdf-1.25.5 → pymupdf-1.26.0}/scripts/gh_release.py +1 -1
  4. {pymupdf-1.25.5 → pymupdf-1.26.0}/scripts/sysinstall.py +5 -0
  5. {pymupdf-1.25.5 → pymupdf-1.26.0}/scripts/test.py +2 -2
  6. {pymupdf-1.25.5 → pymupdf-1.26.0}/setup.py +7 -20
  7. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/__init__.py +276 -207
  8. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/fitz___init__.py +1 -0
  9. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/table.py +144 -58
  10. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/utils.py +9 -9
  11. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/conftest.py +3 -0
  12. pymupdf-1.26.0/tests/resources/test_4363.pdf +0 -0
  13. pymupdf-1.26.0/tests/resources/test_4423.pdf +0 -0
  14. pymupdf-1.26.0/tests/resources/test_4435.pdf +0 -0
  15. pymupdf-1.26.0/tests/resources/test_4479.pdf +1469 -1
  16. pymupdf-1.26.0/tests/resources/test_4505.pdf +0 -0
  17. pymupdf-1.26.0/tests/resources/test_open2.cbz +0 -0
  18. pymupdf-1.26.0/tests/resources/test_open2.doc +0 -0
  19. pymupdf-1.26.0/tests/resources/test_open2.docx +0 -0
  20. pymupdf-1.26.0/tests/resources/test_open2.epub +0 -0
  21. pymupdf-1.26.0/tests/resources/test_open2.fb2 +64 -0
  22. pymupdf-1.26.0/tests/resources/test_open2.html +0 -0
  23. pymupdf-1.26.0/tests/resources/test_open2.jpg +0 -0
  24. pymupdf-1.26.0/tests/resources/test_open2.mobi +0 -0
  25. pymupdf-1.26.0/tests/resources/test_open2.pdf +0 -0
  26. pymupdf-1.26.0/tests/resources/test_open2.svg +18 -0
  27. pymupdf-1.26.0/tests/resources/test_open2.xhtml +17 -0
  28. pymupdf-1.26.0/tests/resources/test_open2.xml +21 -0
  29. pymupdf-1.26.0/tests/resources/test_open2.xps +0 -0
  30. pymupdf-1.26.0/tests/resources/test_open2_expected.json +808 -0
  31. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_2548.py +1 -4
  32. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_2907.py +0 -4
  33. pymupdf-1.26.0/tests/test_4466.pdf +0 -0
  34. pymupdf-1.26.0/tests/test_4505.py +27 -0
  35. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_annots.py +91 -19
  36. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_balance_count.py +1 -4
  37. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_font.py +106 -8
  38. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_general.py +242 -53
  39. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_mupdf_regressions.py +3 -21
  40. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_pixmap.py +75 -8
  41. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_story.py +1 -5
  42. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_tables.py +102 -30
  43. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_textbox.py +0 -3
  44. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_textextract.py +36 -14
  45. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_widgets.py +0 -4
  46. pymupdf-1.26.0/tests/util.py +28 -0
  47. {pymupdf-1.25.5 → pymupdf-1.26.0}/COPYING +0 -0
  48. {pymupdf-1.25.5 → pymupdf-1.26.0}/README.md +0 -0
  49. {pymupdf-1.25.5 → pymupdf-1.26.0}/READMEb.md +0 -0
  50. {pymupdf-1.25.5 → pymupdf-1.26.0}/READMEd.md +0 -0
  51. {pymupdf-1.25.5 → pymupdf-1.26.0}/pipcl.py +0 -0
  52. {pymupdf-1.25.5 → pymupdf-1.26.0}/pyproject.toml +0 -0
  53. {pymupdf-1.25.5 → pymupdf-1.26.0}/pytest.ini +0 -0
  54. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/__main__.py +0 -0
  55. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/_apply_pages.py +0 -0
  56. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/_wxcolors.py +0 -0
  57. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/extra.i +0 -0
  58. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/fitz_table.py +0 -0
  59. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/fitz_utils.py +0 -0
  60. {pymupdf-1.25.5 → pymupdf-1.26.0}/src/pymupdf.py +0 -0
  61. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/__init__.py +0 -0
  62. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/__main__.py +0 -0
  63. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/_config.h +0 -0
  64. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/fitz_old.i +0 -0
  65. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-annot.i +0 -0
  66. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-convert.i +0 -0
  67. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-defines.i +0 -0
  68. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-devices.i +0 -0
  69. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-fields.i +0 -0
  70. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-fileobj.i +0 -0
  71. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-geo-c.i +0 -0
  72. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-geo-py.i +0 -0
  73. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-globals.i +0 -0
  74. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-other.i +0 -0
  75. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-pdfinfo.i +0 -0
  76. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-pixmap.i +0 -0
  77. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-portfolio.i +0 -0
  78. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-python.i +0 -0
  79. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-select.i +0 -0
  80. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-stext.i +0 -0
  81. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/helper-xobject.i +0 -0
  82. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/utils.py +0 -0
  83. {pymupdf-1.25.5 → pymupdf-1.26.0}/src_classic/version.i +0 -0
  84. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/README.md +0 -0
  85. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/gentle_compare.py +0 -0
  86. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/001003ED.pdf +0 -0
  87. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/1.pdf +0 -0
  88. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/2.pdf +0 -0
  89. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/2201.00069.pdf +0 -0
  90. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/3.pdf +0 -0
  91. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/4.pdf +0 -0
  92. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/Bezier.epub +0 -0
  93. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/PragmaticaC.otf +0 -0
  94. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/battery-file-22.pdf +0 -0
  95. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/bug1945.pdf +0 -0
  96. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/bug1971.pdf +0 -0
  97. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/chinese-tables.pdf +0 -0
  98. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/chinese-tables.pickle +0 -0
  99. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/circular-toc.pdf +0 -0
  100. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/cms-etc-filled.pdf +0 -0
  101. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/cython.pdf +0 -0
  102. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/cython.pickle +0 -0
  103. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/dotted-gridlines.pdf +0 -0
  104. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/full_toc.txt +0 -0
  105. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/github_sample.pdf +0 -0
  106. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/has-bad-fonts.pdf +0 -0
  107. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/image-file1.pdf +0 -0
  108. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/img-regular.pdf +0 -0
  109. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/img-transparent.pdf +0 -0
  110. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/img-transparent.png +0 -0
  111. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/interfield-calculation.pdf +0 -0
  112. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/joined.pdf +0 -0
  113. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/merge-form1.pdf +0 -0
  114. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/merge-form2.pdf +0 -0
  115. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/metadata.txt +0 -0
  116. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/mupdf_explored.pdf +0 -0
  117. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/nur-ruhig.jpg +0 -0
  118. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/quad-calc-0.pdf +0 -0
  119. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/simple_toc.txt +0 -0
  120. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/small-table.pdf +0 -0
  121. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/strict-yes-no.pdf +0 -0
  122. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/symbol-list.pdf +0 -0
  123. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/symbols.txt +0 -0
  124. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-2333.pdf +0 -0
  125. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-2462.pdf +0 -0
  126. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-2812.pdf +0 -0
  127. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-3143.pdf +0 -0
  128. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-3150.pdf +0 -0
  129. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-3207.pdf +0 -0
  130. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-3591.pdf +0 -0
  131. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-3820.pdf +0 -0
  132. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-4055.pdf +0 -0
  133. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-707448.pdf +0 -0
  134. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-707673.pdf +0 -0
  135. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-E+A.pdf +0 -0
  136. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test-linebreaks.pdf +0 -0
  137. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test2093.pdf +0 -0
  138. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test2182.pdf +0 -0
  139. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test2238.pdf +0 -0
  140. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_1645_expected.pdf +0 -0
  141. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_1824.pdf +0 -0
  142. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2108.pdf +0 -0
  143. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2270.pdf +0 -0
  144. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2533.pdf +0 -0
  145. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2548.pdf +0 -0
  146. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2553-2.pdf +0 -0
  147. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2553.pdf +0 -0
  148. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2596.pdf +0 -0
  149. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2608_expected +0 -0
  150. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2634.pdf +0 -0
  151. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2635.pdf +0 -0
  152. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2645_1.pdf +0 -0
  153. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2645_2.pdf +0 -0
  154. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2645_3.pdf +0 -0
  155. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2710.pdf +0 -0
  156. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2730.pdf +0 -0
  157. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2742.pdf +0 -0
  158. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2788.pdf +0 -0
  159. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2791_content.pdf +0 -0
  160. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2791_coverpage.pdf +0 -0
  161. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2861.pdf +0 -0
  162. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2871.pdf +0 -0
  163. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2885.pdf +0 -0
  164. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2904.pdf +0 -0
  165. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2907.pdf +0 -0
  166. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2954.pdf +0 -0
  167. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2957_1.pdf +0 -0
  168. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2957_2.pdf +0 -0
  169. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2969.pdf +0 -0
  170. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_2979.pdf +0 -0
  171. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3050_expected.png +0 -0
  172. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3058.pdf +0 -0
  173. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3062.pdf +0 -0
  174. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3070.pdf +0 -0
  175. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3072.pdf +0 -0
  176. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3087.pdf +0 -0
  177. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3179.pdf +0 -0
  178. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3186.pdf +0 -0
  179. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3197.pdf +0 -0
  180. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3357.pdf +0 -0
  181. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3362.pdf +0 -0
  182. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3376.pdf +0 -0
  183. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3448.pdf +0 -0
  184. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3448.pdf-expected.png +0 -0
  185. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3450.pdf +0 -0
  186. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3493.epub +0 -0
  187. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3569.pdf +0 -0
  188. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3594.pdf +0 -0
  189. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3615.epub +0 -0
  190. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3624.pdf +0 -0
  191. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3624_expected.png +0 -0
  192. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3650.pdf +0 -0
  193. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3654.docx +0 -0
  194. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3677.pdf +0 -0
  195. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3687-3.epub +0 -0
  196. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3687.epub +0 -0
  197. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3705.pdf +0 -0
  198. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3725.pdf +0 -0
  199. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3727.pdf +0 -0
  200. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3780.pdf +0 -0
  201. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3789.pdf +0 -0
  202. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3842.pdf +0 -0
  203. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3848.pdf +0 -0
  204. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3854.pdf +0 -0
  205. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3854_expected.png +0 -0
  206. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf +0 -0
  207. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf.pdf.0.png +0 -0
  208. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf.pdf.1.png +0 -0
  209. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf.pdf.2.png +0 -0
  210. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf.pdf.3.png +0 -0
  211. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf.pdf.4.png +0 -0
  212. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf.pdf.5.png +0 -0
  213. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf.pdf.6.png +0 -0
  214. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3863.pdf.pdf.7.png +0 -0
  215. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3886.pdf +0 -0
  216. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3887.pdf +0 -0
  217. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3933.pdf +0 -0
  218. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3950.pdf +0 -0
  219. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_3994.pdf +0 -0
  220. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4004.pdf +0 -0
  221. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4017.pdf +0 -0
  222. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4026.pdf +0 -0
  223. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4034.pdf +0 -0
  224. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4043.pdf +0 -0
  225. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4047.pdf +0 -0
  226. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4079.pdf +0 -0
  227. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4079_after.pdf +0 -0
  228. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4079_after_1.25.pdf +0 -0
  229. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4090.pdf +0 -0
  230. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4125.pdf +0 -0
  231. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4139.pdf +0 -0
  232. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4141.pdf +0 -0
  233. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4147.pdf +0 -0
  234. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4179.pdf +0 -0
  235. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4179_expected.png +0 -0
  236. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4180.pdf +0 -0
  237. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4180_expected.png +0 -0
  238. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4182.pdf +0 -0
  239. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4182_expected.png +0 -0
  240. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4224.pdf +0 -0
  241. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4245.pdf +0 -0
  242. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4245_expected.png +0 -0
  243. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4263.pdf +0 -0
  244. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4415.pdf +0 -0
  245. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_4415_out_expected.png +0 -0
  246. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_annot_file_info.pdf +0 -0
  247. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_delete_image.pdf +0 -0
  248. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/test_toc_count.pdf +0 -0
  249. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/text-find-ligatures.pdf +0 -0
  250. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/type3font.pdf +0 -0
  251. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/v110-changes.pdf +0 -0
  252. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/resources/widgettest.pdf +0 -0
  253. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/run_compound.py +0 -0
  254. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_2634.py +0 -0
  255. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_2904.py +0 -0
  256. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_4141.py +0 -0
  257. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_badfonts.py +0 -0
  258. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_barcode.py +0 -0
  259. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_cluster_drawings.py +0 -0
  260. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_codespell.py +0 -0
  261. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_crypting.py +0 -0
  262. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_docs_samples.py +0 -0
  263. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_drawings.py +0 -0
  264. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_embeddedfiles.py +0 -0
  265. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_extractimage.py +0 -0
  266. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_flake8.py +0 -0
  267. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_geometry.py +0 -0
  268. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_imagebbox.py +0 -0
  269. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_imagemasks.py +0 -0
  270. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_import.py +0 -0
  271. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_insertimage.py +0 -0
  272. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_insertpdf.py +0 -0
  273. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_linebreaks.py +0 -0
  274. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_linequad.py +0 -0
  275. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_memory.py +0 -0
  276. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_metadata.py +0 -0
  277. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_named_links.py +0 -0
  278. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_nonpdf.py +0 -0
  279. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_object_manipulation.py +0 -0
  280. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_objectstreams.py +0 -0
  281. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_optional_content.py +0 -0
  282. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_page_links.py +0 -0
  283. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_pagedelete.py +0 -0
  284. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_pagelabels.py +0 -0
  285. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_pylint.py +0 -0
  286. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_remove-rotation.py +0 -0
  287. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_rtl.py +0 -0
  288. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_showpdfpage.py +0 -0
  289. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_spikes.py +0 -0
  290. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_tesseract.py +0 -0
  291. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_textsearch.py +0 -0
  292. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_toc.py +0 -0
  293. {pymupdf-1.25.5 → pymupdf-1.26.0}/tests/test_word_delimiters.py +0 -0
  294. {pymupdf-1.25.5 → pymupdf-1.26.0}/valgrind.supp +0 -0
  295. {pymupdf-1.25.5 → pymupdf-1.26.0}/wdev.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyMuPDF
3
- Version: 1.25.5
3
+ Version: 1.26.0
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,38 @@ Change Log
2
2
  ==========
3
3
 
4
4
 
5
+ **Changes in version 1.26.0 (2025-05-22)**
6
+
7
+ * Use MuPDF-1.26.1.
8
+
9
+ * Fixed issues:
10
+
11
+ * **Fixed** `4324 <https://github.com/pymupdf/PyMuPDF/issues/4324>`_: cluster_drawings() fails to cluster horizontal and vertical thin lines
12
+ * **Fixed** `4363 <https://github.com/pymupdf/PyMuPDF/issues/4363>`_: Trouble with searching
13
+ * **Fixed** `4404 <https://github.com/pymupdf/PyMuPDF/issues/4404>`_: IndexError in page.get_links()
14
+ * **Fixed** `4412 <https://github.com/pymupdf/PyMuPDF/issues/4412>`_: Regression? Spurious error? in insert_pdf in v1.25.4
15
+ * **Fixed** `4423 <https://github.com/pymupdf/PyMuPDF/issues/4423>`_: pymupdf.mupdf.FzErrorFormat: code=7: cannot find object in xref error encountered after version 1.25.3
16
+ * **Fixed** `4435 <https://github.com/pymupdf/PyMuPDF/issues/4435>`_: get_pixmap method stuck on one page
17
+ * **Fixed** `4439 <https://github.com/pymupdf/PyMuPDF/issues/4439>`_: New Xml class from data does not work - bug in code
18
+ * **Fixed** `4445 <https://github.com/pymupdf/PyMuPDF/issues/4445>`_: Broken XREF table incorrectly repaired
19
+ * **Fixed** `4447 <https://github.com/pymupdf/PyMuPDF/issues/4447>`_: Stroke color of annotations cannot be correctly set
20
+ * **Fixed** `4479 <https://github.com/pymupdf/PyMuPDF/issues/4479>`_: set_layer_ui_config() toggles all layers rather than just one
21
+ * **Fixed** `4505 <https://github.com/pymupdf/PyMuPDF/issues/4505>`_: Follow Widget flag values up its parent structure
22
+
23
+ * Other:
24
+
25
+ * Partial fixed for `4457 <https://github.com/pymupdf/PyMuPDF/issues/4457>`_: Wrong characters displayed after font subsetting (w/ native method)
26
+ * Support image stamp annotations.
27
+ * Support recoloring pages.
28
+ * Added example of using Django's file storage API to open files with pymupdf.
29
+ * Clarified FreeText annotation color options.
30
+ We now raise an exception if an attempt is made to set attributes that can not be supported.
31
+ * Fixed potential segv in Pixmap.is_unicolor().
32
+ * Added runtime assert that that PyMuPDF and MuPDF were built with compatible
33
+ NDEBUG settings (related to `4390 <https://github.com/pymupdf/PyMuPDF/issues/4390>`_).
34
+ * Simplified handling of filename/filetype when opening documents.
35
+
36
+
5
37
  **Changes in version 1.25.5 (2025-03-31)**
6
38
 
7
39
  * Fixed issues:
@@ -448,7 +448,7 @@ def build( platform_=None, valgrind=False):
448
448
  # Include MuPDF build-time files.
449
449
  flavour += 'd'
450
450
  env_set( 'PYMUPDF_SETUP_FLAVOUR', flavour, pass_=1)
451
- run( f'cibuildwheel{platform_arg}', env_extra)
451
+ run( f'cibuildwheel{platform_arg}', env_extra=env_extra)
452
452
  run( 'echo after {flavour=}')
453
453
  run( 'ls -l wheelhouse')
454
454
 
@@ -20,6 +20,7 @@ python is already defined.
20
20
 
21
21
  Args:
22
22
 
23
+ --gdb 0|1
23
24
  --mupdf-dir <mupdf_dir>
24
25
  Path of MuPDF checkout; default is 'mupdf'.
25
26
  --mupdf-do 0|1
@@ -134,6 +135,7 @@ def main():
134
135
 
135
136
  # Set default behaviour.
136
137
  #
138
+ gdb = False
137
139
  use_installer = True
138
140
  mupdf_do = True
139
141
  mupdf_dir = 'mupdf'
@@ -165,6 +167,7 @@ def main():
165
167
  if arg in ('-h', '--help'):
166
168
  log(__doc__)
167
169
  return
170
+ elif arg == '--gdb': gdb = int(next(args))
168
171
  elif arg == '--mupdf-do': mupdf_do = int(next(args))
169
172
  elif arg == '--mupdf-dir': mupdf_dir = next(args)
170
173
  elif arg == '--mupdf-git': mupdf_git = next(args)
@@ -369,6 +372,8 @@ def main():
369
372
  # 2024-03-20: Not sure whether/where `pymupdf` binary is installed, so we
370
373
  # disable the test_cli* tests.
371
374
  command += f' {pymupdf_dir}/scripts/test.py'
375
+ if gdb:
376
+ command += ' --gdb 1'
372
377
  command += f' -v 0'
373
378
  if pytest_name is None:
374
379
  excluded_tests = (
@@ -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.25.x https://github.com/ArtifexSoftware/mupdf.git' buildtest
17
- Build and test using internal checkout of mupdf 1.25.x branch from Github.
16
+ ./PyMuPDF/scripts/test.py --mupdf 'git:--branch 1.26.x https://github.com/ArtifexSoftware/mupdf.git' buildtest
17
+ Build and test using internal checkout of mupdf 1.26.x branch from Github.
18
18
 
19
19
  Usage:
20
20
  scripts/test.py <options> <command(s)>
@@ -700,10 +700,7 @@ def build():
700
700
  add('p', f'{mupdf_build_dir}/_mupdf.so', to_dir)
701
701
  add('b', f'{mupdf_build_dir}/libmupdfcpp.so', to_dir)
702
702
  add('b', f'{mupdf_build_dir}/libmupdf.dylib', to_dir)
703
- if mupdf_version_tuple >= (1, 25):
704
- # MuPDF-1.25+ language bindings build also builds
705
- # libmupdf-threads.a.
706
- add('d', f'{mupdf_build_dir}/libmupdf-threads.a', f'{to_dir_d}/lib/')
703
+ add('d', f'{mupdf_build_dir}/libmupdf-threads.a', f'{to_dir_d}/lib/')
707
704
  elif pyodide:
708
705
  add('p', f'{mupdf_build_dir}/_mupdf.so', to_dir)
709
706
  add('b', f'{mupdf_build_dir}/libmupdfcpp.so', 'PyMuPDF.libs/')
@@ -712,10 +709,7 @@ def build():
712
709
  add('p', f'{mupdf_build_dir}/_mupdf.so', to_dir)
713
710
  add('b', pipcl.get_soname(f'{mupdf_build_dir}/libmupdfcpp.so'), to_dir)
714
711
  add('b', pipcl.get_soname(f'{mupdf_build_dir}/libmupdf.so'), to_dir)
715
- if mupdf_version_tuple >= (1, 25):
716
- # MuPDF-1.25+ language bindings build also builds
717
- # libmupdf-threads.a.
718
- add('d', f'{mupdf_build_dir}/libmupdf-threads.a', f'{to_dir_d}/lib/')
712
+ add('d', f'{mupdf_build_dir}/libmupdf-threads.a', f'{to_dir_d}/lib/')
719
713
 
720
714
  if 'd' in PYMUPDF_SETUP_FLAVOUR:
721
715
  # Add MuPDF C and C++ headers to `ret_d`. Would prefer to use
@@ -802,10 +796,7 @@ def build_mupdf_windows(
802
796
  tesseract = '' if os.environ.get('PYMUPDF_SETUP_MUPDF_TESSERACT') == '0' else 'tesseract-'
803
797
  windows_build_tail = f'build\\shared-{tesseract}{build_type}'
804
798
  if g_py_limited_api:
805
- if get_mupdf_version(mupdf_local) >= (1, 24, 11):
806
- windows_build_tail += f'-Py_LIMITED_API_{pipcl.current_py_limited_api()}'
807
- else:
808
- windows_build_tail += f'-Py_LIMITED_API={pipcl.current_py_limited_api()}'
799
+ windows_build_tail += f'-Py_LIMITED_API_{pipcl.current_py_limited_api()}'
809
800
  windows_build_tail += f'-x{wp.cpu.bits}-py{wp.version}'
810
801
  windows_build_dir = f'{mupdf_local}\\{windows_build_tail}'
811
802
  #log( f'Building mupdf.')
@@ -982,16 +973,12 @@ def build_mupdf_unix(
982
973
  if (
983
974
  linux
984
975
  and os.environ.get('PYMUPDF_SETUP_MUPDF_BSYMBOLIC', '1') == '1'
985
- and mupdf_version_tuple >= (1, 24, 3)
986
976
  ):
987
977
  log(f'Appending `bsymbolic-` to MuPDF build path.')
988
978
  build_prefix += 'bsymbolic-'
989
979
  log(f'{g_py_limited_api=}')
990
980
  if g_py_limited_api:
991
- if get_mupdf_version(mupdf_local) >= (1, 24, 11):
992
- build_prefix += f'Py_LIMITED_API_{pipcl.current_py_limited_api()}-'
993
- else:
994
- build_prefix += f'Py_LIMITED_API={pipcl.current_py_limited_api()}-'
981
+ build_prefix += f'Py_LIMITED_API_{pipcl.current_py_limited_api()}-'
995
982
  unix_build_dir = f'{mupdf_local}/build/{build_prefix}{build_type}'
996
983
  # We need MuPDF's Python bindings, so we build MuPDF with
997
984
  # `mupdf/scripts/mupdfwrap.py` instead of running `make`.
@@ -1242,15 +1229,15 @@ classifier = [
1242
1229
  #
1243
1230
 
1244
1231
  # PyMuPDF version.
1245
- version_p = '1.25.5'
1232
+ version_p = '1.26.0'
1246
1233
 
1247
1234
  # PyMuPDFb version. This is the PyMuPDF version whose PyMuPDFb wheels we will
1248
1235
  # (re)use if generating separate PyMuPDFb wheels. Though as of PyMuPDF-1.24.11
1249
1236
  # (2024-10-03) we no longer use PyMuPDFb wheels so this is actually unused.
1250
1237
  #
1251
- version_b = '1.25.3'
1238
+ version_b = '1.26.0'
1252
1239
 
1253
- version_mupdf = '1.25.6'
1240
+ version_mupdf = '1.26.1'
1254
1241
 
1255
1242
  if os.path.exists(f'{g_root}/{g_pymupdfb_sdist_marker}'):
1256
1243