T-Code-Engine 0.7.2

t-code-engine 0.7.2 をリリースしました. 前回のリリースからオブジェクトの API が変更になりました. 主な変更点は以下のものです. エンジン種別の追加 辞書ファイル/SQLite データベースの利用 部首合成機能の終端指定 エンジンの種類 T-Code-Engine では, ユーザー入力をまとめて変換する BatchEngine と, ユーザーによる入力と選択をインタラクティブに実行できる InteractiveEngine があります. この種別とは別に, Zip ファイル辞書から SQLite database を生成しこれを使用するSQLite と, Zip ファイル辞書を直接参照する Archived の種別があります. まとめると, エンジンの選択肢は以下の通りです. SQLiteInteractiveEngine (T-Code IME for Android で使用中) ArchivedInteractiveEngine SQLiteBatchEngine ArchivedBatchEngine Archived の用例 Archived では, uPickle を利用して msgpack 化し Zip 書庫にまとめた辞書ファイル (src/main/resources/tcode_dict.zip)を使用します. 辞書データはインスタンスを作成した際にメモリ上に展開されます. val engine = new ArchivedInteractiveEngine with QwertyLayout SQLite の用例 一方 Anroid 上の IME はこのエンジンインスタンスの頻度が高く, 書庫ファイルへの頻繁なアクセスは, IME を要求するたびに ロード時間を増加させるという欠点(IME ラグと呼ばれます)があります. そのため, T-Code IME for Android では SQLite 版を使用することで, Zip 書庫の読み込みを初回のみに限定し, アプリ専用のストレージに database ファイルを作成し, IME の機能をコールする際にデータベース問合せを実行します. ...

May 8, 2026 · 2 min · 238 words · Kazuhiro F

T-Code-Engine 0.4.x [obsolete]

この記事は古いバージョン(0.4.x)に基づいて記述されています. 最新版は T-Code-Engine タグにてご確認ください. 主な機能 T-Code-Engine では, ユーザー入力をまとめて変換する BatchEngine と, ユーザーによる入力と選択をインタラクティブに実行できる InteractiveEngine があります. BatchEngine の実行例 scala> import io.github.nicheapplab.tcodeengine._ scala> val engine = new BatchEngine with QwertyLayout scala> engine.convert("hgjdkdhgjdhgjgjd;gjdkd;gjdja;g") val res0: String = "で、ので、では、を、のを、とを" with QwertyLayout の代わりに with DvorakLayout を指定することで, Dvorak キーボードで入力した文字列を日本語に変換することができます. また, 交ぜ書き変換や部首合成にも対応しています. 交ぜ書きは prefix を使用せずに, BatchEngine.convert で変換した結果に対して, BatchEngine.mixed.convert を適用します. 2 つ目の引数は活用の指定です. scala> engine.mixed.convert("くわえ","る") val res0: Array[String] = Array("加える") scala> engine.mixed.convert("記しゃ") val res1: Array[String] = Array("記者") 部首合成では, 基本となる二字の合成のほか, “jf” による再帰的合成にも対応しています. scala> engine.combi.composite('上','七') val res0: Option[Char] = Some('虍') scala> engine.convert("jfjfibhtpd") val res1: String = "劇" InteractiveEngine の実行例 scala> import io.github.nicheapplab.tcodeengine._ scala> val ie = new InteractiveEngine with QwertyLayout scala> "fjyijstt".foreach(ie.put(_)) scala> ie.inflexRight() scala> ie.convert() scala> ie.selectCandidate(0) scala> ie.commit() val res0: String = "記者" この例では, “fj"で交ぜ書き変換モードに入り, “記しゃ"を"記者"に変換しています. 例では短縮のために foreach を利用していますが, 実際に使用するときには各字を,ie.put('f') のように 1 字ずつ入力することが想定されています. ...

April 8, 2026 · 1 min · 190 words · Kazuhiro F

部首合成機能の終端指定

本記事では, T-Code-Engine ならびに T-Code IME for Android において, 部首合成の終端指定が必要になった理由について解説します. T-Code-Engine では終端指定はconvert() の呼び出しにて, T-Code IME for Android では SPC を押すことで指定することになります. 部首合成機能の考え方 部首合成の基本作用はまとめると, 以下のものがあります. (足し算)部品となる漢字の合成 (例: 木 + 目 = 相) (引き算)合成された漢字から特定の部品を取り除く (例: 頭 - 前 = 頁) (論理積)合成された漢字 2 つから共通部分を取り出す (例: 頭 ∧ 題 = 頁) (交換)類似形状の文字に入れ換える (例: 工(漢字) = エ(カナ) ) (部分合成)合成された文字から部品を取り出し,他の部品と合成する (例: decomp(頭) + 工 = 項) そしてこれら単体ないし帰納的に組合せて目当ての漢字を入力する機能が部首合成です. 問題となるのは, 4. 交換 が単一引数であることです. 後置と前置 部首合成機能は Prefix ▲(“jf”) を用いて呼び出します. TC のデフォルトは後置ですが, T-Code-Engine ならびに T-Code IME for Android では前置を採用しています. TC は Emacs 上で動作し, Emacs では編集中のバッファを elisp の関数を用いて操作することは一般的に行われるため, これは自然な実装といえます. ...

May 7, 2026 · 1 min · 168 words · Kazuhiro F