# テーブルの更新方法

idnkitライブラリが内部で保持する、UincodeやIDNAのテーブルを更新する 方法について記します

- はじめに
- Unicodeテーブルの生成手順
- IDNAテーブルの生成手順

## はじめに

idnkitライブラリ (およびidnkitliteライブラリ、以下同様) は、内部に UincodeやIDNAのデータテーブルを保持しています。

このうちたとえばUnicodeのテーブルは、特定のUnicodeのバージョン (例: 6.0.0) に依存したものになっています。 idnkitバージョン2では複数のバージョンのテーブルを保持し、実行時に 切り替えることはできませんので、他のバージョン用のテーブルを使用したい 場合はテーブルを生成してidnkitをコンパイルし直す必要があります。 本書は、テーブルの生成手順について記します。

注意点として、テーブルを再生成すると、もとから同梱されている テーブルファイルは上書きされます。 必要に応じて、もとのファイルは事前にバックアップするなどして下さい。

## Unicodeテーブルの生成手順

Unicodeテーブルを生成するには、次のようにします。

### Unicode文字データベースファイルの入手

Unicode文字データベース (Unicode Character Database) のデータファイル のうち、idnkit用のテーブルを生成しようとしているバージョンのものを入手 します。 データファイルは、次の場所から入手できます。

> http://www.unicode.org/ucd/

少なくとも、以下のデータファイルが必要です。

- `UnicodeData.txt`
- `SpecialCasing.txt`
- `CompositionExclusions.txt`
- `ArabicShaping.txt`
- `Scripts.txt`
- `DerivedCoreProperties.txt`

### UTS #46データファイルの入手

UTS (Unicode Technical Standard) #46のデータファイルのうち、idnkit用 のテーブルを生成しようとしているバージョンのものを入手します。 データファイルは、次の場所から入手できます。

> http://www.unicode.org/Public/idna/

少なくとも、以下のデータファイルが必要です。

- `IdnaMappingTable.txt`

なお、Unicode文字データベースとUTF #46のデータファイルのバージョンは、 同じにすることを強くお薦めします。

### Unicodeデータファイルの配置

入手したUnicode文字データベースとUTF #46のデータファイルを、 idnkitのソースコードを展開すると作成される`data` サブディレクトリにすべて配置します。 (他のディレクトリに配置することも可能です。詳しくは後述します。)

### Unicodeテーブルの生成

idnkitのソースコードを展開すると作成される`util` サブディレクトリにカレントディレクトリを移し、次のコマンドを実行します。

> `% ./generate_unicodeall.sh Unicodeのバージョン`

ここで、Unicodeのバージョンには、Unicode文字データベースと UTS #46のデータファイルのバージョンを指定します (たとえば、Unicode 6.0.0用であれば "6.0.0")。 `../data`以外の場所にデータファイルを配置したときは、 データファイルの場所を`-datadir`オプションで指定して下さい。

> `% ./generate_unicodeall.sh -datadir /somewhere/else Unicodeのバージョン`

成功すると、次のようなメッセージが出力されます。

>     ** Generate Unicode version file
>     ** Generate Bidi class table
>     ** Generate Cased table
>     ** Generate Case_Ignorable table
>     ** Generate Combining character table
>     ** Generate Combining class table
>     ** Generate Composition table
>     ** Generate Decomposition table
>     ** Generate Joining type table
>     ** Generate Lowercase table
>     ** Generate Script table
>     ** Generate TR #46 casefold table
>     ** Generate TR #46 validation table
>     ** Generate Width table
>     ** Complete

UnicodeテーブルのCプログラムファイルが、`../lib/auto/`に、 ヘッダファイルが`../include/idn/auto/`にそれぞれ生成されます。 「idnkitのインストール」にしたがってidnkit をコンパイルすることで、生成されたテーブルが使用されるようになります。

## IDNAテーブルの生成手順

IDNAテーブルを生成するには、次のようにします。

### IDNAデータファイルの入手

idnkit用にテーブルを生成したいバージョンのIDNAパラメタ (IDNA Parameters) ファイルのXML版を入手します。 データファイルは、次の場所から入手できます。

> http://www.iana.org/assignments/idnabis-tables/idnabis-tables.xml

idnkit用のテーブルを生成するには、PerlパッケージXML::Simpleが必要と なります。

### IDNAデータファイルの配置

入手したIDNAパラメタファイルを、idnkitのソースコードを展開すると 作成される`data`サブディレクトリに配置します。 (他のディレクトリに配置することも可能です。詳しくは後述します。)

### IDNAテーブルの生成

idnkitのソースコードを展開すると作成される`util` サブディレクトリにカレントディレクトリを移し、次のコマンドを 実行します。

> `% ./generate_idnaall.sh [IDNAのバージョン]`

ここで、IDNAのバージョンには、IDNAテーブルのバージョンを 指定します。 IDNAのバージョンを省略した際は、XMLデータからバージョン番号 が自動的に決定されます。 `../data`以外の場所に データファイルを配置したときは、データファイルの場所を`-datadir` オプションで指定して下さい。

> `% ./generate_idnaall.sh -datadir /somewhere/else IDNAのバージョン`

成功すると、次のようなメッセージが出力されます。

>     ** Generate IDNA version file
>     ** Generate IDNA category table
>     ** Complete

IDNAテーブルのCプログラムファイルが、`../lib/auto/`に、 ヘッダファイルが`../include/idn/auto/`にそれぞれ生成されます。 「idnkitのインストール」にしたがってidnkit をコンパイルすることで、生成されたテーブルが使用されるようになります。