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.
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/PKG-INFO +1 -1
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/changes.txt +21 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/pipcl.py +54 -5
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/scripts/gh_release.py +7 -5
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/scripts/sysinstall.py +7 -7
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/scripts/test.py +2 -2
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/setup.py +5 -4
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/__init__.py +101 -299
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/__main__.py +2 -8
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/extra.i +1 -67
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/utils.py +7 -12
- pymupdf-1.25.1/tests/resources/test_3725.pdf +0 -0
- pymupdf-1.25.1/tests/resources/test_3780.pdf +0 -0
- pymupdf-1.25.1/tests/resources/test_3842.pdf +0 -0
- pymupdf-1.25.1/tests/resources/test_3854.pdf +920 -2
- pymupdf-1.25.1/tests/resources/test_3854_expected.png +0 -0
- pymupdf-1.25.1/tests/resources/test_4017.pdf +0 -0
- pymupdf-1.25.1/tests/resources/test_4034.pdf +0 -0
- pymupdf-1.25.1/tests/resources/test_4079.pdf +0 -0
- pymupdf-1.25.1/tests/resources/test_4079_after.pdf +0 -0
- pymupdf-1.25.1/tests/resources/test_4090.pdf +0 -0
- pymupdf-1.25.1/tests/resources/test_4125.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_2548.py +6 -16
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_2904.py +1 -4
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_annots.py +36 -5
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_font.py +25 -9
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_general.py +27 -27
- pymupdf-1.25.1/tests/test_memory.py +222 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_pixmap.py +21 -4
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_pylint.py +1 -0
- PyMuPDF-1.24.14/tests/test-rtl.py → pymupdf-1.25.1/tests/test_rtl.py +4 -1
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_tables.py +43 -0
- pymupdf-1.25.1/tests/test_tesseract.py +152 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_textextract.py +45 -50
- PyMuPDF-1.24.14/tests/resources/test_1645_expected_1.22.pdf +0 -0
- PyMuPDF-1.24.14/tests/test_2791.py +0 -87
- PyMuPDF-1.24.14/tests/test_tesseract.py +0 -68
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/COPYING +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/README.md +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/READMEb.md +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/READMEd.md +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/pyproject.toml +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/pytest.ini +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/_apply_pages.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/fitz___init__.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/fitz_table.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/fitz_utils.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/pymupdf.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src/table.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/__init__.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/__main__.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/_config.h +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/fitz_old.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-annot.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-convert.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-defines.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-devices.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-fields.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-fileobj.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-geo-c.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-geo-py.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-globals.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-other.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-pdfinfo.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-pixmap.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-portfolio.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-python.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-select.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-stext.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/helper-xobject.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/utils.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/src_classic/version.i +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/README.md +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/conftest.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/gentle_compare.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/001003ED.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/1.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/2.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/2201.00069.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/3.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/4.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/Bezier.epub +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/PragmaticaC.otf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/battery-file-22.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/bug1945.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/bug1971.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/chinese-tables.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/chinese-tables.pickle +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/circular-toc.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/cython.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/cython.pickle +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/dotted-gridlines.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/full_toc.txt +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/github_sample.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/has-bad-fonts.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/image-file1.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/img-transparent.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/joined.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/metadata.txt +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/mupdf_explored.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/nur-ruhig.jpg +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/quad-calc-0.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/simple_toc.txt +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/small-table.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/strict-yes-no.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/symbol-list.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/symbols.txt +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-2333.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-2462.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-2812.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3143.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3150.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3207.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3591.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-3820.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-707448.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-707673.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-E+A.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test-linebreaks.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test2093.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test2182.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test2238.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_1645_expected_1.24.2.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_1645_expected_1.24.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_1645_expected_1.25.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_1824.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2108.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2270.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2533.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2548.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2553-2.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2553.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2596.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2608_expected +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2634.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2635.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2645_1.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2645_2.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2645_3.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2710.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2730.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2742.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2788.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2791_content.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2791_coverpage.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2861.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2871.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2885.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2904.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2907.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2954.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2957_1.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2957_2.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2969.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_2979.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3058.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3062.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3070.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3072.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3087.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3179.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3186.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3197.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3357.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3362.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3376.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3448.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3448.pdf-expected.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3450.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3493.epub +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3569.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3594.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3615.epub +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3624.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3624_expected.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3650.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3654.docx +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3677.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3687-3.epub +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3687.epub +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3705.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3727.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3789.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3848.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.0.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.1.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.2.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.3.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.4.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.5.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.6.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3863.pdf.pdf.7.png +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3933.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3950.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_3994.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_4004.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_4026.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_4043.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_4047.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_annot_file_info.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_delete_image.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/test_toc_count.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/text-find-ligatures.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/type3font.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/v110-changes.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/resources/widgettest.pdf +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/run_compound.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_2634.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_2907.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_badfonts.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_balance_count.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_cluster_drawings.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_codespell.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_crypting.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_docs_samples.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_drawings.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_embeddedfiles.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_extractimage.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_flake8.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_geometry.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_imagebbox.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_import.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_insertimage.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_insertpdf.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_linebreaks.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_linequad.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_metadata.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_mupdf_regressions.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_named_links.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_nonpdf.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_object_manipulation.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_objectstreams.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_optional_content.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_page_links.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_pagedelete.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_pagelabels.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_remove-rotation.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_showpdfpage.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_story.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_textbox.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_textsearch.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_toc.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_widgets.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/tests/test_word_delimiters.py +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/valgrind.supp +0 -0
- {PyMuPDF-1.24.14 → pymupdf-1.25.1}/wdev.py +0 -0
|
@@ -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/
|
|
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/
|
|
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/
|
|
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.
|
|
17
|
-
Build and test using internal checkout of mupdf 1.
|
|
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-{
|
|
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,
|
|
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.
|
|
1161
|
-
version_b = '1.
|
|
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
|
|