Commit Graph
4827 Commits
Author SHA1 Message Date
Shao Wenbin bc43965a45 CJK-MOJI7: validate spacing data and inspect nested typography rules 2026-10-08 20:14:16 +08:00
Brandon ThomasandClaude Opus 5.5 5382fd4fb7 Bump version to 0.3.0 (from 0.2.1) for release
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:13:12 -04:00
Shao Wenbin d9f24b6ad5 CJK-MOJI6: respect glyph clusters and regional punctuation metrics 2026-10-08 20:09:29 +08:00
Shao Wenbin a35f03c126 CJK-MOJI5: balance spacing priorities and fit discrete compression endpoints 2026-10-08 20:05:19 +08:00
Shao Wenbin 14b04cbaf8 CJK-MOJI4: implement public preset boundary policies and punctuation classes 2026-10-08 20:01:57 +08:00
Shao Wenbin d16a7423b8 CJK-MOJI3: report only unsupported Mojikumi rules in preflight 2026-10-08 19:55:16 +08:00
Shao Wenbin c66d502c79 CJK-MOJI2: apply Mojikumi spacing and kinsoku priorities during composition 2026-10-08 19:54:22 +08:00
Shao Wenbin e1755c3cbe CJK-MOJI1: resolve Mojikumi tables and preserve IDML references 2026-10-08 19:50:50 +08:00
Shao Wenbin 4f8d230d70 CJK-BASE: integrate font resolution and special-text preflight branches 2026-10-08 19:50:38 +08:00
Shao Wenbin af43dd88c9 FONT7: validate replacement coverage and reject placeholder font fallbacks 2026-10-08 19:19:33 +08:00
Shao Wenbin f36636b95f FONT6: unify localized font matching and replacement recommendations 2026-10-08 19:02:39 +08:00
Gert Pellin 36255f1697 Desktop: no eprintln! on the log and panic paths
eprintln! panics when standard error is a broken pipe (a GUI launch on
Windows), and a panic inside the panic hook aborts. The "no log file"
message goes through log::warn! (standard error only by then); the panic
hook's fallback writes to standard error with write_fmt and ignores the
error. Same fix as storytold/vectorcraft#465.
2026-10-08 13:01:13 +02:00
Shao Wenbin 39482d1b8c FONT5: diagnose missing glyphs in generated text with frame locations 2026-10-08 18:56:14 +08:00
Shao Wenbin 06ed81e547 FONT4: resolve composite fonts and fallback for generated note labels 2026-10-08 18:54:26 +08:00
Shao Wenbin 4f1aa8773d FONT3: prompt for missing fonts when opening documents 2026-10-08 18:34:32 +08:00
Shao Wenbin 6c18ccdc3b FONT2: resolve inherited fonts during document-wide replacement 2026-10-08 18:33:42 +08:00
Shao Wenbin 2dbbf98900 FONT1: preserve composite font references and unify usage checks
Resolve imported composite fonts by resource identity and preserve literal
display names. Export AppliedFont as an object reference instead of registering
a composite definition as an ordinary font family.

Share composite lookup and typed font usage between composition, font inventory,
and preflight. Include nested cells and notes, and report only component fonts
selected by the document's characters.

Add synthetic coverage for reference round trips, footnote character mapping
and metrics, nested font inventory, component replacement, and undo.
2026-10-08 18:21:10 +08:00
Shao Wenbin 7c10b3ad41 IDML1: preserve anchored text frames and footnote artwork
Resolve forward story references before importing embedded frames and groups.
Compose embedded stories, retain anonymous-story objects for screen and PDF
rendering, and invalidate layout caches when embedded frame geometry changes.

Measure inline objects by geometry, fill open contours, reject cyclic frame
references, and distinguish unplaced stories from located overset text.

Add synthetic round-trip, composition, preflight, pixel-rendering, and PDF
regressions. Update the roadmap with the supported import and rendering paths.
2026-10-08 18:08:44 +08:00
Gert Pellin 4f25955002 Desktop: write log records to standard error and a rotating log file
The desktop app installed no logger, so every log::warn!/log::error! in
the workspace was discarded: the crash guard's panic report, a failed
crash-recovery save, font folders that can't be read. A launch from a
desktop menu has no terminal either, so there was nothing to attach to a
bug report.

apps/designcraft/src/logging.rs (no new dependency):
- standard error plus <settings dir>/logs/designcraft.log (beside
  ui.json and prefs.json); each launch rotates the previous log to
  designcraft.1.log and .2.log, so the log of a run that crashed
  survives the next start; the file is capped at 16 MiB
- records logged before the settings directory is known are buffered
  (bounded) and written once the file is attached
- default levels: info for designcraft*, warn for everything else;
  RUST_LOG replaces them with env_logger-style directives
- never panics: an unusable directory or a failed write leaves standard
  error as the only sink

