samples() reversed the whole script list for a Korean UI, which put the
Bengali and Thai entries ahead of Hangul. Swap Hangul and Kana instead,
so the order is Hangul, Han, Kana, then Bengali and Thai. A test covers
the mixed case.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cs5R9irCMt9rwfhpkwxvSn
Layer, page and frame names in Thai drew as tofu squares in the panels and
on the canvas labels: the UI loaded system faces for CJK and Bengali only.
- cjk.rs: Thai is a fifth script (U+0E00..U+0E7F). When a name, a typed text
or the UI language needs it, the desktop app adds an installed Thai face
(Noto Sans Thai, Leelawadee UI, Tahoma, Sukhumvit Set, Thonburi, Ayuthaya,
Sarabun, Loma, Garuda, Waree). English users still load nothing; the web
build leaves Thai out, like Bengali.
- locales/th.toml: machine-drafted Thai catalog (every UI string, 589
command labels, the menu wordings), marked as a draft needing native
review. i18n.rs: Thai has no plural forms.
- docs/translating.md and docs/localization-parity.md updated.
cargo test -p figcraft-ui-egui passes (662); cargo xtask i18n-report,
assets and layers are ok. cargo xtask wasm and clippy were not run
(no wasm32 target here; clippy -D warnings already fails on other files
with Rust 1.95).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cs5R9irCMt9rwfhpkwxvSn
Found while testing crates/pathops/src/lib.rs:326-333 (stroke_outline_of, StrokeAlign::Inside and Outside arms calling binary(), which uses FillRule::NonZero at :82)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Found while testing crates/doc/src/colors.rs:30 (TextStyle::for_each_color_mut, used by TextData, Style and Document::map_colors / set_color_profile)
Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
* chore: explicit test imports in engine, part 1 (Sonar S2208)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
* fix(security): cap COLR layers, PNG glyph dimensions, and layout cache capacity
---------
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
* M6: Dev Mode measurements kept on the canvas, a read-only layers panel
Measurements placed between two layers, along a side or to the layer
around one (devMode.addMeasurement / removeMeasurement / measurements),
stored on the layer they start from (saved, synced, undoable; old files
open without them), drawn in Dev Mode as labelled redlines that follow
the layers and listed, placed and removed in the Inspect tab. In Dev Mode
the layers panel only selects and expands.
* M6: Dev Mode measurements: explicit imports, a measurement row of its own (Sonar)