これは重要!U+0EB3、ラオス文字?も同様の対応が必要になりそうですね。いうことが特殊なのです。前の文字によっては結合しない、という文字ではありません。ほうはそれだけで行けそうです。ほうは上記の「ぱ」と「が」の例がダメだったのと同じで問題がありまして、結合文字のロジックを根本的に見直す必要がありそうです。https://github.com/orling/grapheme-splitter/issues/9情報ありがとうございます。こんなに大変な文字だったとは...。...ユニコードにきちんと対応するのは無理かもしれません。(弱音)この問題に対応するためには大幅な変更が必要となり、それに伴い従来より品質が低下してしまうバグが発生する可能性があります。そのため、修正版としては公式ブログではなくこちらのフォーラムのほうに投稿させていただくかもしれません。興味のある方は検証にご協力いただけると大変助かりますので、よろしくお願いいたします。返信Kuroさん、そして、他の皆さんもいろいろのご検討と情報共有、本当にありがとうございます。私はプログラミング的なことはお手伝いはできませんが、タイ語のテストでしたらいつでも言ってください。返信きっと「弱音」は...思い違いです。改行記号と重なることです。上記でレンダリングされた文字形状はどちらも同じですが、もちろん内部の文字コードが異なれば、検索で両方に一致させることができません。思い違いを誘発してしまいました。「が」のほうは表示がおかしくなってしまいました。「結合文字で濁点などの後に余白ができる問題の修正」などで解決済みで、結果の正しさはフォントの実装に依存します。よるものかと思います。゙」のように見えます。置換で実装していて、置換された結果グリフが表示されるためだろうと推測できます。゚」のように濁点と同じ結果になります。グリフ設定によるものです。いうことで...、ご心配いりません。表示してみてください。結果はいろいろ、それはフォントの違いです。字は結合文字で、この表示も基本的なテストに使えます。文字の後に余分な空白がなく、正しく合成されているかを見ます。移動したデータによく見かけ、セリフなどでよく使われる「あ゙」には置換で対応しているフォントは多いです。漢字にも濁点を付けられるなら、そのフォントはグリフ合成による結合を実装しています。表示を試したフォントは以下です。v2.3.2ほかにも結合文字の機能実装をしてあるフォントで確認しましたので、大丈夫です、たぶん。返信すみません、タイ文字の話とは逸れてしまうのですが一応、ご報告をさせていただきます。よるものかと思います。゙」のように見えます。置換で実装していて、置換された結果グリフが表示されるためだろうと推測できます。実は私がHackGen作者なのですが、虚さんのご意見が大変ヒントになりました。(実はこのあたりの結合文字の実装について、あまり理解をしていませんでした😅)HackGenの日本語周りは基本的に源柔ゴシックから転用しています。私自身はフォントのテーブル情報など中身の話に疎いので、基本的に源柔ゴシックのテーブル情報を崩さないようにしてきました。...が、それも完璧ではなかったようです。消えてしまっていました。(U+304C)」を置換表示するようなマッピングが組まれていました。(いわゆる「リガチャ」というものだと認識しています)しかしHackGenでは、その「が」のマッピングが消えてしまっていました。(U+3071)」については置換表示のマッピングがたまたま生きていました。「が」のほうは表示がおかしくなってしまいました。有効時)の混乱の正体です。このあたりのマッピングが崩れないように生成し直してみたところ、HackGenでも以下のように「が」「ぱ」は正しく1文字幅で表示されるようになりました。なんて文字はないのに、どうやってマッピングしている?」と思われるかもしれませんが、源柔ゴシックではUNICODE範囲に無いような独自グリフも収録してあって、そのグリフ宛にマッピングされていました。U+3099)」など、漢字+濁点の場合にメイリオでは1文字幅のように表示されますが、これは上記のマッピング(リガチャ)とはまた別の仕組みのように見えます。U+3099)」を表示すると2文字幅になるのだと考えています。返信ご確認いただきありがとうございます。正しく表示されました。推測が的外れでなかったので安心しました。page」にあるテキストを読み込ませてみたところ、80行目の部分で改行コードがずれて表示されます。(Malayalamという題名の一つ下です)バージョンは2.1.9.4739です。ご報告ありがとうございます。行目の部分は「結合文字」が使用されております。ある程度は結合文字を表示させることが可能ですが完ぺきではありません。このテキストのように横幅がずれたりすることもありますのでご了承ください。詳細と、今回は似ています。表示で改行記号が文字と重なっていました。大きくズレて重なります。文字幅がゼロではない結合文字です。必要な場面はほぼありません。他の言語、特にアジア系では使われています。どちらも結合文字として、同じ処理が行われていました。桁を戻る必要がない、またはある程度だけ戻る、という挙動に対応しきれていなかったことで、行末の改行文字の位置がずれてしまいました。同じなので、解決の道が見えてくることを期待しています。0EB2;;;;N;;;;;たいへんだと思いますが、解析をよろしくお願いいたします。見てみるとイメージがつかみやすいので、補足します。返信みなさん、ご協力ありがとうございます。時間がかかってしまいましたが、頂いた情報をもとに結合文字のロジックを作り直してみました。うまく描画できない文字があることがわかりました。そのため結合文字の処理全般において大規模な変更を行いましたので、従来は正しく表示されていた結合文字も含めあらゆる問題が発生する可能性があることをあらかじめご了承ください。さん上記のテスト以外のタイ語もそれなりに表示されているように見えるのですが、タイ語に詳しくないもので、検証にご協力いただけると助かります。十分な行間を設定してくださいませ。さん詳細な情報ありがとうございました。頂いた情報をもとに調査してみたのですが予想以上に根が深い問題のようで、正直なところ、まだ根本的な対策は見つかっていない状態です。するような仕組みに作り替えたので、場合によっては結合文字が他の文字と重なってしまったり、カーソルが変なところに移動してしまったり、などといった不具合が予想されます。コレしか見つからないもので、従来のバージョンと比較していただき、より多くの結合文字を正しく扱えて不具合の少ないほうを採用させていただきたいと考えています。...つまり、挫折しました。検証した結果を記載しておきます。△描画は正しくできていますが余白が入ってしまいます。組み込んでおいたので使ってみてくださいね。Kuroさん調査と修正、それにテストと大変お疲れさまでした。機能修正もしていただいたとのことで、早速試してみましたが、おかげさまで想像していたマクロが作れました。使ってみたいと思います。返信Kuroさんタイ語の表示に関しては完璧だと思います。さん早速お試しいただきありがとうございます。マクロ、上手くいったようで安心しました!テスト段階で力尽きてしまったので、テストにご協力いただき大変助かります。さん早速ご確認いただきありがとうございます。タイ語、上手く表示できているとのことでひと安心ですが、まだまだ油断は禁物ですね。お気づきの点などがありましたらご連絡いただけると助かります。結合文字は、とても良いと思います。ありがとうございます。遅くなってすみません。思い付くかぎり、色々と試していました。表示は見事に安定しました。表示は正しくなりました。従来からの機能への影響も見つかりませんでした。DirectWriteひとつ【ご提案】があります。AMは結合文字ではないが、結合文字で文字幅がある文字、と例外で認識されるようになりました。これとまったく同じ扱いで、5つの声調記号を例外としてほしい。次の2つが結合文字として含まれています。U+02E5この声調記号は1文字では結合せずにそのまま使いますので、従来の結合文字にはできませんでした。同じように、文字幅のある結合文字と考えることができます。結合文字すべてに対応できることになります。...ここから、試した内容を具体的に記載しますので、かなりの長文になります。詳細はご不要な方は、ここで読み終えて下さいますようお願いいたします。含まれていませんので、他の結合文字での表示の乱れはありませんでした。結合するため、ゼロ幅文字をゼロ幅表示する必要があります。(既定の動作)ラオ語の文例は、後で示します。ついて言及していませんでした。結合した結果の文字の属性は、ベース文字と同じになります。ついてはすべての文字を表示確認のために、後ほど記載します。コードポイント表示にします。Alt+Xで結合した文字に戻します。マーカーで色付け表示します。必要なくなったら、マーカーの「有効」を解除して消去します。マーカーの対象とします。先に提案でお願いした声調記号もマーカーしておきます。正規表現」で、同じ色にして、追加します。2021.観光関連セクターは繁栄し始めており、国立経済研究所はラオスの経済が2021年に4%成長すると予測しています。言語では、アラビア語、イディッシュ語、ヘブライ語などがあります。これまでと同じ表示となっています。グリフがかなり正しく表示されています。これは、言語の特性によるものです。アラビア語のグリフは、フォントの機能と、レンダリング機構が共に揃ってこそ、表示が完成されます。改良が進んでいるためです。グリフが配置されますが、そのグリフの形や大きさはほとんど変化しません。そのため、バラバラのグリフが、逆の順で点々と並べられ、行末の改行の位置にはズレが生じません。アラビア語は、文字が語のどこに配置されるかで、文字の形が大きく変化します。して形が変化する上に、独立形のほかは隣の文字と接続します。返される一連のグリフの長さが大きく変わるので、文字送りのズレが大きく、行末で改行が離れた位置に表示されているように、思います。動的に方向が変わる言語です。おおざっぱに言うと...、このような言語表記を実現するため、フォントの機能では、前後の文脈により、高度に置換を切り替える設定がされます。まとまりを分析してフォントに渡し、フォントの機能は、接続されたひとかたまりのグリフを返します。アラビア語は、かなりできあがった状態の連続グリフを表示できています。実用に進むには、カーソルの移動を制御しないとなりません。かなりの程度に対応できると信じています。ここから、いくつかの言語での表示例を並べます。正しく表示できるようになったことで、どのような言語の表示ができるようになり、どこは同じなのかがよくわかります。マーカーを有効にして、ご覧ください。同じウィンドウの表示位置にして、タスクバーで切り換えて見比べると違いがわかりやすいです。