(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>のに….