NVDA 日本語版の IME 対応

2023年5月

Windows 11 22H2

since 2022-10-04

https://github.com/nvdajp/nvdajp/issues/220

https://github.com/nvdajp/nvdajp/issues/266

Windows 10/11 モダンIME対応のための調査。

現状

windowsinternal_composableshell_experiences_textinput_inputapp.py

で実装されており、同じファイル名で scratchpad/appModules フォルダにモジュールを置くと挙動を上書きできる。

以下は Windows を英語UIにして、メモ帳で文字変換して最初の候補ウィンドウが開いた状態を inspect.exe で調べた情報。

- "Desktop 1" pane

-- "Windows Input Experience" window

--- "Microsoft Candidate UI" menu : AutomationId=IME_Candidate_Window

---- "Candidate Item Panel" list : AutomationId=TEMPLATE_PART_CandidatePanel

----- "漢字" list item

------ "1"    text : AutomationId=TEMPLATE_PART_CandidateItemIndex
------ "漢字" text : AutomationId=TEMPLATE_PART_CandidateItemText
------ ""     text : AutomationId=TEMPLATE_PART_CandidateItemAnnotation
------ "桐?"  text (不明)

----- 候補 list item が複数つづく

----- "Pager" menu : AutomationId=TEMPLATE_PART_CandidatePanel_Pager

----- "Previous Page" button : AutomationId=TEMPLATE_PART_PagePreviousButton

----- "Next Page" button : AutomationId=TEMPLATE_PART_PageNextButton

----- "Press [Tab] to open the table view" button : AutomationId=TEMPLATE_PART_TableViewButton

----- "Emoji and Symbol" button : AutomationId=TEMPLATE_PART_EmojiButton

スピーチビューアの記録

k a n j i と入力して1回目のスペースキーを押すと

カンジルノ カン hiragana じ

2回目のスペースキーを押すと候補ウィンドウが開いて下記がスピーチビューアに表示される。最初に候補を詳細読みしているが、直後に候補ウィンドウのほかの情報の読み上げが行われ、ユーザーからは「読み上げていない」ように聞こえる。

トーヨーカンジノ カン モジノ ジ
漢字  2  2 of 105
Windows Input Experience  window
Candidate Item Panel  list
漢字  2  2 of 105
感じ
感じ
巻次
巻次
幹事
幹事
監事
監事
漢字  2  2 of 105

2010年から2013年の作業

2010-12-09 nvdajp のページから IME 関連の西本のメモを移動しました。

IME 関連の作業は @hoozukiyama さんと協力して行なっていました。

ATOK26UIComment

since 2013-03-12

そのうち続きをやるのでメモ:

class ATOK26UIComment(IAccessible):
        name=_("ATOK comment")
        role=controlTypes.ROLE_WINDOW
 
        def event_show(self):
                tones.beep(880,20)
                log.debug("ui comment show")
                log.info(self.basicText)
                log.info(self.displayText.replace('\x00', ''))
 
       def event_gainFocus(self):
                log.info(self.basicText)
                log.info(self.displayText.replace('\x00', ''))

nvda-dev-asia

since 2012-08-13

inputMethods ブランチ関連

候補文字列については記号読みレベルの設定に関わらず記号を読む(nvda/inputMethods: Rev 5272):

speech.speakText(result,symbolLevel=characterProcessing.SYMLVL_ALL)

中国語

Microsoft の技術情報

2010-01-26 コードレビュー

2010-01-26 Twitter 記録

