クラス図

UTF-8 を簡単に使えるようなクラスを考えていたのですが、結局のところ std::string のままでいいんじゃないかという気がしてきました。文字列を分解する時の区切り文字は ASCII 範囲だし、見出し語をマッチさせる時にはバイトの塊として扱うだけです。となると、汎用的な SKK エンジンが周囲とインタフェースするのも std::string のままがいいですね。


ということで、UTF-8 な std::string でインタフェースすることを前提に、クラス図を書いてみました。

http://aquaskk.sourceforge.jp/images/class_diagram.png

SKKPreProcessor は雑多な入力をラベリングして、SKKEvent を生成します。SKKFrontEnd はユーザーインタフェースを担当し、SKKBackEnd は検索/補完/単語登録・削除をハンドリングします。SKKContext は入力途中の文字列など、雑多な状態を保持します。これらを統合するのが SKKEnvironment の役割です。GenericStateMachine は状態マシンのアルゴリズムを実装していて、状態遷移や entry/exit といったアクションを SKKEnvironment に対して適用します。


グレーの部分はプラットフォーム毎に実装が変わってくる部分です。SKKContext をモデル、SKKFrontEnd をビュー、SKKEngine(SKKEnvironment) をコントローラーと見れば、MVC パターンと言えるような気もします。いろいろと遠回りをして、ようやく全体像が見えてきた感じです。