タイ語の一つだけの母音が正しく表示されない

  1. お世話になっております。

    最新版の3.2.8を使用していますが、タイ語を入力するときにほぼ完ぺきですが、一つだけがおかしいです。添付画像をご確認してください。上のほうがmeryです。一番最後の言葉を見れば分かると思います。下の方が正しく表示される例です。原因や解決方法などお分かりでしょうか。

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

    https://www.dropbox.com/s/17ay3b2ubcwhcv5/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202021-05-24%20181023.png?dl=0

     |  aek  |  返信
  2. Mery をご愛用いただきありがとうございます。

    タイ語については詳しくないもので、以下の 3 点をご確認いただけますでしょうか。

    (1) タイ語の文章をテキストとして貼り付けていただけると助かります
    → 現象を確認したいのですが画像だとどうやってタイ語を入力すれば良いのかわからないもので…。このフォーラムの返信で内容欄に文字として貼り付けていただけるとたぶん貼り付けられると思うので、テキストとしてデータをいただけますでしょうか。

    (2) [フォント] は何をお使いですか?
    → いただいたスクリーンショットでは Mery と Sublime Text でフォントが異なるような気がするのですが、Mery で設定されているフォント名を教えていただけますでしょうか。

    また、Mery のフォント設定を Sublime Text で使われているフォントと同じフォントにしてご確認いただけると手がかりになるかもしれません。

    (3) [ツール] > [オプション] > [DirectWrite] カテゴリの [DirectWrite を有効にする] はオン・オフのどちらでしょうか?
    → フォントによっては DirectWrite をオンにすることで改善されるケースもあります。

    お手数をおかけして申し訳ございませんが、よろしくお願いいたします。

     |  Kuro  |  返信
  3. 早速のご返事ありがとうございます。

    DirectWriteを無効にしたら解決できました。いろんなフォントを設定してみました。Googleフォントのsarabunだけが問題なく表示されました。ただし、日本語の文字が大きすぎて違和感を感じます。他のフォントは文字のサイズが同じくらいですが、อำの後ろにスペースがないのになぜか空いてます。詳しくは画像を見てください。
    https://www.dropbox.com/s/d5fehonnpap493w/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2021-05-25-005033.jpg?dl=0

    ちなみに文字はこちらです。อะอิอุเอะโอะเอื้อเอียะอำอะอิอุเอะโอะเอื้อเอียะอำ

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

     |  aek  |  返信
  4. > お世話になっております。
    >
    > 最新版の3.2.8を使用していますが、タイ語を入力するときにほぼ完ぺきですが、一つだけがおかしいです。添付画像をご確認してください。上のほうがmeryです。一番最後の言葉を見れば分かると思います。下の方が正しく表示される例です。原因や解決方法などお分かりでしょうか。
    >
    > よろしくお願いいたします。
    >
    > https://www.dropbox.com/s/17ay3b2ubcwhcv5/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202021-05-24%20181023.png?dl=0

    อะ อา อิ อี อุ อู โอ เอีย เอาะ อัวะ เอีอะ อำ

    かな?

     |  luna  |  返信
  5. Kuro 様

    タイ語の SARA AM ำ U+0E33 は文字幅が特殊な母音文字です。
    結合文字と似たような文字幅の調整処理が必要になると思います。

    この文字の個別対応は別のエディタでも行われました。
    参考に…
    https://www.emeditor.com/forums/topic/version-13-0-1-problem-with-thai-character-spacing-only-for-sara-am/

     |  虚  |  返信
  6. Kuroさん

    お役に立つか分かりませんが、タイ文字のUNICODE一覧(http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/u0e00.html)に載っているグリフがメイリオに収録されているかを見てみました。

    結果、タイの通貨記号以外は全滅でした(日本語用フォントなのでそりゃそうかって感じなのですが)
    https://imgur.com/a/9A7cLxw

    HackGenにも収録されていなかったので、源ノ角ゴシック系統のフォントにも収録されていないはずです。基本的には日本語フォントにはタイ文字が含まれていないと思った方がいいのでしょうね。
    なので、日本語フォント利用時にはOSプリインストールのどれかのフォールバックフォントが表示されていると思われます。(字形的に、Leelawadee UIというフォントっぽい?)

     |  yuko  |  返信
  7. >> aek さん、luna さん

    ご確認いただきありがとうございます。いただいた条件でこちらでも現象を再現することができました。

    また、フォントにかかわらず発生、DirectWrite オフだと余計な空白が表示されるとのことで、これらの情報は手がかりになりそうです。

    >> 虚 さん

    ご協力ありがとうございます。

    E〇Editor さんが個別対応されているとのことなので、やはりエディター側で例外的な処理を行う必要がありそうですね。

    私のほうでも調べてみましたところ、秀〇エディタさんもタイ語向けに個別対応されているような情報が見つかりました。(U+0E33 については現在でも制限があるようですが)

    >> yuko さん

    ご協力ありがとうございます。

    なるほど、そういうことでしたか。Mery と Sublime Text で表示が異なるように見えたのは DirectWrite (Mery) と GDI (Sublime Text) のフォールバック先のフォントの違いという可能性が高いですね。

    となると…

    (1) エディター側でタイ語向けに個別対応する必要がある
    (2) フォールバックフォントがタイ語に対応していること

    が条件になりそうです。

    以下は技術的な内容で恐縮ですが、とりあえず現段階で分かったことを記載しておきます。

    (2) のほうはフォント次第ということで恐らく大丈夫だと思いますが、問題は (1) ですね。

    調査のため私のほうでもユニコードの資料をあさってみたのですが、問題となっている U+0E33 はユニコード規格では結合文字 (Mc, Mn, Me) に分類されていないため、Mery でも結合文字として扱わないようになっていました。

    (Mery は結合文字かどうかのデータをテーブルで持っていて、それを使って判断しています)

    U+0E31, U+0E34 ~ U+0E3A は結合文字に分類されているのに [THAI CHARACTER SARA AM] U+0E33 は結合文字じゃないんですね。

    直前の文字の種類によって結合されたりされなかったりするのかもしれませんが、それを実装するとなるとタイ語が理解できないと判断できない気がします。

    E〇Editor さんも秀〇エディタさんも実装のためにタイ語を勉強されたという可能性もありますが、それは最後の手段ということにして、もう少し別のアプローチを探してみたいと思います。

     |  Kuro  |  返信
  8. 補足します。
    タイ語ではなく Unicode 仕様の話です。

    SARA AM ำ U+0E33 は、Mn (Nonspacing_Mark) ではなく
    Lo (Letter_Other) に分類されていますが、
    互換性分解 <compat> は 0E4D 0E32 です。
    U+0E4D は Mn で結合文字です。

    Lo に分類されているのは、これは結合文字(Mn)と通常文字(Lo)の
    Glyph insertion で、文字幅があり、カーニングの対象となり、
    文字の配置を文字ごとを分離してもできる文字だからです。

    グリフ配置が可能なソフトでは、前の文字の「丸」をどの高さ
    に置くかは、前の文字の線の高さと、他の記号の存在により
    調整されることが想定されています。

    結合文字と違ってもともとが2文字なので、そのうちの前の文字
    が文字幅ゼロであっても、次の文字には文字幅があります。
    でも同時に The Grapheme Cluster Break は SpacingMark であり、
    結合文字と同様に、直前の文字とは分離できないのです。

    結合文字の前後が逆なので文字の構成は異なりますが…、
    互換性分解 <compat> の例には ゛ U+309B ゜ U+309C があって、
    空白と U+3099 や空白と U+309A を「結合したのと同じ」通常文字
    になります。

    --------------------
    【UnicodeData.txt】
    --------------------
    0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;

    0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
    0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;;
    --------------------
    互換性分解 <compat> の例
    --------------------
    309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
    309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
    --------------------

    文字要素の区切り位置で、この文字の直前では区切れない
    SpacingMark はほとんどが、結合文字 Mc (SpacingMark) ですが、
    2 文字だけ Lo (Letter other) があります。
    U+0E33 と U+0EB3 です。
    --------------------
    【GraphemeBreakProperty.txt】
    --------------------

    0E33 ; SpacingMark # Lo THAI CHARACTER SARA AM
    0EB3 ; SpacingMark # Lo LAO VOWEL SIGN AM
    0F3E..0F3F ; SpacingMark # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
    0F7F ; SpacingMark # Mc TIBETAN SIGN RNAM BCAD
    1031 ; SpacingMark # Mc MYANMAR VOWEL SIGN E
    103B..103C ; SpacingMark # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
    1056..1057 ; SpacingMark # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
    1084 ; SpacingMark # Mc MYANMAR VOWEL SIGN SHAN E
    17B6 ; SpacingMark # Mc KHMER VOWEL SIGN AA
    17BE..17C5 ; SpacingMark # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
    17C7..17C8 ; SpacingMark # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU

    --------------------

    もうひとつの Lo U+0EB3 も U+0E33 と同じ構成です
    --------------------
    【UnicodeData.txt】
    --------------------
    0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;

    0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
    0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
    --------------------

    結論として U+0E33 は…、
    結合文字としても扱えるけれど、注意が必要、となります。

    文字幅がゼロになることはないので、結合文字の処理と全く同じ
    にはならないはずですが、「2文字の前の部分が結合文字」と
    いうことが特殊なのです。

    前の文字によっては結合しない、という文字ではありません。

    参考に…
    https://github.com/orling/grapheme-splitter/issues/9

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

    若干、脳が溶けてしまいそうなお話なので頭の整理のため引用を多用させていただきますがご了承ください。

    > 互換性分解 <compat> は 0E4D 0E32 です。
    > U+0E4D は Mn で結合文字です。

    ユニコードの資料をみて <compat> という項目は気になっていたものの、何のことか良くわからずスルーしていましたが、なるほどそういうことだったのですね!

    タイ語で実験してみたところ確かに…

    U+0E2D + U+0E33 = อำ
    U+0E2D + U+0E4D + U+0E32 = อํา
    

    で同じ文字が出来上がりました。

    > 結合文字と違ってもともとが2文字なので、そのうちの前の文字
    > が文字幅ゼロであっても、次の文字には文字幅があります。

    互換性分解のほうですと U+0E4D は文字幅ゼロですが、U+0E32 は文字幅があるということですね。

    > でも同時に The Grapheme Cluster Break は SpacingMark であり、
    > 結合文字と同様に、直前の文字とは分離できないのです。

    ふむふむ、Grapheme Cluster Break、ググってきました。基本的に分離できない文字なのですね。

    個人的なメモで恐縮ですが、今後も使うことがあるかもしれないのでメモとして GraphemeBreakProperty.txt へのリンクを貼っておきます。
    http://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakProperty.txt

    > 互換性分解 <compat> の例には ゛ U+309B ゜ U+309C があって、空白と U+3099 や空白と U+309A を「結合したのと同じ」通常文字になります。

    参考になります。

    試しに…

    U+306F + U+309A = ぱ
    U+304B + U+3099 = が
    

    ↑ を入力してみると Mery だと「が」のほうは表示がおかしくなってしまいました。(DirectWrite 有効時)

    > 2 文字だけ Lo (Letter other) があります。
    > U+0E33 と U+0EB3 です。

    これは重要!U+0EB3、ラオス文字?も同様の対応が必要になりそうですね。

    > 文字幅がゼロになることはないので、結合文字の処理と全く同じ
    > にはならないはずですが、「2文字の前の部分が結合文字」と
    > いうことが特殊なのです。
    >
    > 前の文字によっては結合しない、という文字ではありません。

    検証のため Mery のプログラムで単純に U+0E33 を結合文字として識別するようにしてみたところ GDI のほうはそれだけで行けそうです。

    …が、DirectWrite のほうは上記の「ぱ」と「が」の例がダメだったのと同じで問題がありまして、結合文字のロジックを根本的に見直す必要がありそうです。

    > 参考に…
    > https://github.com/orling/grapheme-splitter/issues/9

    情報ありがとうございます。まさか U+0E33 がこんなに大変な文字だったとは…。

    …ユニコードにきちんと対応するのは無理かもしれません。(弱音)

    この問題に対応するためには大幅な変更が必要となり、それに伴い従来より品質が低下してしまうバグが発生する可能性があります。

    そのため、修正版としては公式ブログではなくこちらのフォーラムのほうに投稿させていただくかもしれません。

    その場合は、私はタイ語に詳しくないもので、タイ語向けの修正を必要とされているかたやユニコードに詳しい方、Mery に興味のある方は検証にご協力いただけると大変助かりますので、よろしくお願いいたします。

     |  Kuro  |  返信
  10. Kuroさん、そして、他の皆さんもいろいろのご検討と情報共有、本当にありがとうございます。

    私はプログラミング的なことはお手伝いはできませんが、タイ語のテストでしたらいつでも言ってください。

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

     |  aek  |  返信
  11. きっと「弱音」は…思い違いです。

    > U+0E2D + U+0E33 = อำ
    > U+0E2D + U+0E4D + U+0E32 = อํา

    文字レンダリングで改善すべきなのは…

    GDI だと า の後の改行前に余分な空白が入ること
    DirectWrite だと า の前に余分な空白が入り า が改行記号と重なること
    です。

    上記でレンダリングされた文字形状はどちらも同じですが、もちろん
    内部の文字コードが異なれば、検索で両方に一致させることができません。

    <compat> では文字構成の情報として U+0E4D U+0E32 を示していますが、
    現代のタイ語では U+0E33 の使用がほぼすべてなので、
    タイ語キーボードの E の位置に ำ (U+0E33) は配置されています。

    そして、、、
    <compat> 表記のわかり易い例のつもりで上げた U+309C U+309D が、
    思い違いを誘発してしまいました。

    > 試しに…
    >
    > U+306F + U+309A = ぱ
    > U+304B + U+3099 = が
    >
    > ↑ を入力してみると Mery だと「が」のほうは表示がおかしくなってしまいました。(DirectWrite 有効時)

    これは本題の U+0E33 とは異なる、
    日本語フォントごとの結合文字 U+3099 U+309A の問題です。

    これの、GDI と DirectWrite のレンダリングに関して Mery は
    「結合文字で濁点などの後に余白ができる問題の修正」などで
    解決済みで、結果の正しさはフォントの実装に依存します。

    上記の結果が出るのはおそらく、HackGen か HackGen35 による
    ものかと思います。このフォントでは U+3099 による結合は
    十分には実装されていないようなので「か ゛」のように見えます。

    「ぱ」が正しく見えるのは、半濁点を大きく加工するために
    結合を GSUB 置換で実装していて、置換された結果グリフが
    表示されるためだろうと推測できます。

    U+309A による結合も実装されてはいないようで、置換で用意
    された文字以外では「あ ゜」のように濁点と同じ結果になります。

    GDI では「が 」のように U+3099 の後に空白がつきますが、
    これはおそらく U+3099 のグリフ設定によるものです。

    ということで…、ご心配いりません。

    これをいろいろなフォントで GDI と DirectWrite で表示
    してみてください。結果はいろいろ、それはフォントの違い
    です。

    U+306F + U+309A = ぱ
    U+304B + U+3099 = が
    U+3042 + U+309A = あ゚
    U+3042 + U+3099 = あ゙
    U+672C + U+309A = 本゚
    U+672C + U+3099 = 本゙

    また JIS X 0213 のこれら 25 字は結合文字で、
    この表示も基本的なテストに使えます。文字の後に余分な
    空白がなく、正しく合成されているかを見ます。

    æ̀ ə́ ˥˩ ˩˥ ɚ̀ ʌ̀ ʌ́ ɚ́ ɔ̀ ɔ́ ə̀ 
    か゚ き゚ く゚ け゚ こ゚ カ゚ キ゚ ク゚ ケ゚ コ゚ セ゚ ツ゚ ト゚ ㇷ゚ 

    「ぱ」「が」は Windows に Apple から移動したデータに
    よく見かけ、セリフなどでよく使われる「あ゙」には置換で
    対応しているフォントは多いです。
    漢字にも濁点を付けられるなら、そのフォントはグリフ合成に
    よる結合を実装しています。

    ここで MeryPortable 3.2.8 の表示を試したフォントは以下です。
    MS 明朝 Version 5.31
    MS ゴシック Version 5.32
    BIZ UDゴシック Version 2.00
    源真ゴシック Normal Version 1.002.20150607
    Noto Sans Mono CJK JP Regular Version 1.004
    HackGen v2.3.2
    HackGen35 v2.3.2

    ほかにも結合文字の機能実装をしてあるフォントで確認しました
    ので、大丈夫です、たぶん。

     |  虚  |  返信
  12. すみません、タイ文字の話とは逸れてしまうのですが一応、ご報告をさせていただきます。

    > HackGen か HackGen35 によるものかと思います。このフォントでは U+3099 による結合は十分には実装されていないようなので「か ゛」のように見えます。
    > 「ぱ」が正しく見えるのは、半濁点を大きく加工するために結合を GSUB 置換で実装していて、置換された結果グリフが表示されるためだろうと推測できます。

    実は私がHackGen作者なのですが、虚さんのご意見が大変ヒントになりました。(実はこのあたりの結合文字の実装について、あまり理解をしていませんでした😅)

    HackGenの日本語周りは基本的に源柔ゴシックから転用しています。また私自身はフォントのテーブル情報など中身の話に疎いので、基本的に源柔ゴシックのテーブル情報を崩さないようにしてきました。
    …が、それも完璧ではなかったようです。濁点文字に関する合字情報 (GSUB) が消えてしまっていました。

    源柔ゴシックを観察してみると、本来 U+304B + U+3099 という文字が連結されている場合は「が (U+304C)」を置換表示するようなマッピングが組まれていました。(いわゆる「リガチャ」というものだと認識しています)

    しかしHackGenでは、その「が」のマッピングが消えてしまっていました。かたや、「ぱ (U+3071)」については置換表示のマッピングがたまたま生きていました。これが
    > U+306F + U+309A = ぱ
    > U+304B + U+3099 = が
    > ↑ を入力してみると Mery だと「が」のほうは表示がおかしくなってしまいました。(DirectWrite 有効時)
    の混乱の正体です。

    このあたりのマッピングが崩れないように生成し直してみたところ、HackGenでも以下のように「が」「ぱ」は正しく1文字幅で表示されるようになりました。
    https://imgur.com/a/kp2P6Ec

    また「あ゙ (U+3042 + U+3099)」も1文字幅になっていて、「UNICODE上に あ゙ なんて文字はないのに、どうやってマッピングしている?」と思われるかもしれませんが、源柔ゴシックではUNICODE範囲に無いような独自グリフも収録してあって、そのグリフ宛にマッピングされていました。

    そして、「 本゙ (U+672C + U+3099)」など、漢字+濁点の場合にメイリオでは1文字幅のように表示されますが、これは上記のマッピング(リガチャ)とはまた別の仕組みのように見えます。
    まだ研究中ですが、位置指定(カーニング?)とアンカーという、結合文字の位置に関わりそうな設定がメイリオの濁点 (U+3099) には設定されていました。かたや源柔ゴシックの濁点にはそれがなかったため、源柔ゴシック及びHackGenでは「 本゙ (U+672C + U+3099)」を表示すると2文字幅になるのだと考えています。

    ・位置指定の設定: https://fontforge.org/docs/ui/dialogs/charinfo.html の Simple Glyph Positioning という項目
    ・アンカーの設定: https://fontforge.org/docs/tutorial/editexample6.html の Anchoring marks という項目

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

    更新された HackGen v2.3.4 では、
    U+304B + U+3099 = が
    は正しく表示されました。

    推測が的外れでなかったので安心しました。

     |  虚  |  返信
  14. 恐縮ですが、だいぶ前の話を掘り出して引用します…、

    > さびねこにゃ @sabinekonya · 10月14日
    >
    > @haijinboys 「yudit test page」にあるテキストを読み込ませてみたところ、80行目の部分で改行コードがずれて表示されます。(Malayalamという題名の一つ下です)バージョンは2.1.9.4739です。
    > 0:48 - 2013年10月14日 · 詳細

    > さびねこにゃ @sabinekonya · 10月14日
    >
    > @haijinboys 「yudit test page」はhttp://www.yudit.org/test.html
    >  にあります
    > 0:48 - 2013年10月14日 · 詳細

    > kuro @haijinboys · 10月14日
    >
    > @sabinekonya ご報告ありがとうございます。80 行目の部分は「結合文字」が使用されております。Mery ではある程度は結合文字を表示させることが可能ですが完ぺきではありません。このテキストのように横幅がずれたりすることもありますのでご了承ください。
    > 4:49 - 2013年10月14日 · 詳細

    と、今回は似ています。

    そのテキスト部分は
    ░░░░░░░░░░ Malayalam - മലയാള ം ░░░░░░░░░░
    ജാതിഭേദംമതദ്വേഷമേതുമില്ലാതെ സറ്‍വ്വരും

    で、その時点では GDI 表示で改行記号が文字と重なって
    いました。それから改修され、今は GDI だとズレはあり
    ませんが、DirectWrite だと大きくズレて重なります。

    この原因は、文の中ほどにある
    വേ
    U+0D35 U+0D47
    の U+0D47 が Mc であることです。

    0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; ← Spacing_Mark

    gc ; Mc ; Spacing_Mark
    gc ; Mn ; Nonspacing_Mark

    Mc Spacing_Mark は、文字幅がゼロではない結合文字です。

    一方、多くの結合文字は Mn Nonspacing_Mark で、文字幅が
    ゼロです。

    日本語をテキストエディタで扱うときには Spacing_Mark が
    必要な場面はほぼありません。他の言語、特にアジア系では
    使われています。

    このような背景もあってか、
    Mery では MECSUtils を結合文字であるかどうかの判定に
    使っていますが、これは Mc と Mn を区別していません。
    どちらも結合文字として、同じ処理が行われていました。

    文字幅ゼロではないので Mc ならば、桁を戻る必要がない、
    またはある程度だけ戻る、という挙動に対応しきれていな
    かったことで、行末の改行文字の位置がずれてしまいました。

    GDI では対応できていると思いますが、DirectWrite での処理
    でも、これをうまく扱うことができれば、今回の U+0E33 と
    U+0EB3 も Mc と同じなので、解決の道が見えてくることを
    期待しています。

    0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
    0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;

    たいへんだと思いますが、解析をよろしくお願いいたします。

     |  虚  |  返信
  15. 見てみるとイメージがつかみやすいので、補足します。

    参考に…
    https://www.compart.com/en/unicode/category/Mc
    https://www.compart.com/en/unicode/category/Mn

     |  虚  |  返信
  16. みなさん、ご協力ありがとうございます。

    お待たせしました。時間がかかってしまいましたが、頂いた情報をもとに結合文字のロジックを作り直してみました。

    当初は DirectWrite だけの問題かと思っていましたが、調査していくうちに GDI でもうまく描画できない文字があることがわかりました。

    そのため結合文字の処理全般において大規模な変更を行いましたので、従来は正しく表示されていた結合文字も含めあらゆる問題が発生する可能性があることをあらかじめご了承ください。

    ----------------------------------------------------------------
    【インストーラー版】
    Mery Ver 3.2.9 (32 ビット版) インストーラー [2,755,001 バイト 2021/06/04]
    https://www.haijin-boys.com/download/MerySetup-3.2.9.exe
    ウイルスチェック: https://www.virustotal.com/#/file/35570a596bc72a8ef851c033e4dc549f12ad978e1d0b3c96c4de6e5ae0a34072
    -
    Mery Ver 3.2.9 (64 ビット版) インストーラー [3,310,012 バイト 2021/06/04]
    https://www.haijin-boys.com/download/MerySetup-x64-3.2.9.exe
    ウイルスチェック: https://www.virustotal.com/#/file/dd57eb24affebea40089b2c45227bffa45673f85f81fd80e77c497d345769033
    ----------------------------------------------------------------
    【ポータブル版】
    Mery Ver 3.2.9 (32 ビット版) ポータブル [3,497,343 バイト 2021/06/04]
    https://www.haijin-boys.com/download/MeryPortable-3.2.9.zip
    ウイルスチェック: https://www.virustotal.com/#/file/33e0fe02e4ccb4c0503fc5676a625c759c9fefea46a4153efb29dc19e89905fd
    -
    Mery Ver 3.2.9 (64 ビット版) ポータブル [4,159,423 バイト 2021/06/04]
    https://www.haijin-boys.com/download/MeryPortable-x64-3.2.9.zip
    ウイルスチェック: https://www.virustotal.com/#/file/33cd6976176c39379e116115e2fbdcda13b6c1049a7825408065aaa156b441e3
    ----------------------------------------------------------------
    【ZIP 版】
    Mery Ver 3.2.9 (32 ビット版) ZIP [3,497,189 バイト 2021/06/04]
    https://www.haijin-boys.com/download/Mery-3.2.9.zip
    ウイルスチェック: https://www.virustotal.com/#/file/e6328d18a332124bc30d17a5b8c752658110d98709a464748152f7b8ecdab400
    -
    Mery Ver 3.2.9 (64 ビット版) ZIP [4,159,269 バイト 2021/06/04]
    https://www.haijin-boys.com/download/Mery-x64-3.2.9.zip
    ウイルスチェック: https://www.virustotal.com/#/file/f1be2331f82f7d713dbf5298fbdff953b90013d06f82abb39a81625d3fe43303
    ----------------------------------------------------------------

    【テストした内容】

    ・タイ語の「อะอิอุเอะโอะเอื้อเอียะอำอะอิอุเอะโอะเอื้อเอียะอำ」が正しく表示されている (U+0E33 描画の確認)
    ・ラオス語?の「U+0EA7 + U+0EB3 = ວຳ」が正しく表示されている (U+0EB3 描画の確認)
    → DirectWrite オン・オフどちらでも謎の余白などが入ることはなく、正常に描画されているようです

    ・HackGen v2.3.4 未満で「U+304B + U+3099 = が」が正しく描画されている
    → HackGen v2.3.4 未満では「が」の後に余白が入ってしまいますが、HackGen v2.3.4 では描画、文字幅ともに正常でした

    ・アラビア語には未対応 (現在のところ対応予定はありません)
    → ある程度は描画できているようですが、そもそも右から左方向への描画や編集には対応していないのでだめですね

    >> aek さん

    上記のテスト以外のタイ語もそれなりに表示されているように見えるのですが、タイ語に詳しくないもので、検証にご協力いただけると助かります。

    また、おもに DirectWrite がオンの場合だと思いますが、タイ語は文字の形によっては 1 つ前の行にはみ出してしまう結合文字があるようで、こういった文字を正しく表示するためには [ツール] > [オプション] > [基本] > [行間] で十分な行間を設定してくださいませ。

    >> 虚 さん

    詳細な情報ありがとうございました。

    頂いた情報をもとに調査してみたのですが予想以上に根が深い問題のようで、正直なところ、まだ根本的な対策は見つかっていない状態です。

    今回は結合文字の処理を文字幅の計算よりも "正しい描画を優先 (文字幅を指定せずに描画)" するような仕組みに作り替えたので、場合によっては結合文字が他の文字と重なってしまったり、カーソルが変なところに移動してしまったり、などといった不具合が予想されます。

    しかしながら、現状では対策 (桁を戻って結合文字を描画する方法) がコレしか見つからないもので、従来のバージョンと比較していただき、より多くの結合文字を正しく扱えて不具合の少ないほうを採用させていただきたいと考えています。

    …つまり、挫折しました。スミマセン😭

    >> yuko さん

    HackGen の更新、お疲れ様です。Mery がご迷惑になってなければ良いのですが😅

    「が」の件、Mery の更新と HackGen の更新が重なってるのでちょっとわかりづらいかもしれませんが、今回の Mery で検証した結果を記載しておきます。

    【Mery Ver 3.2.8 + HackGen Ver 2.3.3】

    ・GDI「が ←」
    △描画は正しくできていますが「が」の後に余白が入ってしまいます

    ・DirectWrite「か ゛←」
    ×描画が乱れてしまいます

    【Mery Ver 3.2.9 + HackGen Ver 2.3.3】

    ・GDI「が ←」
    △描画は正しくできていますが余白が入ってしまいます

    ・DirectWrite「が ←」
    △描画は正しくできていますが余白が入ってしまいます。GDI とほぼ同じです

    【Mery Ver 3.2.8 + HackGen Ver 2.3.4】

    ・GDI「が←」
    〇正しく表示されています

    ・DirectWrite「が←」
    〇正しく表示されています

    【Mery Ver 3.2.9 + HackGen Ver 2.3.4】

    ・GDI「が←」
    〇正しく表示されています

    ・DirectWrite「が←」
    〇正しく表示されています

    あと、別件ですが document.Name で「無題」のタブの名前を取得できる仕組みも Ver 3.2.9 で組み込んでおいたので使ってみてくださいね。

     |  Kuro  |  返信
  17. >> Kuroさん

    調査と修正、それにテストと大変お疲れさまでした。

    また document.Name の機能修正もしていただいたとのことで、早速試してみましたが、おかげさまで想像していたマクロが作れました。

    マクロのテストも兼ねて v3.2.9 をしばらく使ってみたいと思います。何か気がつく点があればお知らせしますね!

     |  yuko  |  返信
  18. Kuroさん

    タイ語の表示に関しては完璧だと思います。早速のが対応ありがとうございます!!

     |  aek  |  返信
  19. >> yuko さん

    早速お試しいただきありがとうございます。

    マクロ、上手くいったようで安心しました!

    テスト段階で力尽きてしまったので、テストにご協力いただき大変助かります。

    >> aek さん

    早速ご確認いただきありがとうございます。

    タイ語、上手く表示できているとのことでひと安心ですが、まだまだ油断は禁物ですね。

    またお気づきの点などがありましたらご連絡いただけると助かります。

     |  Kuro  |  返信
  20. Kuro 様

    新しい 3.2.9 の結合文字は、とても良いと思います。ありがとうございます。

    遅くなってすみません。思い付くかぎり、色々と試していました。

    DirectWrite での表示は見事に安定しました。

    GDI については目立ったグリフの変化はないものの、目的となったタイ語と
    そしてラオ語の母音 (U+0E33 と U+0EB3) の表示は正しくなりました。

    (Windows のシステムフォントで Lao ラオ語が対応したのは Vista 以降
    なので、GDI でも XP では表示されません)

    今回お預けなのはアラビア語など BiDi の RTL ですが、これはのちほど。

    従来からの機能への影響も見つかりませんでした。

    検索・置換 に正しく表示される … GDI と DirectWrite
    印刷プレビュー に正しく表示される (印刷は GDI)
    アウトライン に正しく表示される … GDI と DirectWrite

    付箋 (KureiKei 1.0.12) の表示は未対応なので 3.2.8 と同じ

    ZWJ U+200D による Emoji family 表示 … DirectWrite
    結合文字 Me の U+20DD による ○囲み ⃝ … GDI と DirectWrite
    Fira Code のリガチャ (OTF 機能有効化) との併存 … DirectWrite

    ひとつ【ご提案】があります。

    U+0E33 タイ語 母音 SARA AM
    U+0EB3 ラオ語 母音 AM
    は結合文字ではないが、結合文字で文字幅がある文字、と例外で認識
    されるようになりました。

    これとまったく同じ扱いで、5つの声調記号を例外としてほしい。
    U+02E5
    U+02E6
    U+02E7
    U+02E8
    U+02E9

    JIS X 0213 には次の2つが結合文字として含まれています。
    U+02E5 U+02E9
    U+02E9 U+02E5

    この声調記号は1文字では結合せずにそのまま使いますので、従来の
    結合文字にはできませんでした。

    2文字以上連続するときに結合文字となるので、これは Mc と同じよう
    に、文字幅のある結合文字と考えることができます。
    うまくいけば、結合したグリフの後に余分な空白がつかなくなり、
    X 0213 の結合文字すべてに対応できることになります。

    さて…
    ここから、試した内容を具体的に記載しますので、かなりの長文になり
    ます。詳細はご不要な方は、ここで読み終えて下さいますようお願い
    いたします。

    タイ語
    --------------------------------------------------------------------------------
    Thai (結合文字は半角空白を前置)
    --------------------------------------------------------------------------------
    0E00:฀กขฃคฅฆงจฉชซฌญฎฏ
    0E10:ฐฑฒณดตถทธนบปผฝพฟ
    0E20:ภมยรฤลฦวศษสหฬอฮฯ
    0E30:ะ ั า ำ ิ ี ึ ื ุ ู ฺ฻฼฽฾฿
    0E40:เแโใไๅๆ ็ ่ ้ ๊ ๋ ์ ํ ๎๏
    0E50:๐๑๒๓๔๕๖๗๘๙๚๛๜๝๞๟
    --------------------------------------------------------------------------------
    Thai Mc; ※なし※
    --------------------------------------------------------------------------------
    Thai Mn;
    --------------------------------------------------------------------------------
    0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
    0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
    0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
    0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
    0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
    0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;;;;
    0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
    0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
    0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
    0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;
    0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
    0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
    0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
    0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
    0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
    0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;;
    0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
    --------------------------------------------------------------------------------

    ラオ語
    --------------------------------------------------------------------------------
    Lao (結合文字は半角空白を前置)
    --------------------------------------------------------------------------------
    0E80:຀ກຂ຃ຄ຅ຆງຈຉຊ຋ຌຍຎຏ
    0E90:ຐຑຒຓດຕຖທຘນບປຜຝພຟ
    0EA0:ຠມຢຣ຤ລ຦ວຨຩສຫຬອຮຯ
    0EB0:ະັາຳິີຶື຺ຸູົຼຽ຾຿
    0EC0:ເແໂໃໄ໅ໆ໇່້໊໋໌ໍ໎໏
    0ED0:໐໑໒໓໔໕໖໗໘໙໚໛ໜໝໞໟ
    --------------------------------------------------------------------------------
    Lao Mc; ※なし※
    --------------------------------------------------------------------------------
    Lao Mn;
    --------------------------------------------------------------------------------
    0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
    0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
    0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
    0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
    0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
    0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
    0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
    0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
    0EBA;LAO SIGN PALI VIRAMA;Mn;9;NSM;;;;;N;;;;;
    0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
    0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
    0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
    0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
    0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
    0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
    0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
    0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
    --------------------------------------------------------------------------------

    Thai と Lao には Mc が含まれていませんので、他の結合文字での
    表示の乱れはありませんでした。

    複数の Mn が結合するため、ゼロ幅文字をゼロ幅表示する必要が
    あります。(既定の動作)

    ラオ語の文例は、後で示します。

    これまで結合文字を構成する Me : Enclosing_Mark について言及して
    いませんでした。
    エディタにとって Me は Mn : Nonspacing_Mark と同じ扱いです。

    ベース文字に結合文字が続くとき、Mn と Mc では、結合した結果の
    文字の属性は、ベース文字と同じになります。しかし Me だけは例外で、
    結合した文字は必ず Symbol に変化するので、Mn と区別されています。

    U+20DD ⃝ U+20E4 ⃤ など、! Lo と U+20E4 の合成 !⃤ は Symbol

    【UnicodeData.txt】 Unicode 12.0
    **すべての Me は 13 字**
    --------------------------------------------------------------------------------
    0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
    0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
    1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;;
    20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
    20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
    20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
    20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
    20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
    20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
    20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;;
    A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
    A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
    A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
    --------------------------------------------------------------------------------
    参考
    compart : List of Unicode Characters of Caterory "Enclosing Mark"
    https://www.compart.com/en/unicode/category/Me

    Nonspacing_Mark (Mn)
    【UnicodeData.txt】 Unicode 12.0
    **すべての Mn は 1826 字**

    Spacing_Mark (Mc)
    【UnicodeData.txt】 Unicode 12.0
    **すべての Mc は 429 字**

    Mc についてはすべての文字を表示確認のために、後ほど記載します。

    結合していると、カーソルも1文字として移動するため、その内容を
    確かめるには、結合文字の「後からカーソルをあてて」Alt+X で、
    U+0E33 などのコードポイント表示にします。これを後から前に続ける
    ことで結合を解除し、逆の手順で前のコードポイントから順に Alt+X
    で結合した文字に戻します。

    表示を確かめるときに、その存在を見やすくするため、すべての Mc を
    マーカーで色付け表示します。必要なくなったら、マーカーの「有効」
    を解除して消去します。

    Mc に加えて、U+0E33 と U+0EB3 をマーカーの対象とします。
    先に提案でお願いした声調記号もマーカーしておきます。

    次の2つのマーカーを「☑ 正規表現」で、同じ色にして、追加します。

    \P{M}\p{M}*[\p{Mc}\x{0E33}\x{0EB3}]

    [\x{02E5}-\x{02E9}]++

    ラオ語の例
    --------------------------------------------------------------------------------
    https://laodictionary.net/index.php/term/ວັຈນານຸກົມພາສາລາວ+ໂດຍ+ມະຫາສິລາ+ວີຣະວົງສ໌,ກ່ຳ.xhtml
    ກ່ຳ
    1 ນ. ຊື່ເຂົ້າຫນຽວແນວນຶ່ງ ທັງເປືອກນອກ ແລະ ເມັດໃນສີກ່ຳ; 2 ວ. ເສົ້າຫມອງ, ສີແຫລ້ ເກືອບດຳ.


    1 p.m. Name of a kind of glutinous rice with both outer husk and grain in dark color ຳ; 2 w. Sad, pale.

    もち米玄米
    --------------------------------------------------------------------------------
    ຂະແໜງທີ່ຕິດພັນກັບການທ່ອງທ່ຽວທີ່​ກ່ຳ​ລັງ​ເລີ່ມ​ມີ​ການ​ເໜັງ​ຕີງ, ເຊິງສະຖາບັນຄົ້ນຄວ້າເສດຖະກິດແຫ່ງຊາດ ຄາດເສດຖະກິດ ສປປ ລາວ ໃນປີ 2021 ຈະຂະຫຍາຍຕົວໃນລະດັບ 4%.
    The tourism-related sector is just beginning to grow, with the National Economic Research Institute predicting that Lao PDR's economy will grow by 4% in 2021.
    観光関連セクターは繁栄し始めており、国立経済研究所はラオスの経済が2021年に4%成長すると予測しています。
    --------------------------------------------------------------------------------

    ZWSP
    --------------------------------------------------------------------------------
    ຂະແໜງທີ່ຕິດພັນກັບການທ່ອງທ່ຽວທີ່​ກ່ຳ​ລັງ​ເລ
    で、カーソル移動が何回か止まるのは、そこに ZWSP (U+200B) があるため
    --------------------------------------------------------------------------------
    200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;
    2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
    --------------------------------------------------------------------------------

    ※【参考】※
    https://w3c.github.io/sealreq/
    sealreq
    Southeast Asia Language Enablement (sealreq)

    https://www.w3.org/International/sealreq/thai/
    Thai Layout Requirements (Draft)
    W3C Editor's Draft 26 March 2021

    https://www.w3.org/International/sealreq/lao/
    Lao Layout Requirements (Draft)
    W3C Editor's Draft 26 March 2021

    アラビア語の表示について

    BiDi (双方向) の RTL (右から左方向) の言語では、アラビア語、
    イディッシュ語、ヘブライ語などがあります。

    3.2.9 ではこれまでと同じ表示となっています。

    とくに GDI では、アラビア語についてだけ、RTL のグリフが
    かなり正しく表示されています。これは、言語の特性によるもの
    です。
    アラビア語のグリフは、フォントの機能と、レンダリング機構が
    共に揃ってこそ、表示が完成されます。
    また Windows 10 は Windows XP より長い文節で正しく表示できて
    いるのは、Windows の Font Shaping Engine の改良が進んでいる
    ためです。

    イディッシュ語、ヘブライ語は、RTL でグリフが配置されますが、
    そのグリフの形や大きさはほとんど変化しません。そのため、
    バラバラのグリフが、逆の順で点々と並べられ、行末の改行の位置
    にはズレが生じません。

    アラビア語は、文字が語のどこに配置されるかで、文字の形が大きく
    変化します。おなじ文字(アリフバーター)でも、
    独立形
    語頭形
    語中形
    語末形
    として形が変化する上に、独立形のほかは隣の文字と接続します。
    返される一連のグリフの長さが大きく変わるので、文字送りのズレ
    が大きく、行末で改行が離れた位置に表示されているように、思い
    ます。

    書字の向きが RTL とはいっても、数字や外来語(英字)などに
    ついては LTR に変わり、その文節が終わればまた RTL に戻る、
    など BiDi は動的に方向が変わる言語です。

    おおざっぱに言うと…、
    このような言語表記を実現するため、フォントの機能では、前後の
    文脈により、高度に置換を切り替える設定がされます。
    レンダリングの機構は、RTL のまとまりを分析してフォントに渡し、
    フォントの機能は、接続されたひとかたまりのグリフを返します。

    だから、アラビア語は、かなりできあがった状態の連続グリフを
    表示できています。しかし実用に進むには、カーソルの移動を制御
    しないとなりません。Unicode 制御文字による方向の切り替えが、
    できるようになれば、縦書きができる Mery なら、きっと BiDi に
    もかなりの程度に対応できると信じています。

    ここから、いくつかの言語での表示例を並べます。
    Mc が正しく表示できるようになったことで、どのような言語の
    表示ができるようになり、どこは同じなのかがよくわかります。

    マーカーを有効にして、ご覧ください。
    また、3.2.8 と 3.2.9 を /sp 起動オプションで並行起動して、
    同じウィンドウの表示位置にして、タスクバーで切り換えて
    見比べると違いがわかりやすいです。

    Are you COVID-19 vaccinated?
     Yes, I am.
     No, I'm not.
    
    
    COVID-19 の予防接種を受けていますか?
      はい、そうです。
      いいえ、違います。
    
    
    タイ語  Thai
    คุณได้รับการฉีดวัคซีน COVID-19 หรือไม่?
      ใช่ฉันเป็น
      ไม่ฉันไม่ใช่.
    
    ラオ語  Lao
    ທ່ານໄດ້ຮັບການ ສຳກຢາບໍ?
      ແມ່ນ​ແລ້ວ.
      ບໍ່​, ຂ້ອຍ​ບໍ່​ແມ່ນ.
    
    ベトナム語  Vietnamese
    Bạn đã tiêm vắc xin COVID-19 chưa?
      Vâng là tôi.
      Không, tôi không phải.
    
    ヒンディー語  Hindi / Devanagari
    क्या आपको COVID-19 का टीका लगाया गया है?
      हाँ मैं।
      नहीं, मैं नहीं हूँ।
    
    ネパール語  Nepali / Devanagari
    तपाईं COVID-19 खोप लगाईएको छ?
      म नै हो।
      होइन, म होइन।
    
    マラーティー語  Marathi / Devanagari
    आपण कोविड -१ vacc लसीकरण केले आहे?
      हो मी आहे.
      नाही मी नाही.
    
    ベンガル語  Bengali
    আপনি COVID-19 টিকা আছে?
      হ্যাঁ আমি.
      না আমি নই.
    
    パンジャブ語  Punjabi / Gurmukhi
    ਕੀ ਤੁਸੀਂ ਕੋਵੀਡ -19 ਟੀਕੇ ਲਗਵਾ ਰਹੇ ਹੋ?
      ਹਾਂ ਮੈਂ ਹਾਂ.
      ਨਾ ਮੈਂ ਨਹੀਂ ਹਾਂ.
    
    グジャラト語  Gujarati
    શું તમે કોવિડ -19 રસી છે?
      હા હું છું.
      કોઈ હું નથી.
    
    オリヤ語  Oriya
    ଆପଣ COVID-19 ଟୀକାକରଣ କରିଛନ୍ତି କି?
      ହଁ, ମୁଁ
      ନା ମୁଁ ନୁହେଁ।
    
    タミル語  Tamil
    நீங்கள் COVID-19 தடுப்பூசி போடுகிறீர்களா?
      ஆமாம் நான்தான்.
      நான் இல்ல.
    
    テルグ語  Telugu
    మీరు COVID-19 టీకాలు వేస్తున్నారా?
      అవును నేనే.
      నేను కాదు.
    
    カンナダ語  Kannada
    ನೀವು COVID-19 ಲಸಿಕೆ ಹಾಕಿದ್ದೀರಾ?
      ಹೌದು ನಾನೆ.
      ಇಲ್ಲ ನಾನಲ್ಲ.
    
    マラヤーラム語  Malayalam
    നിങ്ങൾ COVID-19 വാക്സിനേഷൻ എടുത്തിട്ടുണ്ടോ?
      അതെ, ഞാൻ.
      അല്ല ഞാൻ അല്ല.
    
    シンハラ語  Sinhala
    ඔබ COVID-19 එන්නත ලබා තිබේද?
      ඔව් මමයි.
      නැහැ, මම නැහැ.
    
    ミャンマー語  Myanmar
    COVID-19 ကာကွယ်ဆေးထိုးပါသလား။
      ဟုတ်ပါတယ်။
      မဟုတ်ပါ။
    
    クメール語  Khmer
    តើអ្នកបានចាក់វ៉ាក់សាំងគម្រប -១១ ហើយឬនៅ?
      បាទ​គឺ​ខ្ញុំ។
      ទេ​មិនមែន​ខ្ញុំ​ទេ។
    
    
    
    
    アラビア語  Arabic
    هل تم تطعيمك بـ COVID-19؟
      نعم أنا.
      لا أنا لست كذلك.
    
        hal tama tateimuk bi COVID-19؟
        naeam 'ana.
        la 'ana last kadhalika.
    
    イディッシュ語  Yiddish
    זענט איר וואַקסאַנייטיד COVID-19?
      יא איך בין.
      ניין איך בין נישט.
    
    ヘブライ語  Hebrew
    האם אתה מחוסן COVID-19?
      אני כן.
      לא אני לא.
    
    ペルシャ語  Persian
    آیا شما واکسن COVID-19 هستید؟
      بله من هستم.
      نه من نیستم.
    
    ウイグル語  Uyghur
    سىز COVID-19 ۋاكسىنىسى بارمۇ؟
      ھەئە ، مەن.
      ياق ، مەن ئەمەس.
    
    ウルドゥ語  Urdu
    کیا آپ کوویڈ ۔19 کو ٹیکہ لگایا گیا ہے؟
      ہاں میں ہوں.
      نہیں میں نہیں.
    
    シンド語  Shindhi
    ڇا توهان COVID-19 ٽئڪسين آهيو؟
      ها آئون آهيان.
      نه مان ناهيان.
    
    パシュト語  Pashto
    ایا تاسو CoVID-19 واکسین شوی؟
      هو زه يم.
      نه زه نه یم.
    
    
    
    
    モンゴル語
    Та COVID-19 вакцин хийлгэсэн үү?
      Тиймээ би.
      Үгүй би биш.
    
    
    ウクライナ語
    Ви щеплені COVID-19?
      Так я.
      Ні.
    
    カザフ語
    Сіз COVID-19 вакцинасын алдыңыз ба?
      Иә мен сондаймын.
      Жоқ.
    
    ジョージア(グルジア)語  Georgian
    ვაქცინირებული ხართ COVID-19?
      Დიახ მე ვარ.
      Არა, მე არ ვარ.
    
    アムハラ語
    እርስዎ COVID-19 ክትባት ይሰጡዎታል?
      አዎ ነኝ.
      አይ አይደለሁም.
    
    アルメニア語
    Դուք COVID-19 պատվաստվա՞ծ եք:
      Այո ես եմ.
      Ոչ, ես չեմ.
    
    オランダ語
    Bent u ingeënt tegen COVID-19?
      Ja dat ben ik.
      Nee ik ben niet.
    
    ギリシャ語
    Εμβολιάζετε το COVID-19;
      Ναι είμαι.
      Οχι δεν είμαι.
    
    キルギス語
    Сиз COVID-19 эмдөөсүзбү?
      Ооба мен.
      Жок, мен андай эмесмин.
    
    クルド語
    Ma hûn COVID-19 aşî kirine?
      Wekî Elmasê bineqişe.
      Na ez nînim.
    
    スペイン語
    ¿Está vacunado contra COVID-19?
      Sí lo soy.
      No no soy.
    
    セルビア語
    Да ли сте вакцинисани против ЦОВИД-19?
      Да, јесам.
      Не нисам.
    
    タジク語
    Оё шумо COVID-19 эм кардаед?
      Бале ман ҳастам.
      Не ман нестам.
    
    タタール語
    Сез COVID-19 прививкасы ясыйсызмы?
      Әйе.
      Юк, мин түгел.
    
    チェコ語
    Jste očkováni vakcínou COVID-19?
      Ano jsem.
      Ne nejsem.
    
    デンマーク語
    Er du COVID-19 vaccineret?
      Ja, jeg er.
      Nej jeg er ikke.
    
    ドイツ語
    Sind Sie COVID-19 geimpft?
      Ja bin ich.
      Nein, bin ich nicht.
    
    トルコ語
    COVID-19 aşısı mısınız?
      Evet benim.
      Hayır, değilim.
    
    ハワイ語
    Ua kanikau ʻia ʻo COVID-19?
      Ae,' o wau.
      ʻAʻole, ʻaʻole wau.
    
    ハンガリー語
    Ön beoltotta a COVID-19-et?
      Igen, az vagyok.
      Nem, én nem.
    
    フィンランド語
    Oletko rokotettu COVID-19: een?
      Kyllä minä olen.
      Ei en ole.
    
    フランス語
    Êtes-vous vacciné contre le COVID-19?
      Oui.
      Non, je ne suis pas.
    
    ブルガリア語
    Ваксинирани ли сте с COVID-19?
      Да, аз съм.
      Не, не съм.
    
    ベラルーシ語
    Вы прышчэплены COVID-19?
      Так.
      Не, я не.
    
    ポーランド語
    Czy jesteś zaszczepiony COVID-19?
      Tak, jestem.
      Nie, nie jestem.
    
    ボスニア語
    Jeste li cijepljeni protiv COVID-19?
      Da, jesam.
      Ne nisam.
    
    ポルトガル語
    Você está vacinado com COVID-19?
      Sim eu estou.
      Não, eu não sou.
    
    マオリ語
    Kei te werohia a koe COVID-19?
      Ae, ko ahau tenei.
      Kao, ehara au.
    
    マケドニア語
    Дали сте вакцинирани против КОВИД-19?
      Да јас сум.
      Не не сум.
    
    ヨルバ語
    Njẹ o jẹ ajesara COVID-19?
      Bẹẹni emi.
      Rara, Emi kii ṣe.
    
    ラテン語
    XIX, tu COVID vaccinated?
      Ita, sum.
      Minime non sum.
    
    ラトビア語
    Vai esat vakcinēts ar COVID-19?
      Jā, es esmu.
      Nē, es neesmu.
    
    リトアニア語
    Ar esate paskiepytas COVID-19?
      Taip, aš esu.
      Ne, aš nesu.
    
    ルーマニア語
    Sunteți vaccinat COVID-19?
      Da, sunt.
      Nu, nu sunt.
    
    ルクセンブルク語
    Sidd Dir COVID-19 geimpft?
      Jo ech sinn.
      Nee sin ech net.
    
    ロシア語
    Вы вакцинированы от COVID-19?
      Да.
      Нет я не.
    
        Vy vaktsinirovany ot COVID-19?
         Da.
         Net ya ne.
    
    韓国語
    COVID-19 예방 접종을 맞으 셨나요?
      네, 그렇습니다.
      아니, 아니야.
    
        COVID-19 yebang jeobjong-eul maj-eu syeossnayo?
         ne, geuleohseubnida.
         ani, aniya.
    

    改行位置の確認をした文字リストです。

    【UnicodeData.txt】 Unicode 12.0
    **すべての Mc は 429 字**

    UnicodeData_12_00_Mc_Char.txt (UnicodeData.txt から抽出変換)

     ः
     ऻ
     ा
     ि
     ी
     ॉ
     ॊ
     ो
     ौ
     ॎ
     ॏ
     ং
     ঃ
     া
     ি
     ী
     ে
     ৈ
     ো
     ৌ
     ৗ
     ਃ
     ਾ
     ਿ
     ੀ
     ઃ
     ા
     િ
     ી
     ૉ
     ો
     ૌ
     ଂ
     ଃ
     ା
     ୀ
     େ
     ୈ
     ୋ
     ୌ
     ୗ
     ா
     ி
     ு
     ூ
     ெ
     ே
     ை
     ொ
     ோ
     ௌ
     ௗ
     ఁ
     ం
     ః
     ు
     ూ
     ృ
     ౄ
     ಂ
     ಃ
     ಾ
     ೀ
     ು
     ೂ
     ೃ
     ೄ
     ೇ
     ೈ
     ೊ
     ೋ
     ೕ
     ೖ
     ം
     ഃ
     ാ
     ി
     ീ
     െ
     േ
     ൈ
     ൊ
     ോ
     ൌ
     ൗ
     ං
     ඃ
     ා
     ැ
     ෑ
     ෘ
     ෙ
     ේ
     ෛ
     ො
     ෝ
     ෞ
     ෟ
     ෲ
     ෳ
     ༾
     ༿
     ཿ
     ါ
     ာ
     ေ
     း
     ျ
     ြ
     ၖ
     ၗ
     ၢ
     ၣ
     ၤ
     ၧ
     ၨ
     ၩ
     ၪ
     ၫ
     ၬ
     ၭ
     ႃ
     ႄ
     ႇ
     ႈ
     ႉ
     ႊ
     ႋ
     ႌ
     ႏ
     ႚ
     ႛ
     ႜ
     ា
     ើ
     ឿ
     ៀ
     េ
     ែ
     ៃ
     ោ
     ៅ
     ះ
     ៈ
     ᤣ
     ᤤ
     ᤥ
     ᤦ
     ᤩ
     ᤪ
     ᤫ
     ᤰ
     ᤱ
     ᤳ
     ᤴ
     ᤵ
     ᤶ
     ᤷ
     ᤸ
     ᨙ
     ᨚ
     ᩕ
     ᩗ
     ᩡ
     ᩣ
     ᩤ
     ᩭ
     ᩮ
     ᩯ
     ᩰ
     ᩱ
     ᩲ
     ᬄ
     ᬵ
     ᬻ
     ᬽ
     ᬾ
     ᬿ
     ᭀ
     ᭁ
     ᭃ
     ᭄
     ᮂ
     ᮡ
     ᮦ
     ᮧ
     ᮪
     ᯧ
     ᯪ
     ᯫ
     ᯬ
     ᯮ
     ᯲
     ᯳
     ᰤ
     ᰥ
     ᰦ
     ᰧ
     ᰨ
     ᰩ
     ᰪ
     ᰫ
     ᰴ
     ᰵ
     ᳡
     ᳷
     〮
     〯
     ꠣ
     ꠤ
     ꠧ
     ꢀ
     ꢁ
     ꢴ
     ꢵ
     ꢶ
     ꢷ
     ꢸ
     ꢹ
     ꢺ
     ꢻ
     ꢼ
     ꢽ
     ꢾ
     ꢿ
     ꣀ
     ꣁ
     ꣂ
     ꣃ
     ꥒ
     ꥓
     ꦃ
     ꦴ
     ꦵ
     ꦺ
     ꦻ
     ꦾ
     ꦿ
     ꧀
     ꨯ
     ꨰ
     ꨳ
     ꨴ
     ꩍ
     ꩻ
     ꩽ
     ꫫ
     ꫮ
     ꫯ
     ꫵ
     ꯣ
     ꯤ
     ꯦ
     ꯧ
     ꯩ
     ꯪ
     ꯬
     𑀀
     𑀂
     𑂂
     𑂰
     𑂱
     𑂲
     𑂷
     𑂸
     𑄬
     𑅅
     𑅆
     𑆂
     𑆳
     𑆴
     𑆵
     𑆿
     𑇀
     𑈬
     𑈭
     𑈮
     𑈲
     𑈳
     𑈵
     𑋠
     𑋡
     𑋢
     𑌂
     𑌃
     𑌾
     𑌿
     𑍁
     𑍂
     𑍃
     𑍄
     𑍇
     𑍈
     𑍋
     𑍌
     𑍍
     𑍗
     𑍢
     𑍣
     𑐵
     𑐶
     𑐷
     𑑀
     𑑁
     𑑅
     𑒰
     𑒱
     𑒲
     𑒹
     𑒻
     𑒼
     𑒽
     𑒾
     𑓁
     𑖯
     𑖰
     𑖱
     𑖸
     𑖹
     𑖺
     𑖻
     𑖾
     𑘰
     𑘱
     𑘲
     𑘻
     𑘼
     𑘾
     𑚬
     𑚮
     𑚯
     𑚶
     𑜠
     𑜡
     𑜦
     𑠬
     𑠭
     𑠮
     𑠸
     𑧑
     𑧒
     𑧓
     𑧜
     𑧝
     𑧞
     𑧟
     𑧤
     𑨹
     𑩗
     𑩘
     𑪗
     𑰯
     𑰾
     𑲩
     𑲱
     𑲴
     𑶊
     𑶋
     𑶌
     𑶍
     𑶎
     𑶓
     𑶔
     𑶖
     𑻵
     𑻶
     𖽑
     𖽒
     𖽓
     𖽔
     𖽕
     𖽖
     𖽗
     𖽘
     𖽙
     𖽚
     𖽛
     𖽜
     𖽝
     𖽞
     𖽟
     𖽠
     𖽡
     𖽢
     𖽣
     𖽤
     𖽥
     𖽦
     𖽧
     𖽨
     𖽩
     𖽪
     𖽫
     𖽬
     𖽭
     𖽮
     𖽯
     𖽰
     𖽱
     𖽲
     𖽳
     𖽴
     𖽵
     𖽶
     𖽷
     𖽸
     𖽹
     𖽺
     𖽻
     𖽼
     𖽽
     𖽾
     𖽿
     𖾀
     𖾁
     𖾂
     𖾃
     𖾄
     𖾅
     𖾆
     𖾇
     𝅥
     𝅦
     𝅭
     𝅮
     𝅯
     𝅰
     𝅱
     𝅲
    

    UnicodeData_12_00_Mc.txt (UnicodeData.txt から抽出)

    0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    093B;DEVANAGARI VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;;
    093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
    094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
    094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    094E;DEVANAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;
    094F;DEVANAGARI VOWEL SIGN AW;Mc;0;L;;;;;N;;;;;
    0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
    0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
    09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
    09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
    0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
    0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
    0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
    0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
    0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
    0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
    0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
    0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
    0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
    0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
    0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
    0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
    0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
    0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
    0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
    0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
    0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
    0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
    0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
    0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
    0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
    0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
    0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
    0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
    0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
    0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
    0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
    0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
    0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
    0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
    0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
    0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
    0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
    0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
    0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
    0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
    0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
    0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
    0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
    0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
    0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
    0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
    0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
    0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
    0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
    0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
    0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
    0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
    0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
    0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;;;;
    0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;;;;
    0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;;;;
    102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
    102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;;
    103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
    1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
    1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
    1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;;
    1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;;
    1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;;
    1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;;
    1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;;
    1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;;
    106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;;
    106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;;
    106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;;
    106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;;
    1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;;
    1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;;
    1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;;
    1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;;
    1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;;
    108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;;
    108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;;
    108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;;
    108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;;
    109A;MYANMAR SIGN KHAMTI TONE-1;Mc;0;L;;;;;N;;;;;
    109B;MYANMAR SIGN KHAMTI TONE-3;Mc;0;L;;;;;N;;;;;
    109C;MYANMAR VOWEL SIGN AITON A;Mc;0;L;;;;;N;;;;;
    17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
    17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
    17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
    17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
    17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
    17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
    17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
    1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
    1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
    1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
    192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
    192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;;
    1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
    1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
    1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;;
    1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;;
    1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;;
    1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;;
    1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;;
    1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;;
    1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    1A55;TAI THAM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
    1A57;TAI THAM CONSONANT SIGN LA TANG LAI;Mc;0;L;;;;;N;;;;;
    1A61;TAI THAM VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
    1A63;TAI THAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    1A64;TAI THAM VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
    1A6D;TAI THAM VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
    1A6E;TAI THAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    1A6F;TAI THAM VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
    1A70;TAI THAM VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
    1A71;TAI THAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    1A72;TAI THAM VOWEL SIGN THAM AI;Mc;0;L;;;;;N;;;;;
    1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;;;;
    1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;;;;
    1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;;;;
    1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;;;;
    1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;;
    1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;;;;
    1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;;;;
    1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;;;;
    1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;;;;
    1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;;;;
    1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
    1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;;
    1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;;
    1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;;
    1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;;
    1BE7;BATAK VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    1BEA;BATAK VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    1BEB;BATAK VOWEL SIGN KARO I;Mc;0;L;;;;;N;;;;;
    1BEC;BATAK VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    1BEE;BATAK VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    1BF2;BATAK PANGOLAT;Mc;9;L;;;;;N;;;;;
    1BF3;BATAK PANONGONAN;Mc;9;L;;;;;N;;;;;
    1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
    1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
    1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
    1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
    1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;;
    1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;;
    1CE1;VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA;Mc;0;L;;;;;N;;;;;
    1CF7;VEDIC SIGN ATIKRAMA;Mc;0;L;;;;;N;;;;;
    302E;HANGUL SINGLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;
    302F;HANGUL DOUBLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;
    A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
    A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
    A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
    A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;;
    A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
    A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
    A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
    A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;
    A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;
    A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
    A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
    A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;;
    A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;;
    A983;JAVANESE SIGN WIGNYAN;Mc;0;L;;;;;N;;;;;
    A9B4;JAVANESE VOWEL SIGN TARUNG;Mc;0;L;;;;;N;;;;;
    A9B5;JAVANESE VOWEL SIGN TOLONG;Mc;0;L;;;;;N;;;;;
    A9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;;
    A9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;;
    A9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;;
    A9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;;
    A9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;;
    AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;;
    AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;;
    AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;;
    AA7B;MYANMAR SIGN PAO KAREN TONE;Mc;0;L;;;;;N;;;;;
    AA7D;MYANMAR SIGN TAI LAING TONE-5;Mc;0;L;;;;;N;;;;;
    AAEB;MEETEI MAYEK VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    AAEE;MEETEI MAYEK VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    AAEF;MEETEI MAYEK VOWEL SIGN AAU;Mc;0;L;;;;;N;;;;;
    AAF5;MEETEI MAYEK VOWEL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    ABE3;MEETEI MAYEK VOWEL SIGN ONAP;Mc;0;L;;;;;N;;;;;
    ABE4;MEETEI MAYEK VOWEL SIGN INAP;Mc;0;L;;;;;N;;;;;
    ABE6;MEETEI MAYEK VOWEL SIGN YENAP;Mc;0;L;;;;;N;;;;;
    ABE7;MEETEI MAYEK VOWEL SIGN SOUNAP;Mc;0;L;;;;;N;;;;;
    ABE9;MEETEI MAYEK VOWEL SIGN CHEINAP;Mc;0;L;;;;;N;;;;;
    ABEA;MEETEI MAYEK VOWEL SIGN NUNG;Mc;0;L;;;;;N;;;;;
    ABEC;MEETEI MAYEK LUM IYEK;Mc;0;L;;;;;N;;;;;
    11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
    11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    11082;KAITHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    110B0;KAITHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    110B1;KAITHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    110B2;KAITHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    110B7;KAITHI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    110B8;KAITHI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    1112C;CHAKMA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
    11182;SHARADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    111B3;SHARADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    111B4;SHARADA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    111B5;SHARADA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    111BF;SHARADA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    111C0;SHARADA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
    1122C;KHOJKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    1122D;KHOJKI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    1122E;KHOJKI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    11232;KHOJKI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    11233;KHOJKI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    11235;KHOJKI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
    112E0;KHUDAWADI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    112E1;KHUDAWADI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    112E2;KHUDAWADI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    11302;GRANTHA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
    11303;GRANTHA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    1133E;GRANTHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    1133F;GRANTHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    11341;GRANTHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    11342;GRANTHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
    11343;GRANTHA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
    11344;GRANTHA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
    11347;GRANTHA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
    11348;GRANTHA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    1134B;GRANTHA VOWEL SIGN OO;Mc;0;L;11347 1133E;;;;N;;;;;
    1134C;GRANTHA VOWEL SIGN AU;Mc;0;L;11347 11357;;;;N;;;;;
    1134D;GRANTHA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
    11357;GRANTHA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
    11362;GRANTHA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;
    11363;GRANTHA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;
    11435;NEWA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    11436;NEWA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    11437;NEWA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    11440;NEWA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    11441;NEWA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    11445;NEWA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    114B0;TIRHUTA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    114B1;TIRHUTA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    114B2;TIRHUTA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    114B9;TIRHUTA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    114BB;TIRHUTA VOWEL SIGN AI;Mc;0;L;114B9 114BA;;;;N;;;;;
    114BC;TIRHUTA VOWEL SIGN O;Mc;0;L;114B9 114B0;;;;N;;;;;
    114BD;TIRHUTA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
    114BE;TIRHUTA VOWEL SIGN AU;Mc;0;L;114B9 114BD;;;;N;;;;;
    114C1;TIRHUTA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    115AF;SIDDHAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    115B0;SIDDHAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    115B1;SIDDHAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    115B8;SIDDHAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    115B9;SIDDHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    115BA;SIDDHAM VOWEL SIGN O;Mc;0;L;115B8 115AF;;;;N;;;;;
    115BB;SIDDHAM VOWEL SIGN AU;Mc;0;L;115B9 115AF;;;;N;;;;;
    115BE;SIDDHAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    11630;MODI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    11631;MODI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    11632;MODI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    1163B;MODI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    1163C;MODI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    1163E;MODI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    116AC;TAKRI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    116AE;TAKRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    116AF;TAKRI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
    11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
    11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    11726;AHOM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    1182C;DOGRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    1182D;DOGRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    1182E;DOGRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    11838;DOGRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    119D1;NANDINAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    119D2;NANDINAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    119D3;NANDINAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    119DC;NANDINAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    119DD;NANDINAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    119DE;NANDINAGARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
    119DF;NANDINAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    119E4;NANDINAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;
    11A39;ZANABAZAR SQUARE SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    11A57;SOYOMBO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    11A58;SOYOMBO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    11A97;SOYOMBO SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    11C2F;BHAIKSUKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    11C3E;BHAIKSUKI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    11CA9;MARCHEN SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
    11CB1;MARCHEN VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    11CB4;MARCHEN VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    11D8A;GUNJALA GONDI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    11D8B;GUNJALA GONDI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    11D8C;GUNJALA GONDI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    11D8D;GUNJALA GONDI VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    11D8E;GUNJALA GONDI VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
    11D93;GUNJALA GONDI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
    11D94;GUNJALA GONDI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    11D96;GUNJALA GONDI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
    11EF5;MAKASAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;;
    16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;;
    16F53;MIAO SIGN REFORMED ASPIRATION;Mc;0;L;;;;;N;;;;;
    16F54;MIAO VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
    16F55;MIAO VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
    16F56;MIAO VOWEL SIGN AHH;Mc;0;L;;;;;N;;;;;
    16F57;MIAO VOWEL SIGN AN;Mc;0;L;;;;;N;;;;;
    16F58;MIAO VOWEL SIGN ANG;Mc;0;L;;;;;N;;;;;
    16F59;MIAO VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
    16F5A;MIAO VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
    16F5B;MIAO VOWEL SIGN WO;Mc;0;L;;;;;N;;;;;
    16F5C;MIAO VOWEL SIGN W;Mc;0;L;;;;;N;;;;;
    16F5D;MIAO VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
    16F5E;MIAO VOWEL SIGN EN;Mc;0;L;;;;;N;;;;;
    16F5F;MIAO VOWEL SIGN ENG;Mc;0;L;;;;;N;;;;;
    16F60;MIAO VOWEL SIGN OEY;Mc;0;L;;;;;N;;;;;
    16F61;MIAO VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
    16F62;MIAO VOWEL SIGN IA;Mc;0;L;;;;;N;;;;;
    16F63;MIAO VOWEL SIGN IAN;Mc;0;L;;;;;N;;;;;
    16F64;MIAO VOWEL SIGN IANG;Mc;0;L;;;;;N;;;;;
    16F65;MIAO VOWEL SIGN IO;Mc;0;L;;;;;N;;;;;
    16F66;MIAO VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
    16F67;MIAO VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
    16F68;MIAO VOWEL SIGN IU;Mc;0;L;;;;;N;;;;;
    16F69;MIAO VOWEL SIGN ING;Mc;0;L;;;;;N;;;;;
    16F6A;MIAO VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
    16F6B;MIAO VOWEL SIGN UA;Mc;0;L;;;;;N;;;;;
    16F6C;MIAO VOWEL SIGN UAN;Mc;0;L;;;;;N;;;;;
    16F6D;MIAO VOWEL SIGN UANG;Mc;0;L;;;;;N;;;;;
    16F6E;MIAO VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
    16F6F;MIAO VOWEL SIGN UEI;Mc;0;L;;;;;N;;;;;
    16F70;MIAO VOWEL SIGN UNG;Mc;0;L;;;;;N;;;;;
    16F71;MIAO VOWEL SIGN Y;Mc;0;L;;;;;N;;;;;
    16F72;MIAO VOWEL SIGN YI;Mc;0;L;;;;;N;;;;;
    16F73;MIAO VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
    16F74;MIAO VOWEL SIGN AEE;Mc;0;L;;;;;N;;;;;
    16F75;MIAO VOWEL SIGN ERR;Mc;0;L;;;;;N;;;;;
    16F76;MIAO VOWEL SIGN ROUNDED ERR;Mc;0;L;;;;;N;;;;;
    16F77;MIAO VOWEL SIGN ER;Mc;0;L;;;;;N;;;;;
    16F78;MIAO VOWEL SIGN ROUNDED ER;Mc;0;L;;;;;N;;;;;
    16F79;MIAO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
    16F7A;MIAO VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
    16F7B;MIAO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
    16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;;
    16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;;
    16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;;
    16F7F;MIAO VOWEL SIGN UOG;Mc;0;L;;;;;N;;;;;
    16F80;MIAO VOWEL SIGN YUI;Mc;0;L;;;;;N;;;;;
    16F81;MIAO VOWEL SIGN OG;Mc;0;L;;;;;N;;;;;
    16F82;MIAO VOWEL SIGN OER;Mc;0;L;;;;;N;;;;;
    16F83;MIAO VOWEL SIGN VW;Mc;0;L;;;;;N;;;;;
    16F84;MIAO VOWEL SIGN IG;Mc;0;L;;;;;N;;;;;
    16F85;MIAO VOWEL SIGN EA;Mc;0;L;;;;;N;;;;;
    16F86;MIAO VOWEL SIGN IONG;Mc;0;L;;;;;N;;;;;
    16F87;MIAO VOWEL SIGN UI;Mc;0;L;;;;;N;;;;;
    1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;;
    1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;;
    1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;;
    1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;;
    1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;;
    1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;;
    1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;;
    1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;;
    

    お疲れさまでした。

     |  虚  |  返信
  21. お疲れ様です。検証にご協力いただきありがとうございます。

    タイ語が正常に表示されているとのことで、とりあえずは本件の目的は達成できたようで安心しました。

    > 検索・置換 に正しく表示される … GDI と DirectWrite

    検索・置換ダイアログの文字入力欄は Windows の標準コンポーネントを使っているだけなので DirectWrite には対応しておらず、今回、変更も加えていません。

    Windows の標準コンポーネントなのでその文字入力欄ではアラビア語が正常に扱えたりしますw

    > 印刷プレビュー に正しく表示される (印刷は GDI)

    GDI のほうも変更を加えているので、ご確認いただけて助かります。

    > アウトライン に正しく表示される … GDI と DirectWrite

    アウトラインも Windows の標準コンポーネントなので DirectWrite には対応していないですね。今回、変更も加えていません。

    > 付箋 (KureiKei 1.0.12) の表示は未対応なので 3.2.8 と同じ

    付箋は Mery のエディターコンポーネントを埋め込んでいるので、ずいぶん昔のバージョンのままですね。

    > これとまったく同じ扱いで、5つの声調記号を例外としてほしい。
    > U+02E5
    > U+02E6
    > U+02E7
    > U+02E8
    > U+02E9

    調べてみたのですが、結合文字として扱うのは問題がありそうです。

    試しに U+0E33 と同様の扱いで例外としてみたところ、確かに余分な空白はつかなくなりましたが、結合文字として扱った場合、U+02E5 と U+02E9 の隙間にカーソルを移動することができなくなってしまいます。

    メモ帳や VS Code だと、「U+02E5 U+02E9」の描画は結合されますが、結合された状態でも U+02E5 と U+02E9 の隙間にカーソルを移動することができます。

    どうやら、描画としては結合されているように見えますが、文字としてはそれぞれが単独で存在しているようです。

    この動作を実現するためには、U+02E5 U+02E9 が結合された状態における U+02E5 の部分と U+02E9 の部分の文字幅をそれぞれ取得する必要があるのですが、そのような仕組みが用意されているのかはわかりませんでした。

    思い浮かぶ方法としては…

    まず、「U+02E5 U+02E9」が結合した状態の文字幅を取得します。例えば…

    U+02E5 U+02E9 の文字幅 = 15px
    

    その文字幅を半分に割った値を U+02E5 の部分の文字幅とします。

    U+02E5 の文字幅 = Round(15 / 2) = 8px
    

    「U+02E5 U+02E9」が結合した状態の文字幅から U+02E5 の部分の文字幅を引いた値を U+02E9 とします。

    U+02E9 の文字幅 = 15 - 8 = 7px
    

    と、こんな感じで例外的な処理を組み込むことぐらいでしょうか。

    ちなみに、Fira Code のリガチャも、描画としては結合されているけど文字としては単独で存在するという点では同じですが、結合されてもそれぞれの文字幅が変化しないため、従来の Mery で対応できています。

    (もしかするとリガチャでも描画が結合された際にそれぞれの文字幅が変化するケースがあるのかもしれませんが、その場合は上記の理由により対応できていません)

    「U+02E5 U+02E9」と「U+02E9 U+02E5」以外にもリガチャなどで同様の問題が起きる文字があるのであれば、根本的な対策 (結合された状態におけるそれぞれの文字幅を取得する方法、またはそれに代わる仕組み) が必要になるかと思います。

    > ここから、試した内容を具体的に記載しますので、かなりの長文になります。

    詳細な検証結果のご連絡、ありがとうございます。とても助かります。

    いただいた方法でマーカーとサンプル文書を使って従来の Mery と比較してみました。

    Ver 3.2.9 ではずいぶん描画が改善されていますね。…という嬉しさもありますが、それよりもこの検証方法とデータが素晴らしいです!

    ひと通り拝見しましたが、これは資料としても大変貴重なものになると思います。また、今後の開発・検証作業においても大いに役に立ちそうです。

    アラビア語についてはお話を聞く限りだと、なんとかなるかもしれないのでは?といった気持ちになってきて技術的な好奇心はくすぐられますね。

    しかし、メモ帳だと「→」を押したら左に進んで「←」を押したら右に進んで。途中に「a」とか入力すると変なところに「a」が挿入されて。こういった動作が正しいのだとは思いますが、コントローラーをさかさまにしてプレイするマリオぐらいに頭が付いていきません…。

    アラビア語につきましては面白そうな案件ですがとりあえず保留とさせていただきたいと思います。

    いただいた資料は読み物としても興味深いので改めて熟読させていただき、今後の開発の参考にさせていただきたいと思います。

     |  Kuro  |  返信
  22. > ちなみに、Fira Code のリガチャも、描画としては結合されているけど文字としては単独で存在するという点では同じですが、結合されてもそれぞれの文字幅が変化しないため、従来の Mery で対応できています。

    Fira Codeの文字幅がどう設定されているのか気になったので調べてみました。(一人言ですので、だからどうした、という結論はありませんが…)

    https://imgur.com/a/y5eSFog

    上記ページの1枚目が = (U+003D)、2枚目が = を2つ重ねたときのリガチャ後のグリフです。

    グリフ1つ1つには幅の設定(上記画像だと右上の「1200」という数値)がセットされていますが、リガチャ後のグリフはリガチャ前と同じ幅となっているようです。そのうえでX軸上マイナス方向に向かって線を引っ張っています。
    これを通常のリガチャ無しグリフで行うと、前置グリフと表示が被ってしまうことになりますが、リガチャによって前置グリフの表示は消え、リガチャ後の文字しか表示されないから問題ない、という感じでしょうか。

    つまり、現状リガチャ後の表示は以下のようになっているのだろうと推察します。

    ①カーソル移動は、= 1文字ずつで移動する
    ②2文字目の = とリガチャ後グリフの X: 0 が基点となる形で、リガチャ後グリフが表示されている

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