7 (defmacro ew-scan-mime (scan col str)
8 `(let ((res (ew-make-anchor col str))
20 ([" \t"] (ew-add-frag res r p 'ew:raw-wsp-tok))
21 (?< (ew-add-token res r p 'ew:raw-lt-tok))
22 (?> (ew-add-token res r p 'ew:raw-gt-tok))
23 (?@ (ew-add-token res r p 'ew:raw-at-tok))
24 (?, (ew-add-token res r p 'ew:raw-comma-tok))
25 (?\; (ew-add-token res r p 'ew:raw-semicolon-tok))
26 (?: (ew-add-token res r p 'ew:raw-colon-tok))
27 (?/ (ew-add-token res r p 'ew:raw-slash-tok))
28 (?? (ew-add-token res r p 'ew:raw-question-tok))
29 (?= (ew-add-token res r p 'ew:raw-equal-tok))
31 (ew-add-frag res r p 'ew:raw-fold-tok))
33 (ew-add-frag res r (setq p q) 'ew:raw-err-tok))
34 ((+ [(?a ?z) (?A ?Z) (?0 ?9) "!#$%&'*+-.^_`{|}~" non-ascii])
35 (ew-add-token res r p 'ew:raw-atom-tok))
36 (?\" (ew-add-open res r p 'ew:raw-qs-begin-tok)
37 (setq mode 'quoted-string))
38 (?\[ (ew-add-open res r p 'ew:raw-dl-begin-tok)
39 (setq mode 'domain-literal))
40 (?\( (ew-add-open res r p 'ew:raw-cm-begin-tok)
43 (() (ew-add-frag res r q 'ew:raw-err-tok) (setq p q))))
44 ((eq mode 'quoted-string)
47 (?\" (ew-add-close-token res r p 'ew:raw-qs-end-tok)
49 ((?\\ ?\r ?\n [" \t"])
50 (ew-add-frag res r p 'ew:raw-qs-qfold-tok))
51 ((?\\ ?\r ?\n [^ " \t"])
52 (ew-add-frag res r (setq p q) 'ew:raw-err-tok))
53 (((* [^ "\"\\ \t\r"]) (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) (* ?\r)
56 (ew-add-frag res r (- p 3) 'ew:raw-qs-texts-tok)
58 (ew-add-frag res r p 'ew:raw-qs-fold-tok))
59 (((* [^ "\"\\ \t\r"]) (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) (* ?\r)
62 (ew-add-frag res r (- p 3) 'ew:raw-qs-texts-tok)
64 (ew-add-frag res r (setq p q) 'ew:raw-err-tok))
66 (ew-add-frag res r p 'ew:raw-qs-qpair-tok))
68 (ew-add-frag res r p 'ew:raw-qs-wsp-tok))
69 (((* [^ "\"\\ \t\r"]) (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) (* ?\r))
71 (ew-add-frag res r p 'ew:raw-qs-texts-tok)
72 (ew-add-frag res r (setq p q) 'ew:raw-err-tok)))))
73 ((eq mode 'domain-literal)
76 (?\] (ew-add-close-token res r p 'ew:raw-dl-end-tok)
78 ((?\\ ?\r ?\n [" \t"])
79 (ew-add-frag res r p 'ew:raw-dl-qfold-tok))
80 ((?\\ ?\r ?\n [^ " \t"])
81 (ew-add-frag res r (setq p q) 'ew:raw-err-tok))
82 (((* [^ "[]\\ \t\r"]) (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) (* ?\r)
85 (ew-add-frag res r (- p 3) 'ew:raw-dl-texts-tok)
87 (ew-add-frag res r p 'ew:raw-dl-fold-tok))
88 (((* [^ "[]\\ \t\r"]) (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) (* ?\r)
91 (ew-add-frag res r (- p 3) 'ew:raw-dl-texts-tok)
93 (ew-add-frag res r (setq p q) 'ew:raw-err-tok))
95 (ew-add-frag res r p 'ew:raw-dl-qpair-tok))
97 (ew-add-frag res r p 'ew:raw-dl-wsp-tok))
98 (((* [^ "[]\\ \t\r"]) (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) (* ?\r))
100 (ew-add-frag res r p 'ew:raw-dl-texts-tok)
101 (ew-add-frag res r (setq p q) 'ew:raw-err-tok)))))
105 (?\( (ew-add-open res r p 'ew:raw-cm-nested-begin-tok)
106 (setq nest (1+ nest)))
107 (?\) (setq nest (1- nest))
110 (ew-add-close res r p 'ew:raw-cm-end-tok)
112 (ew-add-close res r p 'ew:raw-cm-nested-end-tok)))
113 ((?\\ ?\r ?\n [" \t"])
114 (ew-add-frag res r p 'ew:raw-cm-qfold-tok))
115 ((?\\ ?\r ?\n [^ " \t"])
116 (ew-add-frag res r (setq p q) 'ew:raw-err-tok))
117 (((* [^ "()\\ \t\r"]) (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) (* ?\r)
120 (ew-add-frag res r (- p 3) 'ew:raw-cm-texts-tok)
122 (ew-add-frag res r p 'ew:raw-cm-fold-tok))
123 (((* [^ "()\\ \t\r"]) (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) (* ?\r)
126 (ew-add-frag res r (- p 3) 'ew:raw-cm-texts-tok)
128 (ew-add-frag res r (setq p q) 'ew:raw-err-tok))
130 (ew-add-frag res r p 'ew:raw-cm-qpair-tok))
132 (ew-add-frag res r p 'ew:raw-cm-wsp-tok))
133 (((* [^ "()\\ \t\r"]) (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) (* ?\r))
135 (ew-add-frag res r p 'ew:raw-cm-texts-tok)
136 (ew-add-frag res r (setq p q) 'ew:raw-err-tok)))))))
140 (defun ew-scan-unibyte-mime (col str)
141 (ew-scan-mime lex-scan-unibyte col str))
142 (defun ew-scan-multibyte-mime (col str)
143 (ew-scan-mime lex-scan-multibyte col str))
148 (lambda (frag) (cons (get frag 'type) (symbol-name frag)))
150 (ew-scan-unibyte-mime
151 0 " text/vnd.latex-z; charset=ISO-2022-JP"))))