読者です 読者をやめる 読者になる 読者になる

☭(U+262D)のコマンドプロンプトに置ける文字の幅問題

☭という記号がある。「鎌と槌」(HAMMER AND SICKLE)と呼ばれる記号で、いわゆる共産党のシンボルである。

この文字、East_Asian_Width は Neutral になっているWikipediaの東アジアの文字幅によると

UAX#11では、これらの特性を次のように解釈することを推奨している。

Unicode のテキストを東アジアの従来文字コードの文脈で扱う場合
- 特性値Na(狭)またはN(中立)を持つ文字は、半角の文字 (halfwidth) として扱う
  :
Unicode のテキストを東アジア以外の従来文字コードの文脈で扱う場合
- 特性値Na(狭)またはN(中立)を持つ文字は、幅の狭い文字 (narrow) として扱う。

であるため、規格上はいわゆる「半角文字」である。

が、コマンドプロンプトで実際に出力すると、セルを二つ消費する。つまり、「全角文字」相当になっている。

これが原因で go-runewidth をそのまま使って、文字の桁数を計算することができなくなっている。仕方がないので、実際にコマンドプロンプトに出力した時のカーソル移動量で文字の桁数を求めている。

NYAGOS の一行入力パッケージでは、極力 go-colorable によるエスケープシーケンスだけで処理を済まそうとしているが、一部どうしてもコンソールの API を直接呼び出している。この文字桁問題がなければ、ひとつ直接呼出しが減らせるんだけどな…