ブログ

4.<アラビア語の⽂字表⽰のしくみ2>

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

前回に引き続き、パソコン上でアラビア語の単語を表⽰させる場合に、どのような仕組みで⽂字が表⽰されるのかを⾒ていきましょう。

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

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

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

今回は、
(2)表⽰Unicode の決定(変形⽂字・⼦⾳字同⼠の結合⽂字)
について説明したいと思います。

【表⽰Unicode の決定】には以下のような4つの⼿順があります。

① 【表⽰ Unicode の決定】処理対象Unicode 列を抽出
② ⽂字の結合
③ ⽂字の変形(表⽰ Unicode の決定)
④ ①で抽出した処理対象 Unicode 列を元に戻す

この⼿順に従って、【表⽰Unicode の決定】処理を⾏います。

少し冗⻑になりますが、1⼯程ずつ例を挙げながら説明していきます。

 

① 【表⽰ Unicode の決定】処理対象Unicode 列を抽出
表⽰Unicode の決定処理は、【(1) Unicode を並べ替える(双⽅向処理)】で決めたグループ単位で⾏います。処理を⾏うのは【R】グループのみです。
また、【②⽂字の結合】【③⽂字の変形(表⽰Unicode の決定)】では、⺟⾳記号を無視して処理を⾏うため、⺟⾳記号もここで便宜上削除します。【①で抽出した処理対象Unicode列を元に戻す】で⺟⾳記号は元に戻します。

20180723blog01それでは例を挙げて順番に説明していきます。
(1) Unicode を並べ替える(双⽅向処理)で例として使⽤した「キャンディー(120 円)」の並び替え後のUnicode 列は、このようになります。

20180723blog02【表⽰Unicode の決定】処理を⾏うのは【R】グループのみです。
また、【表⽰Unicode の決定】では、⺟⾳記号を無視して処理を⾏いますが、この例では⺟⾳記号がありませんので処理対象Unicode 列はこのようになります。

20180723blog03ここで、【表⽰Unicode の決定】処理をわかりやすく説明するためにもう1つ例を挙げたいと思います。

アラビア語で「広告」はこのように表記します。

201807blog02これを1⽂字ずつに分けるとこのようになります。

20180723blog04上図では左から⼊⼒順に、⽂字とUnicode を並べています。
まずは前回説明した(1) Unicode を並べ替える(双⽅向処理)を⾏いますが、この例ではすべてアラビア⽂字なので、並び替えは起こりません。1つの【R】グループで構成されていることになります。

20180723blog05そして、【②⽂字の結合】【③⽂字の変形(表⽰Unicode の決定)】は、⺟⾳記号を無視して処理を⾏いますので処理対象Unicode 列はこのようになります。

20180723blog06

 

② ⽂字の結合
「①【表⽰Unicode の決定】処理対象Unicode 列を抽出」処理で得られたUnicode 列中に【結合⽂字】となる⽂字が存在する場合は、複数のUnicode を1 つの【結合⽂字】のUnicode に置き換える処理を⾏います。
処理対象Unicode 列中に下に⽰す<結合⽂字変換表>のUnicode1〜3 の並びがあった場合は結合⽂字Unicode に置き換えます。
<結合⽂字変換表>では代表的な【結合⽂字】を抜粋して紹介しています。

<結合⽂字変換表>

20180723blog07それでは例を⾒ていきましょう。

アラビア語の「キャンディー(120 円)」の【表⽰Unicode の決定】処理対象Unicode 列は、下記に⽰すとおりですが、このUnicode 列の中には<結合⽂字変換表>のUnicode1〜3 に該当するUnicode の並びがありませんので、⽂字の置換は起こりません。

20180723blog08アラビア語で「広告」の例ではどうでしょうか。

201807blog02【表⽰Unicode の決定】処理対象Unicode 列は、下記のようになります。
この中に、<結合⽂字変換表>のUnicode1〜3 に該当するUnicode の並びがあるかどうか⾒ていくと、表中のNo04 とNo05 と同じ並びがあるのが⾒つかります。

20180723blog09これらを対応する結合⽂字に置き換えるとこのようになります。

20180723blog10以上で【⽂字の結合】処理は終了です。

 

③ ⽂字の変形(表⽰ Unicode の決定)
次は変形⽂字に関する処理を説明します。
2.<アラビア⽂字の特徴>で説明したとおり、アラビア⽂字は、【独⽴】・【語頭】・【語中】・【語尾】の4つの【字形種別】をもつ⼦⾳と、【独⽴】・【語尾】の2つの【字形種別】をもつ⼦⾳があります。
表⽰にどの【字形種別】を使⽤するかは前後の⽂字によって決まります。ここでは【字形種別】を使⽤するかを視覚的に判定するために、【変化字形図】を使⽤します。
【変化字形図】とは、下記のような図を指します。

