[Mew-dist 15498] friendly-addr
Shun-ichi TAHARA ( 田原 俊一 )
jado at example.com
2000年 12月 14日 (木) 22:28:41 JST
以前、[Mew-dist 14438] あたりで、「mew-scan-form-friendly-addr」の抜き
出し規則を変えてほしいという話をしましたが、抜き出し規則をカスタマイズ
可能にしましたので、改めてパッチを投げます。
mew-scan-form-friendly-addr-rule を定義すると、friendly address の抜き
出し規則を変更できます。
見れば意味はなんとなくわかると思いますが、デフォルト値は
(defvar mew-scan-form-friendly-addr-rule
'(mew-scan-form-friendly-addr-phrase
mew-scan-form-friendly-addr-comment
mew-scan-form-friendly-addr-address))
で、これはもともとの mew-scan-form-friendly-addr の挙動と同じです。
例えば、
From: XXXX (YYYY) <zzz at example.com>
から、YYYY だけを抜き出したければ、(デフォルトでは XXXX (YYYY) が出る)
Comment part優先ということで、
(setq mew-scan-form-friendly-addr-rule
'(mew-scan-form-friendly-addr-comment
mew-scan-form-friendly-addr-phrase
mew-scan-form-friendly-addr-address))
とします。
おまけとして、mew-scan-form-friendly-addr-quoted-phrase を追加してます。
From: "XXXXXX" <zzz at example.com>
から、" " を除いた XXXXXX を抜き出すためのものです。
" " がないものには引っかかりませんので、指定するときには、続けて
mew-scan-form-friendly-addr-phrase を指定することになるでしょう。
ちなみに、(setq mew-scan-form-friendly-addr-rule nil) で、必ず From:
がまるごと返るようになるので、実は mew-scan-form-from-name-only が要ら
なくなるのかもしれません。というわけで、マージするのならこのあたりも整
理した方がいいかも。
# mew-scan-form-friendly-addr()→mew-scan-form-extract-addr()
# mew-scan-form-friandly-addr-rule→mew-scan-form-extract-rule とか。
_______________________________
田原 俊一 jado at example.com, shunichi_tahara at example.com
http://flowernet.gr.jp/jado/
FingerPrint: 16 9E 70 3B 05 86 5D 08 - B8 4C 47 3A E7 E9 8E D9
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
-------------- next part --------------
--- mew-scan.el.orig Fri Dec 8 21:59:11 2000
+++ mew-scan.el Thu Dec 14 20:53:55 2000
@@ -118,19 +118,40 @@ (defun mew-scan-form-size ()
"0k"
(concat (int-to-string size) unit)))))
+(defconst mew-scan-form-friendly-addr-phrase "^\\([^<]+\\)<[^>]+>")
+(defconst mew-scan-form-friendly-addr-quoted-phrase
+ "^\"\\([^\"]+\\)\"[ \t]*<[^>]+>")
+(defconst mew-scan-form-friendly-addr-comment "^[^(]+(\\(.+\\))")
+(defconst mew-scan-form-friendly-addr-address "<\\([^>]+\\)>")
+
+(defvar mew-scan-form-friendly-addr-rule
+ '(mew-scan-form-friendly-addr-phrase
+ mew-scan-form-friendly-addr-comment
+ mew-scan-form-friendly-addr-address)
+ "*A list of regexps to determine how to extract \"frinendly address\" by
+mew-scan-form-friendly-addr.
+Each element (can be the symbol of const) is string-matched with the
+specified address sequentially until it matches.
+If matched, mew-scan-form-friendly-addr extracts \"frinendly address\"
+according to matched regexp, otherwise, the whole of specified address
+is used.
+The following symbols are pre-defined as regexps to extract certain
+parts.
+ mew-scan-form-friendly-addr-phrase: Phrase part before <...>
+ mew-scan-form-friendly-addr-quoted-phrase: Inside \"...\" of the phrase
+ mew-scan-form-friendly-addr-comment: Comment part inside (...)
+ mew-scan-form-friendly-addr-address: Address part inside <...>")
+
(defun mew-scan-form-friendly-addr (addr)
- "Extract phrase part of ADDR if exists and returns it.
-Next, extract comment part if exists and returns it.
-Otherwise ADDR is returned."
- (cond
- ((string-match "\\([^<]+\\)<[^>]+>" addr)
- (mew-chop (mew-match 1 addr)))
- ((string-match "^[^(]+(\\(.+\\))" addr)
- ;; Removing comments even if recursive.
- (mew-chop (mew-match 1 addr)))
- ((string-match "^[ \t]*<\\([^>]+\\)>" addr)
- (mew-chop (mew-match 1 addr)))
- (t addr)))
+ "Extracts \"friendly address\" from ADDR and returns it.
+See also mew-scan-form-friendly-addr-rule."
+ (catch 'addr
+ (mapcar
+ '(lambda (rule)
+ (if (string-match (eval rule) addr)
+ (throw 'addr (mew-chop (mew-match 1 addr)))))
+ mew-scan-form-friendly-addr-rule)
+ addr))
(defun mew-scan-form-from ()
"A function to return an address.
Mew-dist メーリングリストの案内