Mery 2.6.1 サロゲートの不具合

  1. 2.6.1でサロゲートペアの文字描画が変わったのか、文字幅が無視される場合があります。
    どうやら直前が非空白文字かどうかが関係しているようです(半角全角は関係ない様子)。

    サロゲートペアの例> U+2000B

     |  masme  |  返信
  2. ご報告ありがとうございます。

    どうやら 2.6.1 で IVS 関連の処理を修正したしわ寄せがサロゲートペアのほうに行っちゃったようです… ^^;

    うーむ、あっちを立てればこっちが立たずといった感じで厳しそうですが、調査してみます ('◇')ゞ

     |  Kuro  |  返信
  3. あれ? U+2000B 以降の文章が消えてますね…。サロゲートペアはダメなんでしょうか。
    意図は伝わったようですが一応、サロゲートペアを 〓 に改めて続きを書いておきます。
    ----
    サロゲートペアの例> U+2000B 〓 U+29E3D 〓
    a. 前が空白/後が空白>◆ 〓 ◆ 〓 ◆
    b. 前が空白/後非空白>◆ 〓A◆ 〓A◆
    c. 前非空白/後が空白>◆A〓 ◆A〓 ◆
    d. 前非空白/後非空白>◆A〓A◆A〓A◆

    a. と b. は問題なし。c. は文字が重なり、d. は改行表示の位置がズレます。
    範囲選択・強調文字列・マーカーなど他の描画が絡むとまた少し変わるようです。

    また、
    1. IME経由でサロゲートペアを入力する(※コピペの場合は問題ない)。
    2. 「元に戻す」と下位サロゲートが消え、上位サロゲート(U+2000Bの場合、U+D840)が残る。
    3. もう一度「元に戻す」と上位サロゲートが消える。
    と、2文字入力として処理されているように見受けられます。
    ----
    以上です。

    > うーむ、あっちを立てればこっちが立たずといった感じで厳しそうですが、調査してみます ('◇')ゞ

    Unicode は Unicode で厄介ですよねぇ。自分も結合文字列とか頭抱えますし…。
    大変かと思いますが、よろしくおねがいします。

     |  masme  |  返信
  4. ご返信ありがとうございます。

    > あれ? U+2000B 以降の文章が消えてますね…。サロゲートペアはダメなんでしょうか。

    サロゲートペア関連の処理は結構ダメになってる気がします。
    前回、IVS 関連で「基底文字 + 4 バイト文字 (サロゲートペアも含まれちゃってた)」を読み飛ばすようにしちゃったので… ^^;

    > 1. IME経由でサロゲートペアを入力する(※コピペの場合は問題ない)。
    > 2. 「元に戻す」と下位サロゲートが消え、上位サロゲート(U+2000Bの場合、U+D840)が残る。
    > 3. もう一度「元に戻す」と上位サロゲートが消える。
    > と、2文字入力として処理されているように見受けられます。

    現状の IME と Windows の仕様上 (1 文字 16 ビット)、1 文字単位で戻すとそうなっちゃいますね。
    一応、IME の入力をまとめて元に戻せる仕組みも内部には実装してるのですが…

    (サロゲートペア単位で戻すのは厳しそう)

    1 文字ずつ戻したい派と、まとめて戻したい派の派閥争いが…。

    > Unicode は Unicode で厄介ですよねぇ。自分も結合文字列とか頭抱えますし…。

    ですねぇ。1 文字 32 ビットの時代が来てくれれば綺麗に収まりそうですが、ユニコードの存在がもうテキストエディタ泣かせです… ( ;∀;)

    とりあえず今回は、元に戻す挙動は据え置きでサロゲートペアの描画だけでも何とかしてみようと思います。

     |  Kuro  |  返信