Commit Graph
4827 Commits
Author SHA1 Message Date
aiongg 56905e5076 refactor(ui-egui): move the tests module of lib.rs to tests.rs 2026-10-26 18:18:13 +00:00
aiongg 4abd7aea8c refactor(ui-egui): move the tests module of canvas.rs to canvas/tests.rs 2026-10-26 18:18:13 +00:00
aiongg a72dfe2e49 refactor(ui-egui): move the tests module of menus.rs to menus/tests.rs 2026-10-26 18:18:13 +00:00
aiongg 9e7147da93 refactor(ui-egui): move the tests module of dialogs.rs to dialogs/tests.rs 2026-10-26 18:18:13 +00:00
aiongg 29d10be435 refactor(compose): move hyphen/mod.rs to hyphen.rs 2026-10-26 18:18:13 +00:00
aiongg 802388109a refactor(color): move cms/mod.rs to cms.rs 2026-10-26 18:15:32 +00:00
aiongg 648ec777e4 refactor(ui-egui): move panels/mod.rs to panels.rs 2026-10-26 18:15:32 +00:00
aiongg 7445b8eee7 refactor(engine): move cmd/datamerge/mod.rs to cmd/datamerge.rs 2026-10-26 18:15:31 +00:00
aiongg 8b56a75f19 refactor(engine): move cmd/mod.rs to cmd.rs 2026-10-26 18:15:31 +00:00
PiMinusMaxandClaude Opus 5.5 13013b09d0 Effects: inner shadow, glow and bevel follow a transparent image's edge
On a frame holding a graphic, Inner Shadow, Inner Glow (from the edges) and Bevel and Emboss are built from what the object paints instead of the frame's path: the colour everywhere but under the painted pixels moved by the offset, blurred, and kept only where the object paints. A transparent part of an image is outside the object, so the effect lines the image's opaque edge; before, it lined the frame and nothing marked the image's own edge. Frames without a graphic draw as before. Satin and a centred Inner Glow still follow the frame.

