双方向テキストには、右から左(RTL) と左から右(LTR) の2 つのテキスト方向が含まれます。通常、これは異なる種類のアルファベットを含むテキストに関係しますが、行ごとにテキストの方向が変わる 牛耕書体を指す場合もあります。
一例として、RTL ヘブライ語の名前 Sarah: שרה は、右側に sin (ש)、中央に resh (ר)、左側に heh (ה) と綴られます。多くのコンピュータ プログラムは、テキストを一方向にのみ表示するように設計されていたため、これを正しく表示できませんでした。
ペルシャ文字やアラビア語などのいわゆる右から左に書く文字の中には、ほとんどが右から左に書く文字もありますが、すべてではありません。つまり、数式、数値日付、単位付きの数字は左から右に埋め込まれます。英語などの左から右に書く言語のテキストが埋め込まれている場合も同様です。また、その逆で、アラビア語が英語などの左から右に書く文字に埋め込まれている場合も同様です。
双方向スクリプトのサポート
双方向スクリプトのサポートとは、双方向テキストを正しく表示するコンピュータシステム の機能です。この用語は、多くの場合、「 BiDi」または「bidi」 と短縮されます。
初期のコンピュータのインストールは、単一の書記体系、通常はラテンアルファベットのみに基づく左から右のスクリプトのみをサポートするように設計されていました。新しい文字セットと文字エンコーディングを追加することで、他の多くの左から右のスクリプトをサポートできるようになりましたが、アラビア語やヘブライ語などの右から左のスクリプトを簡単にサポートすることはできず、2つを混在させることは現実的ではありませんでした。右から左のスクリプトは、ISO/IEC 8859-6やISO/IEC 8859-8などのエンコーディングを通じて導入され、文字は(通常は)書き順と読み順で格納されます。左から右の表示順序を右から左の表示順序に単純に反転することは可能ですが、これを行うと左から右のスクリプトを正しく表示する機能が犠牲になります。双方向スクリプトのサポートにより、書き方向に関係なく、同じページ上で異なるスクリプトの文字を混在させることができます。
特に、Unicode標準は、左から右への文字と右から左への文字の混合をどのようにエンコードして表示するかについての詳細なルールを備え、完全な BiDi サポートの基盤を提供します。
Unicode 双方向サポート
Unicode 標準では、文字は「論理的に」、つまり解釈される順序で並べられることを求めており、「視覚的に」表示される順序とは対照的です。この区別は bidi サポートに関係します。なぜなら、bidi 遷移のたびに、視覚的な表現は「論理的」なものではなくなるからです。したがって、bidi サポートを提供するために、Unicode は論理的な文字の順序を正しい視覚的な表現に変換するアルゴリズムを規定しています。この目的のために、Unicode エンコード標準では、すべての文字を「強い」、「弱い」、「中立」、「明示的な書式設定」の 4 つのタイプに分類しています。[1]
強いキャラクター
強い文字とは、明確な方向性を持つ文字です。このタイプの文字の例には、ほとんどのアルファベット文字、音節文字、漢字、非ヨーロッパまたは非アラビア数字、およびそれらのスクリプトに固有の句読点文字が含まれます。
弱いキャラクター
弱い文字とは、方向があいまいな文字です。このタイプの文字の例には、ヨーロッパの数字、東アラビア・インドの数字、算術記号、通貨記号などがあります。
中立的なキャラクター
中立文字は、文脈がなければ方向が判断できません。例としては、段落区切り、タブ、その他のほとんどの空白文字などがあります。コロン、カンマ、ピリオド、ノーブレークスペースなど、多くのスクリプトに共通する句読点記号もこのカテゴリに含まれます。
明示的な書式設定
明示的な書式設定文字は、「方向書式設定文字」とも呼ばれ、アルゴリズムにデフォルトの動作を変更するように指示する特別な Unicode シーケンスです。これらの文字は、「マーク」、「埋め込み」、「分離」、および「オーバーライド」に細分化されます。これらの文字の効果は、段落区切り文字または「ポップ」文字のいずれかが発生するまで続きます。
マーク
「弱い」文字の後に別の「弱い」文字が続く場合、アルゴリズムは最初の隣接する「強い」文字を調べます。これにより、意図しない表示エラーが発生する場合があります。これらのエラーは、「疑似強い」文字によって修正または防止されます。このようなUnicode 制御文字は、マークと呼ばれます。マーク ( U+200E LEFT-TO-RIGHT MARK (LRM) またはU+200F RIGHT-TO-LEFT MARK (RLM)) は、囲まれた弱い文字にその書き込み方向を継承させる位置に挿入されます。
たとえば、アラビア語 (RTL) の文章で英語のブランド名 (LTR) のU+2122 ™ TRADE MARK SIGNを正しく表示するには、商標記号の後に LTR テキストが続かない場合は、商標記号の後に LRM マークを挿入します (例: 「 قرأ Wikipedia™ طوال اليوم.」)。LRM マークが追加されていない場合、弱い文字 ™ の横に強い LTR 文字と強い RTL 文字が続きます。そのため、RTL コンテキストでは RTL とみなされ、間違った順序で表示されます (例: 「قرأ Wikipedia™ طوال اليوم.」)。
埋め込み
「埋め込み」方向書式設定文字は、明示的な書式設定の古典的な Unicode 方式ですが、Unicode 6.3 では「分離」が推奨されています。「埋め込み」は、テキストの一部が方向的に異なるものとして扱われることを示します。埋め込み書式設定文字の範囲内のテキストは、周囲のテキストから独立しているわけではありません。また、埋め込み内の文字は、外部の文字の順序に影響を与える可能性があります。Unicode 6.3 では、方向埋め込みは通常、周囲に強い影響を与えるため、不必要に使いにくいことが認識されました。
分離株
「分離」方向書式設定文字は、テキストが周囲から方向的に分離されているものとして扱われることを示します。Unicode 6.3 以降、ターゲット プラットフォームがサポートしていることがわかれば、新しいドキュメントでこれらの書式設定文字が推奨されます。これらの書式設定文字は、方向のある埋め込みが周囲に強い影響を与えすぎるため、不必要に使いにくいことが明らかになった後に導入されました。従来の「埋め込み」方向書式設定文字とは異なり、「分離」文字は、その範囲外のテキストの順序には影響しません。分離文字はネストでき、埋め込みやオーバーライド内に配置できます。
オーバーライド
「オーバーライド」方向書式設定文字は、部品番号などの特殊なケース(英語、数字、ヘブライ文字が混在する部品番号を右から左に記述するように強制するなど)を可能にするもので、可能な限り使用を避けることをお勧めします。他の方向書式設定文字と同様に、「オーバーライド」は別の文字の中にネストしたり、埋め込みや分離にしたりできます。
ユニコードを使用して上書きする
Unicode U+202D (LTR オーバーライド) を使用すると、方向が左から右から右から左に切り替わります。同様に、U+202E (RTL オーバーライド) を使用すると、方向が右から左から左に切り替わります。Unicode 双方向アルゴリズムを参照してください。
ポップス
「ポップ」方向書式設定文字は、最新の「埋め込み」、「オーバーライド」、または「分離」の範囲を終了します。
実行
アルゴリズムでは、連結された強い文字の各シーケンスは「ラン」と呼ばれます。同じ方向の 2 つの「強い」文字の間に位置する「弱い」文字は、その方向を継承します。異なる書き込み方向の 2 つの「強い」文字の間に位置する「弱い」文字は、メイン コンテキストの書き込み方向を継承します (LTR ドキュメントでは文字は LTR になり、RTL ドキュメントでは RTL になります)。
可能な BiDi 文字タイプの表
安全
Trojan Sourceの脆弱性では、Unicodeの双方向文字が使用されています。[2]
Visual Studio Codeは、 2021年10月にリリースされたバージョン1.62以降、BiDi制御文字を強調表示しています。[3]
Visual Studioは、 2021年12月14日にリリースされたバージョン17.0.3以降、BiDi制御文字を強調表示します。[4]
双方向テキストを使用するスクリプト
エジプトの象形文字
エジプトの 象形文字は双方向に書かれており、明確な「頭」または「尾」を持つ記号が行の先頭を向いていました。
中国語の文字とその他のCJK文字
中国語の文字は、特に標識(銘板など)では、縦書き(上から下、右から左)だけでなく、どちらの方向にも書くことができますが、個々の文字の向きは変わりません。これは中国の観光バスでよく見られます。観光バスでは、会社名が車両の前から後ろに向かって書かれるのが通例です。つまり、バスの右側では右から左に、バスの左側では左から右に書かれています。車両の右側の英語のテキストも、逆の順序で書かれていることが非常によくあります。(下の観光バスと郵便車両の写真を参照してください。)
同様に、日本語の表記体系や韓国語の表記体系など、同じ四角い文字で構成される他のCJK文字も、任意の方向に記述できますが、水平方向では左から右、上から下、垂直方向では上から下、右から左の 2 つの形式が最も一般的な形式です。
-
右側(英語のテキストも含め、テキストは右から左に流れます)
-
左側(テキストは左から右へ)
-
この海南航空の飛行機の右側には、「空航南海」という文字が右から左に書かれています。
-
しかし、この海南航空の航空機の左側には、左から右に走る文字(海南航空)が表示されています。
-
中国郵政の車両の両側に文字が表示されている写真。右のドアには「china post」が「tsop anihc」と表示されている。
ブストロフェドン
ブストロフェドン文字は、古代ギリシャの碑文、古代サバ語(古代南アラビアの言語)、ハンガリーのルーン文字に見られる書体です。この書体では、行ごとに方向が交互になり、通常は個々の文字が反転します。
月のタイプ
ムーンタイプは、視覚障害者のための触覚アルファベットとして発明されたラテンアルファベットのエンボス加工された書体です。当初、テキストは行末で方向が変わりましたが(文字の向きは変わりませんでした)、特別なエンボス線が行末と次の行の始めを結びました。[5] 1990年頃に、左から右への向きに変更されました。
参照
参考文献
- ^ 「UAX #9: Unicode 双方向アルゴリズム」。Unicode.org。2018 年 5 月 9 日。2018 年 6 月 26 日閲覧。
- ^ 「Trojan Source Attacks」. trojansource.codes . 2022年1月17日閲覧。
- ^ 「Visual Studio Code 2021年10月」。code.visualstudio.com 。 2021年11月11日閲覧。
- ^ 「Visual Studio 2022 バージョン 17.0 リリース ノート」。docs.microsoft.com。2022年1月 17 日閲覧。
- ^ 盲人のための月型聖書、ラムザイヤー聖書コレクション、ミネソタ大学ダルース校キャサリン・A・マーティン図書館。
外部リンク
- Unicode 標準付録 #9 双方向アルゴリズム
- 双方向テキストのオーサリング技術に関する W3C ガイドライン - 例とわかりやすい説明が含まれています
- ICU International Components for Unicodeには、双方向アルゴリズムの実装とその他の国際化サービスが含まれています。
