Commit Graph
1043 Commits
Author SHA1 Message Date
Youssef Azriouil 7a65f847c2 Anchored text frames: own stories and ids through copy, paste, duplicate, release and delete
Copying, pasting, deleting or releasing an anchored text frame left a
document that Document::check rejects, so once saved it could not be
opened again.

- Copy and paste: copied text takes the stories of its anchored text
  frames along. Pasting text (also into another document) gives the
  anchored copies fresh ids and stories of their own
  (Document::adopt_anchored), and the text clipboard keeps a copy of the
  source document holding only those stories and the graphics the text
  and they place, which come along under the destination's asset ids
  (Document::adopt_anchored_from). A story shown by frames in several
  copied stories is copied once per paste and threads all their copies, as
  the original does, so shared stories don't multiply. Copied frames
  (clip_doc) keep the stories of their anchored frames too.
- Document::fix_anchored_text_frames, run after edits and for new
  documents: copies with taken ids get fresh ones and stories of their own,
  deleted anchored frames leave their threads and their stories go with
  them, and a frame whose story is missing gets an empty one.
- Release threads the released frame, under its new id, to its story.
- The generated endnote story is set before the repair, and again when the
  repair changed anything: text with an anchored frame pasted into it is
  replaced, and the repair copies and removes stories with their endnotes.

