6290 Commits
Author SHA1 Message Date
bflatastic 88a2ab97ec Merge #4094: M5: a callout's arrow point, knee and text box change on their own (#1152)
# Conflicts:
#	crates/annot/src/info.rs
#	crates/annot/src/modify.rs
#	crates/annot/src/tests.rs
#	crates/automation/src/tools.rs
#	crates/automation/tests/it/automation.rs
#	crates/ui-egui/tests/it/comments.rs
2026-11-09 18:19:26 +07:00
bflatastic ad8430c6e7 Merge #2701: M10: Windows without the print DLLs still starts (#2630) 2026-11-09 18:19:20 +07:00
bflatastic 775fc05c2e Merge #2348: M5: the first save after placing a signature asks to lock it into the page (#2149)
# Conflicts:
#	crates/ui-egui/src/app/files.rs
#	crates/ui-egui/src/canvas/bars.rs
#	crates/ui-egui/src/editing/save.rs
2026-11-09 18:19:20 +07:00
bflatastic 06a9385543 Merge #4410: fix(render): degenerate subpaths, all-zero dash arrays and negative line widths stroke as the spec says (hayro-interpret patch 61)
# Conflicts:
#	vendor/README.md
2026-11-09 18:19:14 +07:00
bflatastic 0dda66820c Merge #4396: M2: layers open in the state the view auto state sets, and the Layers panel follows /Order (view.layers-panel)
# Conflicts:
#	crates/render/src/inspect.rs
#	crates/render/src/lib.rs
#	vendor/README.md
2026-11-09 18:19:07 +07:00
bflatastic d18a968c33 Merge #3567: M6: a drop-down shows its arrow, and its list looks and works like the form's own
# Conflicts:
#	crates/ui-egui/src/tools/forms_ui.rs
#	crates/ui-egui/tests/it/forms.rs
#	parity/acrobat-features.toml
2026-11-09 18:18:56 +07:00
bflatastic 65a64638fc Merge #4365: M5: text boxes and redaction marks without an appearance draw their default border, standard fonts, default style and outline (view.render-annotation-appearances)
# Conflicts:
#	crates/annot/src/tests.rs
2026-11-09 18:18:11 +07:00
bflatastic eb33f633e3 Merge #4336: M12: screen-only and print-only XFA objects are shown and printed as the form says
# Conflicts:
#	crates/xfa/src/layout.rs
#	crates/xfa/src/pdf/strip.rs
#	parity/acrobat-features.toml
2026-11-09 18:18:07 +07:00
bflatastic af67bf1d61 Merge #2539: M8: redaction removes Info entries and XMP that repeat the redacted text (#2448) 2026-11-09 18:17:39 +07:00
bflatastic 15a264ff04 Merge #4393: M2: an Indexed image with a short lookup table or an out-of-range hival is drawn as most readers draw it, and one with no table is skipped with a warning (view.render-pages)
# Conflicts:
#	vendor/README.md
2026-11-09 18:17:39 +07:00
bflatastic a4a600573e Merge #1998: Print production: Convert colours (grayscale, RGB, CMYK by the device formulas)
# Conflicts:
#	crates/automation/tests/it/automation.rs
#	crates/edit/src/lib.rs
#	crates/edit/src/tests.rs
#	crates/engine/src/commands.rs
#	crates/engine/src/lib.rs
#	crates/optimize/tests/optimize.rs
#	crates/ui-egui/src/app.rs
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/state.rs
#	crates/ui-egui/tests/it/editing.rs
2026-11-09 18:17:38 +07:00
bflatastic de333340a5 Merge #4532: M6: list boxes show and pick the option /I names, and a single-select list shows one value (#4531)
# Conflicts:
#	crates/automation/src/tools.rs
#	crates/forms/src/lib.rs
#	crates/forms/src/tests.rs
#	crates/forms/src/values.rs
#	crates/ui-egui/src/tools/forms_ui.rs
#	crates/ui-egui/tests/it/forms.rs
2026-11-09 18:17:35 +07:00
bflatastic 5af131db8e Merge #4358: M5: comments in an /RT /Group are one comment, with the primary's attributes (#4357)
# Conflicts:
#	crates/automation/src/comments.rs
#	crates/automation/tests/it/automation.rs
#	crates/render/src/inspect.rs
#	crates/render/src/inspect/annotations.rs
#	crates/render/src/lib.rs
#	crates/ui-egui/src/panels/comments_panel.rs
2026-11-09 18:17:31 +07:00
bflatastic 5257a6a34a Merge #3969: M10: a symbolic TrueType font without an encoding reads its glyph names (#3962)
# Conflicts:
#	vendor/README.md
2026-11-09 18:17:22 +07:00
Osvaldo Duran MelendezandClaude Sonnet 5.5 bde2a32875 Merge upstream/main into pr/print-area
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 06:17:04 -05:00
bflatastic 7976fff3c7 Merge #3589: Forms: app.runtimeHighlight, and XFA layout:ready scripts run on opening
# Conflicts:
#	crates/ui-egui/src/app.rs
#	crates/xfa/src/lib.rs
2026-11-09 18:16:03 +07:00
bflatastic b6ddc51ea0 Merge #1918: Print production: Add printer marks (dialog, edit, tool)
# Conflicts:
#	crates/engine/src/edit/run.rs
2026-11-09 18:15:36 +07:00
bflatastic c38db36ae4 Merge #4496: M6: a check box's kids with different on states tick one at a time (form.fill-checkbox-radio) 2026-11-09 18:14:35 +07:00
mtlcl410 0a12d9a1fe Merge remote-tracking branch 'upstream/main' into lane7-4608b
# Conflicts:
#	crates/xfa/src/layout/flow.rs
#	parity/acrobat-features.toml
2026-11-09 19:13:08 +08:00
BFlat 9ee213eff7 Fix main's build and tests after the latest merges (#6706) 2026-11-09 19:12:07 +08:00
Osvaldo Duran MelendezandClaude Sonnet 5.5 e0dc822b9c Merge upstream/main into pr/convert-colours
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 06:10:00 -05:00
mtlcl410 cf7734b17e Merge upstream/main into fix/standard14-euro-width 2026-11-09 19:07:08 +08:00
mtlcl410 5ac623ff9f Merge upstream/main into fix/zero-area-fill-and-clip 2026-11-09 19:05:11 +08:00
dotCooCoo b575f8536c Merge main into feat/discard-external-refs 2026-11-09 03:03:59 -08:00
mtlcl410 299e263bf9 Merge upstream/main into fix/stroke-degenerate-and-dash 2026-11-09 19:02:50 +08:00
dotCooCoo 74a820856d Merge main into feat/discard-search-index
# Conflicts:
#	crates/automation/src/tools.rs
2026-11-09 03:01:49 -08:00
Osvaldo Duran MelendezandClaude Sonnet 5.5 d1da3905c8 Merge upstream/main into pr/printer-marks
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 06:01:48 -05:00
Grzegorz MartensandClaude Opus 5.5 8eead8ecdd Merge main: the font reads main added are paid for from the allowance too
main's Thai work (#6249, #3492) and the Type 3 and symbolic TrueType
metrics changed the code this PR bounds. Each conflict, and each read main
added that this PR's allowance must cover:

