英辞郎 on the WebをEmacsから使う(続き)

とりあえず形になってきたので。

"^M"はC-qC-mで入力してください。

表示がみづらいのを今後なんとかする予定です。

htmlをパースしてあーだこーだするのも考えてたのですが、基本的にhtmlがわからないのと、ちょっと試してみたけど<li>とか<ol>の羅列でうまい方法が思いつかず、前回のまま正規表現でバッサリいきました。

和→英も英→和もイディオムもそのままいけます。

今後の予定としては、
・見やすくする
・一度検索したものをローカルに保存
・検索回数を保存
・メモできるようにする
・save-current-bufferじゃなくしてメジャーモード化
・anythingインターフェイス

くらいが出来ればいいなと思っています。

ただ、家のUbuntu 10.10 + Emacs 23.1.1だといいんだけど、研究室のUbuntu 9.04 + Emacs 23.0.?(わすれた)だと結果が非常に短いもの以外は"Stack overflow in regexp matcher"って言われちゃってマジファックです。

これもなんとかせにゃならん。

(defun my-alc (word)
  (interactive "s翻訳: ")
  (let* ((url (concat "http://eow.alc.co.jp/" (replace-regexp-in-string " " "+" word) "/UTF-8/"))
	 (str (shell-command-to-string (concat "wget -q " url " -O -"))))
    (string-match "検索結果本体 ▼\\(\\w\\|\\W\\)*▲ 検索結果本体 ▲" str)
    (setq str (substring str (+ 22 (match-beginning 0)) (- (match-end 0) 23)))
    (setq str (replace-regexp-in-string "<\\(span\\|font\\)\\(\\w\\|\\W\\)*?>" "" str))
    (setq str (replace-regexp-in-string "</\\(span\\|font\\)>" "" str))
    (setq str (replace-regexp-in-string "</div></li>\\|<ol>\\|</ol>\\|</li><li>" "\n" str))
    (setq str (replace-regexp-in-string "<\\(\\w\\|\\W\\)*?>" "" str))
    (setq str (replace-regexp-in-string "^M" "\n" str))
    (setq str (my-delete-blank-lines str))
    (prog1
	(save-current-buffer
	  (save-selected-window
	    (with-current-buffer (get-buffer-create "*alc*"))
	    (pop-to-buffer (get-buffer "*alc*"))
	    (erase-buffer)
	    (insert str)
	    (goto-char (point-min))
	    )))
    ))


(defun my-delete-blank-lines (str)
  (with-temp-buffer 
    (insert str)
    (goto-char (point-min))
    (re-search-forward "\\(^\\W*$\\|\\n\\)*")
    (delete-region (point-min) (match-end 0))
    (goto-char (point-max))
    (re-search-backward "\\w")
    (delete-region (+ 1 (point)) (point-max))
    (buffer-string)))