Commit Graph
4665 Commits
Author SHA1 Message Date
KnottyDyesandClaude Opus 5.5 5cd8d99db7 Package: report PDF warnings and keep hyperlinks on rasterized frames
Include the PDF export warnings in the package result and report. Cover
shadow and feather output in packaged PDFs with a synthetic regression test.

Preserve frame and text-range hyperlinks on rasterized frames, including
inside groups, at their original source bounds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:20:58 -07:00
aiongg b17dd017d5 Merge pull request #2287 from con3code/test/mojikumi-one-em-close-up
Mojikumi: test consecutive punctuation under the one-em line-end set too
2026-11-03 19:23:28 -05:00
con3codeandClaude Opus 5.5 3894566812 Mojikumi: test consecutive punctuation under the one-em line-end set too
The close-up test checked the half-em line-end set only; the other Japanese
base set closes up the same pairs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 09:01:20 +09:00
aiongg 823eef9838 Fix mojikumi: middle dot loses its quarter em beside a proportional (#2285)
Fixes #2281.

- crates/doc/src/mojikumi.rs
- crates/doc/tests/autocraft_regression.rs
2026-11-03 18:57:15 -05:00
aiongg fe7db96e11 Merge pull request #2168 from 4waymedia/fix/open-large-stored-assets
Format: a saved document opens whatever the size of its placed images (#2166)
2026-11-03 18:33:36 -05:00
Paul GemignaniandClaude Fable 5.1 50780180e7 Format read_entry's caller (cargo fmt)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_012xiyiD63mAukLtyDQFCQKU
2026-11-03 15:21:13 -08:00
.CooCoo f889d7c47b Tables: Convert Cell to Graphic Cell… is dimmed without a table target (#2270)
The menu item was enabled whenever a document was open. With no table
target it opened the file picker, and placing the image then failed
because table.placeGraphic needs a table target. The item now takes the
enablement of table.placeGraphic, as Justification… takes that of
type.para.
2026-11-03 17:33:43 -05:00
Tex Jernigan e1910529a7 Frames with a nested image: hit inside the frame, take a placed graphic; replacing keeps the crop; open on a usable layer (#2226)
* Frames holding pasted-in images are hit inside the frame, take a placed graphic; documents open on a usable layer

A frame with items pasted into it (how a document from InDesign keeps a cropped photo) was hit
through its children like a group, so the whole uncropped image counted: a click on the empty
page beside such a photo selected it, and nothing could be deselected there. It is now hit by
its own area, as it is drawn clipped. Such a frame holding only graphics also takes a placed or
dropped graphic (Item::takes_graphic), which fills it as an empty or graphic frame is filled.

A document opened with new objects going to its top layer even when that layer was hidden and
locked (a dieline), so a placed graphic showed as an empty frame outline. It now opens on the
topmost layer that is shown and unlocked (Document::working_layer).

* Place: a graphic replacing the one a frame shows keeps the frame's crop and zoom

Placing or dropping into a frame that shows a graphic (in it, or as the one graphic pasted into
it) filled the frame afresh, so the crop and zoom chosen for the old picture were lost. The new
graphic now covers the old one's area, centred on it: an edited copy of the same picture lands
exactly where the old one was.

* Move the replace-keeps-crop and open-on-a-usable-layer changes to their own PRs

Review asked for them to be checked against reference app behaviour on their own. This PR keeps
the frame hit area and Item::takes_graphic. Reverts 8ea0bc16 and drops Document::working_layer.

* Move Document::working_layer and its test to #2267
2026-11-03 17:21:35 -05:00
Tex Jernigan ae5be94865 Layers: a document opens on its topmost shown, unlocked layer (#2267)
A document opened with new objects going to its top layer even when that layer was hidden and
locked (a dieline), so a placed graphic showed as an empty frame outline. Document::working_layer
picks the topmost layer that is shown and unlocked (the top layer when there is none); DocState::new
and the fallback after the active layer is deleted use it.
2026-11-03 17:15:53 -05:00
aiongg b749251694 Merge pull request #1478 from Hamza0101/fix/cli-argument-handling
cli: the three argument bugs photocraft#7071 lists are live here too
2026-11-03 17:01:34 -05:00
aiongg 0867f82961 Merge pull request #1666 from MarekSpodBiedry/issue-1646
Fill the empty or graphic frame under the pointer when a file is dropped on it (#1646)
2026-11-03 17:00:02 -05:00
aiongg c1bf2c769b Merge pull request #1968 from VoiceLessQ/fix/1522-anchored-copy-ids
Give anchored objects fresh ids when copying text frames (fixes #1522)
2026-11-03 16:48:53 -05:00
aiongg 65c4db30e1 Apply review fixes
- apps/designcraft-cli/src/main.rs
2026-11-03 21:48:08 +00:00
aiongg d400167537 Apply review fixes
- crates/engine/src/cmd/file/place.rs
2026-11-03 21:46:56 +00:00
Ikki Nishiharaandharanishi 4a1ff582e9 fix: macOSアプリにCLIを同梱 (#690)
Co-authored-by: haranishi <223786623+haranishi@users.noreply.github.com>
2026-11-03 16:44:59 -05:00
aiongg de4042be41 Merge pull request #1404 from moppeeer/snap-page-centre
Snapping: a drawn or resized edge snaps to the page's centre line, as InDesign's smart guides do
2026-11-03 16:37:29 -05:00
aiongg 6c4723e1e8 Merge pull request #184 from storybored379/feat/mcp-conventions
MCP: complete tool hints and check nested argument keys
2026-11-03 16:35:55 -05:00
aiongg 94337c8bd9 Merge pull request #2259 from aiongg/integration-designcraft-20261103-8
Integration batch integration-designcraft-20261103-8
2026-11-03 16:26:49 -05:00
aiongg dca5adc0ef Merge main into snap-page-centre 2026-11-03 21:23:44 +00:00
aiongg cb5c7ca309 Merge main into feat/mcp-conventions 2026-11-03 21:23:14 +00:00
aiongg c10bba5f4d Merge pull request #1900 2026-11-03 21:15:06 +00:00
aiongg dd372192e8 Merge pull request #2255 from aiongg/integration-designcraft-20261103-7
Integration batch integration-designcraft-20261103-7
2026-11-03 16:14:57 -05:00
aiongg 9360d35f38 Merge pull request #1987 2026-11-03 20:24:27 +00:00
aiongg 51ac012814 Merge pull request #1986 2026-11-03 20:24:27 +00:00
aiongg 1967903244 Merge pull request #2102 2026-11-03 20:24:26 +00:00
aiongg 8b0d264875 Merge pull request #1856 2026-11-03 20:24:26 +00:00
aiongg 41b7e31be0 Merge pull request #1424 2026-11-03 20:24:24 +00:00
aiongg d1255e2925 Merge pull request #2246 from aiongg/integration-designcraft-20261103-6
Integration batch integration-designcraft-20261103-6
2026-11-03 15:24:17 -05:00
aiongg 61ed22140a Apply review fixes
- apps/designcraft-cli/src/main.rs
2026-11-03 19:41:27 +00:00
aiongg 1da269b7f5 Merge main into feat/mcp-conventions 2026-11-03 19:40:25 +00:00
aiongg 49e934d8ba Merge main into snap-page-centre 2026-11-03 19:11:20 +00:00
aiongg 6914f12209 Apply review fixes
- crates/engine/src/script.rs
2026-11-03 19:08:01 +00:00
aiongg 78139b693e Merge pull request #2193 2026-11-03 19:07:43 +00:00
aiongg 671114f5fc Merge pull request #2024 2026-11-03 19:07:43 +00:00
aiongg 35a7410481 Merge pull request #2192 2026-11-03 19:07:42 +00:00
aiongg 309f65f606 Merge pull request #2243 from aiongg/integration-designcraft-20261103-5
Integration batch integration-designcraft-20261103-5
2026-11-03 14:07:34 -05:00
aiongg 747abf4ac5 Merge main into graphic-frame-x-corners 2026-11-03 19:07:07 +00:00
aiongg 6df8d6d934 Apply review fixes
- crates/doc/src/vars.rs
2026-11-03 19:03:59 +00:00
aiongg 474ecd61d4 Merge main into fix/1522-anchored-copy-ids 2026-11-03 19:01:23 +00:00
aiongg 7892952fe6 Merge pull request #1222 2026-11-03 18:36:57 +00:00
aiongg 2996515c2a Merge pull request #1367 2026-11-03 18:36:57 +00:00
aiongg 6a78d0ca12 Merge pull request #1556 2026-11-03 18:36:56 +00:00
aiongg b7d83dbd07 Apply review fixes
- crates/format/src/lib.rs
2026-11-03 18:35:58 +00:00
aiongg f3e35af8bf Merge pull request #1366 from con3code/fix/idml-q-unit
IDML: Q ruler units are Q, as InDesign writes them
2026-11-03 12:59:48 -05:00
aiongg ee5ea72aea Merge pull request #1857 from Silvertree2010/fix/h2736-iso-date-parser-accepts-any-char
Reject ISO timestamps without ':' between hour and minute
2026-11-03 12:58:13 -05:00
aiongg 1e3c5fb0ef Apply review fixes
- crates/engine/src/cmd/file/open.rs
2026-11-03 17:56:11 +00:00
Dylan M. Taylor ad3b32fbf6 hyphenation: linear heuristic, cache misses outside the lock (#2185)
* hyphenation: linear heuristic, cache misses outside the lock

The syllable heuristic built each word suffix as a String to test it, which is
quadratic in the word's length; it now uses prefix sums of vowels and UTF-8
lengths. Mapping a word's break points to glyphs scanned the word for each
point; both are indexed once per word. A word not in the hyphenation cache is
worked out without holding the cache's global mutex.

* hyphenation: compare the word ending with ends_with
2026-11-03 11:07:41 -05:00
aiongg f67f052b7f Apply review fixes
- crates/format/src/lib.rs
2026-11-03 13:48:48 +00:00
Dylan M. Taylor f1bdec7fee compose cache: compact neighbour signatures, resolve each anchored host once (#2186)
A cached story copied every wrap neighbour's whole signature and item list into
its entry; stories on one spread share its wrapping items, so entries grew with
all of theirs together. A neighbour's signature now goes in as its hash and its
items are kept once each.

Anchored-frame placement asked for the host's composition once per frame, and
again at every level a host was reached from. Each host is now asked for once
per placement pass, and the cache and the uncached path remember the hosts they
resolved for the whole traversal.
2026-11-03 07:05:57 -05:00
Dylan M. Taylor 386b600572 compose: index lookups that were quadratic in a paragraph, line or table (#2180)
- Footnote references on a line are deduplicated with a set instead of
  searching the references collected so far.
- Nested styles stream the paragraph up to their delimiter with one character
  of lookahead instead of copying the rest of the paragraph for each style,
  and a delimiter's characters are indexed once per style.
- Shaping resolves which nested/GREP style is on top with one sweep over the
  overlay boundaries instead of scanning every overlay for each stretch.
- Column rules group crossing lines by paragraph through an index.
- Table fragments index each row's top once instead of searching the rows
  for every cell.
2026-11-03 06:48:12 -05:00