20180723blog11

【字形種別】特定のための⼿順は次の4 つです。
(a)Unicode に対応する【変化字形図】を調べる。
(b)前後の⽂字の関係から【変化字形図】を編集する。
(c)<編集後変化字形図対応表>から、【字形種別】を判定する。
(d)<変化字形図対応表>から、表⽰Unicode を特定する。

【⽂字の変形】処理には【字形変化図】に関する2つの表を使⽤します。

<変化字形図対応表>はUnicode に対する【変化字形図】と【字形種別】をまとめた表です。ここでは、例で使われるUnicode を抜粋してご紹介します。
<編集後変化字形図対応表>は、編集後の【変化字形図】と、【字形種別】の対応表をまとめた表です。

<変化字形図対応表>

20180723blog12

<編集後変化字形図対応表>

20180723blog13それでは例を⾒ながら説明していきます。

まず、アラビア語の「キャンディー(120 円)」について⾒ていきます。

201807blog01処理対象Unicode 列はこのようになります。

20180723blog14(a)Unicode に対応する【変化字形図】を調べる。
<変化字形図対応表>に従って、変化字形図を当てはめていきます。
下図の②【変化字形図編集前】のようになります。
(b)前後の⽂字の関係から【変化字形図】を編集する。
前後の⽂字によって変化字形図の形を変えていきます。
隣の⽂字と棒でつながることができる場合は棒を残します。(下図③の⾚丸部分)
隣の⽂字と棒でつながることができない場合は棒を削除します。(下図③の⾚棒)
編集後の【変化字形図】は下図の④【変化字形図編集後】のようになります。
(c)<編集後変化字形図対応表>から、【字形種別】を判定する。
下図の⑤【字形種別】のようになります。
(d)<変化字形図対応表>から、表⽰Unicode を特定する。
下図の⑥【表⽰Unicode】のようになります。

20180723blog15

表⽰Unicode に対応する字形を並べてみると、このようになります。

20180723blog16同様に、アラビア語「広告」の例についても⾒ていきましょう。

201807blog02

処理対象Unicode 列はこのようになります。

20180723blog17(a)Unicode に対応する【変化字形図】を調べる。
<変化字形図対応表>に従って、変化字形図を当てはめていきます。
下図の②【変化字形図編集前】のようになります。
(b)前後の⽂字の関係から【変化字形図】を編集する。
前後の⽂字によって変化字形図の形を変えていきます。
隣の⽂字と棒でつながることができる場合は棒を残します。(下図③の⾚丸部分)
隣の⽂字と棒でつながることができない場合は棒を削除します。(下図③の⾚棒)
編集後の【変化字形図】は下図の④【変化字形図編集後】のようになります。
(c)<編集後変化字形図対応表>から、【字形種別】を判定する。
下図の⑤【字形種別】のようになります。
(d)<変化字形図対応表>から、表⽰Unicode を特定する。
下図の⑥【表⽰Unicode】のようになります。

20180723blog18

表⽰Unicode に対応する字形を並べてみると、このようになります。

20180723blog19

 

④ ①で抽出した処理対象 Unicode 列を元に戻す
表⽰Unicode がわかったところで、【表⽰Unicode の決定】の処理対象外であったUnicodeを元に戻します。

例を⾒ながら説明します。
まず、「キャンディー(120 円)」から⾒ていきましょう。

201807blog01【表⽰Unicode の決定】処理前のUnicode 列はこうでした。

20180723blog20ここから【R】グループのみを抽出して、【②⽂字の結合】【③⽂字の変形(表⽰Unicodeの決定)】の処理を⾏いました。処理後のUnicode 列を戻すとこのようになります。

20180723blog21次に「広告」の例を⾒ていきます。

201807blog02【表⽰Unicode の決定】処理前のUnicode 列はこうでした。

20180723blog22⽂字の結合や変形があるため少しわかりにくいですが、処理前と処理後のUnicode 列の対応は上図のようになります。処理後のUnicode 列へ⺟⾳記号を戻します。

20180723blog23⻑くなりましたがここまでで、【表⽰Unicode の決定】処理はおしまいです。

今回は、
(2)表⽰Unicode の決定(変形⽂字・⼦⾳字同⼠の結合⽂字)
について説明しました。

次回は、
(3)フォントファイルに収録されている情報に基づいて記号の位置を調整する
について説明したいと思います。

 

カルチスタッフ

関連記事

カルチ発行書籍

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