- table.insert takes tableStyle and applies it in its own edit, so one Insert
Table is one undo, and a style that is gone (or not a name) changes nothing.
The dialog passes it instead of running style.table.apply afterwards.
- The dialog's fields stop at table.insert's limits (500 body rows, 200
columns, 100 header or footer rows; now public constants), so the table made
is the one shown.
Found by CodeRabbit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
selection.cells may start at a covered grid position; the toggle now goes to
the merged cell (its owner at the top left), whose story holds the text.
Found by CodeRabbit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A string without a translation shows in English, and an empty catalog row
counts as untranslated. Tests keep duplicate-key and placeholder checks and
the lookup, context, plural-caption and right-to-left mechanics; coverage,
stale-key, wording and per-language literal checks are removed.
`cargo xtask i18n-report`, also a `cargo xtask ci` step, runs the ignored
missing_translations_report test and prints the missing strings per language.
Every text cell now shows its own hidden characters: spaces, tabs, paragraph
returns and an end-of-story # after its text (an empty cell shows just the #).
The table paragraph's return sits after the table's bottom right corner.
Cells showed no marks at all, so an empty table looked like plain lines.
The table marks come from table_hidden_marks (frame space), drawn with the
story's own marks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Table › Convert Text to Table… and Convert Table to Text… open dialogs laid
out as InDesign's instead of converting at once with tabs and paragraphs:
- Column and Row Separator: Tab, Comma, Paragraph from the field's menu, or
any characters typed.
- Number of Columns (Convert Text to Table), available when both separators
are the same: the cells fill rows of that many.
- Table Style (Convert Text to Table), applied to the new table in the same
undo step.
table.convertFromText takes rowSeparator, columns and tableStyle, and any
characters as separators; table.convertToText takes both separators
(Table::text_with). Convert Text to Table is available only with text
selected outside a table, as in InDesign. New strings are translated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Table menu: Insert Table… (Cmd+Alt+Shift+T), Convert Text to Table,
Convert Table to Text | Cell Options | Insert, Delete, Select | Merge,
Unmerge, Split Horizontally/Vertically, Convert Cell Type, Convert Rows |
Distribute Rows Evenly, Distribute Columns Evenly. The Table panel item left
the menu (it is in Window › Type & Tables, Shift+F9).
- Cmd+Alt+Shift+T opens the Insert Table dialog, as InDesign's; it ran
table.insert with its defaults, so the shortcut and the menu did different
things.
- The Insert Table dialog: InDesign's title, a narrow window, Body Rows and
Columns then Header and Footer Rows as numbers with spinners and
right-aligned labels, and a Table Style applied to the new table.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove only 13 unused entries identified by the shared integrity test; retain all active translated UI labels. Validated with the complete four-file update: 14 localization tests and all eight CI stages passed.
Restore the separate catalog and caption tests, preserve both merge parents’ assertions, and include Hungarian in the shared integrity checks. Part of the four-file update validated by all eight local CI stages (2,993 tests passed).
As in InDesign (Learn Skills Daily / Adobe "How to make a table" lesson):
- With the Type tool in a table cell, Shift+Tab goes to the previous cell.
It went on to the next one: the tool sent a plain Tab whatever the
modifiers.
- Esc in a cell toggles between the text and the cell: the insertion point
or text in a cell selects that cell, and selected cells select the text of
the first one. Esc left the table and selected the frame.
New engine command table.toggleSelection does the toggle.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A path passes when it lies inside one of the roots of its kind. The roots'
common parent, a sibling named like a root, `..` or a link out of them and
the other kind's roots stay refused; a folder given twice counts once.
path.appendAnchor read `subpath` with as_u64, so -1 or "0" counted as omitted
and the point went onto the last subpath. Only an omitted (or null) subpath
means the last one now; any other value must be a valid index.
Found by CodeRabbit on #1657.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Delete key already ran path.deletePoints under Direct Selection, but
Edit › Clear (the menu item, a native accelerator, or the control channel)
called edit.clear, which removed every path whose points were selected. With
points selected and no ids given, edit.clear now deletes those points, as
InDesign's Clear does.
Found by CodeRabbit on #1657.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Write GTS_PDFXConformance (PDF/X-1a:2003) in the document information and
XMP; check_pdfx1a requires it.
- A registered printing condition (Coated FOGRA39) has no DestOutputProfile,
so no ICC v4 profile goes into the PDF 1.4 file; an unregistered condition
needs an ICC v2 profile, else the export fails.
- Images the flattener can't read fail the export, naming the page and its
graphics.
- Shadow mask coverage (with - without) / (255 - without), so partly
transparent objects drawn over their shadow give the rendered pixel back.
- The dropped-inks warning says their tints were dropped and won't print.
- Type 3 fonts pass; their glyph procedures are checked like page content.
- selection.toggle dropping an item from the selection now drops its selected
points too. They stayed in selection.anchors, so the arrow keys still moved
points of a frame that was no longer selected.
- path.appendAnchor at the start moves the sub-path's selected points up one
place, as path.reverse remaps them, so they keep naming the same anchors.
Found by CodeRabbit on #1657.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New packages are created with the ordinary 0666 request; the process umask
decides the effective mode. Annotated with that reason so the analyzer's
world-writable warning does not change the intended sharing behaviour.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
At the end of the document the spread command only centres the spread in view,
which can move the view from one facing page to the other. That move was
recorded as a jump, so Go Back went to the other page of the same spread
instead of the page viewed before.
Merge upstream/main e74208dd into the working branch and retain PR #1254 unchanged. Resolve ROADMAP.md by preserving both progress histories.
Validation: fmt, pdf-deps and workspace Clippy passed; compose 364 passed, 1 ignored, including all 4 German tests. Full CI stops at 4 pre-existing Windows engine tests (paths and symlink privileges); their sources match upstream. Assets check flags the two untracked local chronicle documents.
A single selected point has no size, so Transform's W and H read 0p0. InDesign
shows the object's width and height there, greyed out and not editable; with two
or more points they measure (and set) the points' bounds as before.
SelInfo keeps the selected objects' size from before the points replace the
bounds, and the anchor Transform section shows it in disabled W/H fields when
one point is selected.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
As InDesign: a selected anchor shows both its direction handles, and its
neighbours the handle that shapes the segment to it; with no anchor
selected no handle shows. Handles that don't show can't be grabbed (one
rule, select::handle_shown, for drawing and hit testing). The pen and the
anchor tools still show every handle. Under the anchor tools the selection
is drawn as its path and points, without the bounding box.
Found in the Learn Skills Daily course, chapter 43.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both change the Direct Selection tool: #902's corner pull now builds the
anchor drag with this branch's list of other selected anchors (none), so the
two build together; both sets of tests are kept.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>