From: Araki K. <j00...@ip...> - 2002-03-15 05:56:29
|
荒木です:-) Subject: Re: [Mlterm-dev-ja] Bidi + w3m-m17n(-img) From: Araki Ken <j00...@ip...> Message-ID: <200...@pd...> Date: Thu, 14 Mar 2002 23:21:01 +0900 >> Bidi を有効にして w3m-m17n(-img) を使うと、カーソルのある行の >> 画像が消えます。一行全部再描画しているためだと思うのですが、 >> 仕方ない(w3m 側で対処すべき)ものなのでしょうか。 > > ml_image_line.c の ml_imgline_bidi_visual() における、 > > if( IS_MODIFIED(line->flag)) > { > ml_imgline_set_modified( line , 0 , END_CHAR_INDEX(line) , IS_CLEARED_TO_END(line->flag)) ; > } > > の処理をもっと賢くしてやれば、可能です。 > 明日あたりにでも、もう少し書きなおしてみます。 RTL 文字が含まれていなければ、行全体の再描画は行なわない、というようにしました。 RTL 文字が含まれていた場合、相変わらず、行全体を再描画します。 というのは、たとえば、 [logical order] abc [visual order(1)] bac ↓ 一文字 'd' 挿入 [logical order] abc*d* [visual order(2)] *adbc* (** で囲まれている文字が、再描画対象) のように、(2) で、再描画対象の再計算を正確に行うには、挿入された 'd' や (2) での visual order 情報だけを見ていてもだめで、(1) での visual order 情報も同時に保持(残)しておかないとならないのですが、それはちょっとコスト に見合わないと判断したためです。 ただ、多分、これでも w3m-img での使用上は、問題ないと思います。 パッチを添付します。 この変更は、すでに、CVS repository に反映済みです。 では -- kiken j00...@ip... Index: src/ml_image_line.c =================================================================== RCS file: /home/ken/cvsroot/mlterm/src/ml_image_line.c,v retrieving revision 1.72 diff -u -r1.72 ml_image_line.c --- src/ml_image_line.c 2002/03/13 10:08:27 1.72 +++ src/ml_image_line.c 2002/03/15 05:37:40 @@ -982,6 +982,7 @@ { int counter ; ml_char_t * src ; + int has_rtl ; if( ! line->visual_order) { @@ -1008,6 +1009,7 @@ ml_str_copy( src , line->chars , line->num_of_filled_visual_order) ; + has_rtl = 0 ; for( counter = 0 ; counter < line->num_of_filled_visual_order ; counter ++) { #ifdef DEBUG @@ -1021,12 +1023,17 @@ } #endif + if( counter != line->visual_order[counter]) + { + has_rtl = 1 ; + } + ml_char_copy( &line->chars[line->visual_order[counter]] , &src[counter]) ; } ml_str_final( src , line->num_of_filled_visual_order) ; - if( IS_MODIFIED(line->flag)) + if( has_rtl && IS_MODIFIED(line->flag)) { ml_imgline_set_modified( line , 0 , END_CHAR_INDEX(line) , IS_CLEARED_TO_END(line->flag)) ; } |