荒木です:-)
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)) ;
}
|