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).
A tab draws nothing, so it was left out of the underline and strikethrough
bars: they stopped at the last letter before each tab and began again after it.
Forms rule their fill-in lines with underlined tabs — `Name ⇥⇥⇥⇥, city ⇥⇥⇥⇥` —
so an imported form lost every writing line, and an IDML `Underline="true"` on
a run of tabs drew nothing at all.
A tab is a character with an advance, and InDesign rules its whole width.
`PlacedGlyph::spans_rules` says which glyphs a rule runs across: the drawn
ones, and a tab or a right-indent tab that advances. The spaces a line break
trimmed off the end, the break characters and the markers' carriers are not
part of the line's text and are still skipped, so an underline stops at the
text and not at the frame edge.
Both places that draw the bars from the glyphs use it: the renderer
(`build_line`) and the PDF export (`text_rules`). The HTML and PPTX exports
mark up runs of text, which already included their tabs.
Measured on the repro in the issue, a 420×120 pt page at 2×:
before one underline, 63 px: the word "Name"
now three, 63 + 219 + 231 px: the word and both tab stretches
and the exported PDF gains the two fills for them. A tab with a leader is one
continuous bar across the leader dots to the right-aligned text after it.
Tests: the renderer's bars and the PDF export's bars for "Name<tab>City" are
one bar covering the tab's width, not two with a gap where it is. Both fail
without the change (two bars, 36→67.7 and 72→93.2, the tab's 67.7–72 unruled).
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>
- English (and Auto where offered) stays first as the source language and fallback; the rest sort by native name with accents folded, so Čeština is under C and Magyar under M; Cyrillic and CJK names follow the Latin ones
- The list used the registry order, which is the order the languages were added
A shows the Character Formatting Controls: font and style, size and leading, All Caps,
Superscript, Underline / Small Caps, Subscript, Strikethrough, kerning and tracking, vertical and
horizontal scale, baseline shift and skew, the character style and the language. ¶ shows the
Paragraph Formatting Controls: the nine alignments, left and first line indents, right and last
line indents, space before and after, the drop cap's lines and characters, the paragraph style,
Hyphenate and Align to Baseline Grid. The fields' icons carry their names (tooltip and
accessibility). It used to show a fixed mix of both.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Character's ••• shows vertical and horizontal scale, baseline shift, skew, language and
OpenType (the Typography panel), and the All Caps, Small Caps, Superscript, Subscript,
Underline and Strikethrough buttons. Paragraph's ••• shows the left, right, first line and last
line indents, space before and after, the drop cap's lines and characters, Align to Baseline Grid
and Hyphenate. ••• again folds the section. It used to open the Character or Paragraph panel.
The language field moves under •••, where InDesign has it. New icons for the scales, baseline
shift, skew, indents, spacing and drop caps; widgets::checkbox and ••• report their labels to
accessibility.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Typing over "(87.6 pt)" and pressing Escape leaves the leading automatic;
only Enter or leaving the field commits it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A field showing an automatic value in parentheses commits what is typed over
it even when it is the same number, so typing 87.6 over (87.6 pt) sets fixed
leading, as InDesign does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A zone is a side of the anchor. Without anchor or side, craft-ui would
make a frame on the outer edge of DesignCraft's root, which splits the
canvas; the error names anchor and side instead.
Pin craft-ui to aiongg/craft-libs 352a830. Workspace::set_visible takes
the panels' permissions; group_header_width takes the strip width. Tests
reach docking controls through DockArea::hit_id and floating_layer
instead of rebuilding egui ids. Control names in DOCK_LABELS follow
craft-ui's sentence case.
Test: dragging a dock divider and then pressing an arrow key nudges the
selection and leaves the dock's size alone.
Two corrections to the message, both reported by CodeRabbit on #1371.
switched_from being None only means this start did not switch from a
backend that never showed a frame. A backend that failed on an earlier
start is remembered in the record, and choose() then picks the first
candidate that is not in that list -- so calling it the "first choice"
misstates how it was arrived at. The line now says either "nothing has
failed before" or which backends had, so the log says what happened.
The comment claimed that reaching this line means WGPU_BACKEND is
unset. wgpu-types returns an empty mask for an empty or unrecognised
value and begin() only returns early for a non-empty one, so such a
value reaches here with the variable set. The comment says that instead.
Adds .coderabbit.yaml so CodeRabbit no longer reviews or comments on PRs opened by dependabot[bot].
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Found while testing crates/engine/src/cmd/table.rs:1396-1403
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
`Fallback::begin` returns before the fallback runs when `WGPU_BACKEND`
is set, logging that wgpu picks the backend. So the line below it is
reached only when the variable is *not* set -- and it said
"(WGPU_BACKEND overrides)", which reads in a log as though the user's
environment had chosen the backend when nothing had.
before: graphics: DirectX 12 (WGPU_BACKEND overrides)
after: graphics: DirectX 12 (first choice; set WGPU_BACKEND to choose another)
The report quotes that line as evidence of which backend a start used,
which is exactly the wrong conclusion to be led to.
Part of #1343.
Found while testing crates/engine/src/cmd/object.rs:710-711 (also :975)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Only path-filtered workflows run on pull requests today, so most PRs land
without a test run. Port of the wordcraft#800 workflow: Linux, standard
GitHub-hosted runner, read-only token, no secrets, craft-fonts pinned to
the release.yml commit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found while testing crates/textimport/src/docx.rs:134-135
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>