<html> <ul class="tl-tweets"> <li>遅刻。nvdaControllerClientの話をしている。 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8230695053" target="_blank">19:35:48</a></li> <li>source/NVDAObjects/IAccessible/IME.py ってのがあるよ、という話をしています。 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231061748" target="_blank">19:54:32</a></li> <li><a href="http://www.nvda-project.org/wiki/DesignOverview" target="_blank">http://www.nvda-project.org/wiki/DesignOverview</a> をみんなで読んでます <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231358910" target="_blank">20:08:39</a></li> <li>accesibility API : MSAA = IAccesible / IAccessible2 / Java Acc Bridge / UI Automation = SRはここから情報を得る <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231441491" target="_blank">20:12:39</a></li> <li>native api : MSAAで取れない情報をとるために使用。カーソルの位置など。Operating System Functions : バッテリ残量など。どっちも win32 を叩いている? <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231475412" target="_blank">20:14:17</a></li> <li>NVDA Components : オブジェクト指向、抽象化された設計。コンポーネント化。Core 初期化してメインループに。 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231546651" target="_blank">20:17:36</a></li> <li>API Handlers : APIの初期化や終了 source/IAccessibleHandler.py を眺めてみる。 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231654026" target="_blank">20:22:35</a></li> <li>中国語対応しかけた残骸らしいです RT <a href="http://twitter.com/toratorax" target="_blank">@toratorax</a>: <a href="http://twitter.com/nishimotz" target="_blank">@nishimotz</a> IMEに対応しようとした痕跡でしょうか <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231687011" target="_blank">20:24:11</a></li> <li>source/NVDAObjects/init.py にあった。class NVDAObject これが全ての基本 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231809581" target="_blank">20:29:56</a></li> <li>MSAA がイベントを出すとキューに入って、eventHandler.executeEvent で実行される?イベントは event_ で始まる。event_gainFocus and event_nameChange など <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/8231899245" target="_blank">20:33:53</a></li> <li>ツール>ログ閲覧。設定>一般設定>ログ記録>デバッグ でいじってみる。#nvdajp 日本語を入力する。ローマ字入力の keypress しか来てないことを確認。 posted at <a href="http://twitter.com/nishimotz/status/8232240145" target="_blank">20:48:59</a></li> <li>IME.py に from logHandler import log を入れてみようとしたが実行環境で動かすところまでいかず、時間切れ。現在nvdajpは本家と別のレポジトリを持っている TODO:実行環境を作るマニュアル改訂 posted at <a href="http://twitter.com/nishimotz/status/8232449435" target="_blank">20:58:07</a></li> </ul> </html>

その後、MLではソースから実行環境を作る情報を更新。西本は勝手に pyaa に取り組む。

2010-02-16 IME候補読み上げに取り組んだ

2010-02-16 定例ミーティング

  • MS-IME 2002 の候補読み上げ。pyaa による実験で分かったウィンドウクラスとロールを NVDAObjects/IAccessible/init.py に反映させてみる
  • ソースはTABコードでインデントされていることに注意。
  • 実行するときは python generate.py してから python nvda.pyw を行う。
  • ログ閲覧で print 文の出力を読める。その他に 1/0 を実行してエラーを出すテクニックも。

成果

  • とりあえず IME.py の init() は候補選択ごとに呼ばれている。
  • ここで _get_value() して speech.speakText() する。スペースバーを3回くらい押すとしゃべり始めることが確認できた。
  • ログ閲覧には1回目からprintされているので speakText() の問題ではないか?

注意:以下の設定が正しくないと再現できない

  • 「コントロールパネル」→「地域と言語のオプション」を表示させる
  • 「言語」タブに移動し、「テキストサービスと入力言語」を開く
  • 「規定の言語」を「日本語 - Microsoft IME Standard Ver.8.1」に設定する
  • 「詳細設定」タブに移動し、「詳細なテキストサービスをオフにする」チェックボックスのチェックをはずす
  • 「詳細なテキスト サービスのサポートをプログラムのすべてに拡張する」のチェックボックスをチェックする

今後の課題

  • appModules/ : ここに置いたファイルが自動的に読み込まれる。appModules をもうちょっと研究してみる?
  • speech モジュール。キューイングされているから1回目と2回目を読まない?
  • TSFに取り組まないとVista/7対応や新しいIME対応が難しい。COMラッパーを作れるように。。
  • 詳細読み辞書を組み込む。田町読み?

Twitter 記録

