[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: w3m-type for w3m-0.3-m17n-20020316.tar.gz
>> On Mon, 18 Mar 2002 13:25:20 +0900 (JST)
>> 「白井」== shirai@rdmg.mgcs.mei.co.jp (Hideyuki SHIRAI (白井秀行)) said as follows:
白井> けど、化ける記事は wanderlust でも化けるし、(試していませんが)
白井> T-gnus で shimbun しても化けるんじゃないかな。w3mmee も化ける
白井> sb-*.el があると思います。
T-gnus + w3mmee で試してみましたが,とりあえず sb-zdnet.el は大丈夫で
したよ.
白井> 原因としては、w3m-m17n だと retieve 結果の buffer が *生* のバイ
白井> ト列だけど、w3m だと *生じゃない* データで、shimbun 自体は *生じゃ
白井> ない* と思って動いているからだと思います。
これ,ちょっと信じられないのですが.
(defun shimbun-retrieve-url (url &optional no-cache no-decode)
(let (type)
(when (and url (setq type (w3m-retrieve url no-decode no-cache)))
(unless no-decode
(w3m-decode-buffer url))
type)))
という関数定義になっているので,第3引数で明示的に指定されていない限り,
w3m-type の値に関わらず,buffer は decode されるはずなんですけど.
reed> これは、
reed> w3m-0.3-m17n-20020316.tar.gzを使うときのw3m-typeは、'w3m でよい
reed> w3m-typeが 'w3m-m17n でも文字化けせずに取れるべき
白井> おそらく後者でしょう。きっと、昔からダメだったんじゃないのかなぁ?
後者の方針での解決を希望します.
白井> ぼくが zdnet に適用した方法を全体的にうまくやればいいと思うのだ
白井> けど、ぼくには上記の様な泥臭い方法しか考え付きません。なにか、き
白井> れいな方法はあるでしょうか?
というわけで,白井さんの提案された変更にはかなり疑問を感じます.
あ,ひょっとして,以下のパッチでどうにかなったりします?
--- shimbun.el 20 Nov 2001 04:51:23 -0000 1.47
+++ shimbun.el 18 Mar 2002 14:32:57 -0000
@@ -114,7 +114,7 @@
"Rertrieve URL contents and insert to current buffer.
Return content-type of URL as string when retrieval succeeded."
(let (type)
- (when (and url (setq type (w3m-retrieve url no-decode no-cache)))
+ (when (and url (setq type (w3m-retrieve url nil no-cache)))
(unless no-decode
(w3m-decode-buffer url))
type)))
@@ -123,7 +123,7 @@
"Return a buffer which contains the URL contents."
(with-current-buffer (get-buffer-create " *shimbun-work*")
(erase-buffer)
- (if (and url (w3m-retrieve url no-decode no-cache))
+ (if (and url (w3m-retrieve url nil no-cache))
(inline
(unless no-decode
(w3m-decode-buffer url))
これ,非常にややこしくて困っているのですが,w3m-retrieve() の 第2引数
no-decode は,漢字コードを decode しないことを指定する引数ではなく,転
送用に変換・圧縮されたコンテンツを展開するかどうかを指定する引数なんで
すね.ですから,shimbun ライブラリに限定して言えば,これを t にするこ
とが必要になることはないと思います.
もし,これがアタリでしたら,非同期化の作業をやったときに私がエンバグし
てしまったんですね.ごめんなさい.
白井> sb-tcup.el などにある、
白井> (decode-coding-region (point-min) (point-max)
白井> (shimbun-coding-system-internal shimbun))
白井> をみんな設定すればいいのかな? とも思うのですが、
白井> shimbun-coding-system-internal ってどこでどうなっているのかさえ
白井> わからない。
shimbun-coding-system-internal は廃止しましょう,ということになってい
ます.詳しくは,[emacs-w3m:00952] からのスレッドを参照してください.
それで気になって,shimbun-coding-system-internal() が利用されているバッ
クエンドを見直してみました.
まず sb-gnome.el ですが,変数 shimbun-gnome-coding-system が何処にも定
義されていないので,そもそもこれは動作していないのではないでしょうか?
以下の変更を提案します.
--- sb-gnome.el 20 Nov 2001 04:51:23 -0000 1.7
+++ sb-gnome.el 18 Mar 2002 14:09:55 -0000
@@ -46,7 +46,6 @@
"gtk-i18n-list" "gtk-list" "gtk-perl-list" "guppi-list" "libart"
"libart-hackers" "orbit-list" "vote" "wm-spec-list"
"xml" "xslt"))
-(defvar shimbun-ding-coding-system 'iso-8859-1)
(luna-define-method shimbun-index-url ((shimbun shimbun-gnome))
(concat (shimbun-url-internal shimbun)
@@ -74,10 +73,7 @@
(concat (shimbun-url-internal shimbun)
"/" (shimbun-current-group-internal shimbun)
"/" month "/date.html")
- 'reload 'binary)
- (set-buffer-multibyte t)
- (decode-coding-region (point-min) (point-max)
- (shimbun-coding-system-internal shimbun))
+ 'reload)
(let (date date-next date-parsed beg end subject id)
(goto-char (point-min))
(while (or date-next
sb-glimpse.el でも使われているようですが,これは,sb-ding.el の読み込
みを iso-8859-1 で行うためのものですよね? でしたら,以下の変更でどうで
しょうか.
diff -u -r1.5 sb-glimpse.el
--- shimbun/sb-glimpse.el 20 Nov 2001 04:51:23 -0000 1.5
+++ shimbun/sb-glimpse.el 18 Mar 2002 14:15:02 -0000
@@ -55,10 +55,7 @@
(dolist (aux auxs)
(let ((url (shimbun-expand-url (concat aux "/")
(shimbun-index-url shimbun))))
- (shimbun-retrieve-url url 'reload 'binary)
- (set-buffer-multibyte t)
- (decode-coding-region (point-min) (point-max)
- (shimbun-coding-system-internal shimbun))
+ (shimbun-retrieve-url url 'reload)
(shimbun-mhonarc-get-headers shimbun url headers aux))))
headers))
diff -u -r1.6 sb-ding.el
--- shimbun/sb-ding.el 20 Nov 2001 04:51:23 -0000 1.6
+++ shimbun/sb-ding.el 18 Mar 2002 14:18:04 -0000
@@ -40,6 +40,13 @@
(defvar shimbun-ding-litemplate-regexp
"<td><strong><a name=\"\\([0-9]+\\)\" href=\"\\(msg[0-9]+.html\\)\">\\([^<]+\\)</a></strong>\n<td><em>\\([^<]+\\)</em>")
+(luna-define-method shimbun-get-headers
+ :around ((shimbun shimbun-ding) &optional range)
+ (let ((w3m-coding-system-priority-list
+ (cons (shimbun-coding-system-internal shimbun)
+ w3m-coding-system-priority-list)))
+ (luna-call-next-method)))
+
(provide 'sb-ding)
;;; sb-ding.el ends here
これは,shimbun-article() / shimbun-headers() の大元で同様の処理を入れ
てしまった方が良いかもしれません.sb-w3m-dev.el でも同様の処理が入って
いますし,害がある変更ではないと思うので.
ついでに shimbun-retrieve-url-buffer() の使われ方も気になったので,ちょっ
と眺めてみたのですが,sb-yahoo.el はうまく動いているのでしょうか? 以下
のように変更しないと,全てのへッダを取り込めないような気がするのですが.
--- sb-yahoo.el 20 Nov 2001 04:51:23 -0000 1.12
+++ sb-yahoo.el 18 Mar 2002 14:22:30 -0000
@@ -118,7 +118,7 @@
(when (re-search-forward "<a href=\"\\([^\"]+\\)\">次のページ</a>" nil t)
(let ((url (match-string 1)))
(erase-buffer)
- (shimbun-retrieve-url-buffer url t)
+ (shimbun-retrieve-url url t)
(goto-char (point-min)))))))
headers))
これ以外で shimbun-retrieve-url-buffer() が使われているところ(3個所)は,
(with-current-buffer (shimbun-retrieve-url-buffer ...) ...)
という定まった形式で使われているので,全て,
(with-temp-buffer (shimbun-retrieve-url ...) ...)
で置き換えられると思います.
ところで,気づいていなかったのですが,ZDnet って最近に構造が変わったの
ですね? なんだか余分な広告が挿入されるようになってしまいましたし,表題
に改行が混ざってしまう,記事の日付が正常に Date: へッダに設定されない,
などの不具合が出ているようです.とりあえず,広告を削除するためのパッチ
です.
--- sb-zdnet.el 20 Nov 2001 04:51:23 -0000 1.14
+++ sb-zdnet.el 18 Mar 2002 13:50:58 -0000
@@ -125,6 +125,15 @@
"-get-headers"))
shimbun))
+(luna-define-method shimbun-make-contents :before ((shimbun shimbun-zdnet) header)
+ (let ((case-fold-search t)
+ (start))
+ (while (and (search-forward "<!-- AD START -->" nil t)
+ (setq start (match-beginning 0))
+ (search-forward "<!-- AD END -->" nil t))
+ (delete-region start (point)))
+ (goto-char (point-min))))
+
(provide 'sb-zdnet)
;;; sb-zdnet.el ends here
なお,いずれも目でコードを追い掛けただけで動作確認せずに書いていますの
で,かなりあやしいです.動作確認をお願いします.それから,今週はオフラ
インの時間が非常に長いので,反応はかなり遅くなると思います.
--
土屋 雅稔 ( TSUCHIYA Masatoshi )