Commit Graph
865 Commits
Author SHA1 Message Date
moppeeer c427640726 Merge remote-tracking branch 'origin/main' into control-panel-lists-shading
# Conflicts:
#	crates/ui-egui/src/i18n/fr.rs
2026-10-22 16:53:56 +02:00
moppeeer 6bd8fe7c4a Merge remote-tracking branch 'origin/main' into control-panel-text-modes
# Conflicts:
#	crates/ui-egui/src/i18n/fr.rs
2026-10-22 16:52:21 +02:00
moppeeer a320b8888a Merge remote-tracking branch 'origin/main' into properties-more-options
# Conflicts:
#	crates/ui-egui/src/i18n/fr.rs
2026-10-22 16:51:06 +02:00
moppeeer 42d55734de Merge remote-tracking branch 'origin/main' into hyphenate-across-column
# Conflicts:
#	ROADMAP.md
2026-10-22 16:35:55 +02:00
moppeeer 127cbbc19c Merge remote-tracking branch 'origin/main' into hyphenation-french-italian
# Conflicts:
#	ROADMAP.md
2026-10-22 16:35:52 +02:00
aiongg 8f98f3dc8b Keyboard Shortcuts: import an InDesign shortcut set (#1296)
* #1180: import an InDesign keyboard shortcut set

Edit > Keyboard Shortcuts gets Import InDesign Set..., which reads the
.txt that InDesign's Show Set writes (window.importShortcuts {path|text}).
Matched commands take the set's Default shortcut, or lose theirs when
every occurrence says [none defined]; other commands give up keys the
set takes. The report lists changes, cleared conflicts, and the items
that could not be matched or read. Tool keys stay fixed.

* #1180: read the set file through the checked reader

* #1180: when two items want the same keys, the later one takes them
2026-10-22 09:28:11 -04:00
moppeeer ede36e55b7 Merge branch 'control-panel-lists-shading' into paragraph-panel-indesign 2026-10-22 15:09:35 +02:00
moppeeer 14b4acd68e Merge branch 'list-buttons-hanging-indent' into control-panel-lists-shading 2026-10-22 15:09:27 +02:00
moppeeerandClaude Opus 5.5 ebed0f7a05 Docs: list buttons keep a style hanging indent and stop at a selected return
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:09:24 +02:00
moppeeerandClaude Opus 5.5 7c813dd169 Docs: the French row of localization-parity says French hyphenates
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:56:44 +02:00
moppeeerandClaude Opus 5.5 bc50eb5564 Hyphenate Across Column: no column or frame ends in a hyphen when it's off
With Hyphenate Across Column off, a paragraph whose line ending at an
automatic hyphenation point would end a column or frame is re-laid
without that point, so the word moves on whole, as InDesign does. The
points left out are kept per paragraph across re-lays and cleared when an
earlier paragraph is re-laid. On by default, as in InDesign.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:09:12 +02:00
moppeeerandClaude Opus 5.5 caced43205 Paragraph panel: InDesign's layout and panel menu
The panel shows the nine alignment buttons in InDesign's groups; indent,
spacing and drop cap fields by their icons in two columns, with Space
Between Paragraphs Using Same Style (Ignore or a space); Shading and Border
with the Paragraph Borders and Shading button and colour; and Hyphenate
with Do Not Align / Align to Baseline Grid.

The panel menu follows InDesign's order: composers, Only Align First Line
to Grid, Balance Ragged Lines, Optical Margin Alignment, the paragraph
dialogs (Keep Options…, Drop Caps and Nested Styles… and GREP Styles… now
open for the selected paragraphs), Bullets and Numbering…, Restart/Continue
Numbering, Define Lists… and the paragraph direction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:03:59 +02:00
moppeeerandClaude Opus 5.5 880c90a85f Hyphenation: French and Italian, and words with an elision
French and Italian text is hyphenated with hyph-utf8's patterns, through
hypher's "french" and "italian" features (hyph-fr.tex 2.13, MIT; hyph-it.tex
4.9, LPPL or MIT, taken under MIT; NOTICE has both). The Character panel's
French, French: Canadian, French: Swiss and Italian, and fr / it locale codes,
select them.

