行頭にキャレットがある場合に点字ディスプレイのカーソル点滅位置がずれる
inpos から outpos を生成する処理を修正してみました。
Total 15 (delta 9), reused 0 (delta 0) To ssh://git@bitbucket.org/nvdajp/nvdajpmiscdep.git * [new branch] ti32825 -> ti32825
以下、変更されたテストケースです。2文字目以降のマッピングがまだ不適切に見えるので、引き続き検討します:
'text': '12345 ', 'input': '12345 ', 'inpos2': [0,1,2,3,4,5], 'inpos1': [0,0,1,2,3,4,5], 'inpos': [0,0,1,2,3,4,5], 'outpos': [0,2,3,4,5,6], 'text': '機能 ', 'input': 'キノー ', 'inpos2': [0,0,1,2], 'inpos1': [0,1,2,3], 'inpos': [0,0,1,2], 'outpos': [0,2,3], 'text': '実技 ', 'input': 'ジツギ ', 'inpos2': [0,0,1,2], 'inpos1': [0,0,1,2,2,3], 'inpos': [0,0,0,1,1,2], 'outpos': [0,3,5], 'text': '東京 ', 'input': 'トーキョー ', 'inpos2': [0,0,0,1,1,2], 'inpos1': [0,1,2,2,4,5], 'inpos': [0,0,0,0,1,2], 'outpos': [0,4,5],
別チケットで行うべき作業かも知れませんが、「シャ」「キョ」のように2文字の読みから2個の点字パターンに変換するときに、内部的なポジションマッピングを1文字まとめて対応付けるのをやめて、1文字ずつ対応させるようにしました。
To ssh://git@bitbucket.org/nvdajp/nvdajpmiscdep.git 8ca6139..4b5354a ti32825 -> ti32825
この変更の結果、例えば「東京」の inpos と outpos は下記のようになり、完全ではありませんが不自然さが緩和されたと思います。
'text': '東京 ', 'input': 'トーキョー ', 'inpos2': [0,0,0,1,1,2], 'inpos1': [0,1,2,3,4,5], 'inpos': [0,0,0,1,1,2], 'outpos': [0,3,5],
このチケットに関する作業はここまでとさせていただき 2014.1jp に反映させたいと思います。
本当は「京」に対応するのは出力の3番目のセル(zero-origin でのインデックスは2)なので、outpos の第2要素は 3 ではなく 2 が正解です。
しかし、現状のテキスト解析辞書は「東京」と「トーキョー」の文字単位での位置の対応付け情報を持っていないので、単純に比例配分で割り当てを行っています。
文字単位での対応付けに関する改良は、別チケットで扱わせてください。
また、画面上の文字に対応する複数のセルをカーソルとしてブリンクさせたい、というご要望もあるのですが、点訳エンジンに加えて NVDA のコアも改変が必要となるため、これも別チケットで検討させてください。
この修正を反映させた NVDA 日本語テスト版 nvda_jpbeta140105 を作りました。
https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140105.exe
行頭にキャレットがある場合に点字ディスプレイのカーソル点滅位置がずれる現象についてご指摘をいただいています。
テストケース (miscdep jptools/harness.py) では下記のようなパターンで、outpos の第1要素が3なので、入力文字列の先頭に対して、点字ディスプレイの4マス目(キョの234の場所)を指してしまう、という状況のようです。
いままで outpos のテストケースは十分に検証してこなかったので、このチケットに対応する作業ブランチを作る予定です。