Commit Graph
4827 Commits
Author SHA1 Message Date
moppeeer e96e94c484 Merge branch 'find-change-find-format' into find-change-change-find 2026-10-22 01:30:57 +02:00
moppeeerandClaude Opus 5.5 6b100a5791 Find Format: refuse malformed fields rather than search without them
`findFormat.chars` must be an object and `charStyle` / `paraStyle` style
names (or null); any other value is an error instead of being skipped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:30:47 +02:00
moppeeerandClaude Opus 5.5 9ab1122688 Package: check the PDF's view options before writing anything
`export::check_pdf_options` refuses what `pdf_report` would: the export
options, the flattener, and now `pageLayout` and `view`, which `pdf_report`
reads up front too. `file.package` checks with it before the output folder
is made, so an unknown page layout or view leaves no partial package.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:28:37 +02:00
PiMinusMaxandClaude Opus 5.5 aa1a0a73f3 Gradient panel: drag the gradient onto the Swatches panel to keep it
A gradient made in the Gradient panel stayed unnamed: there was no way
to drag it into the Swatches panel for reuse. The panel's thumbnail now
drags the selection's gradient, and the Swatches list takes the drop as
a new gradient swatch (swatch.new, "New Gradient Swatch"). A gradient
that already is a swatch is left as it is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:28:23 +02:00
moppeeerandClaude Opus 5.5 c84ce7a545 Swatches: a click on another swatch keeps it picked and cancels a waiting rename
Ending a rename by clicking another swatch keeps that swatch picked (for
Delete Swatch) instead of the renamed one. A click on another swatch while
the rename's double-click wait runs cancels the rename.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:25:12 +02:00
moppeeerandClaude Opus 5.5 874d2be248 Control panel and Properties: a negative Last Line Right Indent; list buttons pressed by every paragraph
The Last Line Right Indent field takes negative values, as the First Line
Left Indent does. The Control panel's Bulleted and Numbered List buttons
show pressed through `Session::selection_has_list`, as Type › Apply Bullets
and Properties do. With #1483's fix merged, an explicit off no longer takes
the other list type away.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:20:59 +02:00
moppeeer a41ff9c609 Merge branch 'list-buttons-hanging-indent' into control-panel-lists-shading 2026-10-22 01:12:39 +02:00
moppeeerandClaude Opus 5.5 c71bf1a32c List buttons: pressed when every targeted paragraph has the list; off takes only its own
`Session::selection_has_list` checks every paragraph the list commands apply
to (selected text, cells or text frames). Type › Apply Bullets / Numbers and
Properties' Bulleted and Numbered List buttons both use it, so a selection
reaching an unbulleted paragraph isn't shown pressed. An explicit `on: false`
leaves paragraphs with the other list type, and their hanging indent, alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:12:32 +02:00
moppeeerandClaude Opus 5.5 4d968d8adc Paragraph border links: linking again makes the four the same
Clicking "Make all settings the same" back on gives the four weights or
offsets Top's value, and the four corners Top Left's size and shape, so OK
never saves sides that differ under a closed link.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:06:12 +02:00
moppeeerandClaude Opus 5.5 63d3f5a19d Package the PDF as file.exportPdf makes it; refuse a bad pdf
file.package now writes its PDF through export's `pdf_report`, so a preset's
transparency flattening, the effects and hidden-layer rasterising, the blend
space, the view options and the transitions all reach the packaged PDF.
A `pdf` that is neither a switch nor export options is refused, as is a bad
flattener, before anything is written. Georgian: the printing term for spot
inks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:59:00 +02:00
moppeeer 2c43330c43 Merge branch 'package-dialog' into package-pdf-preset 2026-10-22 00:53:43 +02:00
moppeeerandClaude Opus 5.5 c04fa61d17 Package: a failed package keeps the dialog open; the ink table's Type column; no document is an error
- When `file.package` fails, the Package or Printing Instructions dialog
  comes back with its options and instructions, and the status line says
  why. Before, they were lost.
- The Colors and Inks table heads its kind column with the "Type:" key
  (without its colon). The "Type" key is the menu's and reads Text in
  most languages.
- `app.packageDialog` with no document open is an error rather than a
  silent success.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:53:21 +02:00
