ブログ

3.<アラビア語の⽂字表⽰のしくみ1>

こんにちは、カルチスタッフです。

前回はアラビア⽂字を表⽰する場合の特徴について説明しました。
それでは実際に、パソコン上でアラビア語の単語を表⽰させる場合に、どのような仕組みで⽂字が表⽰されるのかを⾒ていきましょう。

アラビア⽂字には、【変形⽂字】・【結合⽂字】があるため、⼊⼒のUnicode と表⽰⽤のUnicodeが異なります。また、英数字と混在する場合にはUnicode の並び順も変わります。このことから、【⼊⼒Unicode 列から、表⽰⽤Unicode 列を導く】という観点に沿って説明をしたいと思います。

⼿順は次の3つです。
(1)、(2)で、【⼊⼒Unicode 列から、表⽰⽤Unicode 列を導く】処理を⾏い、【最後に⼦⾳字と⺟⾳記号の結合⽂字】を表⽰するための処理を(3)で⾏っていきます。

(1) Unicode を並べ替える(双⽅向処理)
(2)表⽰Unicode の決定(変形⽂字・⼦⾳字同⼠の結合⽂字)
(3)フォントファイルに収録されている情報に基づいて記号の位置を調整する

今回は、
(1) Unicode を並べ替える(双⽅向処理)
について説明したいと思います。

Unicode の並べ替えには以下のような2 つの⼿順があります。
①アラビア⽂字・英数字・その他記号でグループ分けをし、グループ単位で並べ替える
②ミラーリング処理
この⼿順に従って、Unicode 並べ替えを⾏います。

例を⾒ながら順番に説明していきます。
アラビア語で「キャンディー(120 円)」はこのように表記します。201807blog01

これを1⽂字ずつに分けるとこのようになります。
下の図では左から⼊⼒順に、⽂字とUnicode を並べています。
このUnicode 列を並び替えていきます。

20180717blog01

 

① アラビア⽂字・英数字・その他記号でグループ分けをし、グループ単位で並べ替える
まず、⽂字を3つのグループに分けていきます。これを【グループ1】とします。
・アラビア⽂字は【R】グループ
・英数字は【L】グループ
・その他の記号(スペースやカッコなど)は【N】グループ

20180717blog02さらに【N】グループを【R】か【L】に振り分けます。振り分けの条件は以下の2つです。
・【L】の⽂字に囲まれている【N】は【L】に振り分ける
・それ以外の【N】は【R】に振り分ける

5 番⽬に⼊⼒された0x0028 を振り分けてみます。
0x0028 の前には、【R】しかないので、【L】で囲まれていません。よって、0x0028 は【R】になります。

最後に⼊⼒された0x0029 を振り分けてみます。
0x0029 の前には、【L】がありますが、0x0029 の後には⽂字がありませんので、【L】で囲まれていません。よって、0x0028 は【R】になります。
【R】か【L】のどちらかに分類されたグループを【グループ2】とします。

20180717blog03ここまでできたら並べ替えていきます。まずは【グループ2】で並べ替えます。
グループ単位で逆順に並び替えるだけなので簡単です。

20180717blog04次に【グループ2】の中でUnicode を並べ替えていきます。
・並べ替えは【グループ1】単位で⾏います。
・並べ替えを⾏うのは【グループ2】が【R】の⽂字のみです。【グループ2】が【L】⽂字は並び替えを⾏いません。
つまり、【グループ2】が【R】であり、グループ内に、【N】と【R】が混在する場合は、【グループ1】ごとに逆順に並び替えます。

20180717blog05以上でグループ内での並べ替え処理は終了です。

 

②ミラーリング処理
次にミラーリング処理を⾏います。ミラーリング処理とは、カッコ記号などの「対になって使⽤する記号」を⼊れ変える処理のことを⾔います。Unicode に対応するグリフは、左から右へ表記する⾔語をベースにデザインされているので、アラビア⽂字とともにカッコ記号を使⽤する場合は、Unicode を⼊れ変えて使⽤する必要があります。

20180717blog06ミラーリングが必要な⽂字、および対応するUnicode は、The Unicode Consortium の【Unicode Bidirectional Algorithm】に【BidiMirroring.txt】として⽰されています。
⼀部抜粋して、表にすると下記のようになります。

20180717blog07この表から0x0028、0x0029 の対応Unicode がわかりますので、置き換えてみます。

20180717blog08以上でミラーリング処理は終了です。

ここまでで、Unicode の並べ替えは終了です。
最終的な表⽰と⽐べてみるとこのようになります。アラビア⽂字の形は違っていますが、グループごとの並び順は同じようになりました。

20180717blog09今回は、
(1) Unicode を並べ替える(双⽅向処理)
について説明しました。
ここではシンプルな例を挙げましたが、実際の⽂章で記号・数字・英字がアラビア⽂字と混在する場合はもう少し複雑な処理が必要になります。
次回は、
(2) 表⽰Unicode の決定(変形⽂字・結合⽂字)
について説明したいと思います。

 

カルチスタッフ

関連記事

カルチ発行書籍

  1. KEISコードブック_表紙
    2016年1月15日にKEISコードブックを発売しました。
ページ上部へ戻る