Mercurial > hgrepos > Python2 > PyMuPDF
changeset 40:aa33339d6b8a upstream
ADD: MuPDF v1.26.10: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.5.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 11 Oct 2025 11:31:38 +0200 |
| parents | a6bc019ac0b2 |
| children | 71bcc18e306f |
| files | mupdf-source/Makelists mupdf-source/include/mupdf/fitz/version.h mupdf-source/scripts/jlib.py mupdf-source/scripts/wrap/__main__.py mupdf-source/source/fitz/stext-device.c mupdf-source/source/pdf/pdf-form.c mupdf-source/source/pdf/pdf-shade-recolor.c |
| diffstat | 7 files changed, 65 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/mupdf-source/Makelists Sat Oct 11 11:19:58 2025 +0200 +++ b/mupdf-source/Makelists Sat Oct 11 11:31:38 2025 +0200 @@ -792,7 +792,6 @@ ifeq ($(HAVE_NEON),yes) TESSERACT_DEFINES += -DHAVE_NEON -TESSERACT_BUILD_CFLAGS += -mfpu=neon endif # Always include the neon code - it will compile to nothing if # neon isn't enabled. We need to always include it, because it
--- a/mupdf-source/include/mupdf/fitz/version.h Sat Oct 11 11:19:58 2025 +0200 +++ b/mupdf-source/include/mupdf/fitz/version.h Sat Oct 11 11:31:38 2025 +0200 @@ -23,9 +23,9 @@ #ifndef MUPDF_FITZ_VERSION_H #define MUPDF_FITZ_VERSION_H #ifndef FZ_VERSION -#define FZ_VERSION "1.26.7" +#define FZ_VERSION "1.26.10" #define FZ_VERSION_MAJOR 1 #define FZ_VERSION_MINOR 26 -#define FZ_VERSION_PATCH 7 +#define FZ_VERSION_PATCH 10 #endif #endif
--- a/mupdf-source/scripts/jlib.py Sat Oct 11 11:19:58 2025 +0200 +++ b/mupdf-source/scripts/jlib.py Sat Oct 11 11:31:38 2025 +0200 @@ -2301,6 +2301,9 @@ # `install_name_tool -change` to rename internal names to # `@rpath/<leafname>`. ret += ' -Wl,-rpath,@loader_path/.' + elif os.environ.get( 'PYODIDE') == '1': + # 2025-09-05: Pyodide now supports rpath. + ret += " -Wl,-rpath,'$ORIGIN'" else: ret += " -Wl,-rpath,'$ORIGIN',-z,origin" #log('{sos=} {ld_origin=} {ret=}')
--- a/mupdf-source/scripts/wrap/__main__.py Sat Oct 11 11:19:58 2025 +0200 +++ b/mupdf-source/scripts/wrap/__main__.py Sat Oct 11 11:31:38 2025 +0200 @@ -1329,11 +1329,7 @@ def link_l_flags(sos): - ld_origin = None - if state.state_.pyodide: - # Don't add '-Wl,-rpath*' etc if building for Pyodide. - ld_origin = False - ret = jlib.link_l_flags( sos, ld_origin) + ret = jlib.link_l_flags( sos) r = os.environ.get('LDFLAGS') if r: ret += f' {r}'
--- a/mupdf-source/source/fitz/stext-device.c Sat Oct 11 11:19:58 2025 +0200 +++ b/mupdf-source/source/fitz/stext-device.c Sat Oct 11 11:31:38 2025 +0200 @@ -982,6 +982,17 @@ for (i = start; i < end; i++) { + if (dev->flags & (FZ_STEXT_CLIP | FZ_STEXT_CLIP_RECT)) + { + fz_rect r = current_clip(ctx, dev); + if (fz_glyph_entirely_outside_box(ctx, &ctm, span, &span->items[i], &r)) + { + dev->last.clipped = 1; + continue; + } + } + dev->last.clipped = 0; + /* Calculate new pen location and delta */ tm.e = span->items[i].x; tm.f = span->items[i].y; @@ -996,17 +1007,6 @@ dev->last.valid = 1; dev->last.flags = flags; - if (dev->flags & (FZ_STEXT_CLIP | FZ_STEXT_CLIP_RECT)) - { - fz_rect r = current_clip(ctx, dev); - if (fz_glyph_entirely_outside_box(ctx, &ctm, span, &span->items[i], &r)) - { - dev->last.clipped = 1; - continue; - } - } - dev->last.clipped = 0; - /* Calculate bounding box and new pen position based on font metrics */ if (span->items[i].gid >= 0) adv = span->items[i].adv; @@ -1059,12 +1059,16 @@ } static void -flush_actualtext(fz_context *ctx, fz_stext_device *dev, const char *actualtext, int i) +flush_actualtext(fz_context *ctx, fz_stext_device *dev, const char *actualtext, int i, int end) { if (*actualtext == 0) return; - while (1) + if (dev->flags & (FZ_STEXT_CLIP | FZ_STEXT_CLIP_RECT)) + if (dev->last.clipped) + return; + + while (end < 0 || (end >= 0 && i < end)) { int rune; actualtext += fz_chartorune(&rune, actualtext); @@ -1072,10 +1076,6 @@ if (rune == 0) break; - if (dev->flags & (FZ_STEXT_CLIP | FZ_STEXT_CLIP_RECT)) - if (dev->last.clipped) - continue; - fz_add_stext_char(ctx, dev, dev->last.font, rune, -1, @@ -1121,7 +1121,7 @@ { int rune; int len = fz_chartorune(&rune, actualtext); - if (span->items[start].gid != rune || rune == 0) + if (span->items[start].ucs != rune || rune == 0) break; actualtext += len; z--; } @@ -1146,7 +1146,7 @@ { /* Nasty n^2 algo here, cos backtracking through utf8 is not trivial. It'll do. */ int rune = rune_index(actualtext, z-1); - if (span->items[end-1].gid != rune) + if (span->items[end-1].ucs != rune) break; z--; } @@ -1160,6 +1160,17 @@ fz_text_item *item = &span->items[i]; int rune = -1; + if (dev->flags & (FZ_STEXT_CLIP | FZ_STEXT_CLIP_RECT)) + { + fz_rect r = current_clip(ctx, dev); + if (fz_glyph_entirely_outside_box(ctx, &ctm, span, &span->items[i], &r)) + { + dev->last.clipped = 1; + continue; + } + } + dev->last.clipped = 0; + if ((size_t)i < z) actualtext += fz_chartorune(&rune, actualtext); @@ -1175,17 +1186,7 @@ dev->last.font = fz_keep_font(ctx, font); } dev->last.valid = 1; - - if (dev->flags & (FZ_STEXT_CLIP | FZ_STEXT_CLIP_RECT)) - { - fz_rect r = current_clip(ctx, dev); - if (fz_glyph_entirely_outside_box(ctx, &ctm, span, &span->items[i], &r)) - { - dev->last.clipped = 1; - continue; - } - } - dev->last.clipped = 0; + dev->last.flags = flags; /* Calculate bounding box and new pen position based on font metrics */ if (item->gid >= 0) @@ -1217,7 +1218,7 @@ /* We found a matching postfix. It seems likely that this is going to be the only * text object we get, so send any remaining actualtext now. */ - flush_actualtext(ctx, dev, actualtext, i); + flush_actualtext(ctx, dev, actualtext, i, i + strlen(actualtext) - (span->len - end)); /* Send the postfix */ if (end != span->len) @@ -1337,7 +1338,15 @@ fz_stext_begin_metatext(fz_context *ctx, fz_device *dev, fz_metatext meta, const char *text) { fz_stext_device *tdev = (fz_stext_device*)dev; - metatext_t *mt = fz_malloc_struct(ctx, metatext_t); + metatext_t *mt = find_actualtext(tdev); + + if (mt != NULL && meta == FZ_METATEXT_ACTUALTEXT) + flush_actualtext(ctx, tdev, mt->text, 0, -1); + + if (meta == FZ_METATEXT_ACTUALTEXT) + tdev->last.valid = 0; + + mt = fz_malloc_struct(ctx, metatext_t); mt->prev = tdev->metatext; tdev->metatext = mt; @@ -1384,8 +1393,9 @@ /* If we have a 'last' text position, send the content after that. */ if (tdev->last.valid) { - flush_actualtext(ctx, tdev, tdev->metatext->text, 0); + flush_actualtext(ctx, tdev, tdev->metatext->text, 0, -1); pop_metatext(ctx, tdev); + tdev->last.valid = 0; return; } @@ -1401,7 +1411,12 @@ tdev->last.trm.f = tdev->metatext->bounds.y0; } else - fz_warn(ctx, "Actualtext with no position. Text may be lost or mispositioned."); + { + if ((dev->flags & (FZ_STEXT_CLIP | FZ_STEXT_CLIP_RECT)) == 0) + fz_warn(ctx, "Actualtext with no position. Text may be lost or mispositioned."); + pop_metatext(ctx, tdev); + return; + } fz_var(myfont); @@ -1412,7 +1427,7 @@ myfont = fz_new_base14_font(ctx, "Helvetica"); tdev->last.font = myfont; } - flush_actualtext(ctx, tdev, tdev->metatext->text, 0); + flush_actualtext(ctx, tdev, tdev->metatext->text, 0, -1); pop_metatext(ctx, tdev); } fz_always(ctx)
--- a/mupdf-source/source/pdf/pdf-form.c Sat Oct 11 11:19:58 2025 +0200 +++ b/mupdf-source/source/pdf/pdf-form.c Sat Oct 11 11:31:38 2025 +0200 @@ -2407,7 +2407,13 @@ res = pdf_dict_get(ctx, page, PDF_NAME(Resources)); if (!res) - res = pdf_dict_put_dict(ctx, page, PDF_NAME(Resources), 4); + { + res = pdf_dict_get_inheritable(ctx, page, PDF_NAME(Resources)); + if (res) + pdf_dict_put(ctx, page, PDF_NAME(Resources), res); + else + res = pdf_dict_put_dict(ctx, page, PDF_NAME(Resources), 4); + } res_xobj = pdf_dict_get(ctx, res, PDF_NAME(XObject)); if (!res_xobj)
--- a/mupdf-source/source/pdf/pdf-shade-recolor.c Sat Oct 11 11:19:58 2025 +0200 +++ b/mupdf-source/source/pdf/pdf-shade-recolor.c Sat Oct 11 11:31:38 2025 +0200 @@ -621,10 +621,8 @@ for (i = startpt; i < 12; i++) { - unsigned int x_bits = fz_read_bits(ctx, stream, bpcoord); - unsigned int y_bits = fz_read_bits(ctx, stream, bpcoord); - fz_write_bits(ctx, out, x_bits, bpcoord); - fz_write_bits(ctx, out, y_bits, bpcoord); + (void) fz_read_bits(ctx, stream, bpcoord); + (void) fz_read_bits(ctx, stream, bpcoord); } for (i = startcolor; i < 4; i++)
