4d9a0bf9640394ddfaab97804fd8f74f528d0aa7
[elisp/flim.git] / ew-var.el
1 (provide 'ew-var)
2
3 ;;; user customizable variables.
4
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)
12
13 (defvar ew-remove-bare-crlf nil)
14 (defvar ew-default-mime-charset 'x-ctext)
15
16 ;;;
17 (defvar ew-decode-field-syntax-alist
18   '(
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)
44 ;;; rfc1049
45     ;; (content-type         ew-scan-unibyte-std11)
46 ;;; rfc2045
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)
52 ;;; rfc2183
53     (content-disposition  ew-scan-unibyte-mime)
54 ;;; rfc1864
55     (content-md5          ew-scan-unibyte-none)
56 ;;; rfc2076
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)
114 ;;; others
115     (x-face               ew-scan-unibyte-none)
116     (x-pgp-sig            ew-scan-unibyte-none)
117     ))
118
119 (defvar ew-decode-field-default-syntax '(ew-scan-unibyte-unstructured))
120
121 (defvar ew-parse-error-sit-for-seconds 0)
122
123 ;;; constants.
124
125 (defconst ew-token-regexp "[-!#-'*+0-9A-Z^-~]+")
126 (defconst ew-encoded-text-regexp0 "[!->@-~]*")
127 (defconst ew-encoded-text-regexp1 "[!->@-~]+")
128
129 (defconst ew-encoded-word-regexp0
130   (concat (regexp-quote "=?")
131           "\\(" ew-token-regexp "\\)"
132           (regexp-quote "?")
133           "\\(" ew-token-regexp "\\)"
134           (regexp-quote "?")
135           "\\(" ew-encoded-text-regexp0 "\\)"
136           (regexp-quote "?=")))
137
138 (defconst ew-encoded-word-regexp1
139   (concat (regexp-quote "=?")
140           "\\(" ew-token-regexp "\\)"
141           (regexp-quote "?")
142           "\\(" ew-token-regexp "\\)"
143           (regexp-quote "?")
144           "\\(" ew-encoded-text-regexp1 "\\)"
145           (regexp-quote "?=")))
146
147 (defconst ew-anchored-encoded-word-regexp
148   (concat "\\`" ew-encoded-word-regexp0 "\\'"))
149
150 (defconst ew-b-regexp
151   (eval-when-compile
152     (concat "\\`\\("
153             "[A-Za-z0-9+/]"
154             "[A-Za-z0-9+/]"
155             "[A-Za-z0-9+/]"
156             "[A-Za-z0-9+/]"
157             "\\)*"
158             "\\("
159             "[A-Za-z0-9+/]"
160             "[A-Za-z0-9+/]"
161             "\\(==\\|[A-Za-z0-9+/]=\\)"
162             "\\)?"
163             "\\'")))
164
165 (defconst ew-q-regexp
166   "\\`\\([^=?]\\|=[0-9A-Fa-f][0-9A-Fa-f]\\)*\\'")
167
168 (defconst ew-quoting-char ?+)
169 (defconst ew-quoting-chars-regexp
170   (concat (regexp-quote (char-to-string ew-quoting-char)) "*"))
171
172 (defconst ew-type2-regexp
173   (concat (regexp-quote "=?")
174           "\\(" ew-token-regexp "\\)"
175           (regexp-quote "?")
176           "\\(" ew-token-regexp "\\)"
177           (regexp-quote "?")
178           "\\(" ew-encoded-text-regexp0 "\\)"
179           (regexp-quote "?")
180           "\\'"))
181
182 (defconst ew-byte-decoder-alist
183   '(("B" . ew-decode-b)
184     ("Q" . ew-decode-q)))
185
186 (defconst ew-byte-checker-alist
187   '(("B" . ew-b-check)
188     ("Q" . ew-q-check)))
189
190 ;;; utilities for variables.
191
192 (defun ew-dynamic-options ()
193   (cons
194    ew-default-mime-charset
195    (logior
196     (if ew-decode-sticked-encoded-word 1 0)
197     (if ew-decode-quoted-encoded-word 2 0)
198     (if ew-ignore-75bytes-limit 4 0)
199     (if ew-ignore-76bytes-limit 8 0)
200     (if ew-permit-sticked-comment 16 0)
201     (if ew-permit-sticked-special 32 0)
202     (if ew-remove-bare-crlf 64 0)
203     (if ew-permit-null-encoded-text 128 0)
204     )))