Commit Graph
1539 Commits
Author SHA1 Message Date
aiongg a7eba8a2ad Colour: craft-cms ace3622 (Result APIs, device white is no ink) 2026-10-13 02:11:23 +00:00
aiongg eef4648175 Merge next into craft-cms-adoption 2026-10-13 01:55:21 +00:00
aiongg 2bc7bcc7d5 Integration (#648): restore the 2026-10-11 and 2026-10-12 progress-log entries the merge dropped 2026-10-13 01:23:39 +00:00
aiongg 9a07d8a095 Integration: format 2026-10-13 01:19:52 +00:00
aiongg f2fc69307b Integration (#667): a character style made at a bare caret captures the typing format 2026-10-13 01:19:14 +00:00
aiongg 4bbafaf055 Merge #672: PARITY-TABLE-SPLIT: split each original selected cell once 2026-10-13 01:15:47 +00:00
aiongg f9bc8a17a2 Merge #671: PARITY-IDML-INDEX: retain index reference source sort keys 2026-10-13 01:15:31 +00:00
aiongg eba10236e5 Merge #670: PARITY-EPUB-STYLE: match CSS to exported style mappings 2026-10-13 01:15:20 +00:00
aiongg df9db7890a Merge #669: PARITY-TAB-LEADERS: draw right-indent tab leaders 2026-10-13 01:15:20 +00:00
aiongg ef4423ab4c Merge #668: PARITY-ARRANGE: step past same-layer siblings in Arrange 2026-10-13 01:15:20 +00:00
aiongg 86b3505675 Merge #667: PARITY-CHARACTER-STYLE: capture selected character formatting 2026-10-13 01:15:19 +00:00
aiongg 95920bff94 Merge #666: PARITY-DATA-SOURCE: honor quoted delimiters and record boundaries 2026-10-13 01:15:19 +00:00
aiongg 8a6330b170 Integration (#653 x #643): the object style round-trip test expects the default drop shadow angle (120°) 2026-10-13 01:15:06 +00:00
aiongg 8d30e0f41b Integration: format 2026-10-13 01:07:08 +00:00
aiongg 2e1002cb1b Integration (#653 x #418): one ObjectStyle BasedOn walk; style effects read the chain #418's object_style_chain walks 2026-10-13 01:06:15 +00:00
aiongg b2aa5c1ec8 Merge object-style-effects: Object styles carry effects (#653) 2026-10-13 01:05:37 +00:00
aiongg 6b2e319f96 Integration (#636): bracket clamps can't panic on a NaN path length 2026-10-13 01:02:40 +00:00
aiongg ebae0c7805 Merge parent-based-on: Parents: a parent can be based on another parent (#652)
# Conflicts:
#	ROADMAP.md
#	crates/compose/src/cache.rs
#	crates/doc/src/build.rs
#	crates/engine/src/cmd/file.rs
#	crates/engine/src/cmd/layout.rs
#	crates/idml/src/import.rs
#	crates/idml/src/tests.rs
#	crates/pdf/src/tests.rs
#	crates/render/src/lib.rs
#	crates/render/src/text.rs
#	crates/tools/src/snap.rs
#	docs/gaps.md
#	docs/target-app-parity.md
2026-10-13 01:00:08 +00:00
sanyamsingh001andCodex 5ca6a474b9 PARITY-TABLE-SPLIT: split each original selected cell once
Co-Authored-By: Codex <codex@openai.com>
2026-10-13 10:59:32 +10:00
aiongg 462831bf81 fix(styles): object style effects keep local effects, validate values, follow BasedOn in IDML (#653) 2026-10-13 00:58:47 +00:00
sanyamsingh001andCodex 8f48869e58 PARITY-IDML-INDEX: retain index reference source sort keys
Co-Authored-By: Codex <codex@openai.com>
2026-10-13 10:56:09 +10:00
sanyamsingh001andCodex b3ec8dc908 PARITY-EPUB-STYLE: match CSS to exported style mappings
Co-Authored-By: Codex <codex@openai.com>
2026-10-13 10:53:54 +10:00
sanyamsingh001andCodex e507b98601 PARITY-TAB-LEADERS: draw right-indent tab leaders
Co-Authored-By: Codex <codex@openai.com>
2026-10-13 10:51:50 +10:00
aiongg 182db943c2 fix(parents): bound every based-on walk; base items follow the parent showing them (#652)
Cycle checks walk based_on with a seen-set over all parents, so a cycle
longer than the drawing depth cap is still found. Snapping lists parent
items through shown_parent_pages instead of recursing, and offers base
items on a parent spread. A base parent's text on a parent spread is
composed for that spread, so page-number markers show its prefix.
Cmd+Shift-click hits what is drawn: it honours Show Parent Items, hidden
and locked layers, the facing-page filter and layer order. IDML import
warns when a parent spread's pages name different bases or their own
spread.
2026-10-13 00:51:41 +00:00
sanyamsingh001andCodex b4db428608 PARITY-ARRANGE: step past same-layer siblings in Arrange
Co-Authored-By: Codex <codex@openai.com>
2026-10-13 10:48:56 +10:00
sanyamsingh001andCodex f7adb11cdc PARITY-CHARACTER-STYLE: capture selected character formatting
Co-Authored-By: Codex <codex@openai.com>
2026-10-13 10:46:10 +10:00
sanyamsingh001andCodex 7abcbc745f PARITY-DATA-SOURCE: honor quoted delimiters and record boundaries
Co-Authored-By: Codex <codex@openai.com>
2026-10-13 10:44:20 +10:00
aiongg 98ff430022 feat(styles): object styles carry effects (#653) 2026-10-13 00:40:59 +00:00
aiongg 13f4c37153 Integration (#662 x next): a null spread is absent (spread 0), as Paste in Place forwards its optional spread and file.place documents null as absent 2026-10-13 00:33:00 +00:00
aiongg f74664df8d Integration (#636): the Direct Selection end-anchor test checks only Direct Selection (with the default brackets the Selection tool's thread ports sit there too) 2026-10-13 00:33:00 +00:00
aiongg 5b81bfa9b6 Integration: format 2026-10-13 00:23:24 +00:00
aiongg 2c7e855d7f Integration (#645): French catalogue test: no duplicate or stale keys, fr.rs disjoint from the shared table, placeholders and edge spaces as in English 2026-10-13 00:22:27 +00:00
aiongg 80803e3ae3 feat(parents): a parent can be based on another parent (#652)
Pages draw the base parent's items, then the parent's, then their own,
on the canvas, in PDF and image export, and on the parent spread itself.
Chains are followed base first with a depth bound. Overrides, parent hit
testing and the flattener's transparency check include base items.

layout.parents.options {parent, basedOn} sets or clears the base and
refuses cycles; document.inspect reports basedOn per parent. Opening a
.designcraft or IDML file clears a cyclic or dangling base with a warning.
IDML already carried the base as the parent pages' AppliedMaster; a test
covers the round trip.
2026-10-13 00:21:48 +00:00
aiongg 3dff5b9aee Merge pr/645: i18n: translate the French interface, in page-layout and InDesign vocabulary (#645)
# Conflicts:
#	crates/ui-egui/src/i18n.rs
2026-10-13 00:15:42 +00:00
aiongg 8fe4a5021a Integration (#643): the Effects dialog's field setter takes the path with split_last (an empty path changes nothing instead of panicking) 2026-10-13 00:13:37 +00:00
aiongg 71db506182 Merge pr/643: UI: the Effects dialog, as in InDesign (#643)
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/object.rs
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/i18n/ar.rs
#	crates/ui-egui/src/i18n/it.rs
#	crates/ui-egui/src/i18n/ja.rs
#	crates/ui-egui/src/i18n/pt_br.rs
#	crates/ui-egui/src/i18n/uk.rs
#	crates/ui-egui/src/menus.rs
#	crates/ui-egui/src/panels/properties.rs
2026-10-13 00:12:33 +00:00
aiongg 6797589402 Merge pr/647: Text: edit type on a path along the curve (#647)
# Conflicts:
#	crates/engine/src/cmd/text.rs
2026-10-13 00:10:31 +00:00
aiongg 2732f8c2e6 Integration (#636): with Direct Selection an anchor under the pointer wins over a type-on-a-path bracket, so the end anchors (where the default brackets sit) can be dragged again 2026-10-13 00:09:13 +00:00
aiongg 99e6922981 Merge pr/636: Tools: drag type-on-a-path start and end brackets (#636)
# Conflicts:
#	ROADMAP.md
#	crates/idml/src/tests.rs
#	crates/tools/src/lib.rs
#	crates/tools/src/select.rs
#	crates/tools/src/tests.rs
#	crates/ui-egui/src/canvas.rs
2026-10-13 00:08:12 +00:00
aiongg 1cf1477183 Integration (#630): the Pen continuing from a path's first anchor adds anchors before it (path.appendAnchor at: start) instead of reversing the path, so arrowheads stay on their ends and a press then Esc leaves no undo step 2026-10-13 00:06:15 +00:00
aiongg 575839cc4f Merge pr/630: Tools: the Pen continues an open path from either end point (#630)
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/object.rs
#	crates/tools/src/lib.rs
#	crates/tools/src/pen.rs
#	crates/tools/src/tests.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/i18n/ar.rs
#	crates/ui-egui/src/i18n/it.rs
#	crates/ui-egui/src/i18n/ja.rs
#	crates/ui-egui/src/i18n/pt_br.rs
#	crates/ui-egui/src/i18n/uk.rs
2026-10-13 00:02:51 +00:00
aiongg 8ad77980ac Merge pr/648: Eyedropper: a sampled colour goes to the stroke when the Stroke box is in front (#648)
# Conflicts:
#	ROADMAP.md
#	crates/tools/src/xform.rs
#	crates/ui-egui/src/toolbar.rs
2026-10-13 00:01:26 +00:00
aiongg d7d71380ad Merge pr/610: Links: placed text files can stay linked (Word, RTF, text) (#610)
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/file.rs
#	crates/engine/src/cmd/linked.rs
#	crates/engine/src/cmd/links.rs
#	crates/engine/src/cmd/place_text.rs
#	crates/engine/src/cmd/prefs.rs
#	crates/engine/src/lib.rs
#	crates/ui-egui/src/dialogs.rs
2026-10-13 00:00:51 +00:00
aiongg 7e4c75fce9 Merge pr/662: Commands: reject unknown spread values instead of falling back to page 1 (#662)
# Conflicts:
#	crates/engine/src/cmd/file.rs
#	crates/engine/src/cmd/guides.rs
#	crates/engine/src/cmd/object.rs
2026-10-12 23:59:28 +00:00
aiongg 605b31c6d6 Merge pr/663: CLI: accept a UTF-8 BOM in scripts and document the syntax in script --help (#663) 2026-10-12 23:56:41 +00:00
aiongg 5b903c036e Merge pr/637: Index: keep level 3 and 4 topics in a run-in index (#637)
# Conflicts:
#	contributors/people.toml
2026-10-12 23:56:37 +00:00
aiongg 14eff698dd Merge pr/639: Fonts: fall back to a font made for Malayalam (#639) 2026-10-12 23:56:26 +00:00
aiongg e7ad004f4d Merge main: mirror gradient midpoints when reversing; preserve leading empty Tagged Text paragraphs 2026-10-12 23:56:21 +00:00
aiongg 52637295f0 Colour management on craft-cms: Coated FOGRA39 default CMYK, BPC display, FOGRA39 output intent
- designcraft-color: ICC profiles (built-in RGB working spaces, user .icc files) go through
  craft-cms. The default CMYK working space is craft-cms's Coated FOGRA39; CMYK swatches show
  relative colorimetric with the settings' black point compensation, as placed images do.
  Generic CMYK and Device CMYK stay selectable; names of the profiles FOGRA39 stands in for
  resolve to it; ColorSettings::with_known_profiles replaces unavailable saved names with the
  defaults (used when the UI restores saved settings). Lab, gamut error and proofing of ICC
  CMYK spaces use craft-cms transforms. The Generic CMYK output profile is encoded by craft-cms.
- designcraft-images: Profile, Transform, TransformOptions, Intent and Builtin are craft-cms's;
  its black point compensation replaces the module's sRGB table. Untrusted profiles are still
  ignored with a log line.
- designcraft-pdf: the PDF/X output intent is the working CMYK space's profile: the FOGRA39
  built-in with identifier FOGRA39, user profiles as loaded, Generic CMYK otherwise.
- moxcms is no longer a direct dependency.
2026-10-12 23:50:57 +00:00
Jason Brashear 91263c912f fix(textimport): preserve leading empty Tagged Text paragraphs
Preserve paragraph breaks after a ParaStyle tag starts the story so leading empty paragraphs and their styles survive Tagged Text import.

Validated individually and after #638 with all six cargo xtask ci gates (1,278 tests passed, four existing tests ignored, 15 WASM compilation checks), six independent paragraph/header/Unicode probes, and an actual export-to-placement command smoke test.

Refs #641
2026-10-12 17:21:52 -06:00