前回の続き。
カーソル位置の文字列をなんでも追加すればよいわけではなく、機能として働く「終」の文字を選んでいたり、濁点・半濁点を選んだ時の処理が必要になる。
まず、濁点と半濁点の処理から作り始めた。
濁点、半濁点の文字は、そのまま一覧に表示しようとしてみたが、文字数が結構多く、ページングしなくてはならないので、濁点・半濁点の記号を選ぶと、付けられることにした。
濁点(半濁点)を付けることができる文字は決まっている。
濁点を選んだ時、編集中の末尾の文字が、濁点を付けられるかどうかを判定し、濁点を付けた文字と置き換える。
この処理を実行するのに一番ベタな方法を取った。
濁点が付く文字列をあらかじめ変数に設定しておき、濁点を選んだ時に、編集中の最後の1文字が、その濁点が付く文字列一覧に含まれるかを判定した。
ここでも、instr命令を使わず、mod_dstrのdstr_instrを使って判定する。
実行の結果、文字列内の開始位置が返値となり、含まれない場合は-1が返るので、0以上なら濁点が付けられる文字ということになる。
どの文字と置き換えるかは、濁点付きの文字列を別に設定しておき、見つかった位置から1文字を取得する。
編集中の文字列を、自分で定義したleftstr命令で最後の1文字を除いて取得し、その後ろに濁点の文字を付ける。
文章で書くと回りくどく、面倒に見えるけど、ソース的にはあまり難しくなく、こんな感じ。
daku_searchstr="かきくけこさしすせそたちつてとはひふへほ" daku_char="がぎぐげござじずぜぞだぢづでどばびぶべぼ" ;濁点を選択したときは、末尾文字を判定 lastChr=rightstr(editName,1) ;濁点を付けられる文字か? sindex=dstr_instr(daku_searchstr,0,lastChr) if sindex>=0 { editName=leftstr(editName,dstr_len(editName)-1)+midstr(daku_char,sindex,1) }
半濁点も同じように判定と、半濁点を付ける処理を作った。
で、濁点/半濁点を外すのはどうしようかと。面倒なので、削除してwwと思ったが、不親切なので、外す処理も作った。
濁点/半濁点を付けるときと逆で、末尾の文字が濁点付き、半濁点付きの文字のときに濁点/半濁点なしの文字に戻すようにした。
さっき書いたソースで、見つける文字列と置き換える文字列を逆にするだけでおしまい。
ということで、残るは「終」を押して、編集内容を反映する処理を残すのみとなった。