A word with an elision hyphenates after its apostrophe (l'im-pri-me-rie,
dell'im-pa-gi-na-zio-ne) in the patterned languages; before, any word with an
apostrophe was left whole.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 13:41:10 +02:00
moppeeer d07d29631e Merge remote-tracking branch 'origin/main' into control-panel-lists-shading
# Conflicts:
#	ROADMAP.md
2026-10-22 11:25:42 +02:00
moppeeer f21c6994e5 Merge remote-tracking branch 'origin/main' into list-buttons-hanging-indent
# Conflicts:
#	ROADMAP.md
2026-10-22 11:20:13 +02:00
moppeeer 77ad8db632 Merge remote-tracking branch 'origin/main' into text-frame-options-layout
# Conflicts:
#	ROADMAP.md
2026-10-22 11:18:29 +02:00
moppeeer 96a74aa8d0 Merge remote-tracking branch 'origin/main' into codex/pages-section-marker-dialog
# Conflicts:
#	ROADMAP.md
2026-10-22 11:07:21 +02:00
moppeeer 2aefae139d Merge remote-tracking branch 'origin/main' into codex/toc-more-options
# Conflicts:
#	ROADMAP.md
2026-10-22 11:06:44 +02:00
moppeeer 3f1a26332e Merge remote-tracking branch 'origin/main' into codex/toc-dialog-title-width
# Conflicts:
#	ROADMAP.md
2026-10-22 10:56:35 +02:00
moppeeer 67e40d758d Merge remote-tracking branch 'origin/main' into swatch-row-icons
# Conflicts:
#	ROADMAP.md
#	docs/target-app-parity.md
2026-10-22 10:48:07 +02:00
moppeeer 5f623e0cba Merge remote-tracking branch 'origin/main' into properties-anchor-points
# Conflicts:
#	ROADMAP.md
#	crates/tools/src/select.rs
#	crates/ui-egui/src/panels/properties.rs
2026-10-22 10:46:35 +02:00
moppeeer 0c4523cfcc Merge remote-tracking branch 'origin/main' into control-panel-text-modes
# Conflicts:
#	ROADMAP.md
2026-10-22 10:05:06 +02:00
moppeeer fa89cdfcdc Merge remote-tracking branch 'origin/main' into properties-more-options
# Conflicts:
#	ROADMAP.md
2026-10-22 10:01:42 +02:00
moppeeer 9036034707 Merge remote-tracking branch 'origin/main' into codex/toc-right-indent-separator
# Conflicts:
#	ROADMAP.md
2026-10-22 09:25:37 +02:00
moppeeer 02192ab904 Merge remote-tracking branch 'origin/main' into control-panel-lists-shading
# Conflicts:
#	ROADMAP.md
2026-10-22 09:09:12 +02:00
moppeeer fc04020f0b Merge remote-tracking branch 'origin/main' into list-buttons-hanging-indent
# Conflicts:
#	ROADMAP.md
2026-10-22 09:07:49 +02:00
moppeeer 9b8ba34341 Merge remote-tracking branch 'origin/main' into text-frame-options-layout
# Conflicts:
#	ROADMAP.md
2026-10-22 09:05:46 +02:00
moppeeer 1a578956aa Merge remote-tracking branch 'origin/main' into control-panel-text-modes
# Conflicts:
#	ROADMAP.md
2026-10-22 09:04:26 +02:00
moppeeer 1fd37c82c7 Merge remote-tracking branch 'origin/main' into properties-more-options
# Conflicts:
#	ROADMAP.md
2026-10-22 09:03:44 +02:00
aionggandHamza 333f2a04e3 Selection: drag a column guide to move its gutter (#1096) (#1176)
* IDML: keep column guides that were dragged off centre (#1096)

InDesign records dragged column guides in `MarginPreference ColumnsPositions`,
as pairs of offsets from the margin box's left edge. The importer discarded them
and divided the columns evenly, so a page whose gutter the designer had moved
came back with it in the middle: on a 450 pt margin box, `0 150 170 450` was
read as columns at 215 and 235.

`Columns::positions` already existed, documented as "Custom column positions
(after dragging column guides)", but nothing set it and nothing read it. Now
`Page::column_rects` returns the custom rects when they are set — that one
method is what the canvas guides, snapping, threading and the first frame of a
placed story all go through, so they follow the dragged gutter — the importer
fills it, and the exporter writes the page's real positions instead of
recomputing an even split, so the round trip keeps them.

`layout.marginsAndColumns` clears them when a count or gutter is set, which is
what InDesign's Margins and Columns does. Without that the stale positions would
outrank the new value and the dialog would look broken.

Verified against InDesign-authored IDML rather than assumed, which settled two
things. The attribute is written whether or not anything was dragged — a real
page's values are exactly its even split — so an even set is dropped rather than
marking every imported page custom and freezing its columns; the tolerance for
that comparison only absorbs float noise, about 1e-14 pt on that page. And
`<Guide>` is a `<Page>` child, not a `<Spread>` one, which is where this
importer already looks: the reporter's missing ruler guide was 099fbd2, landed
the day the ticket was filed, not a second bug.

That commit left `lib.rs` still listing guides as ignored on import; corrected.

* IDML: test a ruler guide in a column gutter without facing pages (#1096)

* View: Lock Guides and Lock Column Guides are commands (#1096)

view.lockGuides {on?} (Cmd+Alt+;) sets the Lock Guides UI state the Properties panel and ruler-guide drags use. view.lockColumnGuides {on?} is a document setting, on by default, saved with the document, not an undo step, and read from and written to IDML ColumnGuideLocked. Both are in View > Grids & Guides with checkmarks.

* IDML: custom column positions are validated and round-trip (#1096)

Columns::positions are used only when they are 2 x count finite edges,
ascending from 0 to the margin box width (within 0.01 pt); anything else
is the even split, in Page::column_rects, on IDML import (bounded parse,
checked against the page's margin box) and on IDML export.
Columns::with_gutter_moved moves one gutter's pair of guides between its
neighbours for the coming column-guide command.

ROADMAP: drop four progress-log lines the #1121 merge duplicated and move
its line to the top.

* Layout: Margins and Columns keeps dragged columns unless the count or gutter changes (#1096)

* Layout: autoflow, inserted pages and new parents follow dragged columns (#1096)

* Integration: close #1121's round-trip test beside the ruler-guide test

* View: Lock Column Guides is translated wherever Lock Guides is (#1096)

* View: Lock Column Guides is translated wherever Lock Guides is (#1096)

* Layout: a new margin or page width resets dragged columns (#1096)

* IDML: a page without its own margins checks the default's column positions against its width (#1096)

* Layout: #1121's margin case follows the new-width rule (#1096)

* View: Lock Column Guides is undoable (#1096)

* Layout: dragged columns scale with a new margin or page width (#1096)

* Layout: dragged columns mirror when a page changes side (#1096)

* Layout: the page-width test drags a page whose columns are its own (#1096)

* Selection: drag a column guide to move its gutter (#1096)

* Layout: pages that follow a one-page parent take its dragged columns mirrored (#1096)

* Selection: column-guide drag review fixes (#1096)

* ROADMAP: the progress line lands in one commit after the guide PRs

---------

Co-authored-by: Hamza <mail.hamzanaveed@gmail.com>
2026-10-22 02:52:17 -04:00
moppeeer 471049a3ad Merge remote-tracking branch 'origin/main' into codex/pages-section-marker-dialog
# Conflicts:
#	ROADMAP.md
2026-10-22 08:42:13 +02:00
moppeeer 1e1dfc7432 Merge remote-tracking branch 'origin/main' into codex/toc-more-options
# Conflicts:
#	ROADMAP.md
2026-10-22 08:41:34 +02:00
moppeeer eebbeca3e0 Merge remote-tracking branch 'origin/main' into codex/toc-dialog-title-width
# Conflicts:
#	ROADMAP.md
2026-10-22 08:40:54 +02:00
aionggandSBaksa c3382b422c Guides: a dragged ruler guide snaps to guides, margins, columns and objects (#1542)
* Guides: a dragged guide shows where it is (#1282)

While a guide is dragged out of a ruler or moved, a label beside the
pointer reads X: or Y: and the guide's place, in the ruler units and
measured the way the rulers measure (from the zero point, and from the
page origin when rulers restart per page).

* Guides: keep the drag readout inside the canvas

Near the canvas's right or bottom edge the readout flips to the other
side of the pointer, and it is kept inside the canvas in every case
(readout_at).

* Guides: the drag readout measures the spread under the pointer

The readout measured from the spread in the middle of the view (where the
rulers measure), but a guide is dropped on the spread under the pointer,
so with spreads above one another the number shown could differ from the
guide's place. It now measures that spread (ruler_pieces_of).

* Guides: no readout for an existing guide over another spread

An existing guide moves only on its own spread (guide_drag), so dropped
over another it stays where it was: the readout no longer shows a place
there it won't go.

* #1282: guide selection commands (guide.select, guide.selectAll, guide.deselect, guide.moveBy)

* #1282: select ruler guides on the canvas, X/Y in the Control bar and Properties

* #1282: guides take clicks over objects, a new guide is selected, group drag preview

* Guides: a dragged ruler guide snaps to guides, margins, columns and objects (#1221)

---------

Co-authored-by: SBaksa <sabaksa11@gmail.com>
2026-10-22 02:26:52 -04:00
aiongg d7b9f716f1 View: Lock Guides and Lock Column Guides are commands (#1096) (#1174)
* View: Lock Guides and Lock Column Guides are commands (#1096)

view.lockGuides {on?} (Cmd+Alt+;) sets the Lock Guides UI state the Properties panel and ruler-guide drags use. view.lockColumnGuides {on?} is a document setting, on by default, saved with the document, not an undo step, and read from and written to IDML ColumnGuideLocked. Both are in View > Grids & Guides with checkmarks.

* View: Lock Column Guides is translated wherever Lock Guides is (#1096)

* View: Lock Column Guides is undoable (#1096)

* ROADMAP: the progress line lands in one commit after the guide PRs
2026-10-22 02:12:42 -04:00
aionggandSBaksa 3be2736d0a Guides: select ruler guides and set their position (#1282) (#1445)
* Guides: a dragged guide shows where it is (#1282)

While a guide is dragged out of a ruler or moved, a label beside the
pointer reads X: or Y: and the guide's place, in the ruler units and
measured the way the rulers measure (from the zero point, and from the
page origin when rulers restart per page).

* Guides: keep the drag readout inside the canvas

Near the canvas's right or bottom edge the readout flips to the other
side of the pointer, and it is kept inside the canvas in every case
(readout_at).

* Guides: the drag readout measures the spread under the pointer

The readout measured from the spread in the middle of the view (where the
rulers measure), but a guide is dropped on the spread under the pointer,
so with spreads above one another the number shown could differ from the
guide's place. It now measures that spread (ruler_pieces_of).

* Guides: no readout for an existing guide over another spread

An existing guide moves only on its own spread (guide_drag), so dropped
over another it stays where it was: the readout no longer shows a place
there it won't go.

* #1282: guide selection commands (guide.select, guide.selectAll, guide.deselect, guide.moveBy)

* #1282: select ruler guides on the canvas, X/Y in the Control bar and Properties

* #1282: guides take clicks over objects, a new guide is selected, group drag preview

* ROADMAP: the progress line lands in one commit after the guide PRs

---------

Co-authored-by: SBaksa <sabaksa11@gmail.com>
2026-10-22 01:47:49 -04:00
moppeeer a4641fe022 Merge remote-tracking branch 'origin/main' into codex/toc-right-indent-separator
# Conflicts:
#	ROADMAP.md
2026-10-22 02:46:33 +02:00
paaspaas00andClaude Opus 5.5 2c1973a6e4 Control panel (¶): Bulleted and Numbered List, Shading and Border, as InDesign's
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 16:16:25 +02:00
paaspaas00 0ff33bead8 Merge list-buttons-hanging-indent (#1483) into control-panel-lists-shading 2026-10-21 16:09:04 +02:00
paaspaas00andClaude Opus 5.5 189cccd2fc Bulleted and Numbered List buttons give InDesign's default hanging indent
The Properties buttons and Type > Bulleted & Numbered Lists > Apply Bullets /
Apply Numbers (list.bullets, list.numbers) apply the list with Left Indent
0.25 in / First Line Indent -0.25 in when the paragraph has no indents, so the
text lines up after the bullet; pressed again, the list and that indent go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 16:04:31 +02:00
hslrmnp27 3119f292b4 T.DE1: merge German 2006 hyphenation with upstream 0.10.0
Resolve documentation conflicts while preserving upstream updates and the PR's German 2006 implementation. Validation: formatting, PDF dependency check, workspace Clippy, asset attribution, layering and German composition tests pass. Full CI reaches four existing Windows/path-related engine test failures in unchanged upstream files.
2026-10-21 14:47:31 +02:00
paaspaas00 b768ea789e Merge properties-more-options into control-panel-text-modes 2026-10-21 14:33:32 +02:00
paaspaas00andClaude Opus 5.5 cd53ae04be Parity: the Text Frame Options Preview with an invalid value, spelt out
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 13:50:38 +02:00
paaspaas00andClaude Opus 5.5 3d3bed65b8 Text Frame Options: an invalid value takes the preview off the page; parity entry
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 13:26:56 +02:00
paaspaas00andClaude Opus 5.5 13527f9cb7 Control panel fields: Escape reverts any typed value; parity docs for the text modes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 13:15:51 +02:00
paaspaas00andClaude Opus 5.5 bd8abe3972 Docs: Swatches rows' type columns in the parity overview
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 12:22:04 +02:00
paaspaas00andClaude Opus 5.5 6cb9466129 Docs: the Properties ••• sections in the UI parity checklist
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 11:57:12 +02:00
skylar taylor-barrick 1420d8c79b refactor(pdf): share placed-PDF rendering (PDFR) (#876) 2026-10-20 19:52:28 -06:00
moppeeerandClaude Opus 5.5 5e1fd65dfc Properties: Anchor Point(s) with Convert Points and Delete Point(s)
Points selected with Direct Selection title Properties "Anchor Point(s)"
and show Transform, Appearance, Convert Points and the Delete Point(s)
quick action, as InDesign does. path.deletePoints removes the selected (or
given) points of several paths in one undo step. The Convert Point glyphs
are redrawn after InDesign's: the anchor on a corner or a curve with its
handles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 01:57:23 +02:00
aiongg 238ca0d2a0 Shortcuts: the shared craft-keymap dialog (craft-libs#186)
Edit > Keyboard Shortcuts is craft_keymap::ui::ShortcutsDialog over the
keymap and named shortcut sets. ui.json stores the sets as shortcutSets
and still writes the active set as shortcuts plus shortcutsMore. The
InDesign importer is the dialog's second import format, with a review,
and window.importShortcuts imports as a new set. window.shortcutSets
lists and selects sets. The native macOS menu drops its key equivalents
while the dialog records.
2026-10-20 20:41:24 +00:00