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

Re: inputタグの処理



07/02/06 に Katsumi Yamaoka<yamaoka@xxxxxxx> さんは書きました:
> > inputタグにname属性が存在し、type=textの時、
> > 1.valueに<fooのような文字列が含まれると、入力欄の<以降が表示されない。
> > 2.valueに<foo>のような文字列が含まれると、<foo>が表示されない。
> > 3.valueが&amp;lt;fooの時(&lt;fooで検索)、<fooと表示される。
> >  ただし、一度編集すると&lt;fooと表示されるようになる。

> 以下のようにしたものを CVS commit しました。もし問題があれば (メー
> リングリストのみなさんも) ご指摘お願いします。ところで、青田さん
> のお名前のローマ字表記はこれであっていますか?

確認してみました。今のところ1,2は解消し問題なく動いているように思います。
ローマ字表記もあっています。ありがとうございました。

3番の問題はtype=selectでも発生していました。
valueをw3m-form-parse-and-fontifyとw3m-fontifyの二箇所で
decodeしているのが原因のようです。

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


Index: w3m.el
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/w3m.el,v
retrieving revision 1.1249
diff -u -r1.1249 w3m.el
--- w3m.el	5 Feb 2007 23:01:06 -0000	1.1249
+++ w3m.el	6 Feb 2007 07:15:28 -0000
@@ -3679,17 +3679,20 @@
     (goto-char (point-min))
     (let (start prop value)
       (while (re-search-forward w3m-entity-regexp nil t)
-	(setq start (match-beginning 0))
-	(if reserve-prop
-	    (setq prop (text-properties-at (match-beginning 0))))
-	;; Note that `w3m-entity-value' breaks `match-data' at the 1st
-	;; time in XEmacs because of the autoloading unicode.elc for
-	;; the `ucs-to-char' function.
-	(when (setq value (w3m-entity-value (match-string 1)
-					    (match-beginning 2)))
-	  (replace-match value nil t))
-	(if (and reserve-prop prop)
-	    (w3m-add-text-properties start (point) prop))))))
+	(let* ((start (match-beginning 0))
+	       (fid (get-text-property start 'w3m-form-field-id)))
+	  (unless (and fid
+		       (string-match "/type=\\(text\\|select\\)/name=[^/]+/" fid))
+	    (if reserve-prop
+		(setq prop (text-properties-at (match-beginning 0))))
+	    ;; Note that `w3m-entity-value' breaks `match-data' at the 1st
+	    ;; time in XEmacs because of the autoloading unicode.elc for
+	    ;; the `ucs-to-char' function.
+	    (when (setq value (w3m-entity-value (match-string 1)
+						(match-beginning 2)))
+	      (replace-match value nil t))
+	    (if (and reserve-prop prop)
+		(w3m-add-text-properties start (point) prop))))))))

 (defun w3m-decode-entities-string (str)
   "Decode entities in the string STR."