双方向テキスト
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/30 08:12 UTC 版)
規格
JIS X 0211
制御機能を定義した ECMA-48 の第5版(1991)、それを元にした ISO/IEC 6429:1992、およびそれに対応する日本の標準 JIS X 0211-1994 「符号化文字用制御機能」では、横書き(左から右、右から左)と縦書き(上から下、下から上)、行の進む方向として縦書きなら「左から右・右から左」、横書きなら「上から下・下から上」に対応している。表示方向は機能 SPD(表示方向選択)によって選択される。書字方向を指定する機能としては SCP(文字進路選択)、SDS(方向付き文字列開始)、SRS(逆文字列開始)、SIMD(自動移動方向選択)がある。
双方向テキストの取り扱い方とその問題点については ECMA TR-53 (1991) にまとめられており、JIS X 0211 もこの文献を参照している。
Unicode
Unicodeでは、各文字は暗黙の方向に関する属性(Bidirectional Class)を持っている[5]。見かけが同じようであっても、ヘブライ文字の א (U+05D0 Hebrew Letter Alef) は R(強い右横書きの文字)、数学記号の ℵ (U+2135 Alef Symbol) は L(強い左横書きの文字)である。
くわえて、明示的に文字の方向を変えるための以下の記号を定義している。
コード | 名称 |
---|---|
U+061C | Arabic letter mark (ALM) |
U+200E | Left-to-right mark (LRM) |
U+200F | Right-to-left mark (RLM) |
U+202A | Left-to-right embedding (LRE) |
U+202B | Right-to-left embedding (RLE) |
U+202C | Pop directional formatting (PDF) |
U+202D | Left-to-right override (LRO) |
U+202E | Right-to-left override (RLO) |
U+2066 | Left-to-right isolate (LRI) |
U+2067 | Right-to-left isolate (RLI) |
U+2068 | First strong isolate (FSI) |
U+2069 | Pop directional isolate (PDI) |
この中で LRM と RLM と ALM が最もよく使われる。LRM は表示されない強い左横書きの文字として働く。RLM と ALM は同様に強い右横書きの文字として働く。LRM と RLMは ISO/IEC 8859-6 にも存在する。ALM はアラビア文字用で、Unicode 6.3 で追加された。
LRO は以降の文字列を強制的に左から右へ(RLO は右から左へ)表示する。
LRE は以降の文字列を左から右(RLE は右から左)の方向性に置く。右から左へ書かれる文章の中で引用句として左から右へ書かれる文章を使いたいときに使用する。たとえば「いろは ABC にほへ」は、
- 左から右の段落では「いろは CBA にほへ」
- 右から左の段落では「にほへ CBA いろは」
と書かれるが、右から左への段落でも「いろは CBA にほへ」の順序で書きたいときに LRE を使用する。
PDF は、LRE, RLE, LRO, RLO ではじまる状態を終わらせる。
LRI、RLI、PDI、FSI は Unicode 6.3 で新しく追加されたもので[6][7][8]、最初の3つは LRE, RLE, PDF に似ているが、指定した文字列全体は中立な文字列として働き、周囲の文字列の方向に影響を与えない。FSI は LRI/RLI に似ているが、右横書きであるか左横書きであるかが後続する最初の強い文字の種類によって決定される。
LRO、RLO の使用はセキュリティ上の問題から非推奨となっている[9]。
HTML
HTML 4.01 では、暗黙の文字の進行方向は左横書きに固定されている[10]。dir 属性によって方向を変更することができる。また、通常の表示順を変更することのできる BDO 要素があり、たとえば表示順に並んでいるテクストを正しく表示するのに使うことができる。これは Unicode の LRO/RLO/PDF と同じ役割を果たす。
Unicode の LRM と RLM は、それぞれ文字実体参照 ‎
と ‏
として定義されている。
HTML5 では、BDI (Text directionality isolation) 要素が追加され、要素の中のテキストが周辺に影響を及ぼさないように分離することができる。
CSS
CSS 2 では direction
と unicode-bidi
の2つの属性が定義されている。direction
属性には値として rtl
と ltr
のいずれかを指定する。unicode-bidi
属性には値として normal
、embed
、bidi-override
のいずれかを指定する。embed
は Unicode の LRE/RLE による方法、bidi-override
は同 LRO/RLO と同様の方法を使用する。
CSS 3 では unicode-bidi
に isolate
、isolate-override
、plaintext
が追加されている[11]。
- ^ 英: 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
- 双方向テキストのページへのリンク