[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: bug#4090: Bug#541704: emacs-snapshot ruins w3m-el-snapshot tables



白井です。

# ぼくの英語力じゃ無理なので日本語でやらせてください (_ _)

From: Kenichi Handa <handa@xxxxxxxx> さん曰く
Subject: [emacs-w3m:11001] Re: bug#4090: Bug#541704: emacs-snapshot ruins w3m-el-snapshot tables
Message-ID: <E1MdZIz-0000wj-Q7@etlken>
Date: Wed, 19 Aug 2009 09:45:33 +0900

>> OK, here is what I see using the current Debian versions of these packages.
>
> Thank you.

emacs-w3m 側の原因はわかりました。

jidanni-san の環境(ぼくの環境もそうですが)では、w3m と emacs-w3m
を utf-8 で動かします。そのときに、w3m はテーブルの枠を下記のよ
うな書式で出力して、後の処理を emacs-w3m に任せます。

  <_SYMBOL TYPE=3>+</_SYMBOL>
  <_SYMBOL TYPE=10>----------</_SYMBOL>

emacs-w3m は下記で作られた symbol の TYPE に対応するものに指定し
た数だけ置き換えて、

  +-----+---+
  |     |   |
  +-----+---+

な枠を

  ┌──┬─┐
  │    │  │
  └──┴─┘

に置き換えます。

(setq zzz-symbols
      (append
       (mapcar (lambda (p)
		 (if p
		     (char-to-string
		      (make-char (or (nth 2 p) 'mule-unicode-2500-33ff)
				 (car p) (cadr p)))
		   ""))
	       '((32 92) (32 60) (32 76) (32 44) (32 68) (32 34) (32 48) nil
		 (32 84) (32 52) (32 32) nil     (32 56) nil     nil     nil
		 (32 92) (32 64) (32 79) (32 47) (32 72) (32 35) (32 51) nil
		 (32 87) (32 55) (32 33) nil     (32 59) nil     nil     nil
		 (115 34 mule-unicode-0100-24ff) (33 97) (34 102) (34 43) (33 96) (34 101)
		 (34 46) (34 47) (33 115) (34 47) (34 43) (33 97)
		 (34 47)))
       (list (format "%c %c %c "
		     (make-char 'mule-unicode-0100-24ff 121 42)
		     (make-char 'mule-unicode-0100-24ff 118 113)
		     (make-char 'mule-unicode-0100-24ff 118 115)))))

置き換えの方法は、

<_SYMBOL TYPE=3>+</_SYMBOL>
 なら
(insert (apply 'concat (make-list (/ (string-width "+")
				     (string-width (nth 3 zzz-symbols)))
				  (nth 3 zzz-symbols))))
 な感じで、

<_SYMBOL TYPE=10>----------</_SYMBOL>
 なら
(insert (apply 'concat (make-list (/ (string-width "----------")
				     (string-width (nth 10 zzz-symbols)))
				     (nth 10 zzz-symbols))))

な感じです。このあたりは、emacs-w3m の w3m-symbol.el でやってい
ます。


ここで、UTF-8 環境下では w3m と Mule-UCS を含む emacs-22 までは、
置き換え前、置き換え後 ともに char-width = 1 だったのでつじつま
があっていたのですが、emacs-23 以降は zzz-symbols に含まれるもの
の char-width が 2 となるために、<_SYMBOL TYPE=3>+</_SYMBOL> だ
と長さが 0 の list になり処理が破綻して、たて罫線などが消えてし
まっているわけです。


というわけで、半田さんにお聞きしたいのですが、上記の zzz-symbols
を char-width = 1 な文字列で生成することは可能でしょうか?


もし、だめだとすると、w3m 側を大変更して UTF-8 なときに width が
2 で計算してもらうか、emacs-major-version > 22 のときは、(setq
w3m-use-symbol nil) にして、上記の置き換えをやめて、

  +-----+---+
  |     |   |
  +-----+---+

な罫線のままにするしかないかしら?


# ちなみに、なんで jidanni-san の emacs-23 だとテーブルの枠がで
# るのかは不明です。ぼくの環境だと、-q でも char-width は 2 なの
# で、どうやっても jidanni-san のようにはならないのだけど。。。

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxx)