3 ;;; user customizable variables.
5 (defvar ew-decode-sticked-encoded-word nil)
6 (defvar ew-decode-quoted-encoded-word nil)
7 (defvar ew-ignore-75bytes-limit nil)
8 (defvar ew-ignore-76bytes-limit nil)
9 (defvar ew-permit-sticked-comment nil)
10 (defvar ew-permit-sticked-special nil)
11 (defvar ew-permit-null-encoded-text nil)
13 (defvar ew-remove-bare-crlf nil)
14 (defvar ew-default-mime-charset 'x-ctext)
17 (defvar ew-decode-field-syntax-alist
19 ;;; std11 (rfc822, rfc1123)
20 (from ew-scan-unibyte-std11 . ew:tag-mailbox+)
21 (sender ew-scan-unibyte-std11 . ew:tag-mailbox)
22 (to ew-scan-unibyte-std11 . ew:tag-address+)
23 (resent-to ew-scan-unibyte-std11 . ew:tag-address+)
24 (cc ew-scan-unibyte-std11 . ew:tag-address+)
25 (resent-cc ew-scan-unibyte-std11 . ew:tag-address+)
26 (bcc ew-scan-unibyte-std11 . ew:tag-address*)
27 (resent-bcc ew-scan-unibyte-std11 . ew:tag-address*)
28 (message-id ew-scan-unibyte-std11)
29 (resent-message-id ew-scan-unibyte-std11)
30 (in-reply-to ew-scan-unibyte-std11 . ew:tag-phrase-msg-id*)
31 (references ew-scan-unibyte-std11 . ew:tag-phrase-msg-id*)
32 (keywords ew-scan-unibyte-std11 . ew:tag-phrase*)
33 (subject ew-scan-unibyte-unstructured)
34 (comments ew-scan-unibyte-unstructured)
35 (encrypted ew-scan-unibyte-std11)
36 (date ew-scan-unibyte-std11)
37 (reply-to ew-scan-unibyte-std11 . ew:tag-address+)
38 (received ew-scan-unibyte-std11)
39 (resent-reply-to ew-scan-unibyte-std11 . ew:tag-address+)
40 (resent-from ew-scan-unibyte-std11 . ew:tag-mailbox+)
41 (resent-sender ew-scan-unibyte-std11 . ew:tag-mailbox)
42 (resent-date ew-scan-unibyte-std11)
43 (return-path ew-scan-unibyte-std11)
45 ;; (content-type ew-scan-unibyte-std11)
47 (mime-version ew-scan-unibyte-std11)
48 (content-type ew-scan-unibyte-mime)
49 (content-transfer-encoding ew-scan-unibyte-mime)
50 (content-id ew-scan-unibyte-std11)
51 (content-description ew-scan-unibyte-unstructured)
53 (content-disposition ew-scan-unibyte-mime)
55 (content-md5 ew-scan-unibyte-none)
57 (status ew-scan-unibyte-none)
58 ;;; draft-ietf-drums-msg-fmt-05
59 ;; (date ew-scan-unibyte-std11)
60 ;; (from ew-scan-unibyte-std11 . ew:tag-mailbox+)
61 ;; (sender ew-scan-unibyte-std11 . ew:tag-mailbox)
62 ;; (reply-to ew-scan-unibyte-std11 . ew:tag-address+)
63 ;; (to ew-scan-unibyte-std11 . ew:tag-address+)
64 ;; (cc ew-scan-unibyte-std11 . ew:tag-address+)
65 ;; (bcc ew-scan-unibyte-std11 . ew:tag-address*)
66 ;; (message-id ew-scan-unibyte-std11)
67 ;; (in-reply-to ew-scan-unibyte-std11)
68 ;; (references ew-scan-unibyte-std11)
69 ;; (subject ew-scan-unibyte-unstructured)
70 ;; (comments ew-scan-unibyte-unstructured)
71 ;; (keywords ew-scan-unibyte-std11 . ew:tag-phrase*)
72 ;; (resent-date ew-scan-unibyte-std11)
73 ;; (resent-from ew-scan-unibyte-std11 . ew:tag-mailbox+)
74 ;; (resent-sender ew-scan-unibyte-std11 . ew:tag-mailbox)
75 ;; (resent-to ew-scan-unibyte-std11 . ew:tag-address+)
76 ;; (resent-cc ew-scan-unibyte-std11 . ew:tag-address+)
77 ;; (resent-bcc ew-scan-unibyte-std11 . ew:tag-address*)
78 ;; (resent-message-id ew-scan-unibyte-std11)
79 ;; (return-path ew-scan-unibyte-std11)
80 ;; (received ew-scan-unibyte-std11)
81 ;;; draft-ietf-drums-mail-followup-to-00
82 (mail-followup-to ew-scan-unibyte-std11 . ew:tag-mailbox+)
83 ;;; draft-ietf-usefor-article-01
84 ;; (date ew-scan-unibyte-std11)
85 ;; (from ew-scan-unibyte-std11 . ew:tag-mailbox+)
86 ;; (message-id ew-scan-unibyte-std11)
87 ;; (subject ew-scan-unibyte-unstructured)
88 (newsgroups ew-scan-unibyte-none)
89 (path ew-scan-unibyte-none)
90 (followup-to ew-scan-unibyte-none)
91 (expires ew-scan-unibyte-std11)
92 ;; (reply-to ew-scan-unibyte-std11 . ew:tag-address+)
93 ;; (references ew-scan-unibyte-std11 . ew:tag-phrase-msg-id*)
94 (control ew-scan-unibyte-none)
95 (distribution ew-scan-unibyte-none)
96 ;; (keywords ew-scan-unibyte-std11 . ew:tag-phrase*)
97 (summary ew-scan-unibyte-unstructured)
98 (approved ew-scan-unibyte-std11 . ew:tag-mailbox+)
99 (lines ew-scan-unibyte-none)
100 (xref ew-scan-unibyte-none)
101 (organization ew-scan-unibyte-unstructured)
102 (user-agent ew-scan-unibyte-mime)
103 (supersedes ew-scan-unibyte-std11)
104 (replaces ew-scan-unibyte-std11)
105 (replaced-by ew-scan-unibyte-std11)
106 (archive ew-scan-unibyte-none)
107 ;;; draft-ietf-usefor-posted-mailed-01
108 (posted-and-mailed ew-scan-unibyte-none)
109 (followup-host ew-scan-unibyte-none) ; news-url
110 ;;; draft-ietf-mailext-new-fields-13
111 (auto-submitted ew-scan-unibyte-mime)
112 ;; (supersedes ew-scan-unibyte-std11)
113 ;; (expires ew-scan-unibyte-std11)
115 (x-face ew-scan-unibyte-none)
116 (x-pgp-sig ew-scan-unibyte-none)
119 (defvar ew-decode-field-default-syntax '(ew-scan-unibyte-unstructured))
121 (defvar ew-parse-error-sit-for-seconds 0)
125 (defconst ew-token-regexp "[-!#-'*+0-9A-Z^-~]+")
126 (defconst ew-encoded-text-regexp "[!->@-~]*")
128 (defconst ew-encoded-word-regexp
129 (concat (regexp-quote "=?")
130 "\\(" ew-token-regexp "\\)"
132 "\\(" ew-token-regexp "\\)"
134 "\\(" ew-encoded-text-regexp "\\)"
135 (regexp-quote "?=")))
137 (defconst ew-anchored-encoded-word-regexp
138 (concat "\\`" ew-encoded-word-regexp "\\'"))
140 (defconst ew-b-regexp
151 "\\(==\\|[A-Za-z0-9+/]=\\)"
155 (defconst ew-q-regexp
156 "\\`\\([^=?]\\|=[0-9A-Fa-f][0-9A-Fa-f]\\)*\\'")
158 (defconst ew-quoting-char ?+)
159 (defconst ew-quoting-chars-regexp
160 (concat (regexp-quote (char-to-string ew-quoting-char)) "*"))
162 (defconst ew-type2-regexp
163 (concat (regexp-quote "=?")
164 "\\(" ew-token-regexp "\\)"
166 "\\(" ew-token-regexp "\\)"
168 "\\(" ew-encoded-text-regexp "\\)"
172 (defconst ew-byte-decoder-alist
173 '(("B" . ew-decode-b)
174 ("Q" . ew-decode-q)))
176 (defconst ew-byte-checker-alist
180 ;;; utilities for variables.
182 (defconst ew-option-list
183 '(ew-decode-sticked-encoded-word
184 ew-decode-quoted-encoded-word
185 ew-ignore-75bytes-limit
186 ew-ignore-76bytes-limit
187 ew-permit-sticked-comment
188 ew-permit-sticked-special
189 ew-permit-null-encoded-text))
191 (defun ew-save-boolean-options ()
192 (let ((tmp 1) (opts ew-option-list) (val 0))
194 (when (symbol-value (car opts)) (setq val (logior val tmp)))
195 (setq tmp (lsh tmp 1)
199 (defun ew-restore-boolean-options (val)
200 (let ((tmp 1) (opts ew-option-list))
202 (set (car opts) (not (zerop (logand val tmp))))
203 (setq tmp (lsh tmp 1)
206 (defun ew-dynamic-options ()
208 ew-default-mime-charset
209 (ew-save-boolean-options)))