Fixes #1622.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:13:10 +01:00
RoHaX d2c8257328 T.DE1: merge current upstream main into PR 1254 2026-10-26 14:04:29 +01:00
RoHaX 7bdd99e788 Merge branch 'feat/german-2006-hyphenation' of https://github.com/RoHaX/designcraft into feat/german-2006-hyphenation
# Conflicts:
#	docs/typography-parity.md
2026-10-26 14:00:51 +01:00
Hamza 7ad7f22f4d Pin the indd dependency by rev, as every other git dependency is (#1599)
`indd` was the one git dependency taken from a branch:

    indd = { git = "https://github.com/storytold/indd-utils", branch = "main" }

`Cargo.lock` pinned a commit, but any `cargo update` -- and `.github/dependabot.yml`
runs them -- pulls whatever is on that branch into a parser of untrusted INDD
files, with no review of what changed. The craft-libs dependencies beside it are
all `rev = "b926b5c0..."`.

Pinned to `7f3060e5bce78d21ea70e0d5eacb96edce15dfbe`, which is the commit the
lock already held: the only change in `Cargo.lock` is the source string,
`?branch=main` to `?rev=7f3060e5...`, so no code moves with this.

Verified: `cargo check --locked -p designcraft-engine` passes, and
`indd_files_go_through_the_converter_and_its_errors_are_open_errors` still
passes, so the converter is the same one.

Audit DC-18.
2026-10-26 17:12:09 +05:00
Hamza 6f567fdb6d PDF export: a name escapes every byte a name cannot hold (#1582)
A placed media file's type goes into the embedded file's `/Subtype` as a PDF
name, and only `/` was escaped. ISO 32000-1 7.3.5 allows only the regular
characters in a name, so a type carrying a space, a delimiter, a comment
character or `#` ended the name early and left the rest as loose tokens in the
file's structure -- in a PDF the user then distributes.

`pdf_name` escapes every irregular byte as `#xx`. The test covers the shapes
that leaked: a space, `<<`/`>>`, `(`/`)`, `[`/`]`, `%`, `#` itself and a
non-ASCII byte, and checks an ordinary type is unchanged.

This is the escaping part of DC-01 only. The larger part of that issue -- the
post-passes finding the catalog, the page tree and pages by text search over
the output and taking the last match -- needs them to stop rediscovering
objects at all, through the xref chain or by carrying the offsets each pass
writes. That is a rework of `transitions.rs` rather than a patch, and the
issue says a reproduction is available to maintainers privately, which I would
want to test against before changing how objects are found.
2026-10-26 17:06:38 +05:00
Florent Siegenthaler 26ba764946 Declare the UI languages to AppKit so the open and save panels are translated 2026-10-26 09:24:17 +01:00
NetterSilverandClaude Haiku 5.5 21acf88a80 Escape font family and typeface values in Tagged Text export
Found while testing crates/textimport/src/tagged.rs:~93-100 (tagged_text, the `<cFont:{v}>` and `<cTypeface:{v}>` writes)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 05:55:05 +00:00
NetterSilverandClaude Haiku 5.5 b35e31d963 Reject ISO timestamps without ':' between hour and minute
Found while testing crates/doc/src/vars.rs:178 (parse_iso_date, `let (h, mi) = (tnum(0, 2)?, tnum(3, 5)?);`)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 04:43:37 +00:00
dotCooCoo 00d0867d50 Merge branch 'main' into fix/column-rules-span-the-text 2026-10-25 21:39:36 -07:00
NetterSilverandClaude Haiku 5.5 b0fcb297ca Reject signed or out-of-range timezone offsets in parse_iso_date
Found while testing crates/doc/src/vars.rs:~186 (parse_iso_date, the zone '+'/'-' branch: `z.get(0..2)?.parse::<i64>()` and the minutes parse)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 04:28:46 +00:00
aiongg ed8aabd1dc Shortcut edits wait for the Keyboard Shortcuts dialog; the menu bar owns a user's Paste in Place chord (#1854) 2026-10-26 00:18:17 -04:00
aiongg f8c633033d Separations Preview: the UI thread separates one sheet per frame (#1853) 2026-10-26 00:17:38 -04:00
aiongg 48c9221137 Merge pull request #1410 from aiongg/keymap-shortcuts-dialog
Shortcuts: the shared craft-keymap Keyboard Shortcuts dialog, with shortcut sets
2026-10-25 23:47:00 -04:00
aiongg 0ef2e88d57 Merge pull request #1298 from aiongg/keymap-adoption
Keyboard shortcuts on the shared craft-keymap crate: panel shortcuts, editable tool keys
2026-10-25 23:30:48 -04:00
aiongg f6fe64981a Merge branch 'keymap-adoption' into keymap-shortcuts-dialog
# Conflicts:
#	Cargo.toml
2026-10-26 03:29:29 +00:00
aiongg ae732c3a90 Pin the export time in the page-list export test (#1850) 2026-10-25 23:20:52 -04:00
aiongg ea5a706ef8 Merge remote-tracking branch 'upstream/main' into keymap-adoption
# Conflicts:
#	Cargo.lock
2026-10-26 03:15:52 +00:00
aiongg ace557ca97 Merge pull request #1375 from aiongg/print-color-separations
Print color: Separations Preview shows the exported PDF's plates, spot plates included
2026-10-25 22:48:15 -04:00
aiongg 3b732f946a Keep ui.json when its shortcut sets can't be read 2026-10-26 02:37:19 +00:00
aiongg a138e1f010 Separations Preview keeps every visible sheet; a superseded job is no longer pending 2026-10-26 02:31:06 +00:00
aiongg 3fc0bf83fd Merge branch 'keymap-adoption' into keymap-shortcuts-dialog
# Conflicts:
#	Cargo.toml
#	xtask/src/pdf_deps.rs
2026-10-26 02:06:51 +00:00
aiongg 23173b9065 Merge remote-tracking branch 'upstream/main' into keymap-adoption
# Conflicts:
#	Cargo.lock
#	Cargo.toml
#	xtask/src/pdf_deps.rs
2026-10-26 02:06:25 +00:00
aiongg 2e6df922c8 Merge remote-tracking branch 'upstream/main' into print-color-separations
# Conflicts:
#	Cargo.lock
#	crates/engine/src/cmd/export.rs
2026-10-26 02:05:49 +00:00
aiongg 7cc4f7111c Merge pull request #1384 from aiongg/print-color-x1a
Print color: PDF/X-1a export through craft-prepress's flattener
2026-10-25 21:59:30 -04:00
aiongg 3c19a24e68 Merge pull request #1374 from aiongg/print-color
Print color: overprint, knockout, CMYK blending and spot gradients through craft-pdf
2026-10-25 21:58:20 -04:00
aiongg c74388c4f9 Merge branch 'keymap-adoption' into keymap-shortcuts-dialog 2026-10-26 01:40:57 +00:00
aiongg 4905555956 Merge remote-tracking branch 'upstream/main' into keymap-adoption
# Conflicts:
#	crates/ui-egui/src/menus.rs
#	crates/ui-egui/src/shortcut_import.rs
2026-10-26 01:40:20 +00:00
aiongg ada39e78d7 Keyboard Shortcuts: Assign takes a held shortcut in one step (craft-libs#352) 2026-10-26 01:39:22 +00:00
aiongg c6444a0471 A command's other shortcuts run while the macOS menu bar holds its first 2026-10-26 01:39:22 +00:00
Dylan M. Taylor 63a4f687fb Reduce cognitive complexity in UI dialogs, canvas, chrome, shortcut import and IDML export (#1848)
* refactor(ui): split shortcut set import into sort, apply and conflict steps

Resolves SonarCloud rust:S3776 on import (ui-egui/src/shortcut_import.rs).

* refactor(ui): split drop caps and nested styles dialog into row helpers

Resolves SonarCloud rust:S3776 on drop_caps_and_nested_styles (ui-egui/src/dialogs.rs).

* refactor(ui): split draw_guides into bleed, grid, overlay and guide helpers

Resolves SonarCloud rust:S3776 on draw_guides (ui-egui/src/canvas.rs).

* refactor(ui): split control_paragraph into alignment, indent, drop cap and shading helpers

Resolves SonarCloud rust:S3776 on control_paragraph (ui-egui/src/chrome.rs).

* refactor(idml): move graphic layer option tree out of image_el

Resolves SonarCloud rust:S3776 on image_el (idml/src/export.rs).
2026-10-25 21:25:57 -04:00
Dylan M. Taylor 42463ce99d Reduce cognitive complexity in variables, PDF graphics, compose frames and menu shortcuts (#1847)
* refactor(engine): split convert_all's per-story plan into convert_plan

Resolves SonarCloud rust:S3776 on convert_all (cmd/variables.rs).

* refactor(pdf): split graphic_unclipped into per-kind helpers

Resolves SonarCloud rust:S3776 on graphic_unclipped (pdf/src/export.rs).

* refactor(compose): extract wrap exclusions and frame text area from frame_specs_placed

Resolves SonarCloud rust:S3776 on frame_specs_placed (compose/src/lib.rs).

* refactor(ui): extract command shortcut lookup from shortcut_key

Resolves SonarCloud rust:S3776 on shortcut_key (ui-egui/src/menus.rs).
2026-10-25 21:25:52 -04:00
Dylan M. Taylor e413cdf59b Reduce cognitive complexity in find, lists, PDF font/layer scans; fix wildcard import (#1846)
* test(pdf): replace wildcard super import in registration_tests

Resolves SonarCloud rust:S2208 (new code).

* test(engine): extract child-scope rejection assertions in find tests

Resolves SonarCloud rust:S3776 on find_scope_children_error_atomically_and_parent_requests_stay_top_level.

* refactor(engine): extract per-paragraph list update from apply_list

Resolves SonarCloud rust:S3776 on apply_list.

* refactor(pdf): extract form scanning from FontScan::content

Resolves SonarCloud rust:S3776 on FontScan::content (pdfx/fonts.rs).

* refactor(pdf): extract layer helpers from optional_content::prepare

Resolves SonarCloud rust:S3776 on prepare (optional_content.rs).
2026-10-25 21:25:48 -04:00
aiongg d28271b489 Merge branch 'keymap-adoption' into keymap-shortcuts-dialog
# Conflicts:
#	Cargo.lock
#	Cargo.toml
2026-10-26 01:16:37 +00:00
aiongg 1a52593d0d Merge remote-tracking branch 'upstream/main' into keymap-adoption
# Conflicts:
#	Cargo.toml
2026-10-26 01:15:41 +00:00
aiongg 39746cbff9 Place the Separations panel in the default icon groups 2026-10-26 01:15:10 +00:00
aiongg d90881a8a9 Merge branch 'print-color' into print-color-separations
# Conflicts:
#	Cargo.toml
2026-10-26 01:11:35 +00:00
aiongg c856db68f1 Merge branch 'print-color' into print-color-x1a
# Conflicts:
#	Cargo.toml
2026-10-26 01:11:11 +00:00
aiongg 240dbcf731 Merge remote-tracking branch 'upstream/main' into print-color
# Conflicts:
#	Cargo.toml
#	crates/idml/src/export.rs
2026-10-26 01:10:39 +00:00
aiongg e91f830116 chore(deps): safe dependency refresh (#1844)
cargo update with semver-compatible updates only. Git dependencies keep their revisions (indd stays at 7f3060e5).
2026-10-25 20:54:46 -04:00
NetterSilverandClaude Opus 5.5 b390324c1f Repaint the canvas when a placed file is relinked or updated
Fixes #1835

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 23:48:25 +00:00
Daniel 699ba7d6ed Merge latest upstream main and resolve GNOME Wayland control conflicts 2026-10-26 00:02:02 +01:00