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>
`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.
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.
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>
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>
* 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).
* 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).