日本語入力(TSF)で文節ごとの候補の読み上げ
TSF での文節選択状態を取得する方法を調査しています。
tsf.cpp の TsfSink::OnEndEdit() で pCtx->GetSelection(cookie,TF_DEFAULT_SELECTION,1,&tfSelection,&len) しているところがあるのですが、 ここで TF_DEFAULT_SELECTION ではない呼び出しをしたらどうなるか、調べてみたいと思います。
期待しているのは、tfSelection という TF_SELECTION 構造体の配列に、各文節の情報が入ってくれて、 TF_DA_ATTR_INFO という列挙型のメンバーで TF_ATTR_TARGET_CONVERTED などの値をチェックすればよい、という挙動なのですが。。。
以下、関係ありそうなMSDNの記事:
残念ながら ITfContext::GetSelection() は TF_DEFAULT_SELECTION でないときにも1つしかセレクションを返さないようです。
それから、私がどこかで仕様書を読み間違えたらしく、TF_DISPLAYATTRIBUTE を取るためには別の処理が必要らしいです:
上記の ms629224 "Using Display Attributes" の記事通りに実装したところ、文節がひとつだけのときには TF_ATTR_INPUT (=0) と TF_ATTR_TARGET_CONVERTED (=1) の区別が取れるようになりましたが、文節が2つ以上のときに GetDispAttrFromRange() に相当する部分がどこかで失敗します。
もう少し調べてみます。
現時点までの作業を下記に push しました。
https://bitbucket.org/nvdajp/nvdajp.git ブランチ tsf
ログを確認するには DebugView for Windows が必要です。
http://technet.microsoft.com/ja-jp/sysinternals/bb896647.aspx
bitbucket の tsf ブランチに現状の jpbranch をマージしました。
https://bitbucket.org/nvdajp/nvdajp/commits/branch/tsf
ハッシュ値 eaf4f9c
IME で文節の操作をするときの文字装飾について情報をまとめておきます。
例は office.microsoft.com の記事「文節の長さを変更する」から引用します。 http://office.microsoft.com/ja-jp/support/HA101858014.aspx
この記事は Office IME 2010 に基づいて書かれています。
いま Windows 8 + Microsoft IME + メモ帳で確認しましたが、上記の記事の中の画像とほぼ同じでした。
なお、私のキーボードには変換キーがないのでスペースキーを押しました。
(1)
「ここではせがわとあう」と入力し、 変換キー を押します。 「ここで長谷川と会う」と変換され、「ここで」の下に太い下線が表示されます。
変換キーを押す前:
ここではせがわとあう:波線の下線
変換キーを押した直後:
ここで:太い直線の下線 (ここで下線が切れる) 長谷川と:細い直線の下線 (ここで下線が切れる) 会う:細い直線の下線
(2)
Shift キーを押しながら → キーを 1 回押して、「ここでは」を選択します。 文節の区切りが変更されます。
ここでは:青背景に白抜きの文字 せがわと:波線の下線 (ここで下線が切れる) 会う:細い直線の下線
(3)
変換 キーを押します。 「ここでは瀬川と会う」に変換されます。
ここでは:太い直線の下線 (ここで下線が切れる) 瀬川と:細い直線の下線 (ここで下線が切れる) 会う:細い直線の下線
チケット #28155 と区別するためにタイトルを「日本語入力で文節ごとの候補の読み上げ」から「日本語入力(TSF)で文節ごとの候補の読み上げ」に変更しました。
優先度、重要度を6に変更します。
Windows 8.1 での入力メソッドが UI Automation ベースになったことに関する本家のチケット:
http://community.nvda-project.org/ticket/4011
ここに書かれた方法が実装されると Windows 8.1 の Microsoft IME の田町読みがとれるかも知れませんね。。
日本語テスト版 jpalpha140716
https://dl.dropboxusercontent.com/u/62564469/nvda_jpalpha140716.exe
ひさしぶりに作業したら、やっと TSF の文節変換の状態を取れるようになりました。
Windows 8.1 64ビット、Microsoft IME および ATOK 2014 いずれもテキストサービス有効で動作を確認しています。
Microsoft IME だとときどき、同じ情報を繰り返したり、不要な「空行」を読んだりしますが。。
技術的には、1文字ずつ ITfRange を指定して TF_DISPLAYATTRIBUTE を取得すれば TF_DA_ATTR_INFO が IMM の GCS_COMPATTR のように使える、という話。。
以下、ブランチの情報:
To ssh://git@bitbucket.org/nvdajp/nvdajp.git eaf4f9c..3cad219 tsf -> tsf
日本語テスト版 jpalpha140717
https://dl.dropboxusercontent.com/u/62564469/nvda_jpalpha140717.exe
文節区切り位置を変更したときの読み上げに不具合があったので、修正しました。
課題:
作業中の文節だけを通知するか、コンポジション全体を通知するか、選択できるようにしてはどうか、という提案もいただいています。
おそらくこの作業の影響と思われる現象:
「変換」を確定すると「へんかn」(へんか エヌ)と通知される現象を回避するために、 文節切り替えの通知を NVDAObject.InputComposition.compositionUpdate() に共通化。
To ssh://git@bitbucket.org/nvdajp/nvdajp.git 2bb86df..3ed2b35 tsf -> tsf
その他の通知の重複も、この修正で以前より起こりにくくなったように思います。
最初の1文字を重複して通知する現象は、どうやらキャレット位置を通知する処理の影響のようなので、 他のブランチでやっている EditableText の処理か、このブランチの作業か、 どちらかを完了させて jpbeta にマージしてから行うのがよさそうに思います。
日本語テスト版 jpalpha140723
https://dl.dropboxusercontent.com/u/62564469/nvda_jpalpha140723.exe
上記の tsf ブランチの変更をマージしました。
ATOK での文節単位の確定の読み上げなど、すこし使い勝手が変わってしまったところもあるので、しばらく評価していただこうと思います。
最後にログを貼り付けます。 現象としては、コンポジションの先頭文字の二重読みが発生しています。
「本日は晴天なり。」 ↓ 「はれるのせい はれるのせい てんごくのてん」
Windows 8.1 + Microsoft 2010
nishimoto への返信
日本語テスト版 jpalpha140723 https://dl.dropboxusercontent.com/u/62564469/nvda_jpalpha140723.exe 上記の tsf ブランチの変更をマージしました。 ATOK での文節単位の確定の読み上げなど、すこし使い勝手が変わってしまったところもあるので、しばらく評価していただこうと思います。
IO - inputCore.InputManager.executeGesture (17:32:12): Input: kb(laptop):space IO - speech.speak (17:32:12): Speaking [LangChangeCommand (u'ja'), u'ホンバコノ ホン ニチヨービノ ニチ ヒラガナ ハ'] IO - inputCore.InputManager.executeGesture (17:32:15): Input: kb(laptop):rightArrow IO - speech._speakSpellingGen (17:32:15): Speaking character u'ハレルノ セイ' IO - speech.speak (17:32:15): Speaking [LangChangeCommand (u'ja'), u'ハレルノ セイ テンゴクノ テン'] IO - inputCore.InputManager.executeGesture (17:32:18): Input: kb(laptop):rightArrow IO - speech._speakSpellingGen (17:32:18): Speaking character u'ナ' IO - speech.speak (17:32:18): Speaking [LangChangeCommand (u'ja'), u'ヒラガナ なり'] IO - inputCore.InputManager.executeGesture (17:32:23): Input: kb(laptop):rightArrow IO - speech._speakSpellingGen (17:32:23): Speaking character u'クテン' IO - speech.speak (17:32:23): Speaking [LangChangeCommand (u'ja'), u'ゼンカク マル'] IO - inputCore.InputManager.executeGesture (17:32:24): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (17:32:24): Speaking character u'ナ' IO - speech.speak (17:32:24): Speaking [LangChangeCommand (u'ja'), u'ヒラガナ なり'] IO - inputCore.InputManager.executeGesture (17:32:25): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (17:32:25): Speaking character u'ハレルノ セイ' IO - speech.speak (17:32:25): Speaking [LangChangeCommand (u'ja'), u'ハレルノ セイ テンゴクノ テン'] IO - inputCore.InputManager.executeGesture (17:32:26): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (17:32:26): Speaking character u'ホンバコノ ホン' IO - speech.speak (17:32:26): Speaking [LangChangeCommand (u'ja'), u'ホンバコノ ホン ニチヨービノ ニチ ヒラガナ ハ'] IO - inputCore.InputManager.executeGesture (17:32:31): Input: kb(laptop):enter IO - speech.speak (17:32:31): Speaking [LangChangeCommand (u'ja'), u'本日は晴天なり。']
ご報告ありがとうございます。
コンポジションの先頭文字の二重読みは既知の問題としてここに書いたつもりですが、 念のために詳しく説明しておきます。
日本語変換をしていない状態で左右の矢印キーを押すと、キャレット位置の文字を詳細読みします。
NVDA 日本語版では NVDA+ピリオド(ラップトップ配列)を4回押すと「読み方モード」と「説明モード」を切り替えられて、 読み方モードの動作が、より本家版に近い動作になります。
コンポジションの文節移動で左右矢印を押したときにも、このキャレット位置の文字の説明が同時に動いているので、 結果的に、キャレット位置の文字の説明と、選択した文節の説明が連続して起こっています。
このことは、「読み方モード」「説明モード」を切り替えるとこの挙動が変わるので、確認できるはずです。
この現象を解決する方法として、文字説明モードの動作を、コンポジションの状態によって無効化しようと思っていますが
チケット #33969 テキスト編集で改行を通知
との整合性を考慮しながら行う予定です。
Windows 8.1 + Atok 2013 で以下の現象を確認しています。
「日付」を変換すると、今日の日付が変換候補として表示されるが、読み上げない。
たとえば、 2014/07/23 という変換候補が表示されますが、 読み上げされないという状況です。
ATOK で出てくる二重山かっこのコメントが付いた候補で、候補文字列ではなくコメントを読み上げてしまう不具合の修正:
To ssh://git@bitbucket.org/nvdajp/nvdajp.git 3ed2b35..e18e624 tsf -> tsf
コンポジション文字列で左右の矢印キーを押して、文節の選択を切り替えたり、文節の長さを変更したときに、 キャレット位置の文字の通知をさせない処理:
To ssh://git@bitbucket.org/nvdajp/nvdajp.git e18e624..d81799f tsf -> tsf
日本語テスト版 jpalpha140724
https://dl.dropboxusercontent.com/u/62564469/nvda_jpalpha140724.exe
ATOK のコメント付き候補への対応、左右矢印キーの読み上げの動作を改善。
改行の通知についてのコメントを間違えてつけてしまいましたが、こちらではなく #33969 の議論なので、削除しました。
PC-Talkerでは「変換中ガイドラインすべてを読み上げる」の設定のチェックボックスがあります。これがOnのとき、変換文節にかかわらず、すべてを読み上げ読み上げます。この仕様は、現状のNVDAと同じです。 一方 Off のときには、このチケットで遂行した TSF の変換候補ごとの読み上げをサポートします。
PC-Talkerのデフォルトは Off です。
このようなオプションのチェックボックスを、日本語独自のオプション設定として設けてはどうでしょうか?
この件については、2014.3へ向けた作業として検討していただけましたらと思います。
次に、
こちらもメーリングリストで出された議論からです。
msimeにおいて、 「本日は晴天なり」
この文字列を入力してスペースキーを押したとき 「本日は」「晴天」「なり」の3つのコンポジションに分割されます。
この状態より、ESCを押して行くと、最終的に、 「クリア」が発声するまで、コンポジションマーカーが変化しながら、キャンセルされるという仕様です。
このチケットで作業している TSF におけるアルファ版では、まだ、この件が解決されていません。
こちらも、2014.3の解決課題としていただけましたらと思います。
このチケットでの作業で発生している現象とおもわれるので書き残します。
msime 2010 + Firefox 30.0 において エディットボックス上で日本語で何らかの文字列を入力しているとき、 変換候補が出現すると、あらかじめ、エディットボックス上に入力してあった文字列を読み上げてしまったり、 変換候補に含まれていない、ステータスメッセージも詳細読みしてしまう場合があるようです。
たとえば、Firefoxのスタートページに存在する、検索用のエディットボックスで、 フォーカスモードに切り替えた状態で、 先に「あいえうお」と入力して確定します。 次に「ほんじつは」と入力します。 「ほんじつは」の「ん」まで入力した段階で、「あいうえお」と読み上げてしまうようです。
ステータス表示まで詳細読み上げしてしまう現象については、もう少し検証します。
上記のご指摘について:
(1)
複数文節の変換中の Esc キーの挙動
環境:NVDA jpalpha140724 + Windows 7 64ビット + Microsoft Office IME 2010 + メモ帳
メモ帳に文字変換で「ほんじつはせいてんなり」と入力し、スペースで変換。
コンポジションが「本日は 晴天 なり」という3文節になり、「本日は」の文節が選択された状態になる。
このとき「ホンバコノホン ニチヨービノニチ ヒラガナ ハ」と通知される。
Esc を押すと、選択された文節がひらがなに戻る。
このとき「ヒラガナ ホンジツハ ハレルノセイ テンゴクノテン ヒラガナ ナリ」
と通知される。
もう一度 Esc を押すと、スペースを押して変換をする前の状態(プリエディット)に戻る。
このとき「ヒラガナ ホンジツハセイテンナリ」と通知される。
上記の挙動で間違いなければ、どのように不都合があり、どのように修正されるべきであるか、 具体的にご指摘いただければ幸いです。
(2)
Firefox スタートページの検索ボックスでの、日本語入力、確定、再度の日本語入力で起きる不具合は、私の検証ではまだ再現できていません。
環境:NVDA jpalpha140724 + Windows 7 64ビット + Microsoft Office IME 2010 + Firefox 31
IME の予測入力の影響のようにも見えるのすが、 予測候補がなかなか出てこないので、同じ状況を再現できていないのかも知れません。
(3)
「変換中ガイドラインすべてを読み上げる」オプションの提案については、もうしばらくご意見を伺いたいと思います。
チケット #34093 ATOK 候補で二重山カッコつきで付与されたコメントの通知
と併せて検討が必要と思われます。
以下、インラインでコメントします。
nishimoto への返信
(1) 複数文節の変換中の Esc キーの挙動 環境:NVDA jpalpha140724 + Windows 7 64ビット + Microsoft Office IME 2010 + メモ帳 メモ帳に文字変換で「ほんじつはせいてんなり」と入力し、スペースで変換。 コンポジションが「本日は 晴天 なり」という3文節になり、「本日は」の文節が選択された状態になる。 このとき「ホンバコノホン ニチヨービノニチ ヒラガナ ハ」と通知される。 Esc を押すと、選択された文節がひらがなに戻る。 このとき「ヒラガナ ホンジツハ ハレルノセイ テンゴクノテン ヒラガナ ナリ」 と通知される。
このとき選択した文節、つまり、この場合は「ヒラガナ ホンジツハ」が通知されることを期待しています。
ESCキーで変換候補が変化した文節を読み上げると、 読み取っていただければと思います。
もう一度 Esc を押すと、スペースを押して変換をする前の状態(プリエディット)に戻る。 このとき「ヒラガナ ホンジツハセイテンナリ」と通知される。
上記の実装でいくと、 「ヒラガナ ホンジツハセイテンナリ」 プリエディット文字列全てを通知する形となります。
(2) Firefox スタートページの検索ボックスでの、日本語入力、確定、再度の日本語入力で起きる不具合は、私の検証ではまだ再現できていません。 環境:NVDA jpalpha140724 + Windows 7 64ビット + Microsoft Office IME 2010 + Firefox 31 IME の予測入力の影響のようにも見えるのすが、 予測候補がなかなか出てこないので、同じ状況を再現できていないのかも知れません。
Firefox と MsIME 2010 をリセットして試しました。 現象自体は変わりません。予測候補オプションを無効にしましたが現象は同じく変わりません。 Atok 2013 使用時には発生しません。
この現象は、 Firefox だけではなく Thunderbird でも発生しています。メモ帳では起きません。 ほかのアプリケーションでも発生しています。
印象としては、プリエディット中に、親ウインドウに入力された文字列を取得して通知してしまっているようです。
また、手続きに一部抜けていましたので、ログで提示したいと思います。
Firefoxの起動直後でスタートページが表示されてからの操作ログです。
IO - inputCore.InputManager.executeGesture (19:13:37): Input: kb(laptop):tab IO - speech.speak (19:13:37): Speaking (u'ja'), u'検索', u'ボタン' IO - inputCore.InputManager.executeGesture (19:13:38): Input: kb(laptop):shift+tab IO - speech.speak (19:13:38): Speaking (u'ja'), u'エディット オートコンプリート' IO - inputCore.InputManager.executeGesture (19:13:38): Input: kb(laptop):enter IO - inputCore.InputManager.executeGesture (19:13:40): Input: kb(laptop):NVDA+space IO - inputCore.InputManager.executeGesture (19:13:41): Input: kb(laptop):NVDA+space
Input: kb(laptop):alt+IMEChangeStatus1 IO - speech.speak (19:13:43): Speaking (u'ja'), u'文字変換'
IO - inputCore.InputManager.executeGesture (19:13:44): Input: kb(laptop):a IO - speech.speak (19:13:44): Speaking (u'ja'), u'ア' IO - inputCore.InputManager.executeGesture (19:13:44): Input: kb(laptop):i IO - speech.speak (19:13:44): Speaking (u'ja'), u'イ' IO - inputCore.InputManager.executeGesture (19:13:45): Input: kb(laptop):u IO - speech.speak (19:13:45): Speaking (u'ja'), u'ウ' IO - inputCore.InputManager.executeGesture (19:13:46): Input: kb(laptop):e IO - speech.speak (19:13:46): Speaking (u'ja'), u'エ' IO - inputCore.InputManager.executeGesture (19:13:46): Input: kb(laptop):o IO - speech.speak (19:13:46): Speaking (u'ja'), u'オ' IO - inputCore.InputManager.executeGesture (19:13:46): Input: kb(laptop):enter IO - speech.speak (19:13:47): Speaking (u'ja'), u'あいうえお'
atention1:
IO - inputCore.InputManager.executeGesture (19:13:48): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:48): Speaking character u'オ' IO - inputCore.InputManager.executeGesture (19:13:49): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:49): Speaking character u'エ' IO - inputCore.InputManager.executeGesture (19:13:50): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:50): Speaking character u'ウ' IO - inputCore.InputManager.executeGesture (19:13:50): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:50): Speaking character u'イ' IO - inputCore.InputManager.executeGesture (19:13:50): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:50): Speaking character u'ア'
atention2:
IO - inputCore.InputManager.executeGesture (19:13:51): Input: kb(laptop):h IO - speech.speak (19:13:52): Speaking (u'ja'), u'h' IO - inputCore.InputManager.executeGesture (19:13:52): Input: kb(laptop):o IO - speech.speak (19:13:52): Speaking (u'ja'), u'ホ' IO - inputCore.InputManager.executeGesture (19:13:52): Input: kb(laptop):n IO - speech.speak (19:13:52): Speaking (u'ja'), u'n' IO - inputCore.InputManager.executeGesture (19:13:53): Input: kb(laptop):n
!atention3:
IO - speech.speak (19:13:53): Speaking (u'ja'), u'アイウエオ'
IO - speech.speak (19:13:53): Speaking (u'ja'), u'ン'
IO - inputCore.InputManager.executeGesture (19:13:59): Input: kb(laptop):z IO - speech.speak (19:13:59): Speaking (u'ja'), u'z' IO - inputCore.InputManager.executeGesture (19:13:59): Input: kb(laptop):i IO - speech.speak (19:13:59): Speaking (u'ja'), u'ジ' IO - inputCore.InputManager.executeGesture (19:14:00): Input: kb(laptop):t IO - speech.speak (19:14:01): Speaking (u'ja'), u't' IO - inputCore.InputManager.executeGesture (19:14:01): Input: kb(laptop):u IO - speech.speak (19:14:01): Speaking (u'ja'), u'ツ' IO - inputCore.InputManager.executeGesture (19:14:01): Input: kb(laptop):h IO - speech.speak (19:14:01): Speaking (u'ja'), u'h' IO - inputCore.InputManager.executeGesture (19:14:02): Input: kb(laptop):a IO - speech.speak (19:14:02): Speaking (u'ja'), u'ハ' IO - inputCore.InputManager.executeGesture (19:14:02): Input: kb(laptop):space IO - speech.speak (19:14:02): Speaking (u'ja'), u'ホンバコノ ホン ニチヨービノ ニチ ヒラガナ ハ' IO - inputCore.InputManager.executeGesture (19:14:03): Input: kb(laptop):enter IO - speech.speak (19:14:03): Speaking (u'ja'), u'本日は'
(3) 「変換中ガイドラインすべてを読み上げる」オプションの提案については、もうしばらくご意見を伺いたいと思います。 チケット #34093 ATOK 候補で二重山カッコつきで付与されたコメントの通知 と併せて検討が必要と思われます。
このチケットで取り上げているTSFの文節単位の読み上げを嫌うスクリーンリーダーユーザーも多くいるので、 合わせて検討していただけましたら戸思います。
下記の手順を、Aパソコン、Bパソコン、Cパソコンで実施したところ、すべて再現しましたので報告します。
この現象は、普段、MsIMEで漢字変換をするうえで、文字入力の完全な妨げとなってしまい、前バージョンよりも使い勝手が悪くなってしまっています。
このチケットにおける現象が解決できないと、このチケット作業は、次期バージョンへ見送るレベルかと考えています。
misono への返信
(2) Firefox スタートページの検索ボックスでの、日本語入力、確定、再度の日本語入力で起きる不具合は、私の検証ではまだ再現できていません。 環境:NVDA jpalpha140724 + Windows 7 64ビット + Microsoft Office IME 2010 + Firefox 31 IME の予測入力の影響のようにも見えるのすが、 予測候補がなかなか出てこないので、同じ状況を再現できていないのかも知れません。
Firefox と MsIME 2010 をリセットして試しました。 現象自体は変わりません。予測候補オプションを無効にしましたが現象は同じく変わりません。 Atok 2013 使用時には発生しません。 この現象は、 Firefox だけではなく Thunderbird でも発生しています。メモ帳では起きません。 ほかのアプリケーションでも発生しています。 印象としては、プリエディット中に、親ウインドウに入力された文字列を取得して通知してしまっているようです。 また、手続きに一部抜けていましたので、ログで提示したいと思います。 Firefoxの起動直後でスタートページが表示されてからの操作ログです。 IO - inputCore.InputManager.executeGesture (19:13:37): Input: kb(laptop):tab IO - speech.speak (19:13:37): Speaking (u'ja'), u'検索', u'ボタン' IO - inputCore.InputManager.executeGesture (19:13:38): Input: kb(laptop):shift+tab IO - speech.speak (19:13:38): Speaking (u'ja'), u'エディット オートコンプリート' IO - inputCore.InputManager.executeGesture (19:13:38): Input: kb(laptop):enter IO - inputCore.InputManager.executeGesture (19:13:40): Input: kb(laptop):NVDA+space IO - inputCore.InputManager.executeGesture (19:13:41): Input: kb(laptop):NVDA+space Input: kb(laptop):alt+IMEChangeStatus1 IO - speech.speak (19:13:43): Speaking (u'ja'), u'文字変換' IO - inputCore.InputManager.executeGesture (19:13:44): Input: kb(laptop):a IO - speech.speak (19:13:44): Speaking (u'ja'), u'ア' IO - inputCore.InputManager.executeGesture (19:13:44): Input: kb(laptop):i IO - speech.speak (19:13:44): Speaking (u'ja'), u'イ' IO - inputCore.InputManager.executeGesture (19:13:45): Input: kb(laptop):u IO - speech.speak (19:13:45): Speaking (u'ja'), u'ウ' IO - inputCore.InputManager.executeGesture (19:13:46): Input: kb(laptop):e IO - speech.speak (19:13:46): Speaking (u'ja'), u'エ' IO - inputCore.InputManager.executeGesture (19:13:46): Input: kb(laptop):o IO - speech.speak (19:13:46): Speaking (u'ja'), u'オ' IO - inputCore.InputManager.executeGesture (19:13:46): Input: kb(laptop):enter IO - speech.speak (19:13:47): Speaking (u'ja'), u'あいうえお' atention1: IO - inputCore.InputManager.executeGesture (19:13:48): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:48): Speaking character u'オ' IO - inputCore.InputManager.executeGesture (19:13:49): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:49): Speaking character u'エ' IO - inputCore.InputManager.executeGesture (19:13:50): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:50): Speaking character u'ウ' IO - inputCore.InputManager.executeGesture (19:13:50): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:50): Speaking character u'イ' IO - inputCore.InputManager.executeGesture (19:13:50): Input: kb(laptop):leftArrow IO - speech._speakSpellingGen (19:13:50): Speaking character u'ア' atention2: IO - inputCore.InputManager.executeGesture (19:13:51): Input: kb(laptop):h IO - speech.speak (19:13:52): Speaking (u'ja'), u'h' IO - inputCore.InputManager.executeGesture (19:13:52): Input: kb(laptop):o IO - speech.speak (19:13:52): Speaking (u'ja'), u'ホ' IO - inputCore.InputManager.executeGesture (19:13:52): Input: kb(laptop):n IO - speech.speak (19:13:52): Speaking (u'ja'), u'n' IO - inputCore.InputManager.executeGesture (19:13:53): Input: kb(laptop):n !atention3: IO - speech.speak (19:13:53): Speaking (u'ja'), u'アイウエオ' IO - speech.speak (19:13:53): Speaking (u'ja'), u'ン' IO - inputCore.InputManager.executeGesture (19:13:59): Input: kb(laptop):z IO - speech.speak (19:13:59): Speaking (u'ja'), u'z' IO - inputCore.InputManager.executeGesture (19:13:59): Input: kb(laptop):i IO - speech.speak (19:13:59): Speaking (u'ja'), u'ジ' IO - inputCore.InputManager.executeGesture (19:14:00): Input: kb(laptop):t IO - speech.speak (19:14:01): Speaking (u'ja'), u't' IO - inputCore.InputManager.executeGesture (19:14:01): Input: kb(laptop):u IO - speech.speak (19:14:01): Speaking (u'ja'), u'ツ' IO - inputCore.InputManager.executeGesture (19:14:01): Input: kb(laptop):h IO - speech.speak (19:14:01): Speaking (u'ja'), u'h' IO - inputCore.InputManager.executeGesture (19:14:02): Input: kb(laptop):a IO - speech.speak (19:14:02): Speaking (u'ja'), u'ハ' IO - inputCore.InputManager.executeGesture (19:14:02): Input: kb(laptop):space IO - speech.speak (19:14:02): Speaking (u'ja'), u'ホンバコノ ホン ニチヨービノ ニチ ヒラガナ ハ' IO - inputCore.InputManager.executeGesture (19:14:03): Input: kb(laptop):enter IO - speech.speak (19:14:03): Speaking (u'ja'), u'本日は'
ご報告ありがとうございます。
問題提起をいただいたので、このチケットを再オープンの状態にします。
(1) 私の環境ではご指摘の不具合が再現できない
(2) なぜこのチケットの作業がご指摘のような現象を引き起こすのかわからない
という状況です。
ログを取るときに IO ではなく DEBUG レベルにしていただくと、もう少し役立つかも知れません。
また、念のために、ログファイルの先頭のバージョン情報などが入った部分もつけていただいたほうがよいでしょう。
再現性が高いのであれば、他のかたからも不具合のご報告をいただけると思いますので、引き続き情報を待ちたいと思います。
デバッグログでスクリーンリーダーユーザーの方には読みにくくなりますが、下記に貼り付けます。 なお、音声エンジンは、以下のログでは jtalk を使用しています。
Atok で起きず msime で起きるということは、 msime と Mozilla コンポーネントとの関連のバグや、 msime と NVDA とのウインドウハンドルとの兼ね合いも検討したほうがよいかもしれません。
なお、今回のテストでは Firefox を用いていますが、 Thunderbirdでも同じ状況です。
INFO - __main__ (12:40:25): Starting NVDA INFO - core.main (12:40:25): Config dir: C:\Users\misono\AppData\Roaming\nvda DEBUG - core.main (12:40:25): setting language to Windows INFO - core.main (12:40:25): NVDA version jpbeta140730 INFO - core.main (12:40:25): Using Windows version sys.getwindowsversion(major=6, minor=3, build=9600, platform=2, service_pack='') INFO - core.main (12:40:25): Using Python version 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] INFO - core.main (12:40:25): Using comtypes version 0.6.2 DEBUG - core.main (12:40:25): Initializing addons system. DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Listing add-ons from C:\Users\misono\AppData\Roaming\nvda\addons DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Loading add-on from C:\Users\misono\AppData\Roaming\nvda\addons\dropbox DEBUG - addonHandler.Addon.__init__ (12:40:25): Using manifest translation from C:\Users\misono\AppData\Roaming\nvda\addons\dropbox\locale\ja\manifest.ini DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Found add-on dropbox DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Loading add-on from C:\Users\misono\AppData\Roaming\nvda\addons\hidemaru DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Found add-on hidemaru DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Loading add-on from C:\Users\misono\AppData\Roaming\nvda\addons\protalker DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Found add-on protalker DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Loading add-on from C:\Users\misono\AppData\Roaming\nvda\addons\systrayList DEBUG - addonHandler.Addon.__init__ (12:40:25): Using manifest translation from C:\Users\misono\AppData\Roaming\nvda\addons\systrayList\locale\ja\manifest.ini DEBUG - addonHandler._getAvailableAddonsFromPath (12:40:25): Found add-on systrayList DEBUG - core.main (12:40:26): Initializing appModule Handler DEBUG - addonHandler.Addon.addToPackagePath (12:40:26): Addon dropbox added to appModules package path DEBUG - addonHandler.Addon.addToPackagePath (12:40:26): Addon hidemaru added to appModules package path DEBUG - core.main (12:40:26): Initializing NVDAHelper DEBUG - core.main (12:40:26): Speech Dictionary processing DEBUG - speechDictHandler.SpeechDict.load (12:40:26): Loading speech dictionary 'C:\Users\misono\AppData\Roaming\nvda\speechDicts\default.dic'... DEBUG - speechDictHandler.SpeechDict.load (12:40:26): file 'C:\Users\misono\AppData\Roaming\nvda\speechDicts\default.dic' not found. DEBUG - speechDictHandler.SpeechDict.load (12:40:26): Loading speech dictionary 'builtin.dic'... DEBUG - speechDictHandler.SpeechDict.load (12:40:26): 3 loaded records. DEBUG - core.main (12:40:26): Initializing speech DEBUG - addonHandler.Addon.addToPackagePath (12:40:26): Addon protalker added to synthDrivers package path DEBUG - synthDrivers.jtalk.jtalkDriver.initialize (12:40:26): jtalk using eSpeak version 1.48.03 04.Mar.14 INFO - synthDrivers.jtalk.mecab.Mecab_initialize (12:40:26): dic: C:\Program Files (x86)\NVDA\synthDrivers\jtalk\dic INFO - synthDrivers.jtalk.mecab.Mecab_initialize (12:40:26): mecab:0.996 nvdajp-jtalk-dic (utf-8) 20140730-023826 DEBUG - synthDrivers.jtalk.jtalkDriver.initialize (12:40:26): jt_dll C:\Program Files (x86)\NVDA\synthDrivers\jtalk\libopenjtalk.dll DEBUG - synthDrivers.jtalk.jtalkDriver.initialize (12:40:26): libopenjtalk 20140730-023735 INFO - synthDrivers.jtalk.jtalkDriver.initialize (12:40:26): loaded C:\Program Files (x86)\NVDA\synthDrivers\jtalk\mei\mei_normal.htsvoice DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._set_voice (12:40:26): _set_voice V2 DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._getAvailableVoices (12:40:26): _getAvailableVoices called DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:26): _get_voice called DEBUG - speechDictHandler.SpeechDict.load (12:40:26): Loading speech dictionary 'C:\Users\misono\AppData\Roaming\nvda\speechDicts\nvdajp_jtalk-mei.dic'... DEBUG - speechDictHandler.SpeechDict.load (12:40:26): file 'C:\Users\misono\AppData\Roaming\nvda\speechDicts\nvdajp_jtalk-mei.dic' not found. INFO - synthDriverHandler.setSynth (12:40:26): Loaded synthDriver nvdajp_jtalk INFO - core.main (12:40:26): Using wx version 2.8.12.1 (msw-unicode) DEBUG - core.main (12:40:26): Initializing braille INFO - braille.initialize (12:40:26): Using liblouis version 2.5.3 INFO - braille.BrailleHandler.setDisplayByName (12:40:26): Loaded braille display driver noBraille, current display has 0 cells. DEBUG - core.main (12:40:26): Initializing braille input INFO - brailleInput.initialize (12:40:26): Braille input initialized DEBUG - core.main (12:40:26): Initializing displayModel DEBUG - core.main (12:40:26): Initializing GUI DEBUG - core.main (12:40:26): initializing Java Access Bridge support WARNING - core.main (12:40:26): Java Access Bridge not available DEBUG - core.main (12:40:26): Initializing winConsole support DEBUG - core.main (12:40:26): Initializing UIA support DEBUG - core.main (12:40:26): Initializing IAccessible support DEBUG - core.main (12:40:26): Initializing input core DEBUGWARNING - inputCore.InputManager.loadLocaleGestureMap (12:40:26): No locale gesture map for language ja_JP DEBUGWARNING - inputCore.InputManager.loadUserGestureMap (12:40:26): No user gesture map DEBUG - core.main (12:40:26): Initializing keyboard handler DEBUG - core.main (12:40:26): initializing mouse handler DEBUG - core.main (12:40:26): Initializing touchHandler DEBUGWARNING - touchHandler.initialize (12:40:26): No touch devices found DEBUG - core.main (12:40:26): Initializing global plugin handler DEBUG - addonHandler.Addon.addToPackagePath (12:40:26): Addon dropbox added to globalPlugins package path DEBUG - addonHandler.Addon.addToPackagePath (12:40:26): Addon systrayList added to globalPlugins package path DEBUG - addonHandler.Addon.__init__ (12:40:26): Using manifest translation from C:\Users\misono\AppData\Roaming\nvda\addons\systrayList\locale\ja\manifest.ini DEBUG - core.main (12:40:26): Initializing core pump DEBUG - core.main (12:40:26): Initializing watchdog DEBUG - core.main (12:40:26): initializing updateCheck INFO - core.main (12:40:26): NVDA initialized DEBUG - core.main (12:40:26): entering wx application main loop DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:26): _get_voice called IO - speech.speak (12:40:26): Speaking [LangChangeCommand ('ja'), u'ようこそNVDAへ ダイアログ NVDAへようこそ!\nNVDAキーを押しながらほかのキーを押すと、いろいろな操作ができます。\nInsertキーがNVDAキーとして使えます。\nNVDAキーとNを押すとNVDAメニューが開きます。\nNVDAメニューには、NVDAの設定の変更、説明、その他の機能があります。\nなお、英語キーボードでは、CapsLockキーをNVDAキーとして使えます。\n'] DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:27): _get_voice called IO - speech.speak (12:40:27): Speaking [LangChangeCommand ('ja'), u'オプション グループ'] DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:27): _get_voice called IO - speech.speak (12:40:27): Speaking [LangChangeCommand ('ja'), u'無変換をNVDAキーとして使用 チェックボックス チェック'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:27): ようこそ,感動詞,*,*,*,*,*,ようこそ,ヨウコソ,ヨーコソ,1/4,C2 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:27): nvda,名詞,一般,*,*,*,*,nvda,エヌブイディーエー,エヌブイディーエー,1/8,C0 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:27): へ,助詞,格助詞,一般,*,*,*,へ,ヘ,エ,0/1,名詞%F1 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:27): ダイアログ,名詞,一般,*,*,*,*,* DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:28): nvda,名詞,一般,*,*,*,*,nvda,エヌブイディーエー,エヌブイディーエー,1/8,C0 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:28): へ,助詞,格助詞,一般,*,*,*,へ,ヘ,エ,0/1,名詞%F1 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:28): ようこそ,感動詞,*,*,*,*,*,ようこそ,ヨウコソ,ヨーコソ,1/4,C2 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:29): カンタンフ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:30): Input: kb(laptop):windows+d DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:30): _get_voice called IO - speech.speak (12:40:30): Speaking [LangChangeCommand ('ja'), u'ペイン'] DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:30): _get_voice called IO - speech.speak (12:40:30): Speaking [LangChangeCommand ('ja'), u'FolderView リスト'] DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:30): _get_voice called IO - speech.speak (12:40:30): Speaking [LangChangeCommand ('ja'), u'Edit 2の8'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:30): ペイン,名詞,一般,*,*,*,*,ペイン,ペイン,ペイン,1/3,C1 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:30): folder,名詞,一般,*,*,*,*,folder,フォゥルダー,フォゥルダー,1/6,C0 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:31): view,名詞,一般,*,*,*,*,view,ビュー,ビュー,1/3,C0 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:31): リスト,名詞,固有名詞,人名,姓,*,*,リスト,リスト,リスト,1/3,C1 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:32): edit,名詞,一般,*,*,*,*,edit,エディットゥ,エディットゥ,1/6,C0 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:32): 2,名詞,数,*,*,*,*,2,ニ,ニ,1/1,C3 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:32): の,助詞,連体化,*,*,*,*,の,ノ,ノ,0/1,動詞%F2@0/形容詞%F1 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:32): 8,名詞,数,*,*,*,*,8,ハチ,ハチ,2/2,C3 IO - inputCore.InputManager.executeGesture (12:40:33): Input: kb(laptop):f DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:33): _get_voice called IO - speech._speakSpellingGen (12:40:33): Speaking character u'f' DEBUG - characterProcessing.CharacterDescriptions.__init__ (12:40:33): Loaded 7286 entries. DEBUG - characterProcessing.CharacterDescriptions.__init__ (12:40:33): Loaded 7720 readings. DEBUG - queueHandler.registerGeneratorObject (12:40:33): Adding generator 1 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:33): エフ,名詞,一般,*,*,*,*,* DEBUG - queueHandler.pumpAll (12:40:33): generator 1 finished DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:33): _get_voice called IO - speech.speak (12:40:33): Speaking [LangChangeCommand ('ja'), u'Firefox 3の8'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:33): firefox,名詞,一般,*,*,*,*,firefox,ファイアフォックス,ファイアフォックス,1/9,C0 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:34): 3,名詞,数,*,*,*,*,3,サン,サン,0/2,C3 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:34): の,助詞,連体化,*,*,*,*,の,ノ,ノ,0/1,動詞%F2@0/形容詞%F1 IO - inputCore.InputManager.executeGesture (12:40:34): Input: kb(laptop):enter DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:35): _get_voice called IO - speech.speak (12:40:35): Speaking [LangChangeCommand ('ja'), u'未定義'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:35): 未,接頭詞,名詞接続,*,*,*,*,未,ミ,ミ,0/1,P2 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:35): 定義,名詞,サ変接続,*,*,*,*,定義,テイギ,テイギ,1/3,C1 DEBUGWARNING - watchdog._watcher (12:40:35): Trying to recover from freeze, core stack: File "nvda.pyw", line 165, in <module> File "core.pyo", line 346, in main File "wx\_core.pyo", line 8010, in MainLoop File "wx\_core.pyo", line 7306, in MainLoop File "wx\_core.pyo", line 14669, in <lambda> File "core.pyo", line 54, in doStartupDialogs File "gui\__init__.pyo", line 657, in run File "wx\_windows.pyo", line 711, in ShowModal File "core.pyo", line 316, in Notify File "IAccessibleHandler.pyo", line 864, in pumpAll File "IAccessibleHandler.pyo", line 605, in processGenericWinEvent File "IAccessibleHandler.pyo", line 523, in winEventToNVDAEvent File "NVDAObjects\IAccessible\__init__.pyo", line 43, in getNVDAObjectFromEvent File "NVDAObjects\__init__.pyo", line 75, in __call__ File "NVDAObjects\IAccessible\__init__.pyo", line 371, in findOverlayClasses File "baseObject.pyo", line 34, in __get__ File "baseObject.pyo", line 110, in _getPropertyViaCache File "NVDAObjects\IAccessible\__init__.pyo", line 765, in _get_IAccessibleRole DEBUGWARNING - core.Notify (12:40:35): errors in this core pump cycle Traceback (most recent call last): File "core.pyo", line 316, in Notify File "IAccessibleHandler.pyo", line 864, in pumpAll File "IAccessibleHandler.pyo", line 605, in processGenericWinEvent File "IAccessibleHandler.pyo", line 523, in winEventToNVDAEvent File "NVDAObjects\IAccessible\__init__.pyo", line 43, in getNVDAObjectFromEvent File "NVDAObjects\__init__.pyo", line 75, in __call__ File "NVDAObjects\IAccessible\__init__.pyo", line 371, in findOverlayClasses File "baseObject.pyo", line 34, in __get__ File "baseObject.pyo", line 110, in _getPropertyViaCache File "watchdog.pyo", line 191, in _COMError_init CallCancelled DEBUG - treeInterceptorHandler.update (12:40:36): Adding new treeInterceptor to runningTable: <virtualBuffers.gecko_ia2.Gecko_ia2 object at 0x04C86BF0> DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:36): _get_voice called IO - speech.speak (12:40:36): Speaking [LangChangeCommand ('ja'), u'Mozilla Firefox スタートページ - Mozilla Firefox'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:36): mozilla,名詞,一般,*,*,*,*,mozilla,モジラ,モジラ,1/3,C0 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:36): firefox,名詞,一般,*,*,*,*,firefox,ファイアフォックス,ファイアフォックス,1/9,C0 DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:36): _get_voice called IO - speech.speak (12:40:36): Speaking [LangChangeCommand ('ja'), u'Mozilla Firefox スタートページ ドキュメント'] DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:36): _get_voice called IO - speech.speak (12:40:36): Speaking [LangChangeCommand ('ja'), u'Mozilla Firefox スタートページ - Mozilla Firefox'] DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:36): _get_voice called IO - speech.speak (12:40:36): Speaking [LangChangeCommand ('ja'), u'Mozilla Firefox スタートページ ドキュメント'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:36): mozilla,名詞,一般,*,*,*,*,mozilla,モジラ,モジラ,1/3,C0 DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:36): _get_voice called IO - speech.speak (12:40:36): Speaking [LangChangeCommand ('ja'), u'エディット オートコンプリート'] DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:36): _get_voice called IO - speech.speak (12:40:36): Speaking [LangChangeCommand ('ja'), u'クーギョー'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:37): firefox,名詞,一般,*,*,*,*,firefox,ファイアフォックス,ファイアフォックス,1/9,C0 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:37): スタート,名詞,サ変接続,*,*,*,*,スタート,スタート,スタート,2/4,C2 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:37): ページ,名詞,一般,*,*,*,*,ページ,ページ,ページ,0/3,C2 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:38): マイナス,名詞,一般,*,*,*,*,マイナス,マイナス,マイナス,0/4,C2 IO - inputCore.InputManager.executeGesture (12:40:39): Input: kb(laptop):alt+IMEChangeStatus1 IO - inputCore.InputManager.executeGesture (12:40:40): Input: kb(laptop):alt+IMEChangeStatus1 DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:40): _get_voice called IO - speech.speak (12:40:40): Speaking [LangChangeCommand ('ja'), u'文字変換'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:40): 文字,名詞,一般,*,*,*,*,文字,モジ,モジ,1/2,C3 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:40): 変換,名詞,サ変接続,*,*,*,*,変換,ヘンカン,ヘンカン,0/4,C2 IO - inputCore.InputManager.executeGesture (12:40:42): Input: kb(laptop):a DEBUG - nvdajp_dic.fixNewText (12:40:42): あ DEBUG - nvdajp_dic.fixNewText (12:40:42): convert hiragana to katakana: ア DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:42): _get_voice called IO - speech.speak (12:40:42): Speaking [LangChangeCommand ('ja'), u'ア'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:42): ア,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:42): Input: kb(laptop):i DEBUG - nvdajp_dic.fixNewText (12:40:42): い DEBUG - nvdajp_dic.fixNewText (12:40:42): convert hiragana to katakana: イ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:42): _get_voice called IO - speech.speak (12:40:42): Speaking [LangChangeCommand ('ja'), u'イ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:42): イ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:43): Input: kb(laptop):u DEBUG - nvdajp_dic.fixNewText (12:40:43): う DEBUG - nvdajp_dic.fixNewText (12:40:43): convert hiragana to katakana: ウ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:43): _get_voice called IO - speech.speak (12:40:43): Speaking [LangChangeCommand ('ja'), u'ウ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:43): ウ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:43): Input: kb(laptop):e DEBUG - nvdajp_dic.fixNewText (12:40:43): え DEBUG - nvdajp_dic.fixNewText (12:40:43): convert hiragana to katakana: エ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:43): _get_voice called IO - speech.speak (12:40:43): Speaking [LangChangeCommand ('ja'), u'エ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:43): エ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:44): Input: kb(laptop):o DEBUG - nvdajp_dic.fixNewText (12:40:44): お DEBUG - nvdajp_dic.fixNewText (12:40:44): convert hiragana to katakana: オ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:44): _get_voice called IO - speech.speak (12:40:44): Speaking [LangChangeCommand ('ja'), u'オ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:44): オ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:44): Input: kb(laptop):enter DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:44): _get_voice called IO - speech.speak (12:40:44): Speaking [LangChangeCommand ('ja'), u'あいうえお'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:44): あいうえお,感動詞,*,*,*,*,*,あいうえお,アイウエオ,アイウエオ,0/5,C0,アイウエオ IO - inputCore.InputManager.executeGesture (12:40:48): Input: kb(laptop):home DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:48): _get_voice called IO - speech._speakSpellingGen (12:40:48): Speaking character u'ア' DEBUG - queueHandler.registerGeneratorObject (12:40:48): Adding generator 2 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:48): ア,名詞,一般,*,*,*,*,* DEBUG - queueHandler.pumpAll (12:40:48): generator 2 finished IO - inputCore.InputManager.executeGesture (12:40:50): Input: kb(laptop):h DEBUG - nvdajp_dic.fixNewText (12:40:50): h DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:50): _get_voice called IO - speech.speak (12:40:50): Speaking [LangChangeCommand ('ja'), u'h'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:50): h,記号,アルファベット,*,*,*,*,h,エイチ,エイチ,1/3,* IO - inputCore.InputManager.executeGesture (12:40:51): Input: kb(laptop):o DEBUG - nvdajp_dic.fixNewText (12:40:51): ほ DEBUG - nvdajp_dic.fixNewText (12:40:51): convert hiragana to katakana: ホ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:51): _get_voice called IO - speech.speak (12:40:51): Speaking [LangChangeCommand ('ja'), u'ホ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:51): ホ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:52): Input: kb(laptop):n DEBUG - nvdajp_dic.fixNewText (12:40:52): n DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:52): _get_voice called IO - speech.speak (12:40:52): Speaking [LangChangeCommand ('ja'), u'n'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:52): n,記号,アルファベット,*,*,*,*,n,エヌ,エヌ,1/2,* IO - inputCore.InputManager.executeGesture (12:40:53): Input: kb(laptop):n DEBUG - nvdajp_dic.fixNewText (12:40:53): あいうえお DEBUG - nvdajp_dic.fixNewText (12:40:53): convert hiragana to katakana: アイウエオ DEBUG - nvdajp_dic.fixNewText (12:40:53): ん DEBUG - nvdajp_dic.fixNewText (12:40:53): convert hiragana to katakana: ン DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:53): _get_voice called IO - speech.speak (12:40:53): Speaking [LangChangeCommand ('ja'), u'アイウエオ'] DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:53): _get_voice called IO - speech.speak (12:40:53): Speaking [LangChangeCommand ('ja'), u'ン'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:53): アイウエオ,名詞,一般,*,*,*,*,* DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:54): ウン,感動詞,*,*,*,*,*,ウン,ウン,ウン,1/2,C3 IO - inputCore.InputManager.executeGesture (12:40:54): Input: kb(laptop):z DEBUG - nvdajp_dic.fixNewText (12:40:54): z DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:54): _get_voice called IO - speech.speak (12:40:54): Speaking [LangChangeCommand ('ja'), u'z'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:54): z,記号,アルファベット,*,*,*,*,z,ゼット,ゼット,1/3,* IO - inputCore.InputManager.executeGesture (12:40:55): Input: kb(laptop):i DEBUG - nvdajp_dic.fixNewText (12:40:55): じ DEBUG - nvdajp_dic.fixNewText (12:40:55): convert hiragana to katakana: ジ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:55): _get_voice called IO - speech.speak (12:40:55): Speaking [LangChangeCommand ('ja'), u'ジ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:55): ジ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:56): Input: kb(laptop):t DEBUG - nvdajp_dic.fixNewText (12:40:56): t DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:56): _get_voice called IO - speech.speak (12:40:56): Speaking [LangChangeCommand ('ja'), u't'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:56): t,記号,アルファベット,*,*,*,*,t,ティー,ティー,1/2,* IO - inputCore.InputManager.executeGesture (12:40:56): Input: kb(laptop):u DEBUG - nvdajp_dic.fixNewText (12:40:56): つ DEBUG - nvdajp_dic.fixNewText (12:40:56): convert hiragana to katakana: ツ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:56): _get_voice called IO - speech.speak (12:40:56): Speaking [LangChangeCommand ('ja'), u'ツ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:56): ツ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:57): Input: kb(laptop):h DEBUG - nvdajp_dic.fixNewText (12:40:57): h DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:57): _get_voice called IO - speech.speak (12:40:57): Speaking [LangChangeCommand ('ja'), u'h'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:57): h,記号,アルファベット,*,*,*,*,h,エイチ,エイチ,1/3,* IO - inputCore.InputManager.executeGesture (12:40:57): Input: kb(laptop):a DEBUG - nvdajp_dic.fixNewText (12:40:57): は DEBUG - nvdajp_dic.fixNewText (12:40:57): convert hiragana to katakana: ハ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:57): _get_voice called IO - speech.speak (12:40:57): Speaking [LangChangeCommand ('ja'), u'ハ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:57): ハ,名詞,一般,*,*,*,*,* IO - inputCore.InputManager.executeGesture (12:40:58): Input: kb(laptop):space DEBUG - nvdajp_dic.getJapaneseDiscriminantReading (12:40:58): (本) DEBUG - nvdajp_dic.getJapaneseDiscriminantReading (12:40:58): (日) DEBUG - nvdajp_dic.getJapaneseDiscriminantReading (12:40:58): (は) ヒラガナ DEBUG - nvdajp_dic.getCandidateCharDesc (12:40:58): longdesc (本) ホンバコノ ホン DEBUG - nvdajp_dic.getCandidateCharDesc (12:40:58): longdesc (日) ニチヨービノ ニチ DEBUG - nvdajp_dic.getCandidateCharDesc (12:40:58): kana (は) ハ DEBUG - nvdajp_dic.fixNewText (12:40:58): ホンバコノ ホン ニチヨービノ ニチ ヒラガナ ハ DEBUG - nvdajp_dic.getJapaneseDiscriminantReading (12:40:58): (本) DEBUG - nvdajp_dic.getJapaneseDiscriminantReading (12:40:58): (日) DEBUG - nvdajp_dic.getJapaneseDiscriminantReading (12:40:58): (は) ヒラガナ DEBUG - nvdajp_dic.getCandidateCharDesc (12:40:58): longdesc (本) ホンバコノ ホン DEBUG - nvdajp_dic.getCandidateCharDesc (12:40:58): longdesc (日) ニチヨービノ ニチ DEBUG - nvdajp_dic.getCandidateCharDesc (12:40:58): kana (は) ハ DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:58): _get_voice called IO - speech.speak (12:40:58): Speaking [LangChangeCommand ('ja'), u'ホンバコノ ホン ニチヨービノ ニチ ヒラガナ ハ'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:58): ホンバコノ,名詞,一般,*,*,*,*,* DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:58): ホン,名詞,固有名詞,人名,姓,*,*,ホン,ホン,ホン,1/2,C3 IO - inputCore.InputManager.executeGesture (12:40:58): Input: kb(laptop):enter DEBUG - synthDrivers.nvdajp_jtalk.SynthDriver._get_voice (12:40:58): _get_voice called IO - speech.speak (12:40:58): Speaking [LangChangeCommand ('ja'), u'本日は'] DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:58): 本日,名詞,副詞可能,*,*,*,*,本日,ホンジツ,ホンジツ,1/4,C1 DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (12:40:58): は,助詞,係助詞,*,*,*,*,は,ハ,ワ,0/1,名詞%F1/動詞%F2@0/形容詞%F2@0 IO - inputCore.InputManager.executeGesture (12:41:01): Input: kb(laptop):NVDA+f1 INFO - globalCommands.GlobalCommands.script_navigatorObject_devInfo (12:41:01): Developer info for navigator object: name: None role: ROLE_EDITABLETEXT states: STATE_FOCUSABLE, STATE_EDITABLE, STATE_FOCUSED, STATE_AUTOCOMPLETE isFocusable: True hasFocus: True Python object: <NVDAObjects.Dynamic_EditableTextWithAutoSelectDetectionMozillaIAccessible object at 0x04CF5ED0> Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithAutoSelectDetectionMozillaIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.mozilla.Mozilla'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>) description: u'' location: (161, 332, 335, 35) value: u'本日はあいうえお' appModule: <'firefox' (appName u'firefox', process ID 1448) at address 4969970> appModule.productName: u'Firefox' appModule.productVersion: u'31.0' TextInfo: <class 'NVDAObjects.IAccessible.IA2TextTextInfo'> windowHandle: 3474534L windowClassName: u'MozillaWindowClass' windowControlID: 0 windowStyle: 382664704 windowThreadID: 2032 windowText: u'Mozilla Firefox スタートページ - Mozilla Firefox' displayText: u'' IAccessibleObject: <POINTER(IAccessible2) ptr=0xce1bea4 at 4eaf850> IAccessibleChildID: 0 IAccessible event parameters: windowHandle=3474534, objectID=-4, childID=-331858320 IAccessible accName: None IAccessible accRole: ROLE_SYSTEM_TEXT IAccessible accState: STATE_SYSTEM_FOCUSED, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048580) IAccessible accDescription: u'' IAccessible accValue: u'本日はあいうえお' IAccessible2 windowHandle: 3474534 IAccessible2 uniqueID: -331858320 IAccessible2 role: ROLE_SYSTEM_TEXT IAccessible2 states: IA2_STATE_SELECTABLE_TEXT, IA2_STATE_SUPPORTS_AUTOCOMPLETION, IA2_STATE_OPAQUE, IA2_STATE_EDITABLE, IA2_STATE_SINGLE_LINE (46088) IAccessible2 attributes: u'margin-left:0px;text-align:start;text-indent:0px;id:searchText;tag:input;text-input-type:text;margin-right:0px;margin-top:0px;margin-bottom:0px;display:inline;line-number:1;'
詳細なログをご提供いただき、ありがとうございます。
現象を再現できました。
実は本家版 snapshot master 10302 でも同じ現象が確認されたので、日本語版独自の作業とは無関係と考えられます。
別途チケットを作ることにします。
NVDA 日本語版 2014.2jp と Firefox 31.0 でも前述の現象が起きることを確認しました。
リグレッション(現在のバージョンで動いていたものが次のバージョンで動かなくなる不具合) ではないと判断されるので、このチケットはクローズします。
NVDA日本語版 2013.1jp に向けたブランチにおいて、入力システムとアプリケーションが TSF に対応している場合に、文節移動後の候補読み上げが実現できていません。
NVDA本家版 2013.1 ブランチから 2013.1jp で独自に追加したのは IMM 系の API を使った文節選択のサポートです。
例えば Windows XP で「テキストサービスを拡張しない」設定で、メモ帳を使うときには、日本語入力の選択された文節だけを読み上げます。
TSF での文節選択のサポートは 2012.3.1jp までの nvdajpime でも未対応でしたが、本家の TSF 実装でもサポートされておらず、今後の課題です。
以上、チケット #28155 をクローズしたので現状をまとめました。
http://sourceforge.jp/ticket/browse.php?group_id=4221&tid=28155