<html> <ul class="tl-tweets"> <li>今夜はNVDA日本語化プロジェクトの定例ミーティングに行ってきます <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/9169888846" target="_blank">13:01:16</a></li> <li>NVDA日本語化プロジェクトのミーティング。西本からの報告終わり。これから本家のソース読み <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/9180715683" target="_blank">20:03:01</a></li> <li>pyAA による実験で分かったウィンドウクラスとロールを NVDAObjects/IAccessible/init.py に反映させれば IME2002 の候補を読めるんじゃない?という話に <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/9181295579" target="_blank">20:28:17</a></li> <li>不完全ながらMS-IME2002の候補を読み上げ始めた! <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/9182963437" target="_blank">21:33:01</a></li> </ul> </html>

メモ

import 文が読み込んでいるソースファイルのディレクトリ階層はトップからの絶対位置。 ただし from . import の場合は当該ファイルからの相対位置。

NVDAObjects/IAccessible/__init__.py

363行
		elif windowClassName.startswith('Mozilla'):
			mozCls=__import__("mozilla",globals(),locals(),[]).Mozilla
			clsList.append( mozCls)

この __import__ の意味:
mozilla.py のなかの Mozilla クラスをインポートして clsList に追加する

1394行

###class mappings
_staticMap={

1394行
	("mscandui21.candidate",oleacc.ROLE_SYSTEM_PUSHBUTTON):"IME.IMECandidate",

どうやら mscandui21.candidate と IME.py はアジア圏のIME対応を試みたが成功しなかったときの残骸らしい。

西本が調べた情報によると "MSCandUIWindow_Candidate" と ROLE_SYSTEM_LISTITEM が IME2002 の登録に必要なクラス名とロールID。

これをやってみたのが今回のパッチ。

IMECandidate: event_objectSelection は入れてみたが、このメソッドは呼ばれていない。

2010-02-16 のパッチ

(ソースはnvdajpのsvnレポジトリ)

Index: NVDAObjects/IAccessible/IME.py
===================================================================
--- NVDAObjects/IAccessible/IME.py	(revision 65)
+++ NVDAObjects/IAccessible/IME.py	(working copy)
@@ -5,6 +5,13 @@
 
 class IMECandidate(IAccessible):
 
+	def __init__(self, *argv, **kw):
+		super(IMECandidate, self).__init__(*argv, **kw)
+		name = super(IMECandidate,self)._get_value()
+		if name is not None:
+			print "IMECandidate: " + name
+			speech.speakText(name)
+		
 	def _handleNewCandidate(self):
 		oldNav=api.getNavigatorObject()
 		if oldNav.windowClassName!=self.windowClassName:
@@ -20,3 +27,7 @@
 	def event_stateChange(self):
 		if self.event_objectID>=1 and self.event_objectID<=9:
 			self._handleNewCandidate()
+	
+	def event_objectSelection(self):
+		print "IMECandidate: event_objectSelection"
+		self._handleNewCandidate() # nvdajp
Index: NVDAObjects/IAccessible/__init__.py
===================================================================
--- NVDAObjects/IAccessible/__init__.py	(revision 65)
+++ NVDAObjects/IAccessible/__init__.py	(working copy)
@@ -366,6 +366,9 @@
 		elif windowClassName.startswith('bosa_sdm'):
 			sdmCls=__import__("msOffice",globals(),locals(),[]).SDM
 			clsList.append(sdmCls)
+		elif windowClassName.startswith('MSCandUIWindow'): # nvdajp
+			sdmCls=__import__("IME",globals(),locals(),[]).IMECandidate
+			clsList.append(sdmCls)                           
 		if windowClassName.startswith('RichEdit') and winUser.getClassName(winUser.getAncestor(windowHandle,winUser.GA_PARENT)).startswith('bosa_sdm'):
 			sdmCls=__import__("msOffice",globals(),locals(),[]).RichEditSDMChild
 			clsList.append(sdmCls)
@@ -1391,6 +1394,7 @@
 	("AVL_AVView",oleacc.ROLE_SYSTEM_TEXT):"adobe.AcrobatTextNode",
 	("AcrobatSDIWindow",oleacc.ROLE_SYSTEM_CLIENT):"adobe.AcrobatSDIWindowClient",
 	("mscandui21.candidate",oleacc.ROLE_SYSTEM_PUSHBUTTON):"IME.IMECandidate",
+	("MSCandUIWindow_Candidate",oleacc.ROLE_SYSTEM_LISTITEM):"IME.IMECandidate", # nvdajp
 	("SysMonthCal32",oleacc.ROLE_SYSTEM_CLIENT):"SysMonthCal32.SysMonthCal32",
 	("hh_kwd_vlist",oleacc.ROLE_SYSTEM_LIST):"hh.KeywordList",
 	("Scintilla",oleacc.ROLE_SYSTEM_CLIENT):"scintilla.Scintilla",

2010-03-08 ミーティング

<html> <ul class="tl-tweets"> <li>NVDAの詳細読みを中村さんが実装した話。田町読みをpythonのdictionaryで実装。VistaとIME2007でスペースを2回押したら読んでくれる感じの状況 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10164971098" target="_blank">19:21:27</a></li> <li>本家NVDAがbzrに移行した話。我々もbzrで作業した方が本家とのマージが楽になるはず。sfjpのbzrホスティングを使うか?Windowsのbzrエクスプローラは良くできてるが読み上げ非対応。。 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10165082572" target="_blank">19:26:21</a></li> <li>bzrのレポジトリを作るときnvda本家のブランチはそのまま取り込んでjpブランチを別途作って行くのが将来マージしやすいのでは <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10165204535" target="_blank">19:31:31</a></li> <li>中村さんの実装:文字コードのエラーは本家で解決。IME2002では候補文字列をget_valueしていたがget_nameにすれば2007で動く。上下カーソルとスペースで挙動が違うなど <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10165394412" target="_blank">19:39:39</a></li> <li>speech.speakText() で喋らせれば読み上げ中のキー操作でちゃんと音切れする。Vistaの標準IMEだとget_nameはうまくいかない。ウィンドウクラスでIMECandidateを場合分けするか <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10165622243" target="_blank">19:49:13</a></li> <li>田町読みがGPL互換ではなさそうなのでどうしようという話 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10166118088" target="_blank">20:09:11</a></li> <li>python の unicodedata.normalize が記号の読み上げに使えるかも、という話 <a href="http://bit.ly/b1w3aV" target="_blank">http://bit.ly/b1w3aV</a> <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10166427025" target="_blank">20:21:07</a></li> <li><a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> 参考 Unicode::Normalize で遊ぶ - daily dayflower <a href="http://bit.ly/c4NYfv" target="_blank">http://bit.ly/c4NYfv</a> posted at <a href="http://twitter.com/nishimotz/status/10166525311" target="_blank">20:24:57</a></li> <li>GPL互換の詳細読み辞書が手に入るまでダミー辞書で開発をしようという話 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10166645690" target="_blank">20:29:35</a></li> <li>IAccessibleを継承したクラスを毎回 init してていいのか。TSFの検討は並行して進める。オープンソースカンファレンス再参加の検討 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/10167225395" target="_blank">20:50:49</a></li> </ul> </html>

TSF 対応を NVDA に組み込む

text_services_framework ReadComp の処理を取り込む。

どうやら共有メモリの処理が必要。

成果はこちら:

http://files.nishimotz.com/ReadCompPython-100321.zip

コマンドプロンプトで一番上のディレクトリにある readcomp.py を実行すると 30秒、数字が表示されつづけます。 その間にメモ帳を開いてかな漢字変換をすると、そのたびにイベントが呼ばれた回数が インクリメントされて数字が増えます。

ポイントは rcomplib.dll で共有メモリを使って、メモ帳・IME・TSFのプロセスが 書き換えた情報を、Python 側のプロセスで読めるようにしたところです。

C++のプロジェクトは rcomplib のデバッグビルドしか使っていません。

2010-04-12 コードレビュー

<html> <ul class="tl-tweets"> <li>bzrレポジトリの状況報告。リビジョン3403までが本家。3404以上が日本語関連。sf.jpのbzrでは(root)/nvdajpの下の階層作成には認証が必要? <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/12039165753" target="_blank">19:28:43</a></li> <li>mainは本家+安定した日本語版。projectは開発版。なんかしっくり来ないな。ブランチ使うんだろうが、bzr branch は svn checkout のような機能? <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/12039429211" target="_blank">19:36:35</a></li> <li>田町読みのライセンスをGPL互換にしてもらうお願いをする。当面はBEPの詳細読み辞書を開発用に使う。 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/12041320486" target="_blank">20:32:14</a></li> <li>TSFの未確定文字を抜き出すDLLの試作。処理をどこに突っ込むか。keyboardHandler.pyを読む <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/12041849510" target="_blank">20:46:52</a></li> <li>winInputHook.pyでキーイベントのフック処理。WINFUNCTYPEでコールバック関数もPythonで書けるのか。core.pyに初期化処理。 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/12042738213" target="_blank">21:09:51</a></li> <li>appModulesの中身のベースクラスはappModuleHandler.pyにある。ここではプロセスの名前をチェックしてフックをかけるなど <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/12043256862" target="_blank">21:22:49</a></li> </ul> </html>

2010-06-19 ミーティング

技術的なメモ

  • IEのテキストボックスでキーイベントが起こらない。別スレッドでループを回して監視することも必要
  • 他の処理が重いときに音がでないことがあるかも。TTSの選び方、CPU性能による?
  • APIとしては IMM 系と TSF 系を両方使わざるを得ない。
  • 閲覧時の1文字読み上げ?本家には数字キー2を2回押すとアスキーコード読み上げという機能がある。これを流用?
  • 共有メモリを使う方法はやめて、RegisterGlobal 系を使っている。
  • とうとう音声合成エンジンが次のマイルストーンになりそう

Twitterでの発言

<html> <ul class="tl-tweets"> <li>ぼちぼち <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> の話が始まる。IMEの入力中のキーエコーも変換候補の読み上げも技術的にはできてきた。いま渡辺先生が ITRC の説明中 posted at <a href="http://twitter.com/nishimotz/status/16529108799" target="_blank">16:05:02</a></li> <li>「JAWS or nothing の状況をなんとかしたい」(笑) <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16529372893" target="_blank">16:11:53</a></li> <li>改正JIS「アクセシビリティ・サポーテッド」が日本だけガラパゴス化しないためにNVDAのようなスクリーンリーダの存在が必要 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16529427899" target="_blank">16:13:17</a></li> <li>フォネティック読みが未実装であることについて。まだ本家にも実装されていないという話 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16530377865" target="_blank">16:37:33</a></li> <li>アスキーコードを読み上げるキーバインドがある。これを乗っ取って日本語の詳細読みをしてはどうか、という話 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16530416490" target="_blank">16:38:37</a></li> <li>8月末までに gtalk の DLL 化と naist-jdic (ipadic) への移行をしようと思っている私 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16530614197" target="_blank">16:43:49</a></li> <li>記号の読み方。本家はTTSエンジンまかせ。日本語では独自に辞書を持つべきという話。ローマ字文字列の読み下し? <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16530795823" target="_blank">16:48:24</a></li> <li>本家の中国語対応のチケットの話 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> <a href="http://www.nvda-project.org/ticket/635" target="_blank">http://www.nvda-project.org/ticket/635</a> posted at <a href="http://twitter.com/nishimotz/status/16530876977" target="_blank">16:50:34</a></li> <li>女子大生が帰る前にデモをしてもらう <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16530914331" target="_blank">16:51:35</a></li> <li>日本語IME対応のアルファ版を6月末に出そうという話 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16531583332" target="_blank">17:09:20</a></li> <li>Flashにも対応してWAI-ARIAにも対応しているオープンソースのスクリーンリーダの日本語対応。正式版のリリースのときには積極的に宣伝するべきという話 <a href="http://twitter.com/search?q=%23nvdajp" target="_blank">#nvdajp</a> posted at <a href="http://twitter.com/nishimotz/status/16531659770" target="_blank">17:11:22</a></li> </ul> </html>

2010-06-30 日本語アルファ版

2010-07-04 開発ミーティング

Togetter によるまとめ: http://togetter.com/li/33404

ブログ記事 http://d.nishimotz.com/archives/576

2010-08-20 日本語ベータ版

2010-10-29 最初のコミット

~nvdajp/nvdajp/2010.2 ブランチの 3875

http://bazaar.launchpad.net/~nvdajp/nvdajp/2010.2/revision/3875

2010-12-30 2010.2j からの変更?

MS-IME 2002 の未確定文字の読み上げが、私がいじっているバージョンで
いつのまにか動かなくなっていることに気づきました。

少なくとも 2010.2j ポータブルでは上手く動いているので、
対応するブランチを探してみました。

http://bazaar.launchpad.net/~nvdajp/nvdajp/2010.2/changes
3876までが10月29日。3877が11月5日。
リリースされた 2010.2j は 3876 ベースだと思うのですが。

bzr branch lp:nvdajp/2010.2 nvdajp_2010_2_r3876 -r 3876
bzr branch lp:nvdajp/2010.2 nvdajp_2010_2_r3877 -r 3877

Windows XP SP3 +メモ帳+ MS-IME 2002 の環境で
この2つを比べたところ、3876 では問題がなく、
3877 では未確定文字の読み上げができない、という状況。
ちなみに、どちらもメニューが日本語ではなく英語になります。。

リリースされた 2010.2j は 3876 ベース

以下、nvdajp-dev ML でフォローしていただいた情報:

●2010.2j の履歴については次のリンクを参照してみて下さい。
https://code.launchpad.net/~nvdajp/nvdajp/2010.2

●MiscellaneousDependenciesの履歴については次のリンクを参照してみて下さい。
https://code.launchpad.net/~nvdajp/nvdajp/MiscellaneousDependencies

●リリース後の最新更新版は以下の組み合わせです。
~nvdajp/nvdajp/2010.2 : 3879
~nvdajp/nvdajp/MiscellaneousDependencies : 21

メモ

※本家NVDAのソースにIMEの最新版を反映するには。。。
1.core.py のIMEの一部修正
2.source/nvdajpime.dll はMiscellaneousDependencies : 21 のものを使用
3.source/nvdajp_ime.py は2010.2 : 3879 のものを使用
4.source/nvdajp_keyEvents.py は2010.2 : 3879 のものを使用

nvdajpime.dll について。

ファイルサイズ 54784 バイトのバージョンが過去に存在した。

http://bazaar.launchpad.net/~nvdajp/nvdajp/MiscellaneousDependencies/files/head:/source/

にあるものはファイルサイズ 20480 バイト

lp:~k-tsuzi/nvdajp/main k_tsuzi

上記の 20480 バイトの nvdajpime.dll と組み合わせたらちゃんとIME読み上げできた。

リリースされている 2010.2j は 20480 バイトの nvdajpime.dll

2010-12 課題

1.64ビットOS対応
選択肢としては、以下のいずれか?
●64ビットベースでの対応
●32ビットベースでの対応

2.日本語ON、OFFのタイミング修正
●取得タイミングの問題、イベントトリガーの見直。

3.TSF、IMM32の切り替えスイッチの検討
●WinXPで動作させる場合の検討課題。

4.他スクリーンリーダーとの連携
●入力読み上げON、OFFスイッチの検討
※サブスクリーンリーダーとしての使用を想定
nvdajp_ime.txt · 最終更新: 2023/05/09 16:49 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0