結合文字が表示されません

  1. 結合文字が表示されません。
    いつ頃からは判りませんが、
    発生条件が以前のIVSのときと酷似しています。
    http://www.haijin-boys.com/50e943035700f3.90570036.html
    IVSも結合文字の一種だし、何か似たような処理入っていたりする?
    Mery ver 2.1.2.4548

     |  foo  |  返信
  2. ご報告ありがとうございます。
    こちらでも確認してみましたが、まだ再現できていません。

    > IVSも結合文字の一種だし、何か似たような処理入っていたりする?

    IVS 対応で確かにそのあたりの修正は行っていますので、問題ないとは言い切れない部分ですね。どのような文章が表示されないか例文など頂けませんでしょうか?

    例えば、↓ のようなウムラウトは表示できてます。フォントはメイリオです。

    ウムラウトüあああ

    ↓のような記号も行けています。(ブラウザだと表示できないかもですが)

    結合文字•̥̑.̮•̥̑ あああ

    発生条件が分かれば再現できると思いますので、お手数をお掛けしますがよろしくお願いします。

     |  Kuro  |  返信
  3. つって、結合文字一覧をググって自分で貼ってみろっていう話ですわな。
    ちょっと調べてみます。

     |  Kuro  |  返信
  4. なるほど、確認できました。

    1 横型結合文字 प्य प + ् + य pya
    2 縦型結合文字 ड्ड ड + ् + ड DDa
    3 独立結合文字 क्ष क + ् + ष k$a
    4 virama्付き結合文字 ड्‌ड ड + ् + ड DDa

    このあたりだと思います。
    IVS 対応関係なく、そもそも Mery 公開当時からこれ描画できなかったようですね。
    結合文字って文字幅ゼロで重ね合わせてエディタ側で描画するものだと思っていたのですが、そもそも根本的な思い違いをしていたのかもしれません。

    なかなか難易度が高そうですが、じっくり取り組んでみたいと思います。

     |  Kuro  |  返信
  5. 調べてみたところ、こりゃ詰んでますわ・・・。
    参りました。

    ある程度の結合文字には対応できていると思いますが、一部結合文字とみなされないようになっている部分があるようです。考えてみましたが、この修正には膨大な時間と労力がかかると思います。ただ、抜け道があって、楽して対応できそうな案もみつかったのですが、副作用の影響範囲が見えない状態です。

    すぐには修正できそうにありませんので、ご了承ください。もちろん修正しないわけではなく、時間がかかりそうというだけですが。

    ・・・当面、結合文字対応、という文面は削除しておこうと思います。

    IVS 以上に結合文字はやっかいでした。
    うむぅう・・・、困った。

     |  Kuro  |  返信
  6. 確認できたと言うことで必要ないかもしれませんが
    一応こちらで試したのは
    フォントはメイリオで試した文字は↓です
    かが
    「わざわざ結合文字を使うな」とか言われそうですが。

     |  foo  |  返信
  7. ご確認ありがとうございます。
    なるほど、意外とシンプルなところですね。

    > 「わざわざ結合文字を使うな」とか言われそうですが。

    あえて結合文字を使っているのがカッコイイですw

    さて本件、詳細に調査してみました。
    結論から申しますと、結合文字に正しく対応することは私の力では不可能でした。
    結合文字が結合する法則がびっくりするほどややこしいです。

    今回の例を元に調べてみましたところ、「か」に「゛」は結合できますが、「が」に「゛」は結合できないようです。こんな感じで、次に続く文字によって結合されるかどうかが変わったり、3 文字以上の場合でもその並び順によって結合されるかどうかが異なったり、さらにはフォントによって結合されるかどうかが違ったり、、、

    さらに外国語になると日本語でいうところの「か」と「が」のように、その国の言葉を熟知していないと結合できる文字かどうかを判断することができないような部分が存在するようです。

    そういうわけで結合文字にちゃんと対応するのは諦めて、今回の「か」と「゛」のような日本語の基本的なパターンはある程度対応するような方向で進めたいと思います。

     |  Kuro  |  返信
  8. > 今回の例を元に調べてみましたところ、「か」に「゛」は結合できますが、「が」に「゛」は結合できないようです。こんな感じで、次に続く文字によって結合されるかどうかが変わったり、3 文字以上の場合でもその並び順によって結合されるかどうかが異なったり、さらにはフォントによって結合されるかどうかが違ったり、、、

    これはもうユーザーを信じるしか方法はないのでは?
    間違った組み合わせは決して現れない。フォントもきちんと設定されている。
    間違った組み合わせに対する正しい表示方法なんて存在しないし。

     |  foo  |  返信
  9. 結合文字シーケンス

    「結合文字のすべてが表示できない」のではなくて、
    異体字シーケンスの最初の実装のときと同じ症状が
    あることを指摘しているのではないですか?

    一般的な外国語の合字や発音記号で使われる、
    // アクセント記号 166 (\u02b0) ~ 245 (\u02ff) の範囲で80文字
    // Spacing Modifier Letters

    // 合成記号 246 (\u0300) ~ 341 (\u036f) の範囲で112文字
    // Combining Diacritical Marks
    // これは結合文字、前の文字と1つに結合して表示
    はすべて表示できています。

    Macからやってくるファイル名などでは、かな表現が、
    濁点つきの「が」を分解した、基底文字の「か」と
    結合文字の濁点になっていることがあります。

    この

    が
    304B 3099

    を連続して使うとき、左隣の文字が基底文字と同じ
    で結合文字(濁点)無し、だとそれに影響を受けて
    結合文字ではなく、基底文字として表示されてしまう
    現象が発生します。
    この現象を修正してほしい、とおっしゃっているので
    はありませんか。

    かがががが
    がかががが
    ががかがが
    がががかが

    ががががが

    異体字シーケンスでは、この現象は修正されており、
    正しく表示できます。

    2B7EF E0101

     |  inuuik  |  返信
  10. こんばんは、書き込みありがとうございます。
    そうですね、ご報告いただいたのは IVS とときと同じ症状 (結合文字単体だと表示できているが、手前に別の文字が入ると表示できない) のご報告ですね。

    並列して調査しておりましたところ、一部の結合文字が表示できていなかったのでそっちの回答が長くなってしまいました。。。すみません。

    > 異体字シーケンスでは、この現象は修正されており、
    > 正しく表示できます。

    先日の回答の最後の方にちょろっと書いてますが、今回の事例 (ひらがな、カタカナの濁点など) は IVS の時と同じように対応する方向で修正しようと思います。

    内部的に描画のタイミングを計算するための分割点の対応表を持っていて、分断文字の場合はそこで文字を分断して描画するという仕組みなので、ひらがな、カタカナの場合は次に結合文字っぽいものがあるかどうかを判定して、もし結合文字があればそれらを分割しないで一括描画するといった、例外処理を組み込む形になります。

    まぁ、これ自体が良くないのかもしれませんが、色分けの都合で分割点を知る必要があるため、こうなってます。ひらがな、カタカナ、漢字、全角数字、全角記号、諸外国語、とか細かく色分けできるようになっていることが足を引っ張ってます。

    あれ、前にも同じ話で盛り上がった記憶が!?気のせいかもしれませんが。

    ある程度対応していく、と書きましたのは、日本語のひらがな、カタカナに対応できたとしてもそれ以外は保証できないためです。

    > 横型結合文字 प्य

    ↑ こんなやつとかですね。

    完全に対応するという話に傾いていたのでわずらわしかったかもしれません。すみませんでした。ちょいとやる気がありすぎて先走ってしまいました。

    普通に、「が」ね、治しときます~で良かったかもですね(汗

     |  Kuro  |  返信
  11. >先日の回答の最後の方にちょろっと書いてますが、今回の事例 (ひらがな、カタカナの濁点など) は IVS の時と同じように対応する方向で修正しようと思います。
    横ですが、DirectWriteかUniscribeを使えばそこら辺は比較的簡単に対応できます
    (ついでに右から左に表示する言語にも対応できます)
    ただ、DirectWriteを使う場合はVista以降でしか動かなくなるという欠点がありますが、
    IDWriteTextLayoutでシンタックスハイライトから隠し文字まですべて対応できます
    XPを切り捨てたくない場合はUniscribeを使うことになりますが、シンタックスハイライトを行う場合は低レベルAPIを使わないといけないので非常に手間がかかります

     |  結合文字について  |  返信
  12. 情報ありがとうございます。

    DirectWrite とか Uniscribe はまったく知りませんでした。
    GDI の後継規格のようで、これを使えばアンチエイリアスの綺麗な描画もできたりしそうですね、面白そう。秀○さんとか対応してるみたいですね、スゴス。(見た感じ、アンチエイリアスはあまり美しくなさそうでちょっと残念ですが・・・)

    > (ついでに右から左に表示する言語にも対応できます)

    どこまで自動でやってくれるのか分かりませんが、世界進出には必要な気がしますね。(今のところ世界は見てないですが)

    > IDWriteTextLayoutでシンタックスハイライトから隠し文字まですべて対応できます

    文字の装飾とかもできるようで、なんとも便利な API っぽいですね。目から鱗です。

    > XPを切り捨てたくない場合はUniscribeを使うことになりますが、シンタックスハイライトを行う場合は低レベルAPIを使わないといけないので非常に手間がかかります

    現在の Mery ではシンタックスハイライト、というか文字の色分けで文字の種類ごとに細かく分類して TextOut しているのでそれだけでも非常に手間がかかっている部分ではありますね。逆に、文字の種類ごとの色分けをしなければ TextOut でも結合文字はすんなり描画できたりしますけど・・・。

    しかし、テキストエディタエンジン自体は私が開発したものではないので、実装を変えるとなると鼻血じゃ済まないレベルでしょうね、、、

    貴重な情報ありがとうございます、ネタ帳にメモっときます。

     |  Kuro  |  返信
  13. 絵文字の合字で結合されるものと結合されないものがあります。
    Windows7 なのでカラー絵文字は表示できずその関係のような気もしますし、テキストエディターで絵文字を使うことはないと思いますし、特に不都合はありませんが一応ご報告。
    今更 Windows7 への対応を望むわけではありませんし、詳細な調査は必要ありません。

    <絵文字が書かれているページ>
    http://jane2ch.net/test/read.cgi/community/1402545998/740-746

    <↑のページの一部を Mery に貼り付けたときの表示>
    https://light.dotup.org/uploda/light.dotup.org18913.png

    <Google Chrome での表示>
    https://light.dotup.org/uploda/light.dotup.org18914.png

    <5ちゃんねる専用ブラウザ Jane Style での表示>
    https://light.dotup.org/uploda/light.dotup.org18915.png

    Windows7 Home Premium バージョン 6.1 (ビルド 7601: Service Pack 1)
    Mery (x86) Version 3.3.4
    Mery のフォント名:Segoe UI Emoji フォントサイズ:23
    ツール > オプション > DirectWrite で[DirectWrite を有効にする]と[合字を有効にする]のみチェック

    関係あるのかないのか分からないながらも、フォーラムを見てみましたがやはりよく分かりませんでした(途中で読むのを挫折しました)。
    タイ語の一つだけの母音が正しく表示されない
    https://www.haijin-boys.com/discussions/6096
    カンナダ語の結合文字
    https://www.haijin-boys.com/discussions/6158
    特定の文字列に対するリガチャ(合字)の動作不具合
    https://www.haijin-boys.com/discussions/6315

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

    Windows 7 ではまだ検証できていないのですが、Windows 10 でも同様に結合表示されないようです。

    私の環境 (Windows 10 Pro 21H2 19044.1526) ですと、Chrome (98.0.4758.102) でも同様、結合されずに描画されています。

    絵文字の部分を切り取って HTML に貼り付けて、フォントで Segoe UI Emoji を強制的に適用して Chrome で表示してみてもだめでした。

    https://imgur.com/a/7dXAJdm

    Jane Style はインストールしてみたのですが使い方が良く分からなくて絵文字が描かれているページを表示することができず、まだ検証できていません。

    貼っていただいた画像ですと、Chrome のフォントが Segoe UI Emoji とは違うような気がするのですが、何かフォントを指定されていたりしないでしょうか?

    また、Jane Style のほうも Segoe UI Emoji とは異なるフォントのようですが、何かフォントの設定まわりでお気づきの点などがございましたら、解決のヒントになるかもしれません。

    よろしくお願いいたします。

     |  Kuro  |  返信
  15. ご返信ありがとうございます。

    Mery で指定しているフォントは確かに Segoe UI Emoji ですが、もしかしたら公式のものではないかもしれません。
    現状使用されているものとは図柄が異なっているようですが、現状の Segoe UI Emoji を残しておくことはできるのかな?
    フォントを上書きしてまで試していただくことでもないので、現状の Segoe UI Emoji を残しておけない場合は、この報告はなかったことにしていただいて構いません。

    Jane Style の画像は、Windows7 ではカラー絵文字が表示できないので、参考のために貼っただけですが、わざわざインストールさせてしまったみたいで申し訳ありません。

    絵文字のページは「5ちゃんねる」ではないので、Jane Style で見るには板の登録が必要ですが、現状、正規の方法では上手くいかないみたいです。
    jane2ch.brd に下記を追記すれば読み込めるかもしれません。
    ---- ここから
    【Jane総合掲示板】[Tab]0C
    [Tab]jane2ch.net[Tab]community[Tab]Jane総合掲示板
    ---- ここまで
    ※[Tab]はキーボードの[Tab]キーに置き換える。

    また、もしかしたら、Windows10でも、↓が必要かもしれません。
    絵文字プラグインv0.8.4(2021/06/28)
    https://www.dropbox.com/s/gsl54j8kkhme2w2/janestyle_emoji8_4.zip

    でも、わざわざそこまでしての Jane Style での検証は特に必要ないような気がします。

     |  774  |  返信
  16. Jane Style での検証は必要ないですが、一応補足しておきます。

    絵文字プラグインの Dropbox でのダウンロードでログインは不要だったと思います。
    (ログイン画面は閉じてしまってよかったような気がします。)

    また、5ちゃんねるだと書き込むときに異体字セレクタ (VS) が削除されてしまうみたいで、本来の形とはちょっとだけ異なりますが、5ちゃんねるのほうに1つだけ転記してみました。
    https://egg.5ch.net/test/read.cgi/software/1516253743/40
    最近の5ちゃんねるは規制が厳しく、2つ目以降はエラーになって書き込めませんでした。

     |  774  |  返信
  17. 失礼しました。質問に答えていませんでした。

    > 貼っていただいた画像ですと、Chrome のフォントが Segoe UI Emoji とは違うような気がするのですが、何かフォントを指定されていたりしないでしょうか?
    Chrome のフォントをどこで設定できるかが分からず、使われているフォントは定かでありません。

    > また、Jane Style のほうも Segoe UI Emoji とは異なるフォントのようですが、何かフォントの設定まわりでお気づきの点などがございましたら、解決のヒントになるかもしれません。
    絵文字プラグインが使うフォントが Segoe UI Emoji だったと思いますので、Segoe UI Emoji の絵文字だと思います。

     |  774  |  返信
  18. ご返信ありがとうございます。

    Jane Style の絵文字プラグインを導入して、教えていただいた方法で掲示板を開くことはできましたが、やはり Windows 10 では結合されませんでした。

    > フォントを上書きしてまで試していただくことでもないので、現状の Segoe UI Emoji を残しておけない場合は、この報告はなかったことにしていただいて構いません。

    Windows 10 では Segoe UI Emoji がシステムファイルとして保護されているようで置き換えることもできませんでした。

    Windows 7 の環境を用意していたのでちょっと時間がかかってしまいましたが、Chrome で絵文字が結合して表示されることが確認できました。

    Mery で「❤ + (VS) + (ZWJ) + 🩹」が結合されないのは、恐らく Mery が Emoji 11.0 にしか対応していないためではないかと思います。

    🩹 が追加されたのは Emoji 12.0 からのようです。

    なぜ Windows 10 だと Chrome でも結合表示されないのかは謎ですが…

    ちなみに現在、Emoji 14.0 まで出ているようなので Mery でもこのあたりに対応できないか調査してみたいと思います。

     |  Kuro  |  返信
  19. ご検証、及び、ご回答ありがとうございます。
    そして、お手数をおかけして申し訳ございません。

    > Windows 10 では Segoe UI Emoji がシステムファイルとして保護されているようで置き換えることもできませんでした。
    そうなのですね。
    そうすると、前述のGoogle ドライブにあるのは何なのだろう?
    Windows 10 では Segoe UI Emoji はパソコン購入時のままなのかな? そのうち Windows のアップデートに含まれていたりするのかな?

    > Mery で「❤ + (VS) + (ZWJ) + 🩹」が結合されないのは、恐らく Mery が Emoji 11.0 にしか対応していないためではないかと思います。
    Mery が Emoji のバージョンに対応する必要があるのですね。
    そのあたりは Windows に任せていると思っていましたが、そういえばブログで、絵文字の世界は難しいみたいなことを書かれていたような気がします。

    > ちなみに現在、Emoji 14.0 まで出ているようなので Mery でもこのあたりに対応できないか調査してみたいと思います。
    それをしていくと大変そうですし、Windows 10, 11 で Emoji 14.0 に対応したフォントが入っているのか不明ですし、しばらく手を入れなくても良いのでは?と思います。

    また、よく見ると自分の Chrome では前述の画像で 😶‍🌫 = 😶 + (ZWJ) + 🌫 の「🌫」(霧 U+1F32B)が「□」で表示されているので、単純に Segoe UI Emoji が使われているわけでないのかもしれません。
    確かに絵文字は難しそうですね。

    今更ですが、Chrome のフォントについて、寝ぼけていたようで Google 検索でフォントをデフォルトに戻すところばかりを見ていました。
    きちんと調べると、「設定」の「デザイン」にありました。
    標準フォント:カスタム
    Serif フォント:カスタム
    Sans Serif フォント:カスタム
    固定幅フォント:MS Gothic
    になっていました。
    ここを弄った記憶はないので設定はデフォルトのままだと思います。

     |  774  |  返信
  20. > そして、お手数をおかけして申し訳ございません。

    いえいえ、こちらこそ。ご協力ありがとうございます。

    > Windows 10 では Segoe UI Emoji はパソコン購入時のままなのかな? そのうち Windows のアップデートに含まれていたりするのかな?

    新しい絵文字に対応していくためには Segoe UI Emoji フォントも更新される必要があるので、Windows のアップデートに含まれていると思います。

    > そうすると、前述のGoogle ドライブにあるのは何なのだろう?

    配布元がわからないので何とも言えませんが、Google ドライブにある Segoe UI Emoji は Version 1.34 となっていました。

    手元の環境では、Windows 10 のシステムフォントになっている Segoe UI Emoji が Version 1.29。

    Windows 11 の Segoe UI Emoji は Version 1.33 となっていたので、もしかすると Google ドライブにあるのは Windows 11 (プレビュー版?) から抽出されたものなのかも?

    > Mery が Emoji のバージョンに対応する必要があるのですね。

    そうですね。Emoji (Unicode) の仕様変更に合わせて Mery 側でも調整が必要な場合があります。

    Windows 10 だとそもそも Segoe UI Emoji 1.29 が新しい絵文字に対応していないため、私の環境だと Chrome でも描画できなかったのだと思います。

    あと、前回、システムフォントになっていて上書きできないと書きましたが、なんだか内部的には上書きできてしまっているようで、Version は 1.29 のままなのに 1.34 の絵文字 ([顔 + 霧] や [溶けた顔]) などが描画できるようになっていて、はじめにいただいた Mery のスクリーンショットと同じ感じになりました。

    それでもなぜか Chrome はかたくなに 1.29 の絵文字で描画されますが…。(フォントをキャッシュでもしているのかしら)

    > それをしていくと大変そうですし、Windows 10, 11 で Emoji 14.0 に対応したフォントが入っているのか不明ですし、しばらく手を入れなくても良いのでは?と思います。

    調べてみたところ、Windows 10、11 はまだ Emoji 14.0 には対応していないようです。(Windows 10 は Emoji 13.0 未満、Windows 11 は Emoji 13.1 らしい)

    Windows 11 の Segoe UI Emoji 1.33 だとまだ 🫠 [溶けた顔] など Emoji 14.0 の絵文字は描画できないようですが、1.34 だと描画できるようになっているので、徐々に対応を進めていっているのでしょうね。

    Mery でも Emoji 14.0 を試しに実装してみたところ、<絵文字が書かれているページ> がそこそこうまく描画できるようになりました。

    しかし、はじめにいただいた Mery のスクリーンショットにある 🫱‍🫲 [握手] は Emoji 14.0 の絵文字ですが、うまく結合されず。

    Mery に関係なく、DirectWrite を使って直接描画してやってもダメなので、DirectWrite 自体が対応していないような気もします。

    Chrome は正しく描画できているようですが、Chrome って DirectWrite は使うけどレンダラーは独自に実装していたような気がするのでそのためかも?(…詳しくはわかりません)

    > また、よく見ると自分の Chrome では前述の画像で 😶‍🌫 = 😶 + (ZWJ) + 🌫 の「🌫」(霧 U+1F32B)が「□」で表示されているので、単純に Segoe UI Emoji が使われているわけでないのかもしれません。

    これも謎ですね。私の Windows 7 環境でも同様、霧は □ になっていました。

    Emoji 14.0 に対応するかどうかはまだ検討中ですが、Unicode は 13.0 に対応しているので、Emoji もそれに合わせて 13.1 (Unicode 13.0 の仕様) に更新するのはアリかもしれません。

    それか Unicode も 14.0 に更新するか…。でも、まだ早すぎる気も…。と悩ましいところです。

     |  Kuro  |  返信
  21. ご返信ありがとうございます。

    > Windows 11 の Segoe UI Emoji は Version 1.33 となっていたので、もしかすると Google ドライブにあるのは Windows 11 (プレビュー版?) から抽出されたものなのかも?
    以前に Google ドライブにあった Segoe UI Emoji Version 1.33 では修正ミスしているみたいで、🔄(U+1F504)と🔚(U+1F51A)が同じデザイン、✖️(U+2716U+FE0F)と➕️(U+2795U+FE0F)が同じデザインでした。
    (絵文字は、http://jane2ch.net/test/read.cgi/community/1402545998/703 より抜粋)
    Windows 11 でも正しく表示されないなら、Google ドライブにあるのは公式のと同じものかもしれませんね。

    あと、Google ドライブにあるのは、Version 1.32 以降、Ninja Cat が表示されなくなっているみたいです。
    🐱+👤=🐱‍👤
    🐱+🏍=🐱‍🏍
    🐱+💻=🐱‍💻
    🐱+🐉=🐱‍🐉
    🐱+👓=🐱‍👓
    🐱+🚀=🐱‍🚀
    (絵文字は、http://jane2ch.net/test/read.cgi/community/1402545998/698 より抜粋)

    > しかし、はじめにいただいた Mery のスクリーンショットにある 🫱‍🫲 [握手] は Emoji 14.0 の絵文字ですが、うまく結合されず。
    もしかしたら、秀○エディタなどでもダメかもしれませんね。

    > これも謎ですね。私の Windows 7 環境でも同様、霧は □ になっていました。
    正しく表示されている場合もあったので見てみたら、異体字セレクタ(Variation Selector)(U+FE0F)を追加すれば表示されるみたいです。
    🌫(U+1F32B) 🌫️(U+1F32BU+FE0F)
    🏍(U+1F3CD) 🏍️(U+1F3CDU+FE0F)

    また、Windows 10、11 の情報もありがとうございました。

     |  774  |  返信
  22. 情報ありがとうございます。

    > 以前に Google ドライブにあった Segoe UI Emoji Version 1.33 では修正ミスしているみたいで、🔄(U+1F504)と🔚(U+1F51A)が同じデザイン、✖️(U+2716U+FE0F)と➕️(U+2795U+FE0F)が同じデザインでした。

    Windows 11 の Segoe UI Emoji 1.33 で確認してみたところ、まさに上記のとおり同じデザインになっていました。

    > あと、Google ドライブにあるのは、Version 1.32 以降、Ninja Cat が表示されなくなっているみたいです。

    Windows 11 でも Ninja Cat さんは表示されなくなっていました。

    それと Windows 11 からは Segoe UI Emoji のデザインが新しくなったとのことで、Windows 10 とは全然違いましたね。

    Google ドライブのものは Windows 11 のデザインと一致していました。

    > もしかしたら、秀○エディタなどでもダメかもしれませんね。

    秀〇エディタさんで確認してみましたが [握手] は結合されませんでした。

    それから、Windows 11 に Segoe UI Emoji 1.34 をインストールして確認してみましたがやはりダメ。

    2021年11月の記事 (github の issue) ですが、DirectWrite は Emoji 13.1 まで対応と書かれている情報がありました。(Emoji 14.0 のリリースは2021年9月)

    【外部リンク】
    https://github.com/microsoft/terminal/issues/11822#issue-1063067754

    また、同じ issue にて [ハート + 絆創膏] など、いくつかの絵文字は「Windows 11 が必要」と書かれていました。

    [ハート + 絆創膏] の場合は Emoji のバージョンというより Segoe UI Emoji 1.29 が対応していないので Windows 11 が必要なのだと思います。

    しかしながら [握手] のほうは Segoe UI Emoji 1.34 が対応していても DirectWrite が Emoji 13.1 までしか対応していないのでダメなのではないかと推測しています。

    > 正しく表示されている場合もあったので見てみたら、異体字セレクタ(Variation Selector)(U+FE0F)を追加すれば表示されるみたいです。

    なるほど、そう言われてみるとそんな方法がありましたね。私の環境でも異体字セレクタを付けると絵文字で描画できることを確認しました。

    そういうわけで、DirectWrite が対応していないのであれば Mery 側では対応のしようがないので Unicode 13.0 + Emoji 13.1 対応の方向で進めていこうかなと考えています。

     |  Kuro  |  返信
  23. ご返信ありがとうございます。

    > Windows 11 の Segoe UI Emoji 1.33 で確認してみたところ、まさに上記のとおり同じデザインになっていました。
    > Windows 11 でも Ninja Cat さんは表示されなくなっていました。
    そうなのですね。
    Google ドライブのものと Windows のものとで、まったくの別モノというわけではなさそうですね。

    Mery さんとは関係ないことですが、自分の環境の Chrome で ✖️(U+2716U+FE0F)は Segoe UI Emoji で表示されていないような気がします(線が細いような気がします(メイリオ(?))。

    > Windows 11 からは Segoe UI Emoji のデザインが新しくなったとのことで、Windows 10 とは全然違いましたね。
    > Google ドライブのものは Windows 11 のデザインと一致していました。
    Segoe UI Emoji 1.31 → 1.32 で大幅に変更されているみたいです。
    古いデザインのほうが良さそうな絵文字が多々ある気がします。

    正しく結合されない絵文字については、なるほどいろいろな要因が関係しているのですね。
    そこまで辿り着く調査能力には、いつも感心します。

    > Unicode 13.0 + Emoji 13.1 対応の方向で進めていこうかなと考えています。
    よろしくお願いします。

    絵文字の一覧はいろいろとありますが、したらば掲示板に絵文字のみが書かれているスレッドがありましたので、Emoji version 14.0 を追記しました。

    絵文字
    http://jbbs.shitaraba.net/bbs/read.cgi/computer/44858/1625194624/101-

    「仕様です」であっさり終わるだろうから、新しいディスカッションを開始するほどでもないと思ってここに書き込みましたが、長くなってしまいました。
    表題とも少し違うような気がしますし。
    質問者の foo さん共々失礼しました。

     |  774  |  返信
  24. 連続で申し訳ありません。

    したらば掲示板は、Jane Style で見ると大丈夫ですが、Chrome で見るとなぜか全く表示されない絵文字が多々あり、コピーして Mery さんに貼り付けて表示を確認する用途にも使えませんでした。
    したらば掲示板に関してのコメントは無視してください。

     |  774  |  返信
  25. Chrome での表示を見てみたかったので、したらば掲示板から絵文字を抜き出してみました。
    https://dotup.org/uploda/dotup.org2729468.txt

    Windows 7 ではモノクロ絵文字で表示されるので区別しづらいですが、Chrome では、性別(♂️♀️)や「■ Symbols」の星座マーク(♈など)など Segoe UI Emoji 以外のフォントで表示される絵文字がちょこちょことあるのですね。
    □で表示されるのは異体字セレクタ(U+FE0F)を付ければ良さそうですが、Segoe UI Emoji 以外のフォントで表示される絵文字はそれではダメみたい(例えば、「■ Smileys & Emotion」の ☺️(U+263AU+FE0F)が Segoe UI Emoji ではなさそう)。
    Chrome は拡張プラグインを入れないとページの文字コードを変更できなかったし、簡単には確認できませんでした。

     |  774  |  返信
  26. 情報ありがとうございます。

    > 正しく結合されない絵文字については、なるほどいろいろな要因が関係しているのですね。

    結合文字や絵文字は Unicode や Emoji の仕様、OS の仕様、そしてアプリ側の仕様が重なってくるので原因を探すのも大変ですから、ご協力に感謝します。

    > そこまで辿り着く調査能力には、いつも感心します。

    ありがとうございます。どうしようもない場合は「仕様です」と言いますが、何とかなりそうなときはやっぱり調べちゃいますね… ^^;

    > Windows 7 ではモノクロ絵文字で表示されるので区別しづらいですが、Chrome では、性別(♂️♀️)や「■ Symbols」の星座マーク(♈など)など Segoe UI Emoji 以外のフォントで表示される絵文字がちょこちょことあるのですね。

    そのようですね。
    やはり Chrome との描画の差は Chrome が独自の描画エンジン (Skia) を使っているためなような気がします。

    私のほうでも検証してみて、Mery で対応できそうな部分とできない部分がある程度分かってきたのでご報告します。

    次期 Windows 11 の Insider Preview (22557.1) 環境で Emoji の対応状況を確認してみました。

    まず、Segoe UI Emoji の Version ですが、やはり Insider Preview では 1.34 になっていました。

    【参考画像】
    https://imgur.com/a/QRfUVaK

    Mery、Chrome、Edge、メモ帳、ペイント、Visual Studio 2022、秀〇エディタさんで問題の絵文字を表示してみた結果ですが、[握手] の部分にご注目ください。

    [握手] (U+1FAF1 + U+200D + U+1FAF2) は Emoji 14.0 の新しい絵文字ですが、Chrome や Edge ではきちんと結合されるものの、他のアプリでは分離してしまいます。

    恐らく Chrome や "Chromium エンジン" を使っている Edge は DirectWrite を使っていても描画の部分は Chromium エンジン独自の仕様 (Skia) になっているため、うまく描画できているのではないかと思います。

    メモ帳やペイント、メールアプリなどの Windows 標準のアプリは描画の部分もすべて "純粋な DirectWrite" を使っているので、Emoji 14.0 の描画において差が出ているのだと思います。(ペイントは GDI かも?)

    秀〇エディタさんも Mery も DirectWrite を使って描画しているので、[握手] が結合されないのは Windows (DirectWrite) の仕様次第となりそうです。

    対応できそうな点としては、Mery では従来、分離されていた [手のひら + 肌の色] の部分は Emoji 14.0 に対応することで描画できそうです。

    DirectWrite がきちんと対応していない Emoji 14.0 のような新しい規格に Mery が先行して対応するかどうかは微妙なところですが、先行して対応しても描画できないものはできないのであまり問題ないのかもしれない、などとまた 14.0 対応を検討し始めてしまいました。

    本当に悩ましいですね、この案件。

     |  Kuro  |  返信
  27. ご検証、及び、ご返信ありがとうございます。

    なるほど、Windows 関連と Chrome 関連でわかりやすく分かれますね。
    Chrome と Edge は、[ハート] (U+2764) と [バイク] (U+1F3CD) がモノクロ絵文字で表示されるのも共通。
    メモ帳も、[ハート] が黒色ではありますが、デザインは Segoe UI Emoji っぽい。
    Ninja Cat はなくなったみたいですが、秀○エディタさんは、結合したものにネコしか表示されないのですね。
    [握手] については、絵文字用のプラグインの作者さんはどのように対処しているのか不思議です。
    https://light.dotup.org/uploda/light.dotup.org19400.png

    異体字セレクタ (U+FE0F) を付けるとどうなのかな。
    ❤ (U+2764) ❤️ (U+2764 + U+FE0F)
    🏍 (U+1F3CD) 🏍️ (U+1F3CD + U+FE0F)

    最初に貼っていただいた Segoe UI Emoji 1.29 での画像で、[ハート] (U+2764) が「Chrome で Segoe UI Emoji」の場合にカラー絵文字で表示されているのを見ると、優先して使われるフォントにその文字がない場合に Segoe UI Emoji が使われるのかな?
    でも、顔文字(😀🙂😐😶)とかは優先して使われるフォントにもありそうだから違うみたいですね。

     |  774  |  返信
  28. > Chrome と Edge は、[ハート] (U+2764) と [バイク] (U+1F3CD) がモノクロ絵文字で表示されるのも共通。
    [女性記号] (U+2640) と、[男性記号] (U+2642) もでした。

    > 異体字セレクタ (U+FE0F) を付けるとどうなのかな。
    > ❤ (U+2764) ❤️ (U+2764 + U+FE0F)
    > 🏍 (U+1F3CD) 🏍️ (U+1F3CD + U+FE0F)
    1つ前の投稿でも同じことをコメントしていました。
    ボケてるなー。^^;

     |  774  |  返信
  29. ご返信ありがとうございます。

    > 1つ前の投稿でも同じことをコメントしていました。
    > ボケてるなー。^^;

    私もしばしば ^^; お気になさらずー。

    > でも、顔文字(😀🙂😐😶)とかは優先して使われるフォントにもありそうだから違うみたいですね。

    Chrome は描画エンジンが異なるので、その仕様まではちょっと分かりかねるところです。

    > [握手] については、絵文字用のプラグインの作者さんはどのように対処しているのか不思議です。

    そうですね。絵文字用のプラグインは以下の 2 点が不思議な部分だと思います。

    (1) JaneStyle のプラグイン (Susie 形式の DLL) でそんなことができるのか?
    (2) どうやってカラー絵文字を描画しているのか?

    以下は推測です。(語尾に「かもしれません」を付け加えて読んでくださいねw)

    まず、(1) ですが、JaneStyle のプラグインは画像の展開を目的とした Susie 形式の DLL なので、スレッドプレビューの文字の描画を変更したりするための機能は備わっていません。

    恐らく DLL インジェクション「のような」仕組みからの API フックで GDI (Windows の描画機能) に独自の処理を割り込ませているのだと思います。

    「のような」と書いたのは、DLL インジェクションって、アプリに意図しない DLL を読み込ませる挙動まで含めた言葉なので、今回のようにプラグインに対応しているアプリが意図した DLL を読み込んでいる場合は、言葉としてはちょっと違うためです。

    ただ、アプリが想定しているプラグインの仕様に沿ったものではなく、DLL を読み込むだけで任意のコード (DllMain) が実行されてしまうことを利用している点が DLL インジェクションの手法です。

    というのも、この手法を使うと JaneStyle だけでなく、DLL (プラグイン) を読み込むアプリなら、その DLL を読み込むだけで任意のコードが実行されてしまいます。

    DLL インジェクションって悪用されることがあるので危険なイメージもありますが、アプリのデバッグにつかったり、拡張機能がないアプリに機能を付け足したりなど、正しく使うと便利な手法でもあります。

    ちなみに、Mery、Notepad++、AviUtl、その他のアプリでもこのプラグインは動作しました。

    続いて、(2) ですが、若干 (1) の続きにもなります。

    まず、Windows 7 の DirectWrite はそもそもカラー絵文字を描画できません。

    ここで面白いのが API フック (API 乗っ取り) です。

    GDI という Windows のグラフィック処理に関する API ですが、このプラグインは GDI を乗っ取ります。

    GDI を乗っ取って独自の描画処理を割り込ませているわけです。

    その証拠として、GDI が乗っ取られた状態なので JaneStyle のアドレスバーや検索ボックスなど、本来は GDI によって白黒で描画されるはずの Windows 標準コントロールまでカラー絵文字が使えるようになってしまいます。

    似たようなことができるアプリとしては gdi++ や MacType などがあります。

    最後に、独自のカラー絵文字描画処理の部分ですが、これは恐らく DirectWrite ではなく FreeType、HarfBuzz あたりが使われているのではないでしょうか。

    いずれにしても、こういった仕組みを応用してシンプルなプラグインにされていることから、非常に技術力の高いかたが作られたものではないかと思います。

    …思えば遠くに来たものですが、結論としましては描画エンジン自体が異なるので、Mery とは絵文字の描画に差があるけど許してねということで、ご了承いただければと思います。

     |  Kuro  |  返信
  30. 詳細なご説明(推察)ありがとうございます。

    なるほどですね。

    > …思えば遠くに来たものですが、結論としましては描画エンジン自体が異なるので、Mery とは絵文字の描画に差があるけど許してねということで、ご了承いただければと思います。
    いえいえ、十分すぎるくらいの機能です。
    長らくお付き合いいただき、ありがとうございました。

     |  774  |  返信
  31. 絵文字の合字が結合されていることを確認しました。
    [握手] にも対応されたのですね。
    ご対応ありがとうございました。

     |  774  |  返信
  32. ご確認いただきありがとうございます。

    > [握手] にも対応されたのですね。

    Emoji 14.0 には対応しましたが、[握手] は私の環境 (Windows 7、10、11 + Segoe UI Emoji 1.34) だと結合されないです。

     |  Kuro  |  返信
  33. ご返信ありがとうございます。

    DirectWrite ではなく Segoe UI Emoji 1.34 が [握手] に対応していなかったのですね。
    1.35 では結合されます。モノクロなので色は判別できませんが。
    DirectWrite について詳細に調査していただいていたとしたら、申し訳ない思いです。

     |  774  |  返信
  34. > 1.35 では結合されます。

    ええー!貴重な情報ありがとうございます。

    DirectWrite のせいじゃなかったのですね。Chrome や JaneStyle だと 1.34 でも結合されていたので私はてっきり…。

    しかも 1.35 がもう出てるんですね。

    いずれにしても Emoji 14.0 対応は正解だったようで、Windows の対応状況次第ということになりそうで安心しました。

     |  Kuro  |  返信
  35. > DirectWrite のせいじゃなかったのですね。Chrome や JaneStyle だと 1.34 でも結合されていたので私はてっきり…。
    そこは不思議ですね。
    合字の [握手] の絵文字自体は 1.34 にもあり、DirectWrite を使用しないで結合を実現しているソフトウェアでは結合して表示されたという感じでしょうか。
    フォント側で DirectWrite に対応させるような仕組みでもあるのかな?

    ざっくりと見た感じでは 1.34 → 1.35 の変更点が分かりませんでしたが、スッキリしました。

     |  774  |  返信
  36. 修正前のコメントを貼り付けてしまったようなので訂正します。

    合字の [握手] の絵文字自体は 1.34 にもあり、Kuro さんんに説明していただいたように、DirectWrite を使用しないで結合を実現していると思われるソフトウェアでは結合して表示され、そうでない場合には、DirectWrite 側でなくてもフォント側でなんらかの対応を行えば結合して表示されるという感じでしょうか。

    あと、#️⃣(keycap: # 、U+0023 U+FE0F U+20E3)は、Chrome でも黒塗りで表示されたのでそういうものだと思っていましたが、JaneStyle では他の keycap と同じように青塗り□ の中に # で表示されるのですね。

     |  774  |  返信
  37. 情報ありがとうございます。1.35 で [握手] が結合されることを確認できました。

    > DirectWrite を使用しないで結合を実現していると思われるソフトウェアでは結合して表示され、そうでない場合には、DirectWrite 側でなくてもフォント側でなんらかの対応を行えば結合して表示されるという感じでしょうか。

    そのようですね。フォントについては知識がないものでどういう仕組みになっているのかわかりませんが。

    絵文字に限らず普通の結合文字もフォントによって結合されたりされなかったりするので、それと同じことかもしれないですね。

    > あと、#️⃣(keycap: # 、U+0023 U+FE0F U+20E3)は、Chrome でも黒塗りで表示されたのでそういうものだと思っていましたが、JaneStyle では他の keycap と同じように青塗り□ の中に # で表示されるのですね。

    これはフォントにもよると思いますが、Segoe UI Emoji だと Mery でも青塗り□に#で表示されますね。

     |  Kuro  |  返信
  38. カラー絵文字は正常に表示されるのですね。
    Windows 7 でフォントに Segoe UI Emoji を指定しての表示で黒塗り■になります。
    自分もフォントの知識はないので単なる想像ですが、Segoe UI Emoji 内にはカラー絵文字とモノクロ絵文字の両方があり、keycap: # に対するモノクロ絵文字が黒塗り■になっているのかなと思いました。

     |  774  |  返信
  39. すみません、Windows 7 ということを忘れていました。

    Windows 7 で確認してみたところ、確かに黒塗りの豆腐になっていました。

    Windows 10 でもカラーフォントをオフにすると同様なので、フォント側のモノクロ絵文字のグリフ自体が黒塗り豆腐なのでしょうね。

    これはちょっと Mery 側では対応できそうにありませんが、ご了承くださいませ。

     |  Kuro  |  返信
  40. ご確認ありがとうございます。

    > これはちょっと Mery 側では対応できそうにありませんが、ご了承くださいませ。
    了解しました。

     |  774  |  返信
スポンサーリンク