ローマ字かな変換ライブラリ

ローマ字かな変換は人により趣味が異なるようなので、 対応表をもとにしてC/Perl/Lispの変換プログラムを生成するようにしています。
デフォルトの対応表はrklistというファイルです。 ひとつの対応表から変換プログラムを生成することにより、 どのプログラムでも同じ変換ができるようになります。
かなとローマ字は1対1に対応していません。 rklistではひとつのかなに対して 複数のローマ字を定義してあります。 (e.g. 「fu/ふ」「hu/ふ」)
rklistはあまり使わないと思われる定義も いろいろ含んでいます。 (e.g. 「ca/か」「gwa/ぐぁ」)
rklist.pbtは 普通に使われるエントリだけ残したものです。 Palm版などの辞書を作るときはこの変換表を使っています。
異なる対応表を使えば、 ヘボン式のローマ字を訓令式に変換するといったことができます。

Perlのローマ字かな変換プログラム

rklist2rkplプログラムで、 rklistの定義にもとづいた ローマ字かな変換表を生成することができます。
# EUCベースのローマ字/カタカナ変換表を生成
% perl rklist2rkpl rklist > rklist_ke.pl
-sオプションでSJISベースの変換表が生成され、 -hオプションでひらがなの変換表が生成されます。
# SJISベースのローマ字/ひらがな変換表を生成
% perl rklist2rkpl -s -h rklist > rklist_hs.pl
ローマ字かな変換プログラム本体は romakana.plで、 ローマ字かな変換関数roma2kana()と かなローマ字変換kana2roma()が 定義されています。
rklist2rkplで生成された変換表を読み込んだ後で これらの関数を呼びます。
% cat rktest
require 'romakana.pl';
require 'rklist_ke.pl';
print &roma2kana('shachou'),"\n";
% perl rktest
シャチョウ
% 
kana2roma()は、 可能なあらゆるローマ字パタンをコンマで区切った文字列を返します。
% cat krtest
require 'romakana.pl';
require 'rklist_ke.pl';
print &kana2roma('シャチョウ'),"\n";
% perl krtest
shachou,shachowu,shacyou,shacyowu,shatyou,shatyowu,...
%

Cのローマ字かな変換プログラム

rklist2rkcプログラムで、 rklistの定義にもとづいた ローマ字かな変換プログラムを生成することができます。
-sオプションでSJISベースの変換プログラムが生成され、 -hオプションでひらがなの変換プログラムが生成されます。
# SJISベースのローマ字/ひらがな変換プログラムを生成
% perl rklist2rkc -s -h rklist > romakana.c
InitRomaTable()でローマ字かな変換表を初期化し、 Roma2Kana()で変換を行なうことができます。 かなからローマ字への変換関数は(今のところ)ありません。
/* romakana.h */
RomaKana *InitRomaTable();
int Roma2Kana(unsigned char *roma, unsigned char *kana,
        RomaKana *rktable);
% cat rktest.c
#include "romakana.h"

RomaKana *rktable;
unsigned char kana[100];

main()
{
        rktable = InitRomaTable();
        Roma2Kana("shachou",kana,rktable);
        printf("%s\n",kana);
}
% rktest
しゃちょう
%

Emacs Lispのローマ字かな変換プログラム

rklist2rkelプログラムで、 rklistの定義にもとづいた ローマ字かな変換プログラムを生成することができます。 -sオプションでSJISベースの変換プログラムが生成され、 -hオプションでひらがなの変換プログラムが生成されます。

# SJISベースのローマ字/ひらがな変換プログラムを生成
% perl rklist2rkel -s -h rklist > romakana.el
ローマ字かな変換関数は(roma2kana)です。
(require 'romakana "romakana.el")

(roma2kana "shachou")

Up$Date: 2001/08/01 04:37:57 $