英辞郎 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)))