Duplicating and pasting frames already give anchored items fresh ids and
story copies on main (#1522); this covers text copied with them, deletion
and release.
2026-11-04 21:45:49 +01:00
moppeeer 2f2c319f47 Merge remote-tracking branch 'origin/main' into object-style-paragraph-styles
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/i18n/ar.rs
#	crates/ui-egui/src/i18n/cs.rs
#	crates/ui-egui/src/i18n/de.rs
#	crates/ui-egui/src/i18n/it.rs
#	crates/ui-egui/src/i18n/ja.rs
#	crates/ui-egui/src/i18n/ka.rs
#	crates/ui-egui/src/i18n/pl.rs
#	crates/ui-egui/src/i18n/pt_br.rs
#	crates/ui-egui/src/i18n/ru.rs
#	crates/ui-egui/src/i18n/table.rs
#	crates/ui-egui/src/i18n/uk.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/menus/ui_commands.rs
2026-11-04 19:04:51 +01:00
texjer 0ea2a72a09 Place: switching, opening or closing a document leaves the place cursor's tool
Review fix for #2309: set_active, add_document and close_document emptied the place cursor but
kept the placeGun tool, so the next canvas click failed with 'nothing loaded in the place
cursor'. One helper, Session::unload_place_cursor, empties the cursor and its queue and goes back
to the Selection tool when the place cursor's tool is active; validate_place_cursor uses it too.
Test: changing_documents_unloads_the_place_cursor_and_its_tool.
2026-11-04 11:05:45 -05:00
texjer 16255142ed Merge branch 'feat/place-cursor-queue' into feat/place-contact-sheet 2026-11-04 10:44:31 -05:00
texjer cb97fcb0bd Place: a grid drag too small for its cells previews and places one frame
The place cursor's grid preview fell back to the raw drag rectangle when the
cells had no positive size, while the release still sent `place.grid`, which
rejected the area. Both now use the same cell calculation (`grid_cells`), and
a grid with no room for its cells shows and places the single proportional
frame of an ordinary drag.
2026-11-04 10:31:22 -05:00
MarekSpodBiedry 7215a559e5 Hyphenation: enable the Danish hypher patterns (#2282) (#2293) 2026-11-04 07:01:31 -05:00
texjer a10e288a58 Place: dropped images load the place cursor, in the order they came
Split out of #2073. Port of #1307's drops and #1666.

- Several images dropped together load the place cursor in the order they
  came, each run of them where it comes among the other files, after the
  images it already holds; click to place them one by one.
- One image dropped off a frame that takes it loads the place cursor instead
  of being placed at once; on such a frame it still fills it.
- A drop is handled in its order, each file at its own pointer, and a dialog
  (a multi-page PDF's Import Options, an alert) cancels the rest.
- On the web, files dropped together are read as one batch (none if one
  can't be read), and a single dropped image loads the place cursor.
2026-11-03 23:05:47 -05:00
texjer e2d8502636 Place: File › Place Contact Sheet… puts the loaded images on new pages
Split out of #2073. Port of #1392's contact sheet.

- `place.contactSheet` places every image in the place cursor on new pages
  after the last one, in a grid of equal frames (columns, rows, gutter,
  page margin), as one undo step; a bad grid or margin changes nothing.
- The dialog reads bare numbers in the document's unit, from the menu and
  from `ui.dialog.open` alike; a mistake keeps it open with what was typed
  and why. Its fields have accessible names; strings in every language.
2026-11-03 21:54:22 -05:00
texjer d890289a92 Place: several images load the place cursor, with a thumbnail, count and grid
Split out of #2073. Port of #1307, #1392 (grid) and #1432 (thumbnail and count).

- File › Place takes several files; images load the place cursor in the
  order chosen (`place.load` `files`, `append`), after the ones it holds.
  A multi-page PDF or an alert stops the batch, and a file that can't be
  placed returns its error to `app.placeDialog`.
- Each click places the next image; arrow keys while dragging lay out a
  grid (`place.grid`) and are handled even at a limit; Escape unloads the
  rest (`place.cancel`). Undo of a loaded image's asset cancels the queue.
- The cursor shows how many images are loaded.
- On the web, Place picks several files and the inbox loads consecutive
  images for the same document as one batch.
2026-11-03 21:43:44 -05:00
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
dotCooCoo 9a7e8dc5b1 Merge main into feat/table-go-to-row
Cache::placement goes through Cache::resolve, since main added the
resolved-story map to Cache::get_with.
2026-11-03 14:58:51 -08:00
dotCooCoo db8e1b6364 Docs: leave gap 16 of docs/gaps.md as it is on main
The Go to Row change only removes Go to Row from gap 12.
2026-11-03 13:48:13 -08: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 1da269b7f5 Merge main into feat/mcp-conventions 2026-11-03 19:40:25 +00:00
aiongg fa8684e30b Merge main into feat/typeshortcuts 2026-11-03 19:15:02 +00:00
aiongg 7892952fe6 Merge pull request #1222 2026-11-03 18:36:57 +00:00
Brandon Thomas b90a1bbb23 Merge remote-tracking branch 'origin/main' into HEAD 2026-11-02 23:25:39 -05:00
Brandon Thomas 58149665d9 Merge remote-tracking branch 'origin/main' into HEAD 2026-11-02 23:24:47 -05:00
Brandon Thomas ab96d42696 Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	docs/ui-parity.md
2026-11-02 23:24:47 -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
dotCooCoo a92a3363b6 Merge main into feat/table-go-to-row 2026-11-02 14:41:10 -08:00
FredApps f704f481d5 Merge remote-tracking branch 'origin/main' into pr1654
# Conflicts:
#	ROADMAP.md
2026-11-02 18:25:00 +01:00
dotCooCoo e021658519 Merge main into feat/table-go-to-row 2026-11-02 07:24:50 -08:00
Trevor BrownandClaude Fable 5.1 02b20fd5e7 M6: EPUB Export Options names a cover image file (#1934)
A Cover Image field with a Choose… button (PNG or JPEG) in the EPUB Export Options dialog; left empty, the first page stays the cover. The three labels are translated; a dialogs test exports with a chosen file and checks the EPUB's cover image and manifest.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-02 05:56:34 -05: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 93999750aa M4: the Pen previews the segment a dragged smooth point shapes and curves the rubber band after one (#1438)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-02 03:19:46 -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
Brandon Thomas a288a87bf6 Merge pull request #1018 from kler/swedish-ui
i18n: Swedish (sv) interface translation
2026-11-01 14:54:59 -05:00
Brandon Thomas 1b02e5427f Merge remote-tracking branch 'origin/main' into land-2109 2026-11-01 14:50:36 -05:00
Brandon Thomas 185412cdf9 Merge remote-tracking branch 'origin/main' into land-1018b
# Conflicts:
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/i18n/tests.rs
#	crates/ui-egui/src/menus/ui_commands.rs
#	docs/localization-parity.md
2026-11-01 14:50:19 -05:00
Brandon Thomas 78a108707c Merge pull request #1223 from macrobi/codex/hungarian-localization
Add initial Hungarian (hu) interface localization
2026-11-01 14:49:43 -05:00
Brandon Thomas 8064830e9b Merge remote-tracking branch 'origin/main' into fix-1147
# Conflicts:
#	crates/compose/Cargo.toml
#	crates/compose/src/hyphen.rs
#	docs/gaps.md
#	docs/localization-parity.md
#	docs/target-app-parity.md
#	docs/typography-parity.md
2026-11-01 14:39:07 -05:00
Patrik LermonandClaude Opus 5.5 100186def8 Swedish interface translation (sv)
Adds Swedish (Svenska) as an interface language: 1850 strings, written from the English source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 14:43:13 +01:00
makesomethingshit 90bbec39d1 #1620: Restore parent margins and pre-canvas page defaults 2026-11-01 19:44:44 +09:00
macadminHU 3e8fbbfee8 HU1: document native review and UI font coverage
Updated Hungarian interface catalog with new entries and context-specific captions, reflecting recent reviews and regressions.
2026-11-01 11:29:21 +01:00
makesomethingshit 5c364f9897 #1620: Port parent resizing to current layout modules 2026-11-01 15:18:55 +09:00
macadminHU 3f85c6fb78 Merge branch 'main' into codex/hungarian-localization 2026-10-31 19:41:36 +01: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
aiongg 609c19bc54 docs: tidy wording 2026-10-31 04:25:32 +00:00
aiongg 8fc2edd51e docs: tidy agent, contributor and asset docs 2026-10-31 04:15:25 +00:00
dotCooCoo a50bcc8f94 Merge main into feat/table-go-to-row 2026-10-30 21:01:13 -07: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 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 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
aiongg b86264b887 Merge PR #1676: Table menu
crates/engine/src/cmd/table.rs: kept both exports.
crates/engine/src/cmd/table/structure.rs: main's strict size validation with #1676's limit constants and table style.
crates/ui-egui/src/dialogs.rs: kept Insert Pages dialog and #1676's Insert Table dialog; dialog title and width from #1676.
crates/ui-egui/src/dialogs/tests.rs: kept both sides' tests.
2026-10-30 23:24:59 +00:00
aiongg 58819833a7 Merge PR #1287: section marker activation
crates/ui-egui/src/panels/pages.rs: kept #1287's marker activation and tests; spread label code from #892 (main).
2026-10-30 23:24:25 +00:00
aiongg 89ef0e3d81 Merge PR #1606: Paragraph Shading and Border pages
crates/ui-egui/src/panels/properties.rs, properties/object.rs: main's split module kept; preview_row and paint_corner_shape exported for the shading corner menus
crates/ui-egui/src/panels/properties/tests.rs: both sides' tests kept
crates/ui-egui/src/dialogs/tests.rs: main's tests kept; the border test uses the new corner labels; the shading layout test added
crates/ui-egui/src/i18n/*.rs: union of keys without duplicates
crates/ui-egui/src/dialogs.rs: the corner shape face uses corner_shape_button (no hard-coded colour in the dialog)
2026-10-30 23:17:40 +00:00
aiongg ad21d75988 Merge PR #1566: Hyphenation fr/it 2026-10-30 23:16:19 +00:00