Commit Graph
1587 Commits
Author SHA1 Message Date
Brandon Thomas a4a4cd6ee9 Merge pull request #2141 from Silvertree2010/fix/h5392-data-merge-record-range-accepts
Reject signed record numbers in data merge record ranges
2026-11-02 23:24:08 -05:00
Brandon Thomas 3eb8091bac Merge pull request #2142 from TrevorBrown-dev/fix/variables-numeric-text
M3: a Custom text variable defined with a number shows its digits (#2093)
2026-11-02 23:23:59 -05:00
Brandon Thomas af9706176a Merge pull request #2165 from 4waymedia/fix/links-status-by-date
Links: an unchanged linked image is not read again on every poll (#2164)
2026-11-02 23:23:46 -05:00
Brandon ThomasandClaude Opus 5.5 4c2296491e Links: key the image check cache on the resolved file, not the link text
A relative link names another file once the document is saved elsewhere,
so a status remembered for the old file must not answer for the new one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 23:09:34 -05:00
JonRC 6abeb8a1ca type.char: warn when the font family or style isn't available (#2189)
A fontFamily the app doesn't have was applied with a null result, so a
script that asked for Courier Prime exported the PDF in the substitute
and exited 0. The font is still applied, since documents can carry
missing fonts and Find Font and preflight list them, but type.char now
returns {"warnings": ["Missing font: Courier Prime (using Source Sans 3)"]},
or "Missing font style: ..." for a style the family doesn't have, in
preflight's words. Other calls still return null.
2026-11-03 01:00:19 -03:00
Paul Gemignani 7d0f141b52 Links: an unchanged linked image is not read again on every poll (#2164)
links.list decided a placed graphic's status by reading the whole file and comparing it with the asset's bytes whenever the sizes matched, and the Links panel polls it twice a second, so a document of press-size images read every one of them in full on every poll. Image links now have the size-and-time fast path linked text files already had: a file of the remembered size and time isn't read, a new time is read once and remembered (unless the file changed in the last two seconds), a different size is modified without a read. The answer is keyed by the asset's bytes' identity, so a relink, update or undo can never be served a stale one; status() stays as the exact check for callers that want it.

Verified locally on a288a87b: fmt, clippy, engine link tests including the new unchanged_linked_images_are_not_read_again.
2026-11-02 16:40:46 -08:00
FredApps f704f481d5 Merge remote-tracking branch 'origin/main' into pr1654
# Conflicts:
#	ROADMAP.md
2026-11-02 18:25:00 +01:00
Trevor BrownandClaude Fable 5.1 5de0a0b806 M3: variables.define refuses a text that is neither a string, a number nor a boolean (#2093)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-02 04:13:40 -05:00
Trevor BrownandClaude Fable 5.1 485a94673f M3: a Custom text variable defined with a number shows its digits (#2093)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-02 02:40:43 -05:00
NetterSilverandClaude Haiku 5.5 633bdb66bf Reject signed record numbers in data merge record ranges
Found while testing crates/engine/src/cmd/datamerge/parse.rs:212 (parse_record_no, used by select_range)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 05:10:06 +01:00
Brandon Thomas 1b02e5427f Merge remote-tracking branch 'origin/main' into land-2109 2026-11-01 14:50:36 -05:00
Brandon Thomas 3bd5adfb19 Merge pull request #2108 from Tom-R-Main/openbytes-title
file.openBytes: title a .designcraft file without its extension
2026-11-01 14:49:27 -05:00
Brandon Thomas d2045c4a82 Merge pull request #2081 from Silvertree2010/fix/h4609-script-parse-errors-report-the-w
Report script parse error line numbers from the original text
2026-11-01 14:49:20 -05:00
Brandon Thomas e3aea68cca Merge pull request #2084 from Silvertree2010/fix/h4663-math-svg-does-not-clamp-the-size
Clamp math.svg size to the same range as math.insert
2026-11-01 14:49:13 -05:00
Brandon ThomasandClaude Opus 5.5 9e12d58887 Math SVG: drop XML-forbidden characters before layout so they take no width
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 14:37:27 -05:00
Tom MainandClaude Opus 5.5 700c4bb344 file.openBytes: test titles that aren't ASCII
Names with characters outside ASCII, one shorter than the extension,
lose a trailing .designcraft or keep their names like the others.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ApvpyStzzHbKyDBNxpzn2Y
2026-11-01 13:47:00 -05:00
Tom MainandClaude Opus 5.5 472869598f font.list: a face without an OS/2 table reports a null fsType
A font with no readable OS/2 table doesn't say what its licence allows,
and reporting fsType 0 made it look installable. FontFace::fs_type() now
returns None for it, and font.list reports fsType and the five flags as
null. restricted_licence() and bitmap_only() still treat it as
unrestricted, so export behaviour doesn't change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ApvpyStzzHbKyDBNxpzn2Y
2026-11-01 13:31:06 -05:00
makesomethingshit 5c364f9897 #1620: Port parent resizing to current layout modules 2026-11-01 15:18:55 +09:00
Tom MainandClaude Opus 5.5 f0c86e77e0 file.openBytes: title a .designcraft file without its extension
file.openBytes used the name it was given as the document's title as is. The
IDML path strips .idml/.indd/.indt, but a native document opened as
"Brochure.designcraft" kept the extension, and everything that adds it back
doubled it: Save in the browser downloaded Brochure.designcraft.designcraft,
Save As suggested that name, and the File Name variable showed it. The app's
own drop and open paths strip the extension before calling, so only hosts and
scripts that pass a file name hit it.

The title now drops one trailing .designcraft (any case). Other names are
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ApvpyStzzHbKyDBNxpzn2Y
2026-10-31 11:33:13 -04:00
Tom MainandClaude Opus 5.5 1d9e577e36 font.list: report each face's fsType embedding bits
font.list now gives, for the face that sets the text, its raw OS/2 fsType
and what the bits mean: restrictedLicence, bitmapOnly, noSubsetting,
editable and previewPrint (null when the face is missing). A host that
makes print PDFs can then refuse a face whose licence doesn't allow the
export, including system fonts and the bundled fonts, without reading the
font files itself. PDF export subsets every font, so a caller needs
noSubsetting as well as the restricted and bitmap-only bits.

FontFace gains fs_type(); restricted_licence() and bitmap_only() read it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ApvpyStzzHbKyDBNxpzn2Y
2026-10-31 11:23:21 -04:00
NetterSilverandClaude Haiku 5.5 9caae9c542 Drop XML-forbidden control characters from math SVG text
Found while testing crates/engine/src/math.rs:909 (to_svg, the `esc` closure used for each <text> glyph)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 14:07:33 +01:00
NetterSilverandClaude Haiku 5.5 c128548111 Clamp math.svg size to the same range as math.insert
Found while testing crates/engine/src/cmd/mathexpr.rs:~50 (the math.svg query) vs insert at ~64

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 10:52:55 +01:00
NetterSilverandClaude Haiku 5.5 4b9a800899 Report script parse error line numbers from the original text
Found while testing crates/engine/src/script.rs:30-47 (parse: `t.lines().enumerate()` runs over the trimmed text)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 08:41:28 +01:00
Dylan M. Taylor ea214dd44d Merge pull request #2070 from aiongg/docs-tidy
docs: tidy agent, contributor and asset docs
2026-10-31 01:06:18 -04:00
Brandon Thomas 99f90cbe2b Merge storytold/main into PR #2052 2026-10-31 01:02:00 -04:00
Brandon Thomas 74b9944ba3 Merge storytold/main into PR #1239 2026-10-31 01:01:49 -04:00
Brandon Thomas 400e96c200 Merge storytold/main into PR #2052
# Conflicts:
#	crates/ui-egui/src/dialogs/tests.rs
2026-10-31 01:00:57 -04:00
Brandon Thomas faa2bf5089 Merge storytold/main into PR #1239
# Conflicts:
#	crates/doc/src/xref.rs
2026-10-31 01:00:56 -04:00
Brandon Thomas 8ff43f55fc Merge storytold/main into PR #2057 2026-10-31 01:00:55 -04:00
Brandon Thomas 100b8b1cf8 Merge pull request #2061 from Silvertree2010/fix/h4137-file-importxml-drops-the-text-of
Keep text of nested inline elements in file.importXml
2026-10-31 01:00:22 -04:00
aiongg 8fc2edd51e docs: tidy agent, contributor and asset docs 2026-10-31 04:15:25 +00:00
aiongg baf6e1b85e Integration: #1676 the Insert Table limits test uses the limits, not sizes above them
Main refuses a size outside the limits instead of clamping it, so the test inserts the largest table and checks one step over each limit is refused.
2026-10-31 01:02:16 +00:00
aiongg 8ef2702660 Integration: cargo fmt 2026-10-31 00:37:39 +00:00
aiongg 0e3fc9cfc6 Integration: #1497 one copy of the Change Format test, with the null-attribute check 2026-10-31 00:35:59 +00:00
aiongg e040354eb4 Integration: #1679 table.convertFromText refuses more rows than a table holds 2026-10-31 00:34:45 +00:00
aiongg 9555dbfc48 Integration: #1416 edit.cut removes the copied objects, not only their selected points 2026-10-31 00:34:31 +00:00
aiongg 28de0675d3 Integration: #1416 erase and smooth clear the item's stored point selection 2026-10-31 00:34:23 +00:00
aiongg d7c7e88c46 Integration: #1416 path.deletePoints takes named points without a selected object 2026-10-31 00:34:08 +00:00
aiongg 22a8292db4 Integration: #1451 object.effects patches keep the default mode of a new inner shadow or glow 2026-10-31 00:33:45 +00:00
aiongg f3e0f614fd Integration: #1416 Clear acts on live points only; reset anchor_release on press 2026-10-31 00:13:37 +00:00
aiongg 4b29760ffd Merge track 6
Conflicts: dialogs.rs dialog widths (both kept); i18n/*.rs adjacent rows (both kept).
2026-10-30 23:57:22 +00:00
aiongg 0979d0b722 Merge track 4 (pages, tables)
Conflicts: dialogs/tests.rs and i18n/*.rs: adjacent additions, both kept.
2026-10-30 23:57:01 +00:00
aiongg aae929eb97 Merge track 3 2026-10-30 23:56:48 +00:00
aiongg 9806f66fed Merge track 2 (Direct Selection stack)
Conflicts: panels/properties.rs imports (union); i18n/*.rs adjacent rows (both kept).
2026-10-30 23:56:47 +00:00
aiongg 00fd6c4e85 Integration: cargo fmt 2026-10-30 23:51:21 +00:00
NetterSilverandClaude Haiku 5.5 5321e27220 Keep text of nested inline elements in file.importXml
Found while testing crates/engine/src/cmd/xml.rs:~215-245 (parse: the Start/Text/End depth handling; text at depth >= 4 matches no arm)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 00:32:37 +01:00
aiongg 46aaa5aed7 Merge PR #1515: Package dialog PDF options refactor
crates/ui-egui/src/dialogs.rs: kept the Enter-stays-local fix
crates/ui-egui/src/package_dialog.rs: kept the summary wording and the fix; took the PR's pdf option value
crates/ui-egui/src/i18n/*.rs: kept the reworded keys and the PR's PDF Preset rows
Also (the PR's own CI failure): package.rs calls check_pdf_options and pdf_report on wasm, so those two re-exports are no longer wasm-gated (only pdf_export is).
2026-10-30 23:29:02 +00:00
aiongg 1fb973c3ad Merge PR #1514: Package dialog
crates/ui-egui/src/dialogs.rs: kept main's Insert Pages dialog and the PR's MULTILINE_FOCUS key
crates/ui-egui/src/i18n/*.rs: kept both sides' rows
2026-10-30 23:27:02 +00:00
aiongg 35697cb807 Merge PR #1255: TOC separator and style notation
crates/idml/src/tests.rs: kept the PR's TOC tests, dropped the duplicate copy from #1249
crates/engine/src/tests/idml.rs: main's createBookmarks plus the PR's right-indent separator
crates/ui-egui/src/dialogs.rs: main's labelled_by fields plus the PR's special-character menu
crates/ui-egui/src/i18n/*.rs: kept both added rows
2026-10-30 23:26:42 +00:00
aiongg 450b3ae963 Merge PR #1679: Convert Text to Table and Table to Text
crates/engine/src/cmd/table.rs: both export lists.
crates/engine/src/cmd/table/structure.rs: #1676's Insert Table validation, #1679's MAX_CONVERTED_CELLS.
crates/ui-egui/src/dialogs.rs, dialogs/tests.rs: kept #1676's Insert Table dialog, Insert Pages and #1679's Convert dialogs and tests.
crates/ui-egui/src/menus/tables.rs, tests.rs, ui_commands.rs: flat Convert Cell items; Convert dialogs in the menu.
crates/ui-egui/src/i18n/*.rs: kept both sides' keys.
2026-10-30 23:25:57 +00:00