Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

文節伸縮・選択仕様

本ドキュメントは、Akaza における文節の伸縮操作(Shift+→ / Shift+←)と 文節選択(← / →)の実装仕様をまとめたものです。 実装の挙動を基準として記述しています。

用語

  • 文節: 変換候補が提示される単位(例: わたし|は|がっこう
  • 選択中の文節: カーソル/ハイライトが当たっている文節
  • 読み(かな): 変換対象となる文字列(ひらがな)

文節伸縮(Shift+→ / Shift+←)

  1. Shift+→ は 選択中の文節の読みを右へ1文字伸ばす
  2. Shift+← は 選択中の文節の読みを左へ1文字伸ばす
  3. 文節の伸縮に伴って 隣接文節は逆方向に1文字縮む
  4. 伸縮後も 選択中の文節のフォーカスは維持する。

文節選択(← / →)

  1. ← / → は 選択中の文節を左右に移動する。
  2. 文節が2つ以上ある場合、押下ごとに 必ず選択が変わる
  3. 端に到達した場合は 反対側に回り込む(ラップする)。
  4. 文節が0または1の場合、選択は変わらない。

右に伸ばす(Shift+→)

入力: わたしはがっこう
初期: わたし|は|がっこう

  • 選択: わたし
    Shift+→ 1回: わたしは|がっこう
    (次の文節「は」から1文字移動)

  • 選択:
    Shift+→ 1回: わたし|はが|っこう
    (次の文節「がっこう」から1文字移動)

左に伸ばす(Shift+←)

入力: わたしはがっこう
初期: わたし|は|がっこう

  • 選択:
    Shift+← 1回: わた|しは|がっこう
    (左の文節「わたし」から末尾1文字を移動)

  • 選択: がっこう
    Shift+← 1回: わたし|はがっこう

端の挙動

  • 右端の文節で Shift+→ を押しても、文節構成は変化しない。
  • 左端の文節で Shift+← を押した場合:
    • 左端が1文字なら変化しない
    • 左端が2文字以上なら末尾1文字を右隣へ移動する
    • 例:
      • 初期: わだ|た|そ(左端が2文字)
        • 選択: わだ
        • Shift+← 1回: わ|だた|そ
      • 初期: わ|た|そ(左端が1文字)
        • 選択:
        • Shift+← 1回: わ|た|そ(変化なし)

例外/注意点

  • 伸縮によって 隣接文節が消滅する場合は、文節数が減る。
  • サロゲートやマルチバイト文字は 1文字単位で扱う。
  • 変換候補が空の場合は 現状維持とする。

force_selected_clause

変換エンジンに「強制的な分節境界」を渡すための内部状態。 Shift+矢印による文節伸縮の結果は、force_selected_clause に保持され、 次回の変換に反映される。

  • 格納内容: 文字列内の範囲(Range<usize>)の配列。各範囲は1文節を表す。
  • 更新タイミング: Shift+→ / Shift+← の操作時。
  • 消去タイミング:
    • 生入力が変わったとき(on_raw_input_change 内)
    • 明示的にクリアしたとき(clear_force_selected_clause
  • 適用タイミング:
    • engine.convert(..., Some(&force_selected_clause)) で再変換に使用。
  • 文節選択への影響:
    • force_selected_clause がある場合、再変換しても current_clause は維持される(set_clauses 内の条件分岐)。