(let ((buffer (get-buffer-create "*testing*"))) (set-buffer buffer) (erase-buffer) (insert "<b>bold</b> <i>italic</i> <u>underline</u> <b><i>bold italic</i></b> <u><i>underline italic</i></u>") (display-buffer buffer) (sit-for 1) (w3m-fontify))で確かめよー。山岡師と伊東さんに感謝感謝。
(setq w3m-filter-rules `(..... ("\\`http://www\\.google\\.[^/]+/search\\?" w3m-filter-google-search))) (defun w3m-filter-google-search (url) (goto-char (point-min)) (while (search-forward "<div class=" nil t) (goto-char (match-beginning 0)) (insert "<p>") (goto-char (match-end 0))))最近のグーグルの改造って、なんだか emacs-w3m や w3m だと使いにくい方向に行っているような気が。。。それよりも文字化けなんとかして貰いたいものだ。
(setq w3m-filter-rules `(...... ("\\`http://\\(www\\|images\\|news\\|maps\\|groups\\)\\.google\\." w3m-filter-google))) (defvar w3m-filter-google-use-utf8 (or (featurep 'un-define) (fboundp 'utf-translate-cjk-mode) (and (not (equal "Japanese" w3m-language)) (w3m-find-coding-system 'utf-8)))) (defun w3m-filter-google (url) (goto-char (point-min)) (let ((endm (make-marker)) (case-fold-search t) pos beg end) (when (and w3m-filter-google-use-utf8 (re-search-forward "<a class=. href=\"http://\\(www\\|images\\|news\\|maps\\|groups\\)\\.google\\." nil t) (setq pos (match-beginning 0)) (search-backward "<table" nil t) (setq beg (match-beginning 0)) (search-forward "</table" nil t) (set-marker endm (match-end 0)) (< pos (marker-position endm))) (goto-char beg) (while (re-search-forward "[?&][io]e=\\([^&]+\\)&" endm t) (replace-match "UTF-8" nil nil nil 1)) (setq end (marker-position endm))) (when (string-match "\\`http://www\\.google\\.[^/]+/search\\?" url) (goto-char (point-max)) ;; (when (and (search-backward "<div class=" end t) ;; (search-forward "</div>" nil t)) ;; (insert "<hr>")) (while (search-backward "<div class=" end t) ;; (insert "<hr>"))))) (insert "<p>")))))コメントを有効にすると、段落の代わりに横線が入るけどやりすぎかな。また、前述の文字化け問題にもアドホックに対応してみた。
(while (re-search-forward "^xxx" nil t) xxxxx)よりも
(while (not (eobp)) (when (looking-at "^xxx") xxxxx) (forward-line 1))の方が速いよ。
こんにちは。<br>replace-match を使わないのは、何かパフォーマンス的な問題でもあるのですか?
CVS に入れちゃったらどうでしょう?<br><br>あと,<div class= を一旦削除して,再挿入しているのは無駄なので,<p> の<br>み挿入するようにすべきかと.
> 安宅さん<br>replace-match() はぼくが elisp を書き始めたときには存在しなかったので、普段は<br><br>>土屋くん<br>消して入れるのと、point を二回動かすののどっちがよい?って話ですな。確かに goto-char 二回の方が速そう。<br><br># (match-end 0) はすでにずれている、のは気にしない。<br><br>CVS かぁ、「文字化け」のところの話の ie=xxxx の fake もfilter でいっしょにやってみましょうかね。
# ありゃ途中で投稿してしまった。<br><br>「普段は」意識していないから出てこないのです ^^;;;
逆向きに検索すれば,一番効率が良くなりますよ.<br><br>(defun w3m-filter-google-search (url)<br> (goto-char (point-max))<br> (while (search-backward "<div class=" nil t)<br> (insert "<p>")))
ちゃうわ。replace-match() はそのときどきのバージョンで引数や挙動が変わったりするので使わなかった。が正解かな?<br><br>search-backward て遅くなかったけ?気のせい? re- じゃないからいいのかな。<br><br># 確かに土屋くんの方がよいな。でへ。
uncompress も emacs-w3m/patches/ に入れてくださったら良いと思いますが.
だって、uncompress は emacs-w3m には関係ないもんね。w3m の CVS に knok さんがそのうち入れてくださるでしょうし。<br><br>実は「追記」は、ほとんど M氏にプレッシャーをかけるためのものなのであった ^^;;;
うげっ。< M氏にプレッシャー<br>いま、印刷所いき直前&最後の差し替え原稿を書いてるところ。<br>ちょっとだけ待ってくださいませ。<br># このタイミングを逃すと、年内に本が出ません。;-(
フムフム、そんな問題もあるのですね。replace-match の件、ありがとうございます。<br><br>*-backward 系の検索スピードは気になりますね。AUCTeX で *-backward を使わずに skip-chars-backward と looking-at を使ったコードを見たことがあります。こちらの方が re-search-backward より速いみたいです。search-backward より速いかどうかは、調べてないので分かりませんが、参考までに。<br><br>(defun w3m-filter-google-search (url)<br> (goto-char (point-max))<br> (let ((min (point-min)))<br> (while (skip-chars-backward "^<" min)<br> (backward-char 1)<br> (when (looking-at "<div class=")<br> (insert "<p>")))))
短いコードにみなさま燃ますねぇ。<br><br># 99% 冗談だよ。お仕事頑張ってください > M氏
閉じタグのない p 要素を入れるより、<br/> を insert する方がスマートな気がしてきました。Emacs-w3m (w3m) のレンダリング的にはコストは同じかな?
search-backward() は遅い? という話は初耳.<br><br>だけど,skip-chars-backward() と looking-at() の組合わせで実現するのは,<br>関数呼び出しの overhead が気になりますね.<br><br>src/search.c と src/regexp.c をちょいと覗いた感じでは,後方検索の場合も,<br>それ用の regexp pattern を生成するか,それ用の検索ルーチンが呼び出され<br>るかしているのですが….<br><br>これ以上は,真面目に profile を取らないと分からないでしょうね.
大事な発見を書き忘れた.<br><br>search-foward() と search-backward() の C レベルの実装では,アルファベッ<br>トのみなら Boyer-Moore 法の高速な検索が呼び出されるのですが,マルチバイ<br>ト文字が含まれていると,単なる検索になってしまうみたい.うまく実装すれ<br>ば,たとえマルチバイト文字が含まれていても,Boyer-Moore は可能なはずな<br>のに….