- crates/fonts/src/pdf.rs, the editor's program read: this PR's read is
  kept, its stage-scaled limit and its check for an allowance already
  spent; main's read had /DecodeParms by reference too, which it has.
- The editor's loop: main rebuilds a cmap for a composite subset without
  one from its ToUnicode and /CIDToGIDMap, where this PR skipped Type 0.
  main's composite support stays, with the metrics read within the
  editor's allowance (`from_dict_within`) and no copy adapted from metrics
  read past it, as for a simple font. The /CIDToGIDMap the cmap is rebuilt
  from (`composite_glyph_maps`) reads as the font's other streams do
  (`Reads::decode`): within the allowance, behind several filters too.
- Reads main added to the metrics read: a Type 3 font's glyph
  descriptions (`type3_glyph_box`), and the program read that tells a
  symbolic TrueType font's codes as Mac OS Roman
  (`symbolic_mac_roman_texts`). Both are now paid for from the allowance
  the metrics are read within, and a refusal sets `past_allowance`. The
  glyph descriptions keep their own limits (64 KiB each, 4 MiB a font).
- Constants and helpers both sides added beside one another, and the
  tests both appended, are all kept. Callers main added of
  `unicode_map` pass a reading without a total, as `from_dict` does.
- crates/edit/src/rules.rs: the refusal of a page whose content didn't
  all decode stays, and the operators come from main's `text::joined`.

