9a3e485a25dfa6a4cfaaa1dbdf809ecf298e9bc8
[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) ; affect when loading time.
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-regexp
127   (if ew-permit-null-encoded-text
128       "[!->@-~]*"
129     "[!->@-~]+"))
130
131 (defconst ew-encoded-word-regexp
132   (concat (regexp-quote "=?")
133           "\\(" ew-token-regexp "\\)"
134           (regexp-quote "?")
135           "\\(" ew-token-regexp "\\)"
136           (regexp-quote "?")
137           "\\(" ew-encoded-text-regexp "\\)"
138           (regexp-quote "?=")))
139
140 (defconst ew-anchored-encoded-word-regexp
141   (concat "\\`" ew-encoded-word-regexp "\\'"))
142
143 (defconst ew-b-regexp
144   (eval-when-compile
145     (concat "\\`\\("
146             "[A-Za-z0-9+/]"
147             "[A-Za-z0-9+/]"
148             "[A-Za-z0-9+/]"
149             "[A-Za-z0-9+/]"
150             "\\)*"
151             "\\("
152             "[A-Za-z0-9+/]"
153             "[A-Za-z0-9+/]"
154             "\\(==\\|[A-Za-z0-9+/]=\\)"
155             "\\)?"
156             "\\'")))
157
158 (defconst ew-q-regexp
159   "\\`\\([^=?]\\|=[0-9A-Fa-f][0-9A-Fa-f]\\)*\\'")
160
161 (defconst ew-quoting-char ?+)
162 (defconst ew-quoting-chars-regexp
163   (concat (regexp-quote (char-to-string ew-quoting-char)) "*"))
164
165 (defconst ew-type2-regexp
166   (concat (regexp-quote "=?")
167           "\\(" ew-token-regexp "\\)"
168           (regexp-quote "?")
169           "\\(" ew-token-regexp "\\)"
170           (regexp-quote "?")
171           "\\(" ew-encoded-text-regexp "\\)"
172           (regexp-quote "?")
173           "\\'"))
174
175 (defconst ew-byte-decoder-alist
176   '(("B" . ew-decode-b)
177     ("Q" . ew-decode-q)))
178
179 (defconst ew-byte-checker-alist
180   '(("B" . ew-b-check)
181     ("Q" . ew-q-check)))
182
183 ;;; utilities for variables.
184
185 (defun ew-dynamic-options ()
186   (cons
187    ew-default-mime-charset
188    (logior
189     (if ew-decode-sticked-encoded-word 1 0)
190     (if ew-decode-quoted-encoded-word 2 0)
191     (if ew-ignore-75bytes-limit 4 0)
192     (if ew-ignore-76bytes-limit 8 0)
193     (if ew-permit-sticked-comment 16 0)
194     (if ew-permit-sticked-special 32 0)
195     (if ew-remove-bare-crlf 64 0)
196     (if ew-permit-null-encoded-text 128 0)
197     )))