トップ «前の日記(2006-12-05 (Tue)) 最新 次の日記(2006-12-09 (Sat))» 編集

猫熊は燃えつきた?!日記

最近なんにもやっていませんが、なにかやったらこちらに置くようにしています。
2002|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|
2011|09|
2012|02|


2006-12-08 (Fri) [長年日記]

emacs-w3m での italic 表示

わーい、emacs-w3m で italic が表示できるようになったよ。emacs-w3m の CVS HEAD は対応済。w3m は commit 待ち。
(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))
で確かめよー。山岡師と伊東さんに感謝感謝。
こっちも追記: w3m-dev ML に入っていない方向けに w3m の最近のパッチをまとめました。こちらからどーぞ。(って uncompress も入れてほしいし ^^;;;)

emacs-w3m で google の検索結果を見やすくする

なんだか最近の google はストイックな?ブラウザにやさしくない :-< のでお昼休みの小ネタ。
(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>")))))
コメントを有効にすると、段落の代わりに横線が入るけどやりすぎかな。また、前述の文字化け問題にもアドホックに対応してみた。

しかし

みんな反応速過ぎ。
ちなみに regex や対象物の中身によるけど、
(while (re-search-forward "^xxx" nil t)
  xxxxx)
よりも
(while (not (eobp))
  (when (looking-at "^xxx")
    xxxxx)
  (forward-line 1))
の方が速いよ。
本日のツッコミ(全14件) [ツッコミを入れる]
安宅 (2006-12-08 (Fri) 13:17)

こんにちは。<br>replace-match を使わないのは、何かパフォーマンス的な問題でもあるのですか?

土屋 (2006-12-08 (Fri) 13:24)

CVS に入れちゃったらどうでしょう?<br><br>あと,<div class= を一旦削除して,再挿入しているのは無駄なので,<p> の<br>み挿入するようにすべきかと.

ぱんだ (2006-12-08 (Fri) 13:38)

> 安宅さん<br>replace-match() はぼくが elisp を書き始めたときには存在しなかったので、普段は<br><br>>土屋くん<br>消して入れるのと、point を二回動かすののどっちがよい?って話ですな。確かに goto-char 二回の方が速そう。<br><br># (match-end 0) はすでにずれている、のは気にしない。<br><br>CVS かぁ、「文字化け」のところの話の ie=xxxx の fake もfilter でいっしょにやってみましょうかね。

ぱんだ (2006-12-08 (Fri) 13:39)

# ありゃ途中で投稿してしまった。<br><br>「普段は」意識していないから出てこないのです ^^;;;

土屋 (2006-12-08 (Fri) 13:54)

逆向きに検索すれば,一番効率が良くなりますよ.<br><br>(defun w3m-filter-google-search (url)<br> (goto-char (point-max))<br> (while (search-backward "<div class=" nil t)<br> (insert "<p>")))

ぱんだ (2006-12-08 (Fri) 13:57)

ちゃうわ。replace-match() はそのときどきのバージョンで引数や挙動が変わったりするので使わなかった。が正解かな?<br><br>search-backward て遅くなかったけ?気のせい? re- じゃないからいいのかな。<br><br># 確かに土屋くんの方がよいな。でへ。

土屋 (2006-12-08 (Fri) 13:58)

uncompress も emacs-w3m/patches/ に入れてくださったら良いと思いますが.

ぱんだ (2006-12-08 (Fri) 14:05)

だって、uncompress は emacs-w3m には関係ないもんね。w3m の CVS に knok さんがそのうち入れてくださるでしょうし。<br><br>実は「追記」は、ほとんど M氏にプレッシャーをかけるためのものなのであった ^^;;;

maru (2006-12-08 (Fri) 14:25)

うげっ。< M氏にプレッシャー<br>いま、印刷所いき直前&最後の差し替え原稿を書いてるところ。<br>ちょっとだけ待ってくださいませ。<br># このタイミングを逃すと、年内に本が出ません。;-(

安宅 (2006-12-08 (Fri) 14:34)

フムフム、そんな問題もあるのですね。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>")))))

ぱんだ (2006-12-08 (Fri) 14:39)

短いコードにみなさま燃ますねぇ。<br><br># 99% 冗談だよ。お仕事頑張ってください > M氏

安宅 (2006-12-08 (Fri) 14:52)

閉じタグのない p 要素を入れるより、<br/> を insert する方がスマートな気がしてきました。Emacs-w3m (w3m) のレンダリング的にはコストは同じかな?

土屋 (2006-12-08 (Fri) 15:00)

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 を取らないと分からないでしょうね.

土屋 (2006-12-08 (Fri) 15:09)

大事な発見を書き忘れた.<br><br>search-foward() と search-backward() の C レベルの実装では,アルファベッ<br>トのみなら Boyer-Moore 法の高速な検索が呼び出されるのですが,マルチバイ<br>ト文字が含まれていると,単なる検索になってしまうみたい.うまく実装すれ<br>ば,たとえマルチバイト文字が含まれていても,Boyer-Moore は可能なはずな<br>のに….


書いている人: 白井秀行 (mailto:shirai@meadowy。org)
訪問して下さった人: 今日: 人, 昨日: , 過去: 人 (2007年5月10日から)
RDF Feed