OpenWnn解析メモ

Androidでrepo syncするともれなくOpenWnnのソースがゲットできるのですが、どのように実装されているか調べてみたいと思います。
調査するコードは27ab9d1b806f03554d2abb50de26abe7bf234336。

まず、通常のビルドではOpenWnnはコンパイルされないので、以下のコマンドで自分でビルドします。

$ . build/envsetup.sh
$ cd packages/inputmethods/OpenWnn
$ mm

で、 コード量を見てみます。 Javaのコードが16523行、Cのコードが166529行で合計183052行になります。
ただし、その内WnnEngDic.cとWnnJpnDic.cは辞書データなので、その分を省くと25187行になります。
コードの約86%が辞書データですね。(iWnnとかはもっと多いのかな?)

189 ./src/jp/co/omronsoft/openwnn/WnnEngine.java
1055 ./src/jp/co/omronsoft/openwnn/OpenWnnEN.java
66 ./src/jp/co/omronsoft/openwnn/InputViewManager.java
451 ./src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImplJni.java
49 ./src/jp/co/omronsoft/openwnn/LetterConverter.java
67 ./src/jp/co/omronsoft/openwnn/JAJP/ClearLearnDictionaryDialogPreferenceJAJP.java
654 ./src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java
67 ./src/jp/co/omronsoft/openwnn/JAJP/ClearUserDictionaryDialogPreferenceJAJP.java
71 ./src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java
54 ./src/jp/co/omronsoft/openwnn/JAJP/KeyboardListPreferenceJAJP.java
212 ./src/jp/co/omronsoft/openwnn/JAJP/Romkan.java
610 ./src/jp/co/omronsoft/openwnn/JAJP/OpenWnnEngineJAJP.java
216 ./src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java
1222 ./src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java
390 ./src/jp/co/omronsoft/openwnn/JAJP/TutorialJAJP.java
69 ./src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsEditJAJP.java
153 ./src/jp/co/omronsoft/openwnn/JAJP/RomkanHalfKatakana.java
542 ./src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java
775 ./src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java
121 ./src/jp/co/omronsoft/openwnn/WnnWord.java
74 ./src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java
69 ./src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsEditEN.java
67 ./src/jp/co/omronsoft/openwnn/EN/ClearUserDictionaryDialogPreferenceEN.java
378 ./src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java
304 ./src/jp/co/omronsoft/openwnn/EN/TutorialEN.java
307 ./src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java
108 ./src/jp/co/omronsoft/openwnn/CandidatesViewManager.java
72 ./src/jp/co/omronsoft/openwnn/StrSegment.java
993 ./src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java
38 ./src/jp/co/omronsoft/openwnn/OpenWnnControlPanelJAJP.java
71 ./src/jp/co/omronsoft/openwnn/WnnClause.java
579 ./src/jp/co/omronsoft/openwnn/ComposingText.java
248 ./src/jp/co/omronsoft/openwnn/SymbolList.java
1088 ./src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java
144 ./src/jp/co/omronsoft/openwnn/WnnSentence.java
58 ./src/jp/co/omronsoft/openwnn/UserDictionaryToolsListFocus.java
47 ./src/jp/co/omronsoft/openwnn/WnnPOS.java
65 ./src/jp/co/omronsoft/openwnn/CandidateViewButton.java
729 ./src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java
250 ./src/jp/co/omronsoft/openwnn/OpenWnn.java
2577 ./src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java
55 ./src/jp/co/omronsoft/openwnn/CandidateFilter.java
360 ./src/jp/co/omronsoft/openwnn/WnnDictionary.java
39 ./src/jp/co/omronsoft/openwnn/StrSegmentClause.java
354 ./src/jp/co/omronsoft/openwnn/OpenWnnEvent.java
416 ./src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java
16523 total

1397 ./libs/libwnnDictionary/OpenWnnDictionaryImplJni.c
153 ./libs/libwnnDictionary/engine/nj_str.c
2428 ./libs/libwnnDictionary/engine/ndldic.c
70 ./libs/libwnnDictionary/engine/necode.c
2831 ./libs/libwnnDictionary/engine/ndbdic.c
80 ./libs/libwnnDictionary/engine/ndcommon.c
122 ./libs/libwnnDictionary/engine/ndrdic.c
467 ./libs/libwnnDictionary/engine/ndfdic.c
906 ./libs/libwnnDictionary/engine/ndapi.c
210 ./libs/libwnnDictionary/engine/neapi.c
74276 ./libs/libwnnEngDic/WnnEngDic.c
83589 ./libs/libwnnJpnDic/WnnJpnDic.c
166529 total

AndroidManifest.xmlを読むと
OpenWnnJAJPクラスがInput method serviceとして登録され

  1. OpenWnnControlPanelJAJP
  2. UserDictionaryToolsListJAJP
  3. UserDictionaryToolsEditJAJP
  4. UserDictionaryToolsListEN
  5. UserDictionaryToolsEditEN

のクラスがactivityだということがわかります。

上記のactivityに遷移する方法です。

OpenWnnControlPanelJAJP
Settings -> Language & keyboard -> Japanese IME settings

UserDictionaryToolsListJAJP
Settings -> Language & keyboard -> Japanese IME setting -> Japanese User Dictionary

UserDictionaryToolsEditJAJP
Settings -> Language & keyboard -> Japanese IME settings -> Japanese User Dictionary
Menuを表示しAddとかEdit

UserDictionaryToolsListEN
Settings -> Language & keyboard -> Japanese IME settings -> English User Dictionary

UserDictionaryToolsEditEN
Settings -> Language & keyboard -> Japanese IME settings -> English User Dictionary
Menuを表示しAddとかEdit