`ccmp` Lookup incorrectly composes repeated kana into dakuten glyphs (e.g. いい → い゛)

Author: suenryuCreated Sep 9, 2026Updated Sep 9, 2026

Hi! I love to use Maple Mono, so I wanna fix Japanese kana correctly.

Description

In the CN builds, typing two identical kana in a row (e.g. いい, ああ, かか) causes the second character to be composed into a voiced/semi-voiced (dakuten/handakuten) glyph in some renderers, so いい renders as something like い゛. This is clearly unintended for normal Japanese text input.

Environment

  • Font: Maple Mono NF CN (v7.9), tested across all weights
  • Affected renderers: Zed (editor buffer), Windows Terminal, Vim on Windows Terminal
  • Not affected: VS Code editor, Zed's integrated terminal, and HarfBuzz shaping (see below)

Root cause (identified via font analysis)

The ccmp feature references a LigatureSubst lookup (Lookup index 5 in the files I inspected) that contains 23 mappings of the form:

uni3044 uni3044 -> uni30443099   (い + い -> い゛)
uni3042 uni3042 -> uni30423099   (あ + あ -> あ゛)
uni304B uni304B -> uni304B309A   (か + か -> か゚)
... (23 total, hiragana + katakana)

The composed target glyphs (e.g. uni30443099) exist in the font but are not reachable via any cmap codepoint — they are only produced through this ccmp substitution. So any repeated identical kana gets silently merged into a dakuten/handakuten form.

Interesting detail: renderer-dependent

The substitution does not fire under HarfBuzz shaping (repeated kana stay as two separate glyphs), but does fire in Zed's editor buffer and Windows Terminal. This explains why the same font looks fine in some contexts and broken in others, even within the same application. Because it lives in ccmp (a mandatory feature), users cannot disable it through editor/terminal font-feature settings.

Impact

Any user writing ordinary Japanese with repeated kana (extremely common — e.g. いい, おおきい, かわいい, まあまあ) sees corrupted output in affected renderers, with no user-side workaround via feature toggles.

Suggested fix

Remove or gate the repeated-kana → dakuten/handakuten mappings from the ccmp lookup in the CN builds, unless there is a specific intended use case. If these compositions are needed for some purpose, they should not be triggered by two plain identical kana in default text flow.

Reproduction

  1. Install Maple Mono NF CN.
  2. In Zed's editor buffer or Windows Terminal, type いい.
  3. Observe it render as い゛ instead of two separate .