moppeeerandClaude Opus 5.5 cb9d23dd52 Preferences test: the recent items count is 20
The test checked only that the count was whole, so another default would
pass. It asserts 20, InDesign's default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:51:01 +02:00
moppeeerandClaude Opus 5.5 ea5a2f790f Preferences › Interface: Single Column in Czech, Georgian, Polish and Russian
The Tools Panel menu's Single Column fell back to English in these
catalogs. Russian Double Column reads "Две колонки", the table's word for
layout columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:49:45 +02:00
moppeeerandClaude Opus 5.5 22bb814c9d Eyedropper: sample the colour as the canvas shows it; picker strings in every catalog
- `screen_post` holds what the canvas does to a render before showing it
  (Proof Colors, the composite ink-limit preview). The texture and the
  eyedropper's one-pixel sample both go through it, so with either view
  on, the eyedropper takes the colour on screen.
- The picker's OK uses the footer's padded "  OK  " key, which every
  catalog has (Chinese showed "OK").
- "RGB Color Space View", "Lab Color Space View", "Add CMYK Swatch" and
  "Added swatch" are in the ar, cs, it, ka, pl, pt-br, ru and uk
  catalogs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:30:40 +02:00
moppeeerandClaude Opus 5.5 33f496a05b Find/Change: Change takes the match Find Next selected; Selection is translated
Change used to accept a selection only when Change All's matches (from
the start of the target) included it. Find Next can select text those
never produce: the rest of a Find Format stretch from a caret inside it,
or an overlapping match ("aa" in "aaa" from the second a). Both commands
now share one definition (`Search::found_edit`). Without a pattern, a
selection inside one stretch is a match; with one, the pattern's match
from the selection's start must be the selection, and a GREP replacement
is expanded for that match (`Grep::replacement_at`).

"Selection" has a row in the shared table (Spanish and Chinese fell back
to English); the French entry moves there from `fr.rs`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:23:35 +02:00
moppeeer ac63bdc7ff Merge branch 'find-change-find-format' into find-change-change-find 2026-10-22 00:17:42 +02:00
moppeeerandClaude Opus 5.5 0ecb63229c Find Format: match on the attributes as validated, numbers at any depth, one pass over the runs
- The Find Format's character attributes are read through
  `CharAttrs::set_json` and matched as the document writes them
  (camelCase keys, its number forms), so `font_style` finds what
  `fontStyle` finds. A null attribute asks for nothing.
- Values compare numbers within rounding inside objects and lists too, so
  a 14 pt leading written as `{"kind": "points", "value": 14}` matches.
- `FindFormat::spans` passes over a story's runs once, with a cursor that
  only moves forward across the paragraphs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:17:07 +02:00
moppeeer 28bc79b69d Merge branch 'paragraph-style-general' into character-style-from-selection 2026-10-22 00:10:04 +02:00
moppeeerandClaude Opus 5.5 c5bca17a9b New Paragraph Style: apply to the selection once the dialog knows the style
The dialog notes that the created style exists (so a second OK edits it)
before Apply Style to Selection runs, so a failure there can't lead to a
duplicate style. The Justification check's doc comment is back above
its function.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:02:56 +02:00
moppeeerandClaude Opus 5.5 e108408c31 Insert Pages: a placement given must be a page index; the dialog's page is clamped
`layout.pages.insert` refuses `after` and `before` given together (null
counts as given) and a placement that isn't a page index, instead of
inserting at the default position; the default applies only when
neither is given. The dialog sends the page its menu shows (a page past
the end is the last). The dialog title is in the shared table, and
Georgian "Before Page" reads "გვერდის წინ".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 23:58:07 +02:00
moppeeerandClaude Opus 5.5 8e980b1f87 Paragraph rules: Gap Tint shows 100% at its default
A full gap tint is left out of the rule's JSON, so the field read nothing
even after a Gap Color was chosen. It now reads a missing gap tint as
100%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 23:52:23 +02:00
paaspaas00andClaude Opus 5.5 3049301643 Paragraph Border and Shading: link the four sides, as InDesign's
The course's chapter 40 (Applying Borders to Styles). Paragraph Style
Options › Paragraph Border and Paragraph Shading get InDesign's "Make all
settings the same" link for the stroke weights, the offsets and the
corners. It starts on when the four are the same, so a side typed in sets
all four; with the link off a side is set alone, as the lesson gives a
border only a thick left side.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 23:45:03 +02:00
Claude 4749080435 Merge remote-tracking branch 'upstream/main' into idml-app-icon-drop 2026-10-21 21:43:27 +00:00
Claude 6a56272b32 Merge remote-tracking branch 'upstream/main' into xref-edited-text 2026-10-21 21:43:20 +00:00
Claude 35eda11a18 Merge remote-tracking branch 'upstream/main' into parent-page-display 2026-10-21 21:43:13 +00:00
Claude c95880f75d Merge remote-tracking branch 'upstream/main' into running-header-order 2026-10-21 21:42:56 +00:00
Claude 899e48ce2e Merge remote-tracking branch 'upstream/main' into inline-objects-under-text 2026-10-21 21:42:48 +00:00
Dylan M. Taylor e2a2502fba ci: add sonar-project.properties for CI-based analysis
Marks the project ineligible for SonarCloud Automatic Analysis, resolving the
CI-vs-automatic-analysis conflict so the SonarCloud workflow succeeds.
2026-10-21 16:00:32 -04:00
Dylan M. Taylor c2dbcff51f ci: add SonarCloud scan via shared reusable workflow
Calls storytold/craft-common-actions/.github/workflows/sonarcloud.yml@main
with secrets: inherit. Adds SonarCloud badge to README where missing and
removes the redundant sonar-project.properties (config now passed by the
reusable workflow).
2026-10-21 15:46:54 -04:00
paaspaas00andClaude Opus 5.5 4c3f24e43d Package: the packaged PDF uses a chosen PDF preset
The Package dialog's Include PDF (Print) gets a PDF Preset, as InDesign's
Select PDF Preset: the Export PDF presets, the last one used first. The
packaged PDF always had the default settings.