The logger is installed first in main (before the engine's panic hook)
and the file is opened after argument parsing (--version leaves no
file). The settings directory moves out of prefs_path into config_dir.
A --control or DESIGNCRAFT_CONTROL_PORT value that is not a port is now
logged instead of silently leaving the control channel off. Documented
in README.md (Quick start > Logs).
2026-10-08 11:36:29 +02:00
skylar taylor-barrick 637d05e776 #91: reject PDF pages before narrowing on Wasm 2026-10-08 00:31:43 -06:00
skylar taylor-barrick bae5a92dbb #72: preserve typed generic dialog values 2026-10-08 00:23:35 -06:00
skylar taylor-barrick e3d2312f00 #89: preserve browser import context and PDF options 2026-10-08 00:15:24 -06:00
skylar taylor-barrick e9cc4b49ec #61: honor MCP typing, story and page contracts 2026-10-08 00:08:17 -06:00
skylar taylor-barrick 8662526736 browser-correctness: fix print, startup flags, and document MIME 2026-10-08 00:08:16 -06:00
Haseom Shin ac4c7e6b8e Images: set SVG text in the shared fonts when the bundled ones lack it 2026-10-08 14:58:56 +09:00
Haseom Shin 36000e75f5 Compose: don't panic when a hyphenated paragraph starts with a no-break letter 2026-10-08 14:58:08 +09:00
aiongg 0f52f3ba89 Text: stories made in a right-to-left-bound document fill their columns from the right (#100) 2026-10-08 01:57:30 -04:00
aiongg 3c83f4f477 Tables: new tables take their paragraph's direction, and the Table panel sets a table's direction (#100) 2026-10-08 01:54:14 -04:00
aiongg fa22e61f83 PDF: PDF/A exports keep placed PNG, JPEG, GIF and WebP images by writing them without interpolation (#71) 2026-10-08 01:51:30 -04:00
aiongg 1ccf4fbfbe File open: an .indd file is an unreadable file like any other
Remove the INDD signature check and message, and .indd/.indt from the
Open filters and drop routing. The alert tests use a generic unreadable
file.
2026-10-08 00:51:47 -04:00
aiongg b757687a41 Merge branch 'main' into fix/21-indd-message
# Conflicts:
#	apps/designcraft/src/main.rs
#	crates/engine/src/cmd/file.rs
2026-10-08 00:47:23 -04:00
Brandon ThomasandClaude Opus 5.5 38ec9ce7e0 Merge #106 (includes #83, #84, #81) into fix/empty-paragraph-mark
An empty paragraph's mark format now also supplies #83's first-baseline
heights through line_metrics.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 23:30:23 -04:00
Brandon ThomasandClaude Opus 5.5 01eef9ed21 Merge origin/main into fix/empty-paragraph-mark
The empty paragraph's mark metrics feed line_metrics alongside main's CJK
line reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 23:28:22 -04:00
Brandon ThomasandClaude Opus 5.5 bed9438612 Merge #81 (includes #83, #84) into fix/compose-baseline-frame-fit
#83's Keep Lines Together tests change expectation: with the last baseline
allowed on the bottom inset, the first frame holds one more line, so the
10-line paragraph splits 7/3 instead of 6/4 (the keep rule is unchanged).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 23:24:30 -04:00
Brandon ThomasandClaude Opus 5.5 0237d5de93 Merge origin/main into fix/compose-baseline-frame-fit
Vertical Type is now the story's direction: the full-descent check reads
FrameSpec::vertical, and the vertical-extent test sets the story vertical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 23:20:01 -04:00
aiongg dc18c10448 Merge #84 into fix/29-kerning-across-runs 2026-10-07 23:14:02 -04:00
aiongg 0ae0dc7707 Merge the fork's fix/29-kerning-across-runs
# Conflicts:
#	crates/compose/src/shape.rs
#	crates/compose/src/tests.rs
2026-10-07 23:14:02 -04:00
aiongg 141a5306bf Merge #83 into feat/text-editing-and-frames 2026-10-07 23:12:38 -04:00
aiongg 1bdca77eea Merge the fork's feat/text-editing-and-frames 2026-10-07 23:12:38 -04:00
aiongg 673039f5dc Merge the fork's feat/layout-parity 2026-10-07 23:12:31 -04:00
Brandon ThomasandClaude Opus 5.5 4eb4e72d94 Merge #84 (text editing, includes #83) into fix/29-kerning-across-runs
Hidden place-holders, now shaped from pieces, also zero #83's typographic
ascent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 23:09:21 -04:00
aiongg 124bddaf8b Text: a change of kenten character keeps the kerning across it
Pieces of a paragraph that differ only in how they are painted are
shaped together; the kenten character only picks the emphasis mark drawn
over the text, so it is one of those paint attributes, like kenten
itself.
2026-10-07 23:08:45 -04:00
aiongg 3a10a749db Text: a missing font's substitute takes fallback fonts across a colour change
Text is shaped in pieces that differ only in paint, so each piece group,
and each piece shaped apart, takes its style's environment: a missing
font's substitute draws the characters it lacks from fallback fonts
whatever Draw Missing Glyphs from Fallback Fonts says.
2026-10-07 23:08:13 -04:00
aiongg c8d4ed8fa3 Merge main into fix/29-kerning-across-runs
# Conflicts:
#	crates/compose/src/shape.rs
#	crates/compose/src/tests.rs
2026-10-07 23:07:47 -04:00
aiongg e13dee0728 Text: Bold and Italic link the document's own fonts
Bold and Italic find the linked style through the document's font scope,
so a family from the document's fonts folder links its own styles; the
Character panel's B and I state reads the same scope.
2026-10-07 23:04:29 -04:00
Brandon ThomasandClaude Opus 5.5 44e8981364 Merge origin/main into fix/29-kerning-across-runs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 23:02:09 -04:00
aiongg b40e221d58 Text: a frame removed from a thread keeps the story's direction
Tests that a frame taken out of a vertical or right-to-left thread gets
a new story with the thread's vertical setting and column direction.
2026-10-07 23:02:03 -04:00
aiongg f2f14120f3 Merge #83 into feat/text-editing-and-frames 2026-10-07 23:01:07 -04:00
Brandon ThomasandClaude Opus 5.5 eca9eb25fe Merge #83 (layout parity) into feat/text-editing-and-frames
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 22:58:41 -04:00
Brandon ThomasandClaude Opus 5.5 fc6101d10f Merge origin/main into feat/text-editing-and-frames
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 22:58:36 -04:00