Tests: `adapting_a_programs_cmap_is_paid_for` now expects a composite
font's ToUnicode, and a simple font's program read again for the Mac OS
Roman reading, to be paid for. Four are new:
`adapting_a_composite_subsets_cmap_is_paid_for`,
`a_full_cid_map_rebuilds_a_composite_subsets_cmap_behind_two_filters`,
`type3_glyph_boxes_are_paid_for_from_the_allowance` and
`the_symbolic_mac_roman_reading_is_paid_for`. The fixture of main's test
of a composite subset without a cmap moves into `cmapless_composite`,
which both use.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY
2026-11-09 12:00:17 +01:00
Grzegorz MartensandClaude Opus 5.5 77b9cfa310 Merge main into fix/jbig2-dictionary-any-route
Conflicts, and how they were resolved:

- cos writer.rs and lib.rs: main now numbers a full save in `full_save_order` and exports
  `reachable_objects`, the object numbers a full save writes, for the pattern guard. This
  branch had added the same walk as `walk` and `reachable`. Main's is kept, with its alias
  handling, and this branch's is dropped: `globals::kept` is now `reachable_objects`, so the
  JBIG2 cleanup and the pattern guard read one walk. `kept` returns the walk's error (a save
  that can't number its objects), which redaction and Remove Hidden Information pass on. The
  cos test of what is reachable, and two redaction tests, read `reachable_objects` instead.
  The exports keep this branch's `DECODE_PARMS_KEYS` and main's `TextChars`,
  `civil_from_days` and `new_file_id`.
- redact lib.rs: main unlinks pruned patterns from `/Pages` nodes after `unlink_doomed`; this
  branch replaced `restore_shared_jbig2` with `globals::unshare`. Both stay, the unlink first:
  an image a pruned pattern's cell drew leaves the file with it, and is a user of a dictionary
  that left too.
- redact sanitize.rs: main's `strip_outline_actions` and this branch's `unshare_unmarked` both
  stay. At the end of `remove_hidden`, `unshare_unmarked` runs after main's `unlink_undrawn`,
  so an image unlinked for being drawn nowhere takes a shared dictionary with it, and is
  followed by main's `require_full_save_with_new_id`.
- redact image.rs: `MAX_PIXELS` is `pub(crate)` on both sides; the comment names
  `globals::without_dictionary`, where this branch moved `without_globals`.

Tests: `an_undrawn_image_unlinked_takes_a_shared_jbig2_dictionary_too` (Remove Hidden
Information, through `unlink_undrawn`) and
`an_image_a_pruned_patterns_cell_drew_takes_a_shared_jbig2_dictionary_too` (a redaction,
through `unlink_pruned_patterns`) pin the order of the two new routes before `unshare`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY
2026-11-09 11:59:18 +01:00
mtlcl410 4f71f96058 Merge remote-tracking branch 'upstream/main' into lane9-4784b
# Conflicts:
#	crates/automation/src/tools.rs
#	crates/automation/tests/it/automation.rs
#	crates/xfa/src/tests.rs
#	parity/acrobat-features.toml
2026-11-09 18:57:44 +08:00
mtlcl410 b4e295afcb Merge upstream/main into fix/xfa-images-name-tree 2026-11-09 18:54:13 +08:00
mtlcl410 ad0fab3339 Merge remote-tracking branch 'upstream/main' into lane4-4474b
# Conflicts:
#	crates/automation/src/tools.rs
#	crates/automation/tests/it/automation.rs
#	crates/ui-egui/tests/it/document_links.rs
2026-11-09 18:52:46 +08:00
mtlcl410 334638d822 Merge upstream/main into fix/xfa-row-cell-content-height 2026-11-09 18:52:33 +08:00
mtlcl410 02f6138e6c Merge upstream/main into fix/xfa-subformset-transparent 2026-11-09 18:51:00 +08:00
mtlcl410 61062358e6 Merge remote-tracking branch 'upstream/main' into float-5368b
# Conflicts:
#	crates/xfa/src/lib.rs
#	crates/xfa/src/model.rs
#	crates/xfa/src/tests.rs
2026-11-09 18:50:26 +08:00
mtlcl410 ed6c8afdef Merge remote-tracking branch 'upstream/main' into lane3-2539b 2026-11-09 18:49:37 +08:00
mtlcl410 ec43eb749b Merge upstream/main into fix/xfa-subform-minh 2026-11-09 18:49:11 +08:00
mtlcl410 ad42d5c276 Merge upstream/main into fix/indexed-short-lookup 2026-11-09 18:48:21 +08:00
mtlcl410 1dd2549a97 Merge remote-tracking branch 'upstream/main' into lane6-2701c
# Conflicts:
#	crates/print/src/tests.rs
2026-11-09 18:46:52 +08:00
Combiler01 43f94aaaa5 fix(print): carry media option for custom and detected driver papers in spool jobs 2026-11-09 16:13:57 +05:30
mtlcl410 60de09e1a5 Merge remote-tracking branch 'upstream/main' into lane4-4470b
# Conflicts:
#	crates/render/src/text/search.rs
#	crates/render/tests/it/search.rs
2026-11-09 18:43:43 +08:00
Grzegorz MartensandClaude Opus 5.5 e4d150a92a Merge main into fix/redact-prune-through-forms
Main reworked the redaction cleanups this branch changes: #5969 reads
each inherited form once for all names (`names_content_draws`), #5924
prunes the forms a surviving Type 3 glyph draws and passes the page to
`prune_type3_from_resources`, and #6474 reads a page's annotation
appearances toward one operator total and one byte allowance.

