mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-10 11:11:30 +00:00
Paint-only harakat runs stay inside one shaping cluster so letters keep their joining forms and marks their attachment. When a character-level shaping pass matches the monotone glyphs, a glyph may take a later in-cluster character's run only if GDEF classifies it as a mark (class 3) and that character is a harakat; otherwise ownership stays at the cluster start. Conservative: a mark may miss its colour; a base letter must never take a mark's. Fonts without GDEF and AAT faces fall back the same way. Insert Kashidas tatweels take the base letter's paint, not a trailing mark's. Private harakat module; type-parity, target-app-parity and roadmap M7 evidence updated (scores unchanged). Tests cover paint_only / ranges / own_chars (wide mark, equal advance, multi-component, single-glyph ligature, review counterexample), colour, hide, repeated glyph ids, kashida, forced mark-last emit_kashida, and installed fonts.