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