[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bold
>> On Fri, 25 Jul 2003 16:55:56 +0900 (JST)
>> 「白井」== shirai@rdmg.mgcs.mei.co.jp (Hideyuki SHIRAI (白井秀行)) said as follows:
白井> % w3m -halfdump ./index.html
白井> <base
白井> href="http://ko.meadowy.net/~shirai/diary/20030723.html#p08">夢
白井> の内容は『<b>あぁぁぁ、こんなバグがまだあったのかぁぁぁぁぁぁ
白井> </b>』。...
白井> なパターンだと、"<base h.." を bold の開始だと思って文章の先頭か
白井> ら bold にしてしまいます。
おやあ,shimbun の先頭部分が太字になることが多いなあと気にはなってたん
ですけど,まさか emacs-w3m のバグでしたか.
白井> (1) 気にしない
白井> (2) 正規表現を厳密に書く(けど、遅くなりそう)
厳密には,こうでしょうか?
(re-search-forward "<[ \t\r\f\n]*b\\([ \t\r\f\n][^>]*\\)?>" nil t)
白井> (3) 実は、<bxxx> の "xxx" の部分に whitespace 以外の文字が来るこ
白井> とはないので、"<[\t\n ]*b[\t\n ]*>" で大丈夫。
白井> (4) <base href...> は事前に消しておく。
いや,それより.
この変更は,[emacs-w3m:03933] 添付のパッチが由来のようですが,指摘を受
けた
<b
class="hoge">太字 class つき</b
>
を halfdump させてみると,
<b>太字 class つき</b
>
という結果になったので,変更を撤回して,
開始タグ: (search-forward "<b>" nil t)
終了タグ: (re-search-forward "</b[ \t\r\f\n]*>" nil t)
でいいんじゃないかと.
白井> どれかしら? (3)を期待。
というわけで,
(5) もっと簡略化できる.
を期待.w3m のバージョンや種類に依りそうな気もするので,追試をお願いし
ます.
関連して,HTML4 の定義書を斜め読みしたくらいでは分からなかったのですが,
< とタグ名の間に空白は挿入できるのでしょうか? つまり,
<
b>太字<
/b>
というような書き方は許されるのかなあ? ということが気になっています.
;; これが許されるなら,上記の終了タグはもう少し条件を緩和してやらない
;; といけなくなりそう.
この件でちょっと気になって調べてみたのですが,re-search-forward() は信
じられているほど,遅いものではないかもしれないという気がしてきました.
(progn
(defun w3m-check-bold-close-tag-1 ()
(re-search-forward "</b[ \t\r\f\n]*>" nil t))
(defun w3m-check-bold-close-tag-2 ()
(let ((pos (point)))
(catch 'found
(while (search-forward "</b" nil t)
(when (looking-at "[ \t\r\f\n]*>")
(throw 'found (goto-char (match-end 0)))))
(goto-char pos)
nil)))
(byte-compile 'w3m-check-bold-close-tag-1)
(byte-compile 'w3m-check-bold-close-tag-2)
(require 'elp)
(elp-reset-all)
(elp-instrument-list '(w3m-check-bold-close-tag-1
w3m-check-bold-close-tag-2
re-search-forward
search-forward))
(with-temp-buffer
(dotimes (x 10)
(insert "\
<b>テスト</b>
<b>テスト</b
>"))
(dotimes (x 10)
(goto-char (point-min))
(while (w3m-check-bold-close-tag-1))
(goto-char (point-min))
(while (w3m-check-bold-close-tag-2))))
(elp-results))
という実験をしてみると,意外にも re-search-forward() と
search-forward() の実行時間に大差はないという結果が出ました.
ということは,re-search-forward() そのものが遅いと言うわけではなく,遅
くなるような正規表現が良くない,ということになるのかなと思います.
--
土屋 雅稔 ( TSUCHIYA Masatoshi )
- References:
- bold
- From: Hideyuki SHIRAI (
白井秀行
)