Georgian is a Properties text language (IDML "Georgian" maps to ka). Georgian has no initial capitals: Mtavruli is only for all-caps text, so Change Case title and sentence case and index section heads leave Mkhedruli as it is (doc::capitalizes); upper case still gives Mtavruli.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
Adds i18n/ka.rs (1,734 entries: every key of the shared, Arabic, Brazilian Portuguese, Japanese, Italian and Ukrainian tables, plus labels only the code and command table use), registered as ქართული in LANGUAGES and the Interface Language menu. Count captions use the category-first form Ukrainian already uses (გვერდი: 5), since Georgian nouns stay singular after a numeral. Tests: every Georgian key resolves, placeholders and ellipses are preserved, no Mtavruli, every menu title, item and submenu is translated, and switching to ka renders. Docs: localization-parity.md and ROADMAP.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
DesignCraft's RPM requires Fedora package names: `libxkbcommon`, `(vulkan-loader or libglvnd-egl)`.
openSUSE has no `libxkbcommon`, `vulkan-loader` or `libglvnd-egl` package, so zypper refuses it with
`nothing provides 'libxkbcommon'` (exit 4, which the ArtCraft Launcher shows as "error 4";
storytold/craft-launcher#341).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chris Nielsen's "The Adobe InDesign Toolbox" (InDesign 2020) walks the
Tools panel in one and two columns. Compared with it:
- Gradient Swatch and Gradient Feather are separate tools (one flyout
here before).
- In two columns InDesign lays out Content Collector and Content Placer,
Apply Color / Apply Gradient / Apply None and Normal / Preview (with
Bleed, Slug, Presentation in its flyout) side by side
(SPLIT_IN_TWO_COLUMNS). One column keeps one well with a flyout, which
now names what is in front (Apply Color, Apply Gradient or Apply None).
- The utility button is View Options: Frame Edges, Rulers, Guides, Smart
Guides, Baseline Grid and Hidden Characters, checked when shown, with
their shortcuts (17:40). It was Text Frame Options (Object › Text Frame
Options…, ⌘B, still opens it).
- Apply Color (,) applies the colour applied last ([Black] at first) and
Apply Gradient (.) the gradient applied last, else the document's first,
else white to black (InDesign's default), to the fill or stroke in front.
The flyout had Apply Color as [Black] and no Apply Gradient.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tool cursors are glyphs drawn in code (black ink, white halo): the filled
arrow for Selection, the hollow arrow for Direct Selection, the pen nib
with an add, delete, close or convert badge, and a curved double arrow
for rotating. Linux and Windows show them as OS cursor bitmaps,
rasterized per pixels-per-point and cached; macOS paints them at the
pointer, since it sizes cursor bitmaps in points; the web build keeps
the system cursors. Text, hand, zoom and resize cursors stay system
cursors.
The Pen tool reports what a click does: over the first anchor of the
path being drawn it closes the path, and between paths a click on a
selected path's anchor deletes it and a click on its outline adds one.
The Add, Delete and Convert Direction Point tools show the matching pen
badges.
The glyph geometry and the rasterizer are adapted from VectorCraft's
code-drawn tool cursors (same organisation, original work).
Fixes#438
A drop cap came out the same size whatever its point size: the fit
(drop + body cap height) / (the cap's own cap height) cancels the cap's
size, since its own cap height grows with it. InDesign fits the cap as if
it were set at the body text's size and scales that by the cap's size over
the body's, keeping its baseline: a larger cap rises above the first line,
a smaller one falls short of it. Measured against an InDesign capture
(Palatino, 14 pt body, 18 pt italic T, 2 lines): cap height 2.04x the line
gap there, 2.03x predicted.
The cap's box (selection highlight, caret) now reaches the top of a cap
that rises above its line; selected glyphs are drawn inverted, so the part
outside the box would vanish. A one-line cap still keeps its own size
when that is smaller.
Test: drop_cap_scales_with_its_point_size (a 15 pt cap over 10 pt text is
1.5x the fitted height on the same baseline, 7.5 pt is 0.75x, the body
lines don't move, the box covers the cap). Before the fix the 15 pt cap
was 30.7 pt, the same as at 10 pt; with it, 46.05 pt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CgGsJkVe5GYG9qK6VFdECa
nfpm (2.47, 2.48) writes Go's directory bit into the mode of each directory a `type: tree`
entry walks (0o20000000755), so installing the package warned "directory permissions differ"
on every shared directory under /usr/share. It also stamps the files and .MTREE a moment apart,
so `pacman -Qkk` reported most files as modified. The Arch build now lists usr/share file by
file (nfpm then gives the parent directories a plain 0755) and fixes the time with
SOURCE_DATE_EPOCH (the commit time unless set), which also makes the package reproducible.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Command descriptions left the new-text hyphenation default and image fitting outcomes implicit. State the default and each fitting mode's semantics, and add an MCP example that disables hyphenation. No behavior changes.
A drop shadow, inner shadow or outer glow with a large size needed
gigabytes for one render: the multithreaded pipeline's offscreen image
grew by three times the blur on every side, and vello pads its own
filter layer by as much again, on single-threaded contexts too. A blur
wider than 1,024 device pixels is now drawn offscreen at a lower
resolution, where it is that wide, and scaled back up. It looks the
same, and both buffers stay close to the window's size.
Selecting an object on the canvas left the Layers panel as it was: its
layer could be closed and its row out of view. A new selection now opens
the layer it is on and scrolls its row into view once (closing or scrolling
afterwards is left alone); selected rows are highlighted, and an object
selected inside a group shows as its group. Unnamed image frames are listed
by their file name, as InDesign lists placed images.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
package.sh now also builds designcraft-<ver>-linux-<arch>.pkg.tar.zst with nfpm's archlinux packager,
from the same nfpm.yaml. It is named by the bundle id (ai.storyteller.designcraft), provides designcraft and
conflicts with designcraft, designcraft-bin and designcraft-git, so an AUR helper doesn't take it over and ArtCraft
Launcher can tell it from an AUR build. The README lists it with the other Linux downloads.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chris Nielsen's "The Adobe InDesign Toolbox" (10:10): with the White
Arrow he clicks outside, then presses on a frame's corner and pulls it up,
turning the rectangle into a lopsided triangle. DesignCraft only looked for
anchors on objects already selected, so the press fell through to moving
the whole frame.
The Direct Selection tool now also looks at the anchors of the object
under the pointer: on one, it selects the object and drags that point, in
one undo step. Elsewhere on the object it still drags it whole; Shift-
click still toggles the selection.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The kerning control in Properties was a menu of Metrics, Optical and 0:
manual kerning, which the engine already supports in 1/1000 em, couldn't
be entered, and the Character panel had no kerning at all (#896).
- One kerning control: its label shows Metrics, Optical, 0 or the manual
value; its menu keeps the three choices and adds a number field with a
spinner for a manual value (-1000 to 10000).
- Properties and the Character panel (next to Tracking) both use it.
Fixes#896.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaying Chris Nielsen's "Numbering Page Sections" on a 50-page facing
document, a script that set seven sections without screenshots in
between ended in "render failed: PollError: The requested Wait timed out
before the submission was completed". Harness::step doesn't render, so
the texture changes of every frame (each edit redraws the Pages panel's
50 thumbnails) waited for the screenshot's render, which then uploaded
them all at once.
ui_shot now renders after each script line (the image is dropped), so
texture changes are applied as they come. The same script renders.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chris Nielsen's "Numbering Page Sections" (2:09) reaches Insert Special
Character › Markers › Current Page Number through InDesign's Type menu:
Font, Size, Character, Paragraph, Tabs, Glyphs, Story, the style panels,
Create Outlines, Find Font, Change Case, Type on a Path, Notes, Track
Changes, the footnote and endnote items, Hyperlinks & Cross-References,
Text Variables, Bulleted & Numbered Lists, the insert submenus, Fill with
Placeholder Text and Show Hidden Characters. DesignCraft's began with Find/
Replace Font and Create Outlines and held alignment, Bold/Italic and point
size steps InDesign keeps out of its menus.
- Size ▸ (6–72 pt), Character, Paragraph, Glyphs, Character Styles,
Paragraph Styles (InDesign's shortcuts: ⌘T, ⌥⌘T, ⌥⇧F11, ⇧⌘F11, ⌘F11),
then InDesign's order. Notes ▸ holds New Note and the Notes panel.
- Current Page Number carries ⌥⇧⌘N (app.insertCurrentPageNumber).
- Alignment, Bold/Italic/Underline/All Caps, point size steps and
Paragraph Rules leave the menu; their shortcuts and panel buttons stay.
- DesignCraft's math and CJK items follow after Show Hidden Characters.
- Labels "Bulleted & Numbered Lists" and "Show Hidden Characters", with
translations.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chris Nielsen's "Numbering Page Sections" (4:43): with page 3 selected,
the Pages panel menu's Numbering & Section Options opens InDesign's New
Section window: Start Section checked, Automatic Page Numbering chosen
and 1 offered in Start Page Numbering at, which stays editable. The window
here was titled Numbering & Section Options, Start Section was off and
the field showed the page's current number, greyed out.
- Opened on a page that doesn't start a section, the window is New
Section: Start Section on and 1 offered; on a section's first page it
is Numbering & Section Options, as before.
- Start Page Numbering at and Start Chapter Numbering at stay editable;
typing a number chooses that option.
- "New Section" translated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chris Nielsen's "Numbering Page Sections" reads the Pages panel all along:
InDesign labels each spread ("2–3", "2, 1" where a section starts inside
it, "8, A", "ii–iii"), puts a small triangle over each section's first
page, and the panel scrolls to the page selected ("the pages panel jumps
down there", 6:46). DesignCraft named each page under it ("2 1") and drew
its triangle over the spread in view.
- One label per spread (spread_label): a range with an en dash for pages
numbered on in one section, the names apart when a section starts inside
it. Positions under absolute numbering. A blue badge marks the spread in
view; a click on the label goes to the spread.
- A triangle above every page that starts a section (page 1 included).
- The panel scrolls to the spread of the page in view when that page
changes.
- Page thumbnails are named for screen readers ("Page 1").
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chris Nielsen's "Numbering Page Sections" (7:03): starting a section at
page 1 on a left page (the spread 8–9 selected) turns it into a lone
right-hand page 1 in InDesign, and the pages after it shuffle. DesignCraft
kept the page on the left, so odd page numbers sat on left pages.
- Document::repaginate gives each facing page the side of its number in
its section (odd: right, or left bound right to left). Document Setup's
Start Page # is one case of it.
- layout.section repaginates when a section starts, changes or is removed;
objects go with their pages, in one undo step.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolve conflicts with the progress docs and the MCP reconnect test:
- ROADMAP.md: keep the upstream text-threads entry and add the Links source
path entry (newest first, latest update date).
- crates/mcp/src/backend.rs: take upstream, which already carries the same
nonblocking-socket fix, so this branch no longer changes the file.
Typing into a text frame never turned on the OS input method, so macOS
dead keys didn't compose: ⌥E then I typed "ei" instead of "í" (same for
⌥N, ⌥U and Japanese/Chinese input). The canvas now asks for the input
method while the Type tool has a caret and handles its events.
The text being composed shows in the story as an interaction preview
(new `text.compose` command), so it takes the format the next typed
character gets, drawn on a yellow box. On commit it's dropped and the
result typed with `text.insert` (one undo step); any other edit, tool
change or drag drops it first and tells the input method to forget it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A font whose fsType allows embedding bitmaps only (bit 9, 0x0200) was
packaged with its outlines; it is now refused like a restricted one.
char_css wrote font-weight: bold for any style containing "bold", so
Semibold showed as Bold and Light as Regular; it now writes the numeric
weight (100-900) and style from the face's style name. Same approach as
aiongg's integration branch (#259, 8f54d1cc), with his test.
coverImage was read with an uncapped std::fs::read, so a huge file or a
device like /dev/zero could exhaust memory. Read it through the data
merge's capped reader, which now also stops the read itself at the cap
(a device reports no length), as in aiongg's integration branch (#259,
6eae3620), with /dev/zero as a test.