chore: sync upstream (44 Commits) #16
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!16
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "chore/sync-upstream-20261104"
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(44 Commits). Fast-Forward.9bbcde46Merge pull request #6063 from dotCooCoo/fix/continuous-scroll-prefetchd21abe98test(ui): keep the eviction-order test over the window-sized allowance933a92faMerge storytold/main into fix/continuous-scroll-prefetch1f8cb453Merge pull request #6065 from dotCooCoo/fix/window-sized-page-budgetbde72b6ftest(ui): pin the whole-page allowance ceiling per target8bb0528bMerge pull request #6078 from storytold/rel-0.18.198845f17Release: PdfCraft v0.18.1a4a109ebi18n: move the craft-i18n pin to 575cfde (#6068)9ce6d89fi18n: interface translations from craft-i18n (#6055)a2621719fix(ui): continuous view renders the pages ahead of the scroll1a2104d4fix(ui): size the whole-page raster allowance to the pages on screen801fd3aafix(engine): decode signature preview images within a small work allowance (#5981)76260bb6fix(xfa): scripts come only from the XDP's own packets and quote the date pattern (#5987)ecdd1e65fix(audit): read content one operator at a time and charge hidden text and findings (#5875)0d3f57e1M5: keep Fill & Sign editing on Enter and preserve line breaks (#5850) (#5954)* i18n(tr): translate the 288 strings the gaps report lists The translation gaps report listed 288 English strings with no Turkish translation, among them the Window menu ("Pencere"), the side-panel and hotbar labels, the signature and timestamp validation messages, the accessibility checker findings, the plurals and the calendar weekday heads. The two English stand-ins at the top of the catalog are translated too. `cargo xtask i18n-report` now lists 0 missing for tr. Terms follow the existing catalog (annotation = açıklama, digital ID = dijital kimlik, bookmark = yer işareti, redact = karart). Placeholders and trailing ellipses match the English source. AI-assisted; not separately reviewed line by line by a native speaker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * i18n(tr): note the native review of the judgement calls A native Turkish speaker reviewed the translations the PR flagged as judgement calls ("of" as a slash, hotbar, navigation rail, the certificate key-usage terms, the weekday heads) and kept them. The rest stay AI-assisted, so full proofreading is still pending. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(i18n): state the Turkish coverage by the gaps report, not the dated union The 2,798-key union in localization-parity.md was measured on 2026-10-25 and predates keys added since, so "every current key" against it did not add up (CodeRabbit). The Turkish row now says what was measured: 2,867 entries and 0 missing in `cargo xtask i18n-report` on 2026-11-03. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Revert the vendored Cargo.lock changes c700ce42 picked up by mistake They came from running the vendored crates' tests locally and have nothing to do with this PR. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>* build(i18n): embed the craft-i18n catalogs from a pinned checkout - `craft-i18n.rev` pins storytold/craft-i18n at e45ddf7 (the PdfCraft cutover sync of pdfcraft@ecdd1e6); `.gitattributes` keeps it LF. - The `craft-i18n` crate (craft-libs 787a7a0, PdfCraft's existing pin) is a direct dependency of the UI crate; it was already in the tree through craft-ui. - `crates/ui-egui/build.rs` writes `CRAFT_I18N` from `CRAFT_I18N_DIR`: one (locale, common.tsv, pdfcraft.tsv) entry per locale with a `pdfcraft.tsv`, paths written with `{:?}` and never canonicalized. Unset it is empty (English only); `CRAFT_I18N_REQUIRED=1` makes a missing or invalid checkout an error. - Both flatpak manifests name the craft-i18n commit and `CRAFT_I18N_DIR`; a test keeps both commits equal to the trimmed pin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(i18n): look strings up through craft-i18n behind a thin Lang wrapper `i18n.rs` keeps PdfCraft's API (tr, tr_ctx, tr_id, trn, key_name, fmt, Lang, LANGUAGES, detection) and hands lookups to the craft-i18n crate: `get` for key names, `trn_plain` for plurals (no isolates, no digit grouping), PdfCraft's own `fmt` (no FSI isolates). `@id` rows and the "Undo {action}" template are read only where PdfCraft had them, so menus and history labels read exactly as before. Detection is unchanged (LC_ALL/LC_MESSAGES/LANG, macOS defaults, sys_locale); the crate's match_tag would drop nb for no/nn, so PdfCraft's own tag mapping stays, with one parity test per path. Completeness tests become reports; tests that need catalogs skip with a note when the build has none. Font coverage tests read the embedded catalogs (shared and PdfCraft rows). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(i18n): remove the in-repo catalogs; craft-i18n holds them The 34 `crates/ui-egui/src/i18n/*.tsv` catalogs were migrated into craft-i18n at pdfcraft@ecdd1e6 and are now embedded from the pinned checkout. ATTRIBUTION.toml drops their 34 entries for one craft-i18n `[[build_input]]` (craft-i18n's ATTRIBUTION.md credits the translators); AGENTS.md and docs/localization.md describe the new system and how to add a language. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(i18n): skip catalog tests without craft-i18n; drop the catalog hash exemption Tests that switch to a non-English language skip with a note when the build embeds no catalogs (CRAFT_I18N_DIR unset), so the English-only build tests green. `skip_without_catalogs` moves to the integration test support module. With no catalogs left in the repository, `cargo xtask assets` no longer exempts `crates/ui-egui/src/i18n/*.tsv` from hashing: every `[[asset]]` carries a sha256 again, and a `.tsv` added back would need one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build(i18n): watch the locales directory before reading it A CRAFT_I18N_DIR that doesn't exist yet now reruns the build script once it appears (review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build(i18n): pin craft-i18n dfbe955, the merge of storytold/craft-i18n#129 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(i18n): skip an @id row that changes the label's placeholders or ellipsis craft-i18n checks placeholders and the trailing ellipsis on every row whose source is English text, but not on @id rows, whose source is the command id. The in-repo catalog test used to fail on such a row; since the cutover it only prints it, while tr_id and menu_label still showed it. Both now use PdfCraft's own @id row only when it keeps the label's shape (same_shape, the rule craft-i18n applies elsewhere), and otherwise show the label's translation, as bundled_catalogs_are_consistent says. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(i18n): reject an @id row with an open brace; list unused @id rows in the gaps report same_shape skipped a `{` with no `}`, so an @id row such as "Öffnen {name…" for "Open…" was still shown. It now counts as a changed shape. bundled_catalogs_are_consistent printed the @id rows PdfCraft doesn't use, but CI captures test output, so nobody saw them. translation_gaps_report, which `cargo xtask i18n-report` runs with --nocapture, now lists them (unused_id_rows). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(i18n): reject an @id row with a `}` that closes no placeholder same_shape counted only the `}` that close a `{`, so "Öffnen name}…" for "Open…" or "{name}} öffnen" for "Open {name}" still passed. A row whose `}` count differs from its placeholders now counts as a changed shape. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(i18n): no braces in the assert messages of the brace test assert! reads its message as a format string, so "a `}` without its `{`" did not compile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: FredApps <153173854+FredApps@users.noreply.github.com>