`file.package` takes `pdf: {…file.exportPdf options}` besides true/false,
read with the same `export::options` before anything is written, so bad
options leave no partial package. The Export PDF dialog's field-to-params
code is shared (`pdf_export_params`, `pdf_preset_params`).

Found in the Learn Skills Daily course, chapter 27.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:39:43 +02:00
paaspaas00andClaude Opus 5.5 d21459ff3e File › Package: InDesign's Package dialog and Printing Instructions
Package… went straight to a folder picker and packaged with fixed options.
As in InDesign it now opens the Package dialog: Summary counts the fonts,
links and images and inks the package carries (a warning where some are
missing or modified), and Fonts, Links and Images and Colors and Inks list
them, with Show Problems Only. Create Printing Instructions leads to the
Printing Instructions dialog (contact, company, address, phone, fax,
email, instructions), whose text goes into the package's Instructions.txt;
Include IDML and Include PDF (Print) choose the copies the package carries.

Found in the Learn Skills Daily course, chapter 27.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:25:29 +02:00
paaspaas00andClaude Opus 5.5 e5e3f091d3 Preferences › File Handling: the recent items count is a whole number
Number of Recent Items to Display read "20.0": its field's drag speed of
0.2 gave it a decimal place. It now shows "20", as InDesign's does.

Found in the Learn Skills Daily course, chapter 26.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:02:24 +02:00
paaspaas00andClaude Opus 5.5 1d11e0a8c4 Preferences › Interface: Color Theme swatches and the Tools panel's columns
Preferences › Interface held only UI Size, and the interface theme could be
changed only from Window › Interface Color Theme. As in InDesign, Interface
now has Appearance, with a Color Theme swatch per theme (a click shows it at
once, Cancel goes back to the theme Preferences opened with), and Panels,
where Tools Panel sets a single or double column. UI Size moves to a UI
Scaling section of its own, as in InDesign's list.

Found in the Learn Skills Daily course, chapter 26.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:57:24 +02:00
paaspaas00andClaude Opus 5.5 c0e38160d6 Spelling: "we", "if", "email" and curly-apostrophe contractions are known
The spell checker uses the Moby Hyphenator II word list, which lacks some
very common short words (we, us, if, Mr, pm, vs) and most computer and web
vocabulary (email, online, website, database, desktop, download...).
Contractions typed with a typographer's apostrophe (don’t, we’re), which
Use Typographer's Quotes produces by default, were looked up with the
curly apostrophe and flagged too. Dynamic Spelling underlined most words
of an ordinary sentence.

`known` now reads U+2019 as a straight apostrophe (also in the user
dictionary) and accepts a short sorted list of such common words, with
the existing inflection rules applied to them.

Found in the Learn Skills Daily course, chapter 26.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:50:19 +02:00
paaspaas00andClaude Opus 5.5 e91f748350 Insert Pages dialog as InDesign's; pages can go before a page or first
Insert Pages… opened the generic command form (Count, a 0-based After
index, a parent id). It now opens InDesign's dialog: Pages; Insert After
Page, Before Page, At Start of Document or At End of Document, with the
page by name; and Parent ([None] or a parent). It is set to the page in
view (or the page right-clicked) and that page's parent.

