双方向テキスト
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/30 08:12 UTC 版)
ナビゲーションに移動 検索に移動概要
現代において右横書きが必要な文字体系にはヘブライ文字、アラビア文字、シリア文字、ターナ文字などがあるが、これらの文字体系はつねに右から左に書かれるわけではなく、数字(アラビア数字・インド数字)は左から右に書かなければならない。したがって、ひとつの言語だけで書かれる場合であっても、これらの文字体系では双方向テキスト処理を行う必要がある。
双方向テキスト処理は多言語の混在する環境ではとくに重要になる。
表示順と論理順
双方向テキストには表示順[1]と論理順[2]の2種類がある。表示順は、表示方向を(通常は左から右に)固定しておき、右から左に書くテキストは逆順にデータを格納する。この方法では、表示アルゴリズムは単純化されるが、右横書きのテキストを入力するには特殊なことをしなければならない。論理順では、左横書きでも右横書きでも、論理的に先に来るものを先に格納する。自然な方法だが、表示アルゴリズムは複雑になる。
MIMEの双方向テキストに関する規格である RFC-1556 では、アラビア文字(ISO/IEC 8859-6)およびヘブライ文字(ISO/IEC 8859-8)については表示順を既定とし、iso-8859-6-e
、iso-8859-8-e
を指定した場合は明示的に方向を指定、iso-8859-6-i
、iso-8859-8-i
では暗黙の論理的方向に従うとする。W3C では論理順を使用し、接尾辞 -i
が付いた文字集合を指定することを推奨している[3]。
Unicode は論理順を採用している。
以下の節ではいずれも論理順の場合に必要になるアルゴリズムを示す。
初期状態
Unicodeでは、段落ごとに、その最初の強い(後述)文字によって、その段落が左横書きであるか右横書きであるかを決定する[4]。
現実にはこの方法では不便なことが多いため、Microsoft Windowsのメモ帳や macOSのテキストエディットなどでは方向を指定できるようになっている。
文字の種類による方向の決定
ラテン文字や漢字、かななどは既定で左横書きの文字、アラビア文字やヘブライ文字などは右横書きの文字である。両者を混在させた場合(以下の例ではわかりやすくするためラテン文字を右から左に書く文字として扱う)、左横書きの段落で「いろは ABC にほへ DEF とちり」は、
- いろは CBA にほへ FED とちり
のように表示される。すなわち、右から左へ書く文字の部分だけが逆順に表示され、それ以外の部分は右方向へ進む。
しかし、右横書きの中に数字列があらわれる場合は、異なる処理が必要となる。例として「いろは ABC 123 DEF にほへ」は、
- いろは FED 123 CBA にほへ
のように表示される。すなわち「123」は左から右へ表示されるが、「123」全体は先行する文字列の左に置かれ、「123」に後続する文字列もその左に書かれる。このような処理をする必要のある文字を「弱い左横書きの文字」という。弱い文字には、アラビア数字、インド数字、および数字につなげて書かれる単位(°、通貨記号)などがある。これに対して、上記のラテン文字・漢字・かななどは強い左横書きの文字、アラビア文字・ヘブライ文字などは強い右横書きの文字である。
Unicode ではアラビア文字とヘブライ文字の後ろで弱い文字の処理のしかたが異なり、「120%」を前者は「%120」のように表示するが、後者は「120%」のままになる。
スペースや記号類の多くは方向性を持たない中立の文字で、先行する文字が左から右の場合にはその右に、右から左の場合にはその左に書かれる。
現実には、このような文字の種類による暗黙の方向性だけではうまく処理できない場合があるため、明示的に方向を指定するための別の方法(タグづけや制御記号など)を併用する必要がある。
方向によって字形の変わる文字
括弧類や不等号の類は、左から右へ書かれるときと右から左へ書かれるときでは字形が左右反転する。
- ^ 英: visual
- ^ 英: logical
- ^ Authoring HTML: Handling Right-to-left Scripts, W3C, (2014-06-03)
- ^ Unicode Standard Annex #9 の P2
- ^ Unicode Standard Annex #44
- ^ “Unicode 6.3.0”. Unicode Consortium (2013年9月30日). 2015年6月12日閲覧。
- ^ “JTC1/SC2/WG2 N4310: Proposal for Four Characters for Bidi” (2012年7月31日). 2015年6月12日閲覧。
- ^ Aharon Lanin, Mark Davis, Roozbeh Pournader (2012年7月24日). “A Proposal for Bidi Isolates in Unicode”. 2015年6月12日閲覧。
- ^ Unicode Technical Report #36 2.5 Bidirectional Text Supporting
- ^ HTML 4.01 Specifications 8.2.2: The default value of the dir attribute is "ltr" (left-to-right text).
- ^ “CSS Writing Modes Level 3”. W3C (2014年3月20日). 2015年6月12日閲覧。
- ^ “Apple Mac OS X の AppKit におけるバッファオーバーフローの脆弱性”. 脆弱性対策データベース (2010年11月29日). 2015年6月12日閲覧。
- ^ “複数の Mozilla 製品の nsTextFrameUtils::TransformText 関数におけるヒープベースのバッファオーバーフローの脆弱性”. 脆弱性対策データベース (2011年5月17日). 2015年6月12日閲覧。
- ^ “日本語でも危険!アラビア語ファイル名を利用した攻撃とは?”. ASCII.jp - TECH (2011年9月12日). 2015年6月12日閲覧。
- ^ Nicholas Boucher; Ross Anderson (2021-10-30), Trojan Source: Invisible Vulnerabilities, arXiv:2111.00169v1
- 1 双方向テキストとは
- 2 双方向テキストの概要
- 3 規格
- 4 脆弱性
- 双方向テキストのページへのリンク