まだよく分からない。"ns"と入力した時に「んs」となるのはどうなってんだろう?
まあ、とりあえずこんな感じかなー、という段階の物を載せてみる。
てゆーか、ちょっと飽きて来ちゃった :p
以下、擬似コード。
キー入力イベント発生{
現在のカーソル位置を含む、ASCII文字のみで構成される最大長の文字列を取得し、入力文字列に設定
出力文字列 = 変換処理( 入力文字列 )
入力文字列を出力文字列に置き換え
}
変換処理( 入力文字列 )
{
変換対象文字 = 入力文字列の先頭文字;
参照文字 = 変換対象文字;
ノード = 初期ノード
ノード処理開始:
if( NodeValue == '¥0' ){
if( Result == '¥0' ){
ノード = Cursor
goto ノード処理開始
}else{
goto 一致処理
}
}
if( 参照文字 == NodeValue ){
goto 一致処理
}else{
goto 不一致処理
}
一致処理:
if( Result != '¥0' ){
出力キュー << Result
}
if( Cursor == -1 ){
出力文字列 << 出力キュー
変換対象文字 = 参照文字
goto 初期ノードに遷移処理
}else{
if( ! NodeFlags.bit2 ){
エラーキュー << Result
}
参照文字を一つ進める
if( 参照文字が空 ){
goto エラー出力処理
}
ノード = Cursor
goto ノード処理開始
}
不一致処理:
if( NodeFlags.bit0 ){
ノード++
goto ノード処理開始
}else{
goto エラー出力処理
}
エラー出力処理:
出力文字列 << エラーキュー
出力キューを破棄
初期ノードに遷移処理:
if( ! NodeFlags.bit1 ){
変換対象文字を一つ進める
}
if( 変換対象文字が空 ){
goto 変換処理終了
}
参照文字 = 変換対象文字
ノード = 初期ノード
goto ノード処理開始
変換処理終了:
return 出力文字列
}