`layout.pages.insert` takes `before` (0: at the start of the document);
`after` and `before` together are refused.

Found in the Learn Skills Daily course, chapter 25.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:17:21 +02:00
Brandon ThomasandClaude Opus 5.5 4d62a501c1 Release 0.11.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.11.0
2026-10-21 13:57:30 -04:00
Dylan M. Taylor b67232a6c8 ci: add SonarCloud scan workflow and config 2026-10-21 13:57:06 -04:00
Dylan M. Taylor 9826154db3 ci: add SonarCloud scan workflow and config 2026-10-21 13:56:26 -04:00
paaspaas00andClaude Opus 5.5 87675f5b0b Status bar page box names the parent in view and lists the parents
While a parent was shown, the status bar's page box and Properties › Page
still read page 1. As in InDesign, they now name the parent ("A-Parent"),
and their lists have the parents after the pages: choosing a parent shows
it, choosing a page leaves the parents for that page.

Found in the Learn Skills Daily course, chapter 25.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:49:49 +02:00
paaspaas00andClaude Opus 5.5 f0ae1c318a Color panel edits the gradient stop selected in the Gradient panel
With a gradient fill or stroke, the Color panel showed "[None] — choose a
colour on the ramp", and a spectrum click replaced the whole gradient with a
flat colour. As in InDesign, it now shows the stop selected in the Gradient
panel (the stop before a selected midpoint) with its values, and its
C/M/Y/K or R/G/B sliders and spectrum recolour that stop, keeping the others.

Found in the Learn Skills Daily course, chapter 24.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:36:22 +02:00
paaspaas00andClaude Opus 5.5 d26750d947 Place cursor: a short drag places the frame it previews
The place cursor draws a frame from 3 points, but the canvas sent Drag
events only once egui started a drag (at max_click_dist, 6 points). A
release in between placed a frame the preview never showed. With the
place cursor, the canvas now follows the pointer from 3 points. (Review.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:22:55 +02:00
paaspaas00andClaude Opus 5.5 d0e90e71ca Place cursor: the crosshair throughout when no graphic is loaded
With nothing in the place cursor there's no thumbnail to show, so the
cursor is the crosshair before a press too, as it already was while
dragging. (Review.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:01:26 +02:00
paaspaas00andClaude Opus 5.5 3430a88cbc Color Picker: the eyedropper takes a colour off the page
The eyedropper beside the hex code works as InDesign's: pressed and
dragged onto the page, it takes the colour shown under the pointer when
let go (one device pixel rendered as the canvas renders it, over the
paper); off the pages it takes nothing. Found in the Learn Skills Daily
course, chapter 23.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 18:54:54 +02:00
paaspaas00andClaude Opus 5.5 114e3682fd Properties: the test checks a double-click leaves no swatches popup open
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 18:48:00 +02:00
aiongg 0e43a8c87a #1311: rustfmt 2026-10-21 16:32:29 +00:00
aiongg 3eb1937fce #1311: floating windows stay below the macOS title-bar strip (craft-ui float_bounds) 2026-10-21 16:32:08 +00:00
paaspaas00andClaude Opus 5.5 861afad338 Swatches panel: rename a swatch in place
As in InDesign, a click on the name of the swatch picked already (a slow
double-click) turns the name into a field: Enter renames the swatch
(swatch.options, so everything that uses it follows), Escape keeps the
name. A double-click still opens Swatch Options, and the special swatches
keep their names. Found in the Learn Skills Daily course, chapter 23.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 18:27:32 +02:00
paaspaas00andClaude Opus 5.5 9792554e00 Properties: a double-click on a Fill or Stroke chip opens the Color Picker
As in InDesign, a double-click on Properties › Appearance's Fill or
Stroke chip opens the Color Picker with that colour (a click still opens
the swatches). For selected text, its own Fill and Stroke chips open it
for the text. Found in the Learn Skills Daily course, chapter 23.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 18:19:32 +02:00
paaspaas00andClaude Opus 5.5 7f03606f6b Find/Change: Change and Change/Find
find.change takes found: true for Change: only the text Find Next found
changes (the selection, while it's still a match of the search in its
domain), it stays selected, and the search keeps its domain so the next
Find Next goes on after it. A selection that isn't a match changes
nothing and makes no undo step.

The dialog has InDesign's Change and Change/Find buttons, off until text
is selected, and its Search list reads Document, Story and Selection.
Found in the Learn Skills Daily course, chapter 22.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 18:07:03 +02:00