Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IMEを追加 #63

Open
wants to merge 29 commits into
base: master
Choose a base branch
from
Open

IMEを追加 #63

wants to merge 29 commits into from

Conversation

mikecat
Copy link
Contributor

@mikecat mikecat commented Aug 22, 2022

IMEを追加することを目指します。

現在の実装

  • IMEからの文字入力を扱うための新しいメッセージを追加しました。
  • tedit でIMEからの文字入力の受け取りを実装しました。
  • Alt+半角/全角 でIMEのオンオフを切り替えられるようにしました。
  • 条件に応じてキーイベントをIMEに渡すようにしました。
  • IMEのプロトタイプを実装しました。
    • ウィンドウが表示されているかどうかでオンオフを表します。
    • ローマ字入力によりひらがな・全角記号の入力を受け付けます。

目標

  • ひらがな・カタカナ(全角/半角)・英数字(全角/半角) の入力に対応
  • 文字コードを直接指定しての入力に対応
  • 特別扱いのレイヤー (マウスカーソルの下、他のウィンドウより上) で表示
  • タスクバー?上に状態を表示:「A」(オフ) / 「あ」(オン)
  • ターミナルをIMEからの文字入力の受け取りに対応させる
  • アプリからIMEを表示する位置を指定するシステムコールを追加
    • 表示する位置はレイヤーごとに持たせ、アクティブレイヤーの指示に従う

実装するか未定の機能

  • かな漢字変換
  • Backspaceが押された時、もとの入力1文字ではなく変換したひらがな1文字を消す
  • Text Box Test のIME対応
  • IMEの状態をアプリorレイヤーごとに保持
  • その他思いついていない機能

今回は実装しない予定の機能

  • 最初からカタカナを入力するモード
  • 手書き入力

* implement IME (prototype)
* add new event (internal & app) to receive input from IME
* conditionally send key events to IME
* add IME support for tedit app
@mikecat
Copy link
Contributor Author

mikecat commented Aug 25, 2022

メモ

変換の関係

stateDiagram-v2
state "生入力データ\n(半角英数)" as raw
state "全角英数" as zen
state "かな漢字変換" as henkan
state "ひらがな" as hira
state "全角カタカナ" as kata
state "半角カタカナ" as hkata
raw --> hira
hira --> henkan
hira --> kata
kata --> hkata
raw --> zen
Loading

変換操作

  • F6 : ひらがな
  • F7 : 全角カタカナ
  • F8 : 半角カタカナ
  • F9 : 全角英数
  • F10 : 半角英数
  • スペース : かな漢字変換

※Google日本語入力ではF9を押した後F8を押すと半角英数になるが、これは簡単のため実装しない方針

ひらがな単位で消す

簡単のため「ひらがな単位」ではなく「ひらがなへの変換時の単位」で消す案

例えば「nya」と入力して「にゃ」になった後Backspaceを押すと、Google日本語入力では「ゃ」が消えるが、今回は「にゃ」を消す。

かな漢字変換

(現時点での案)

辞書 : 「読み」と「変換結果」の組のリスト を用意する。

同じ「読み」に対する「変換結果」を std::vector でまとめておき、確定した「変換結果」を一番上に持ってくる。

区切りの初期値は「読み」が登録されている最長のものを貪欲に取る。 (学習は行わない)

* add conversion to full-width alphabets
* convert to lower-case before querying conversion table
* save original input strings with conversion results
@mikecat
Copy link
Contributor Author

mikecat commented Aug 29, 2022

半角英数 → ひらがな に変換する際、変換元の半角英数をひらがなと対応付けて記録する。
そしてひらがなを1文字ずつ記録することで、「にゃ」からのBackspaceで「ゃ」を消せるようにする。

Google日本語入力では、「にゃ」(nya)を入力後スペースを押して変換モードにし、
(必要に応じて)Shift+矢印で変換範囲を「に」だけにした後、F10を押すと、「n」になった。
今回の変更で、これに対応できるようにする。
「にゃ」を入力し、Backspaceで「ゃ」を消した後F10を押すと、アルファベットではなく「に」のままとなったが、
これは対応しない方針。

* layer with higher priority is placed in front
* ActiveLayer no longer hold mouse_layer_
@mikecat
Copy link
Contributor Author

mikecat commented Aug 30, 2022

「レイヤーの優先度」を導入しました。
優先度の高いレイヤーほど、強制的に手前に配置します。
これに伴い、ActiveLayermouse_layer_ を使わなくなったので、設定する関数を削除しました。

@mikecat
Copy link
Contributor Author

mikecat commented Aug 31, 2022

実装済みの機能

  • ひらがな・カタカナ(全角/半角)・英数字(全角/半角) の入力に対応
  • 特別扱いのレイヤー (マウスカーソルの下、他のウィンドウより上) で表示
    • 「特別扱い」ではなく、マウスカーソルも含めて一般の「優先度」で対応
  • タスクバー?上に状態を表示:「A」(オフ) / 「あ」(オン)
  • Backspaceが押された時、もとの入力1文字ではなく変換したひらがな1文字を消す

実装予定の機能

  • 文字コードを直接指定しての入力に対応
  • アプリからIMEを表示する位置を指定するシステムコールを追加
  • かな漢字変換

今回は実装を見送る予定の機能

  • Text Box Test のIME対応
  • IMEの状態をアプリorレイヤーごとに保持
  • ターミナルをIMEからの文字入力の受け取りに対応させる
    • 現在のターミナルには「全角文字に対しBackspaceを用いると半分ずつ消える」「マルチバイト文字を複数回に分けて出力するとうまく表示できない」といった問題があるため、これらも含めたターミナルの全角対応強化を別途行いたい

@mikecat mikecat marked this pull request as ready for review October 5, 2022 14:03
@mikecat
Copy link
Contributor Author

mikecat commented Oct 5, 2022

実装が一段落したと思うので、マージ検討お願いします。

かな漢字変換時、←→で変換対象の切り替え、Shift+←→で変換対象の区切りの移動ができます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant