[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: w3m-decode-buffer
From: Katsumi Yamaoka <yamaoka@xxxxxxx>
Subject: [emacs-w3m:09407] Re: w3m-decode-buffer
Date: Wed, 25 Apr 2007 10:31:42 +0900
> >>>>> In [emacs-w3m : No.09406] 青田さん wrote:
>
> > また、以下はパッチとは関係ないのですがw3m-decode-bufferで気になった所
> > がいくつかあります。
> > 1.about://source/時も&#nnn;、src・hrefの中の非ASCII文字をdecodeしてい
> > ること
>
> src・href の方は *encode* ですよね?
> "http://テスト/" が "http://%83e%83X%83g/" になってしまうのは、
> 2007-02-20 の変更の副作用です。これは直そうと思います。
>
> 逆に元が "http://%83e%83X%83g/" だったものは "http://テスト/" と
> して表示した方が良いのではないかと思うんですが、いかがでしょうか。
>
> ぼくの勝手な解釈では、about://source/ の目的は、&#nnn; の decode
> を含めて、ソースを人間が見やすく表示することなんですよね。
>
> 本当に生で無修正のソースが必要なとき、ぼくは w3m-download や
> wget を使いますから。
>
はい、encodeです。w3m-decode-bufferの名前にひきずられてしまいました。
人間の可読性のためなら賛成です。他のブラウザのソース表示と同じ
イメージで考えてたので。
;; ですが、ちょっと生ソース見たい時用に切り替えられるといいかも、とも思います。
> > 2.""でくくったものはdecodeされるが、''ではされないこと
>
> 疎くてすみません。具体的には?
>
例えば、
<a href="日本語.html">日本語.html</a><br>
<a href='日本語.html'>日本語.html</a><br>
が、
<a href="%e6%97%a5%e6%9c%ac%e8%aa%9e.html">日本語.html</a><br>
<a href='日本語.html'>日本語.html</a><br>
となっています。
HTMLの仕様に詳しくはないのですが、htmllintにもvalidatorにもひっかからないので
''もURIをくくるのに使えると思います…が、実際に使ってるサイトは
見つけられませんでした…。とりあえず、パッチにしてあります。
また、これを実験してて気がついたのですが、リンク先がローカルファイルの時は
逆にencodeしたらだめのように思います。
解決方法として
1.ローカルな時はencodeしない
2.w3m-goto-urlで読む時にdecodeする
と2つ思いつきましたが、カーソルのせた時に日本語で表示させるため、
2のほうがよりWeb上のデータと処理が似ているため、下のパッチでは2番を使っています。
> > 3.日本語を含むURIで、#アンカーが使えなさそうなこと
> > 4.3等の理由で日本語アンカーが使えないこと
> > (3・4はサイトがHTML4.01に準拠していれば問題はないのですが…)
>
> うーむ、これはとりあえず TODO リストに追加。
>
> > よろしければ検討おねがいします。
> > ;; ソース読んでたらいつのまにか朝…
>
> お疲れさまです。
> ところで、今後はなるべくご自分で ChangeLog の項目を書いて下さる
> ことをお願いします。変更の真意を一番的確に表現できるのは、何といっ
> てもご本人ですから。:)
了解しました。変な英語を書きそうですが、がんばります。
ということで、今回のパッチは
1.src='...'・href='...'の中もencodeする
2.localなURIな時はdecodeしなおす
の2点です。
2の変更時にg、Gで非ASCII文字を含むURLをいれた時にエラーになっていました。
w3m内部からの呼出しならURL encodeされている、と思うので
非ASCII文字を含む時はdecodeしないようにしてあります。
Index: ChangeLog
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/ChangeLog,v
retrieving revision 1.2998
diff -u -r1.2998 ChangeLog
--- ChangeLog 25 Apr 2007 11:38:55 -0000 1.2998
+++ ChangeLog 25 Apr 2007 11:54:47 -0000
@@ -1,3 +1,9 @@
+2007-04-25 Naohiro Aota <nao.aota@xxxxxxxxx>
+
+ * w3m.el (w3m-decode-buffer): Encode urls containing non-ASCII
+ characters quoted with '' as well as those quoted with "".
+ (w3m-goto-url): Decode urls when url is local.
+
2007-04-25 Katsumi Yamaoka <yamaoka@xxxxxxx>
* w3m.el (w3m-decode-buffer): Don't encode urls containing non-ASCII
Index: w3m.el
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/w3m.el,v
retrieving revision 1.1270
diff -u -r1.1270 w3m.el
--- w3m.el 25 Apr 2007 11:38:55 -0000 1.1270
+++ w3m.el 25 Apr 2007 11:55:37 -0000
@@ -4376,19 +4376,34 @@
<[\t\n\r ]*\\(?:\\(a\\)\\|\\(img\\)\\)[\t\n\r ]+\
\\(?:[\000-\075\077-\177]*[^\000-\177]+\\)+[\000-\075\077-\177]*>"
nil t)
- (when (if (match-end 1)
- (re-search-backward "[\t\n\r ]href[\t\n\r ]*=[\t\n\r ]*\
+ (save-match-data
+ (save-excursion
+ (when (if (match-end 1)
+ (re-search-backward "[\t\n\r ]href[\t\n\r ]*=[\t\n\r ]*\
\"\\(\\(?:[\000-\041\043-\177]*[^\000-\177]+\\)+[\000-\041\043-\177]*\\)"
- (match-end 1) t)
- (re-search-backward "[\t\n\r ]src[\t\n\r ]*=[\t\n\r ]*\
+ (match-end 1) t)
+ (re-search-backward "[\t\n\r ]src[\t\n\r ]*=[\t\n\r ]*\
\"\\(\\(?:[\000-\041\043-\177]*[^\000-\177]+\\)+[\000-\041\043-\177]*\\)"
- (match-end 2) t))
- (insert (w3m-url-encode-string
- (prog1
- (match-string 1)
- (delete-region (goto-char (match-beginning 1))
- (match-end 1)))
- w3m-current-coding-system))))))))
+ (match-end 2) t))
+ (insert (w3m-url-encode-string
+ (prog1
+ (match-string 1)
+ (delete-region (goto-char (match-beginning 1))
+ (match-end 1)))
+ w3m-current-coding-system)))))
+ (when (if (match-end 1)
+ (re-search-backward "[\t\n\r ]href[\t\n\r ]*=[\t\n\r ]*\
+'\\(\\(?:[\000-\046\048-\177]*[^\000-\177]+\\)+[\000-\046\048-\177]*\\)"
+ (match-end 1) t)
+ (re-search-backward "[\t\n\r ]src[\t\n\r ]*=[\t\n\r ]*\
+'\\(\\(?:[\000-\046\048-\177]*[^\000-\177]+\\)+[\000-\046\048-\177]*\\)"
+ (match-end 2) t))
+ (insert (w3m-url-encode-string
+ (prog1
+ (match-string 1)
+ (delete-region (goto-char (match-beginning 1))
+ (match-end 1)))
+ w3m-current-coding-system))))))))
(defun w3m-x-moe-decode-buffer ()
(let ((args '("-i" "-cs" "x-moe-internal"))
@@ -7989,6 +8004,9 @@
(unless (or (w3m-url-local-p url)
(string-match "\\`about:" url))
(setq url (w3m-url-transfer-encode-string url w3m-default-coding-system)))
+ (when (and (w3m-url-local-p url)
+ (not(string-match "[^\000-\177]" url)))
+ (setq url (w3m-url-decode-string url)))
(cond
;; process mailto: protocol
((string-match "\\`mailto:" url)