- `interp/prune.rs`: `names_content_draws` keeps main's one read per
  form and takes this branch's three changes to `content_draws`: it
  reads operators one at a time, holding no stream's whole and decoding
  each form only in its turn; it reads forms with `/DecodeParms` given
  by reference; and a `/Resources` that isn't a dictionary is none of
  the form's own. It charges no allowance, as `content_draws` didn't:
  it runs after the pages' walks, over every holder, where no page's
  allowance is left to spend.
- `type3.rs`: `prune_type3_from_resources` takes both the page's
  allowance and main's `page`. The appearances main reads are charged
  to that allowance, which the content and its forms spend too, in
  place of a fresh one of their own, so one page has one allowance.
  Main's `record_used` serves this branch's one-operator-at-a-time read
  of glyph programs, and `scan_stream_object`, which took over
  `scan_xobject`'s read, reads with `/DecodeParms` by reference.
  `prune_font_forms` gives each form's walk the allowance of a page, as
  `prune_retired_properties` does for each content.
- `interp.rs`, `lib.rs`, `sanitize.rs`: both arguments at each call.
- `edit/src/rules.rs`: the refusal of incomplete content stays, with
  main's `text::joined`.
- Tests: both sides' kept, in `edit/src/tests.rs` and
  `redact/src/tests/surviving_references.rs`. A new one,
  `a_page_s_appearances_spend_what_its_content_left_of_the_allowance`,
  pins the shared allowance: 1 MiB of content and an appearance within
  half a MiB of the allowance are refused together, though the
  appearance alone fits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY
2026-11-09 11:42:10 +01:00
mtlcl410 7096266c48 M6: give the custom-validation test's ScriptResult its value_set field 2026-11-09 18:41:47 +08:00
Dylan M. Taylor dafb3be3de fix(xfa): one decoding allowance for all XFA packets (#6000) 2026-11-09 18:38:52 +08:00
Dylan M. Taylor b4679deafd fix(cli): cap input reads, budget check's edit pass and escape its stderr records (#5997) 2026-11-09 18:38:34 +08:00
Dylan M. Taylor ba47f7bbc5 fix(cli): render needs the copying permission, as text does (#5990) 2026-11-09 18:38:17 +08:00
Dylan M. Taylor f800c12a7e fix(xtask): render-oracle writes page pixels into a private temporary folder (#5988) 2026-11-09 18:38:01 +08:00
Dylan M. Taylor 4cdc3d15dd fix(redact): read the page tree once per sanitize pass, not per page (#5983) 2026-11-09 18:37:46 +08:00
Dylan M. Taylor 8f29ed66f9 fix(engine): open linked documents without blocking and check the handle is a regular file (#5982) 2026-11-09 18:37:30 +08:00
Dylan M. Taylor 3fe86a118e fix(print,a11y): read summary scans one operator at a time and borrow form resources (#5968) 2026-11-09 18:37:07 +08:00