* FLIM-ELS (flim-modules): Add `ew-scan-n'.
[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 '((from                 ew-scan-unibyte-std11 . ew:tag-mailbox+)
19   (sender               ew-scan-unibyte-std11 . ew:tag-mailbox)
20   (to                   ew-scan-unibyte-std11 . ew:tag-address+)
21   (resent-to            ew-scan-unibyte-std11 . ew:tag-address+)
22   (cc                   ew-scan-unibyte-std11 . ew:tag-address+)
23   (resent-cc            ew-scan-unibyte-std11 . ew:tag-address+)
24   (bcc                  ew-scan-unibyte-std11 . ew:tag-address*)
25   (resent-bcc           ew-scan-unibyte-std11 . ew:tag-address*)
26   (message-id           ew-scan-unibyte-std11)
27   (resent-message-id    ew-scan-unibyte-std11)
28   (in-reply-to          ew-scan-unibyte-std11 . ew:tag-phrase-msg-id*)
29   (references           ew-scan-unibyte-std11 . ew:tag-phrase-msg-id*)
30   (keywords             ew-scan-unibyte-std11 . ew:tag-phrase*)
31   (subject              ew-scan-unibyte-unstructured)
32   (comments             ew-scan-unibyte-unstructured)
33   (encrypted            ew-scan-unibyte-std11)
34   (date                 ew-scan-unibyte-std11)
35   (reply-to             ew-scan-unibyte-std11 . ew:tag-address+)
36   (received             ew-scan-unibyte-std11)
37   (resent-reply-to      ew-scan-unibyte-std11 . ew:tag-address+)
38   (resent-from          ew-scan-unibyte-std11 . ew:tag-mailbox+)
39   (resent-sender        ew-scan-unibyte-std11 . ew:tag-mailbox)
40   (resent-date          ew-scan-unibyte-std11)
41   (return-path          ew-scan-unibyte-std11)
42   (mime-version         ew-scan-unibyte-std11)
43   (content-type         ew-scan-unibyte-mime)
44   (content-transfer-encoding    ew-scan-unibyte-mime)
45   (content-id           ew-scan-unibyte-std11)
46   (content-description  ew-scan-unibyte-unstructured)
47   (content-disposition  ew-scan-unibyte-mime)
48   (approved             ew-scan-unibyte-std11 . ew:tag-address+)
49   (newsgroups           ew-scan-unibyte-none)
50   (path                 ew-scan-unibyte-none)
51   (lines                ew-scan-unibyte-none)
52   (xref                 ew-scan-unibyte-none)
53 ))
54
55 (defvar ew-decode-field-default-syntax '(ew-scan-unibyte-unstructured))
56
57 (defvar ew-parse-error-sit-for-seconds 0)
58
59 ;;; constants.
60
61 (defconst ew-token-regexp "[-!#-'*+0-9A-Z^-~]+")
62 (defconst ew-encoded-text-regexp
63   (if ew-permit-null-encoded-text
64       "[!->@-~]*"
65     "[!->@-~]+"))
66
67 (defconst ew-encoded-word-regexp
68   (concat (regexp-quote "=?")
69           "\\(" ew-token-regexp "\\)"
70           (regexp-quote "?")
71           "\\(" ew-token-regexp "\\)"
72           (regexp-quote "?")
73           "\\(" ew-encoded-text-regexp "\\)"
74           (regexp-quote "?=")))
75
76 (defconst ew-anchored-encoded-word-regexp
77   (concat "\\`" ew-encoded-word-regexp "\\'"))
78
79 (defconst ew-b-regexp
80   (eval-when-compile
81     (concat "\\`\\("
82             "[A-Za-z0-9+/]"
83             "[A-Za-z0-9+/]"
84             "[A-Za-z0-9+/]"
85             "[A-Za-z0-9+/]"
86             "\\)*"
87             "\\("
88             "[A-Za-z0-9+/]"
89             "[A-Za-z0-9+/]"
90             "\\(==\\|[A-Za-z0-9+/]=\\)"
91             "\\)?"
92             "\\'")))
93
94 (defconst ew-q-regexp
95   "\\`\\([^=?]\\|=[0-9A-Fa-f][0-9A-Fa-f]\\)*\\'")
96
97 (defconst ew-quoting-char ?+)
98 (defconst ew-quoting-chars-regexp
99   (concat (regexp-quote (char-to-string ew-quoting-char)) "*"))
100
101 (defconst ew-type2-regexp
102   (concat (regexp-quote "=?")
103           "\\(" ew-token-regexp "\\)"
104           (regexp-quote "?")
105           "\\(" ew-token-regexp "\\)"
106           (regexp-quote "?")
107           "\\(" ew-encoded-text-regexp "\\)"
108           (regexp-quote "?")
109           "\\'"))
110
111 (defconst ew-byte-decoder-alist
112   '(("B" . ew-decode-b)
113     ("Q" . ew-decode-q)))
114
115 (defconst ew-byte-checker-alist
116   '(("B" . ew-b-check)
117     ("Q" . ew-q-check)))
118
119 ;;; utilities for variables.
120
121 (defun ew-dynamic-options ()
122   (cons
123    ew-default-mime-charset
124    (logior
125     (if ew-decode-sticked-encoded-word 1 0)
126     (if ew-decode-quoted-encoded-word 2 0)
127     (if ew-ignore-75bytes-limit 4 0)
128     (if ew-ignore-76bytes-limit 8 0)
129     (if ew-permit-sticked-comment 16 0)
130     (if ew-permit-sticked-special 32 0)
131     (if ew-remove-bare-crlf 64 0)
132     (if ew-permit-null-encoded-text 128 0)
133     )))