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

Re: Why `w3m-check-refresh-attribute' decodes entities in url?



>> On Fri, 21 Sep 2007 22:25:57 +0900
>> tsuchiya@xxxxxxxxxx (TSUCHIYA Masatoshi) said as follows:

土> で,今回の場合は何が問題かというと,∂ のように,きちんと ; で終
土> 端されているわけでもない &part まで decode してしまっているのが問題な
土> のではないでしょうか.

土> 対応はどうしたらいいかなあと code を追いかけ始めたら,
土> w3m-decode-entities() とか w3m-entity-value() のコードまで整理したく
土> なってきて,頭が混乱してきました.‥‥なんで,こんなにややこしい構造
土> になってるんでしょう?

原因は2点あるみたいですね.

第1は,[emacs-w3m:00023] で導入されている以下の変更.これはまあ,loose
な人ならやってしまうかもしれないので,しょうがない.

>> On Fri, 02 Mar 2001 03:10:14 +0900 (JST)
>> 「後」== gotoh@xxxxxxxxxxx (Shun-ichi GOTO) said as follows:

後> & などのキャラクタエンティティ(エスケープ文字)の置き換え処理をすっ
後> きりさせました。obarrayを使用。また、最後の";"が無い場合(違法?)も考慮
後> するようにバグフィックス。
後> ## 朝日新聞のページで見かけた。

;; でも,これが原因で code が汚くなっているので,support しません!と宣言
;; してしまう誘惑に10分ほど駆られました.

第2は,[emacs-w3m:09187] で導入されている以下の変更.

>> On Tue, 6 Feb 2007 16:39:23 +0900
>> 「青」== nao.aota@xxxxxxxxx ("青田直大") said as follows:

青> formの内容を記憶するためにw3m-form-parse-and-fontifyでdecodeするのは
青> 必須なようなので、w3m-decode-entitiesでname属性を持つtype=textまたは
青> type=selectのinputタグの中を飛ばすパッチを書いてみました。

こちらの方は,なんとか別の方法で回避できるんじゃないかなあと思うのですが.

;; 少なくとも (string-match "/type=\\(text\\|select\\)/name=[^/]+/" fid)
;; は,save-match-data で括っておかないと,その後の match-* がおかしくな
;; るので,それは対処しました.

というか,

(defun w3m-fontify ()
  "Fontify the current buffer."
  ...
    ;; Remove other markups.
    (goto-char (point-min))
    (while (re-search-forward "</?[A-Za-z_][^>]*>" nil t)
      (let* ((start (match-beginning 0))
	     (fid (get-text-property start 'w3m-form-field-id)))
	(if (and fid (string-match "/type=text\\(?:area\\)?/" fid))
	    (goto-char (1+ start))
	  (delete-region start (match-end 0)))))

と fid をチェックしているところと同じで,fid のような w3m-form.el におけ
る内部構造を w3m.el の方で処理しなければならないのは落ち着かない,という
だけのことなんですが.

という細部には目をつぶって,とりあえず以下の修正を commit しました.

    2007-09-24  TSUCHIYA Masatoshi  <tsuchiya@xxxxxxxxxx>

	* w3m.el: Changes to stricten entities decoded by
	`w3m-decode-entities'.
	(w3m-entity-table, w3m-entity-reverse-table): New constants.
	(w3m-entity-regexp): Stricten.
	(w3m-entity-alist, w3m-entity-db, w3m-entity-db-size): Abolished.
	(w3m-entity-value, w3m-decode-entities, w3m-decode-entities-string,
	w3m-encode-specials-string): Rewritten to use the above constants.

これで sb-nytimes.el の問題は解決しているはずですが,いかがでしょう?

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )