Tsuikyo - 鎚鏡

以下の説明は,最新の javascript 版 Tsuikyo について書かれています.

概要

鎚鏡 (Tsuikyo) は非決定性有限オートマトンを用いて、普及している IM と同等の柔軟な入力判定をタイピングゲームに手軽に導入することを目指したライブラリです.

要するにタイピングゲームの地味でめんどくてしかも適当にやるとバグりがちな部分を任せて楽ができるよというもの.

Tsuikyo の機能

  • ひらがな文字列を用意するだけで,MS-IME 互換の柔軟なローマ字入力判定*1
  • ひらがな単位での現在位置,打鍵単位での現在位置,次に押して受理されるキー一覧,入力された打鍵列,そのワード内でのミスタイプ数,等々タイピングゲームに必要そうな情報をひととおり提供
  • 簡単なワード(打鍵対象文字列)の管理

Tsuikyo の実装

内部の話.ソース参考にしたり弄ったりする人向け 1 分で分かるだいたいのこと.

  • オブジェクト指向.Tsuikyo クラスがルート
    • 各ワードは TsuikyoWord.具体的な判定(TsuikyoWord.stroke())等はそこに実装.Tsuikyo クラスは基本それら TsuikyoWord を管理するだけ
  • 判定テーブルは MS-IME 互換ローマ字のものをオブジェクトとして埋め込んである
    • 複数テーブルを切り替えたり,動的に判定テーブルを弄ったりもできるようにも配慮はしてある……つもり
  • 入力判定は判定テーブルに基づいて,完全に形式的に行われる(エンジンとデータは独立,意味的な処理は判定部に含まない)
  • ワードを Tsuikyo に登録する時点でテーブルに基づいて判定用の内部データ(TsuikyoWord.dat)*2が作られる(Tsuikyo.parse())
    • 判定時にはそこから現在アクティブ(打鍵対象)なノード*3だけを持つバッファ(TsuikyoWord.nodes)を作る
      • このバッファに「ひらがな単位で戻る結果となるノード」を含めるか,「同じひらがなを入力する複数のノード」を含めるかで,入力の柔軟さ(Cancelable, Flex, Fixed)を変えている

配布とか

ダウンロード

ライセンス

修正 BSD で.

change log

  • v1.0.0 とりあえず正式版

todo

上ほど優先度高いと思ってるもの. => ほとんど v2 で解決

  • さりげに実装忘れてた correctCount とか一部関数追加
  • リファレンスにメモとして書いた細かい問題の手直し
  • jis かな対応
    • stroke に送る情報の再考が必要
  • Cancelable モードでのミス数反映問題
  • テーブル etc のプロパティ名が冗長で無駄にファイルサイズ増大してるので改める
  • テーブルもっと簡単に書けるなにか
    • 埋め込み用テーブルオブジェクト表現生成するスクリプト書く?
      • テーブル生成スクリプト内蔵して記述はスクリプトベース,でもいいのか

導入ガイド

リファレンス

とりあえず版…….

解説とか研究

書かないと自分でも考え方とか実装忘れそうなのでなんか書くかも

*1: 他の入力方法(jis かなとか)への対応も考えてはいますが,今のところはローマ字入力限定.
*2: アルゴリズム的にはオートマトンをイメージしてるが遅いので実装は普通に文字列配列.
*3: オートマトンをイメージしたときの.