SlideShare a Scribd company logo
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
   ⼊⼒プログラムとやりとりするアプリのイ
   ンターフェイス
IMKStateSetting
IMKMouseHandling
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.�変換候補の表⽰
5.�環境設定のUI
今回のサンプル
単純のため次のように
✓ 英数字のみ扱う
✓ 英単語を候補から選択できる
✓ (できれば)⼊⼒中のテキストから候
  補を抽出する
実装手順
1.�最⼩限。⼊⼒プログラムとして選
   択できる
2.�試験的な変換⼊⼒
3.�目的の変換処理、変換候補の選択
最⼩限の実装
✓ Info.plistに記述
✓ main()でIMKServerを⽣成
✓ IMKServerControllerのサブクラス
Info.plist
LSBackgroundOnly
InputMethodConnectionName
InputMethodServerControllerClas
s
tsInputMethodIconFileKey
tsInputMethodCharacterRepertoir
eKey
Info.plist
LSBackgroundOnly
1に。アプリケーションをバックグラ
ウンドにします。
Info.plist
InputMethodConnectionName
アプリケーションと⼊⼒プログラムの
通信に利用する名前を指定します。こ
の名前はほかの⼊⼒プログラムと重複
しないように注意してください。
Info.plist
InputMethodServerControllerClas
s
⼊⼒サービスを提供するクラスを指定
このクラスはIMKServerControllerの
サブクラス
Info.plist
tsInputMethodIconFileKey
⼊⼒メニューに表⽰するアイコン(こ
とえりなら[あ])の画像ファイルを指
定
Info.plist
tsInputMethodCharacterRepertoir
eKey
⼊⼒するキャラクタセットを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:re
placementRange:
終
質問などあれば
               どうぞ

Powered by Rabbit 0.6.4 and COZMIXNG

More Related Content

KEY
塹壕よりLivetとMVVM
PDF
マイクロにしすぎた結果がこれだよ!
PDF
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
PDF
MySQLで論理削除と正しく付き合う方法
PDF
Wavelet matrix implementation
PPTX
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
PPTX
async/await のしくみ
PDF
木を綺麗に描画するアルゴリズム
塹壕よりLivetとMVVM
マイクロにしすぎた結果がこれだよ!
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
MySQLで論理削除と正しく付き合う方法
Wavelet matrix implementation
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
async/await のしくみ
木を綺麗に描画するアルゴリズム

What's hot (20)

PDF
バグハンターの哀しみ
PDF
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
PDF
katagaitai CTF勉強会 #5 Crypto
KEY
ラムダ計算入門
PPTX
おっさんES6/ES2015,React.jsを学ぶ
PPTX
Apache Avro vs Protocol Buffers
PPTX
Powershell勉強会 v5 (こちらが最新です。)
PPTX
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
PDF
Shougoの開発環境
PDF
数式を綺麗にプログラミングするコツ #spro2013
PDF
とある診断員とSQLインジェクション
PDF
MongoDBとAjaxで作る解析フロントエンド&GraphDBを用いたソーシャルデータ解析
PDF
Webアプリを並行開発する際のマイグレーション戦略
PDF
Humble Object Patternな話
PPTX
マイクロサービスにおける 非同期アーキテクチャ
PDF
ソフトウェア開発のやり方の改善
PDF
関数型プログラミングのデザインパターンひとめぐり
PPTX
フィーチャモデルの描き方
PDF
今日から使おうSmalltalk
PDF
Spring Framework勉強会
バグハンターの哀しみ
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
katagaitai CTF勉強会 #5 Crypto
ラムダ計算入門
おっさんES6/ES2015,React.jsを学ぶ
Apache Avro vs Protocol Buffers
Powershell勉強会 v5 (こちらが最新です。)
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
Shougoの開発環境
数式を綺麗にプログラミングするコツ #spro2013
とある診断員とSQLインジェクション
MongoDBとAjaxで作る解析フロントエンド&GraphDBを用いたソーシャルデータ解析
Webアプリを並行開発する際のマイグレーション戦略
Humble Object Patternな話
マイクロサービスにおける 非同期アーキテクチャ
ソフトウェア開発のやり方の改善
関数型プログラミングのデザインパターンひとめぐり
フィーチャモデルの描き方
今日から使おうSmalltalk
Spring Framework勉強会
Ad

Viewers also liked (14)

PDF
InputMethodKitで入力プログラムをつくろう
PDF
値変換
PDF
らくらくアップデートSparkle
PDF
Precipitateに見る、外部リソースのSpotlight化
PDF
Hotkeyslib3 Cocoaでホットキー
PDF
Three20のTTURLRequest
PDF
ClangでObjective-Cを静的解析
PDF
PSMTabBarControl
PDF
SIMBLでCocoaアプリをパワーアップ
PDF
Xcode4 project template (slide)
PDF
リマインダーの繰り返しを自由に設定する (EventKit)
PDF
Quickcursorに見る、アプリケーション間通信
PDF
Clang Modules
PDF
OS X DYLD_* environments
InputMethodKitで入力プログラムをつくろう
値変換
らくらくアップデートSparkle
Precipitateに見る、外部リソースのSpotlight化
Hotkeyslib3 Cocoaでホットキー
Three20のTTURLRequest
ClangでObjective-Cを静的解析
PSMTabBarControl
SIMBLでCocoaアプリをパワーアップ
Xcode4 project template (slide)
リマインダーの繰り返しを自由に設定する (EventKit)
Quickcursorに見る、アプリケーション間通信
Clang Modules
OS X DYLD_* environments
Ad

Similar to InputMethodKit超入門 (20)

PDF
SICE 2020 Rtm tutorial 2_online_en
PDF
OpenRTM-aist入門
PDF
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
PDF
Locondo 20190215@ec tech_group
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PPTX
MariaDB Columnstore 使いこなそう
PDF
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
PDF
RTミドルウエア講習会2015
PDF
VagrantとChefで開発スピードを上げる話
PDF
「Entity Framework Coreを使ってみる」 公開用
PDF
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
PDF
Oracleの実行計画を読んでみよう! #dbts2017
PDF
Server side Swift & Photo Booth
PDF
DB tech showcase_tokyo2018_LOCONDO
PDF
アトリエ秋葉原 Choregraphe WS#4
PDF
Prometheus超基礎公開用.pdf
PDF
Hol012 windowsコンテナー始動
PDF
さくらのIoT Platform α technical_details
PPTX
WebRTC on Native App
PDF
Amalgam8 application switch for cloud native services
SICE 2020 Rtm tutorial 2_online_en
OpenRTM-aist入門
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Locondo 20190215@ec tech_group
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
MariaDB Columnstore 使いこなそう
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
RTミドルウエア講習会2015
VagrantとChefで開発スピードを上げる話
「Entity Framework Coreを使ってみる」 公開用
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
Oracleの実行計画を読んでみよう! #dbts2017
Server side Swift & Photo Booth
DB tech showcase_tokyo2018_LOCONDO
アトリエ秋葉原 Choregraphe WS#4
Prometheus超基礎公開用.pdf
Hol012 windowsコンテナー始動
さくらのIoT Platform α technical_details
WebRTC on Native App
Amalgam8 application switch for cloud native services

InputMethodKit超入門