chore: sync upstream (326 Commits) #13
No reviewers
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/pdfcraft!13
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "chore/sync-upstream-20261031"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Upstream-Sync von
upstream/main(326 Commits). Fast-Forward.f137a289Merge pull request #5522 from aiongg/docs-tidy4a5f9cedMerge pull request #5527 from aiongg/update-result-dialog635a8401updates: show check results with craft-update's CheckResultDialogda4cc2c1docs: tidy wording44ddb348docs: tidy agent, contributor and asset docs24bb8530Release 0.16.135c187ffFlatpak bundle: skip the debuginfo pass manifest-wide (runner has no eu-strip)8f168550Release 0.16.04b709168Flatpak bundle: skip the debuginfo pass for cups-client (runner has no eu-strip)65ff3a00Merge pull request #4172 from songzhihui/fix/windows-cjk-viewerec33924efix(flatpak): allow reading launcher version pins (#5490)a57095c8M2: assert exact GBK glyph rasters for installed Chinese families9447cdc8M2: merge main and resolve CJK viewer integration conflictsfa5f9f8cMerge pull request #5426 from FredApps/chore/parity-integration-2026103067727724test: accept preserved CCITT filter arrays in lossless regressionThe six new dialog strings (the backdrop offer, its note, the scan warning and "Checking pages…") were missing from every catalogue, which the *_covers_ui_literals tests require. Languages with several plural forms use the "label: {n}" pattern so any count reads correctly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>645016addc' into repair/2960 6454dd2c24"A picture covers this page (a scan?)" didn't say which page, so on a range of several pages the user couldn't tell where the background would stay hidden. Both messages now list the pages as 1-based runs ("Page 3", "Pages 1-3, 6"), stopping with "…" after eight runs. The four strings are updated in every catalogue. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>The renderer reports when a page's picture is incomplete or approximate (content cut at the page's safety budget, a colour painted in a fallback colour), but only `pdfcraft-cli render` showed it. `page_render` and `render_preview` returned the PNG alone, so a script or MCP client could not tell that the image was not the whole page. Both tools now return a JSON part after the PNG when the page has warnings: `{ "page": 1, "warnings": [...] }`, with the sentences the CLI prints. Warnings are strings, like every other tool's `warnings`, so `command_run` can add its own to the same list. A page without warnings still returns the PNG alone, so existing callers see no change. The viewer notice the issue also asks for is left for a separate change.A misspelled key ({"mono": {"compresson": "retain"}}) left the preset's setting in place unnoticed; it is now InvalidArgs (from CodeRabbit's review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BfMGHQNgdq5yf5tKZHGR3zPersian came to main after these rows were written, so fa.tsv had neither "Monochrome Images" nor "CCITT Group 4". They go beside "Grayscale Images", worded like the Arabic and Kurdish rows, with the Persian digit the catalogue uses elsewhere ("AES ۱۲۸-بیتی"). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P6yUtvWGPsJpMLyh6pxSXGThe PDF Optimizer and Reduce File Size downsampled colour and grey images but not black-and-white ones. Settings::mono is now MonoSettings { downsample, target_ppi, above_ppi, compression }, 300 ppi above 450 ppi and CCITT Group 4 by default (Monochrome Images ▸ Downsample to; doc_optimize mono: { downsample, ppi, above_ppi, compression }). A 1-bit image or image mask (no filter, general-purpose filters, or CCITT fax after any of them) and eight-bit grey of only black and white are averaged by area: each new pixel takes the sample covering more of it, a tie 0, so a dark line half a new pixel wide stays. They are stored as Group 4, or as 1-bit Flate when that is smaller; with Retain a resampled image keeps its kind of compression. Images with a soft mask keep their size. CCITT decoding moves from Export ▸ Images into pdfcraft-filters (decode_ccitt, CcittParams, through hayro-ccitt), and pdfcraft_cos::Document::decoded_image reads a fax image's /DecodeParms for it (undoing filters before CCITT, such as ASCII85Decode, with any /DecodeParms given by reference made direct first), so export and the optimizer share one reader, and Group 4 scans can be downsampled. A 600 ppi text page went from 79 KB to 40 KB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BfMGHQNgdq5yf5tKZHGR3zcalculate_arg read the notation first, so {"notation": …, "script": …} set the notation and dropped the script unnoticed; the script check now comes first (from CodeRabbit's review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BfMGHQNgdq5yf5tKZHGR3zcalculate_json wrote the lowercased AFSimple code, so a product or an average came back as {"op": "prd"} or {"op": "avg"}, which form_set_props refused as an unknown op. One name per operation now serves both: calculate_arg looks names up in it (still taking minimum and maximum), and the listings write it (from CodeRabbit's review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>AFSimple_Calculate("SUM", "a, b", x) gave only a built-name site, so a rename no longer rewrote a and b (main did) while parse_calculate still read the sum of a and b: after a rename the sum read missing fields. The string list now keeps its names when an argument follows, and what follows is a name built at run time, as for an array (from the review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P6yUtvWGPsJpMLyh6pxSXGA notation beside op and fields set the notation and dropped the rest, a field name that wasn't a string was left out, a misspelt key was ignored, and validate {"min": 0, "max": "100"} wrote a min-only range. Each is now refused and nothing changes. A null bound, as form_fields shows the one a range doesn't have, is no bound, so its output is taken back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P6yUtvWGPsJpMLyh6pxSXGA notation is kept in the script's /** BVCALC … EVCALC **/ comment and read back from there. One holding EVCALC was stored cut short ("a EVCALC b" read back as "a", and its JavaScript translation didn't parse), one holding */ ended the comment, and an empty one became "event.value = ;". form_set_props now refuses each (af::notation_storable: it has to read back as itself). The test also pins a notation beside op alone and beside fields alone (from the review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P6yUtvWGPsJpMLyh6pxSXGckb and nb get all eleven rows, th and lo the six strings, and sq the five plurals beside its strings, each under "# Untranslated". Their rows next to these were missing too, so following them had added nothing. hi, id, ko, lo and th list one plural form (plural_none), so they get no English copy of the plurals: one English wording would be used for every count ("1 formulas read ..."). Without an entry, the English fallback picks the right form, as it already does for the page's other plurals in those catalogues. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P6yUtvWGPsJpMLyh6pxSXG