[mew-dist 27623] Re: Punycode encoder

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2007年 4月 16日 (月) 19:46:59 JST


From: Kazu Yamamoto (山本和彦) <kazu at example.com> さん曰く
Subject: [mew-dist 27620] Re: Punycode encoder
Message-ID: <20070416.182155.112622883.kazu at example.com>
Date: Mon, 16 Apr 2007 18:21:55 +0900 (JST)

> > mew-regex-url のパターンを
> > "[0-9A-Za-z]+://[^ \t\n>\"]+"
> > に、とりあえず変更してください。
> 
> マージしました。

これだけだと

(1) hoge://fuga も光ってしまう。
(2) mailto:shirai at example.com が光らない。

という問題があるので、せめて

      (concat
       "\\b\\("
       "\\(\\(file\\|news\\|mailto\\):\\)"
       "\\|"
       "\\(\\(s?https?\\|ftp\\|gopher\\|telnet\\|wais\\)://\\)"
       "\\)"
       "[^  \t\n>\"]+")

ぐらいはしておいた方が良いと思われます。で、最後を

       "[^  \t\n>\"]+"))

にしたのを mew-lang-jp で設定し直すとか。

> > クリック1回目では、ミニバッファに次のメッセージがでますが、
> > while: Args out of range: 1, 2
> 
> これだけは分からないので、
> (setq debug-on-error t) を実行して、エラーを捕まえてみて下さい。

バックトレースを見ましたが、一回目だけ NG ということは、
mew-puny-encode() を動かすのに必要などこかの elisp を load した
ときに top レベルで match-string みたいなのが動いちゃうんじゃな
いでしょうか?あと、自分の環境ではすでに utf-16 が無いものがない
のですが、その対応もふくめてこんな感じかな。

(defun mew-puny-encode-url (url)
  (if (not (and mew-use-punycode mew-cs-utf-16be))
      url
  (let (beg end idn)
    (with-temp-buffer
  ....
	(while (re-search-forward "[^.]?[^.
	  (setq idn (mew-match-string 0))
	  (delete-region (match-beginning 0) (match-end 0))
	  (insert (mew-puny-encode idn))))
      (mew-buffer-substring (point-min) (point-max))))))

-- 
白井秀行 (mailto:shirai at example.com)



Mew-dist メーリングリストの案内