NVDAの日本語IME対応に向けて

今月もNVDA日本語化プロジェクトのコードレビューに参加しました。
本家のNVDAはものすごいペースで開発が進んでおり、またユーザのメーリングリストでは日々大量のメッセージが流れています。
またNVDAはすでに日本でも、従来の日本製の支援技術でカバーされていなかったアプリケーションを音声化するための手段として、他のスクリーンリーダと併用して使う方が徐々に増えているようです。
また、Web開発の企業でもアクセシビリティ検証用としてお使いになる事例が出てきつつあるそうです。
日本でもNVDAという無償のソフトウェアの普及によって、利用者の方の選択肢が広がり、また英語圏で実現されつつある「アクセシブルなJavaScriptアプリケーション」などへの対応が日本でも進むことを期待しています。
今年1月からのNVDAjpでの活動を振り返ってみたいと思います。

まず、MSAAを用いてMS-IME2002およびMS-IME2007の「変換キーを押して候補ウィンドウが出てきた状態」において選択された候補文字列の情報を取得する目処が立ちました。技術調査のためにPyAAを使用しました。
NVDAの中で、候補ウィンドウのウィンドウクラスの名前を判断してフックをかける実装方法も分かりました。
この段階での制約は「変換キーを押すまでのフィードバックがない」「変換キーを押して2回目くらいから読み上げが始まる」「特定のIMEにしか対応できない」ということです。また、この仕組みと詳細読み辞書を組み合わせる作業も続いています。
いくつかの問題を解決するために、MSAAでは取れない情報を利用する必要があります。
そこでTSFに関するMicrosoftのドキュメントやサンプルコードを検討しました。
3月に私が実装したサンプルで、メモ帳にIMEでキー入力を行った際にメモ帳のプロセス(IMEおよびTSFを含むプロセス)が書き換えた情報を、Python 側のプロセスで読めるようになりました。Win32の共有メモリの仕組みを使用しました。この実装にはPythonとVisual C++ 2008を併用し、一部の処理はDLLとして実現されています。
今月のコードレビューでは、この実装に基づいて、未確定文字の読み上げ処理をどこに組み込むべきか、検討をしました。
NVDAのコードに関しては、起動中ずっと動き続けているスレッドの実現方法や、拡張可能なモジュールを実装する方法などを確認しました。さらに、MSAAのサンプルコードではC++で実現していた「ウィンドウメッセージをフックする処理」が、NVDAにおいてはPythonで実装されているらしい、ということがわかりました。
この他に今回は、本家が導入したバージョン管理システム bazzar (bzr) について、NVDAjp プロジェクトでの利用方法の議論などを行いました。
次回のコードレビューは5月9日の日曜日のお昼に都内での開催を予定しています。


投稿日

カテゴリー:

投稿者:

タグ: