[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 メーリングリストの案内