RkMapPhonogram -
指定されたローマ字かな変換テーブルを用いてローマ字かな変換を行う
#include <canna/RK.h>
int RkMapPhonogram(romaji, dst, maxdst, src, srclen, flags, ulen, dlen, tlen, rule)
struct RkRxDic *romaji;
unsigned char *dst;
int maxdst;
unsigned char *src;
int srclen;
int flags;
int *ulen;
int *dlen;
int *tlen;
int *rule;
RkMapPhonogram
は,指定されたローマ字かな変換テーブルを用いてローマ字かな変換を行います.
romaji は,
RkOpenRoma(3)
により返されたローマ字かな変換テーブルへのポインタを与えます.
RkMapPhonogram は,領域
src
から
srclen
バイト続くデータをローマ字列として解釈し,ローマ字列先頭と一致するロー
マ字かな変換規則をローマ字かな変換テーブルから探します.
対応する変換規則が見つかった場合には,対応するかな文字列を
dst
領域に格納しそのバイト長を
dlenにて返します.ただし,文字列のバイ
ト数が
maxdst -1
を超える場合には結果は切り捨てられます.
flags
は,ローマ字かな変換を制御するためのフラグで以下を
or で組合わせます.
- RK_SOKUON
- 促音処理を有効にします.促音処理は,先頭2文字が同一文字xxであり,ロー
マ字かな変換テーブルファイルに登録されていない時に限り,xxから「っ」へ
変換します.この処理は旧形式のローマ字かな変換テーブルを使用していると
き用です。
- RK_FLUSH
- すべてのローマ字を強制的に変換します.これは最後のnの処理に有効です.
ulen, dlen, tlen
は,ローマ字かな変換の進行具合を管理することに使われます.
例えば,``tt''のような文字を
RkMapPhonogram
に与えると最初の``t''がロー
マ字かな変換に使われ,
dst
には``っ''が返ります.残りの``t''は次
のローマ字かな変換にて再び使用されます.この後``a''が入力された場合,
前回の
RkMapPhonogramで残された``t''と入力された``a''を
RkMapPhonogramに与え,``た''を得ます.
ulen には,
srcのうちローマ字かな変換に
用いられた文字のバイト長が返ります.
dlen
にはローマ字かな変換
された結果得られたかなのバイト長が返ります.
そして,
tlen
には,次のローマ字かな変換で引き続き使われるべき文字のバイト長が返りま
す.
tlen
で示される文字列は,
dstバッファにおいて,ローマ字かな変換済の文
字列の後ろに置かれます.
ulen, dlen, tlen
に対してヌルポインタを与えた場合には,これらの値は返らず単に無視されま
す.
rule
にて,ローマ字かな変換ルールに関する情報をやりとりします.
最初に
RkMapPhonogramを呼ぶ時は0を格納した変数へのポインタを与え
て下さい.最初の呼出しから戻った時にその変数には(0の代わりに)ローマ字
かな変換ルールに関する内部的な情報が返されます.ローマ字かな変換を続け
る場合は,前回指定した変数へのポインタを再び
RkMapPhonogramに与え
て下さい.
dst
で返される文字がローマ字かな変換テーブルに存在したルールを用いて変換さ
れたものであるかどうかを返します.ローマ字かな変換テーブルにあったルー
ルが使われた場合には1を返し,そうでない場合には0を返します.