InputMethodKit超入門
-
Upload
wataru-kimura -
Category
Documents
-
view
1.847 -
download
11
description
Transcript of InputMethodKit超入門
InputMethodKit超⼊門
Cocoa勉強会�#39�/�2010.02.11�(祝)�/�⽊村渡
Powered by Rabbit 0.6.4 and COZMIXNG
Input�Method
効率の良い⼊⼒✓
さまざまなアプリケーションとコミュニケート
✓
InputMethodKitは、後者を⽀援するフレームワーク
InputMethodKit
かな漢字変換などの⼊⼒プログラムをつくるためのフレームワーク
✓
アプリとして⼊⼒プログラムを作成✓
Cocoa✓
Leopardで導⼊された✓
さまざまな⽇本語⼊⼒プログラム
ことえり✓
かわせみ✓
AquaSKK✓
Google⽇本語⼊⼒✓
などなど
InputMethodKitの構成
+----------+ +------------------------+|=user app=| | =input method app= || Client <------->(Server)<-> Controller |+----------+ +------------------------+
IMK�Classes
IMKServerユーザ操作と⼊⼒操作を仲介
IMKInputController⼊⼒プログラムの処理本体
IMKCandidates選択候補のユーザインターフェイスを制御
IMK�Protocols
IMKServerInput⼊⼒プログラムのインターフェイス
IMKTextInput⼊⼒プログラムとやりとりするアプリのインターフェイス
IMKStateSettingIMKMouseHandling
3つの実装手段
IMKServerInputプロトコルキーバインディング✓
⼊⼒⽂字+修飾キーを解釈✓
TSMのイベントを利用✓
キーバインディング
inputText:client:⼊⼒された⽂字を受け取る
didCommandBySelector:client:キーバインディングで定義されたコマンドを受け取る
"apple"が⼊⼒された
"moveForward:"コマンドが指⽰された
キーバインディング
キー(の組み合わせ)をObjective-Cメッセージに割り当て
StandardKeyBinding.dictを参照
<key>^f</key><string>moveForward:</string>
⼊⼒⽂字+修飾キーを解釈
inputText:key:modifiers:client:⼊⼒された⽂字と修飾キーを受け取る
"apple"が⼊⼒された
"f"とCtrlキーが⼊⼒された
TSMのイベントを利用
handleEvent:client:よくわからん。
たぶん従来のコンポーネントからの移⾏しやすいんじゃないかな。
3つの実装手段
IMKServerInputプロトコルキーバインディング✓
⼊⼒⽂字+修飾キーを解釈✓
TSMのイベントを利用✓
上のふたつのどちらか
つくってみよう
偉大なるお手本
AppleのサンプルNumberInput
NumberInput作成の手順
⼊⼒メニューに表⽰1.�
ユーザ操作から⼊⼒⽂字を決定2.�
複数の変換モード3.�
変換候補の表⽰4.�
環境設定のUI5.�
今回のサンプル
単純のため次のように
英数字のみ扱う✓
英単語を候補から選択できる✓
(できれば)⼊⼒中のテキストから候補を抽出する
✓
実装手順
最⼩限。⼊⼒プログラムとして選択できる
1.�
試験的な変換⼊⼒2.�
目的の変換処理、変換候補の選択3.�
最⼩限の実装
Info.plistに記述✓
main()でIMKServerを⽣成✓
IMKServerControllerのサブクラス✓
Info.plist
LSBackgroundOnlyInputMethodConnectionNameInputMethodServerControllerClasstsInputMethodIconFileKeytsInputMethodCharacterRepertoireKey
Info.plist
LSBackgroundOnly1に。アプリケーションをバックグラウンドにします。
Info.plist
InputMethodConnectionNameアプリケーションと⼊⼒プログラムの通信に利用する名前を指定します。この名前はほかの⼊⼒プログラムと重複しないように注意してください。
Info.plist
InputMethodServerControllerClass⼊⼒サービスを提供するクラスを指定
このクラスはIMKServerControllerのサブクラス
Info.plist
tsInputMethodIconFileKey⼊⼒メニューに表⽰するアイコン(ことえりなら[あ])の画像ファイルを指定
Info.plist
tsInputMethodCharacterRepertoireKey⼊⼒するキャラクタセットをISO1592で指定(複数可)
プログラム
main.m✓
IMKServerControllerのサブクラス✓
main.m
ここでIMKServerのインスタンスを⽣成し、コネクションの名前などを指定します。
IMKInputController
inputText:client:この⼊⼒プログラムで⼊⼒テキストを処理するならYESを、そうでなければNOを返します。
とりあえず常にNOにしておきます。
動作確認�0
⼊⼒メニューに表⽰できる
/Library/Input Methodsに✓
ログオフ〜再ログオン✓
開発時はユーザースイッチを利用するのがよいかも
試験的な変換⼊⼒を実装
-(BOOL)inputText:(NSString*)string client:(id)sender{ if ([string hasPrefix:@"o"]) { [sender insertText:@"Objective-C" replacementRange:NSMakeRange(0, 0)]; return YES; } else { return NO;
動作確認�1
"o"を⼊⼒すると"Objective-C"が他の⽂字はそのまま
abc..lmnObjective-Cpq..xyz
変換候補の表示
cancdidates:候補の配列を返す
candidateSelected:候補が選択された
candidateSelectionChanged:選択候補が変更された
動作確認�2
⼊⼒中にスペースキーで変換候補を表⽰
✓
⼊⼒中の⽂字が表⽰されない...✓
インライン⼊⼒
これは宿題っ
setMarkedText:selectionRange:replacementRange:
終
質問などあればどうぞ
Powered by Rabbit 0.6.4 and COZMIXNG