7 (defmacro ew-scan-mime (scan col str)
8 `(let ((res (ew-make-anchor col str))
28 (?\; 'ew:semicolon-tok)
33 ((?\r ?\n [" \t"]) 'ew:fold-tok)
35 (setq p q) 'ew:err-tok)
36 ((+ [(?a ?z) (?A ?Z) (?0 ?9) "!#$%&'*+-.^_`{|}~" non-ascii])
38 (?\" (setq mode 'quoted-string) 'ew:qs-begin-tok)
39 (?\[ (setq mode 'domain-literal) 'ew:dl-begin-tok)
40 (?\( (setq mode 'comment
43 (() (setq p q) 'ew:err-tok)))
44 (ew-add-frag res r p type))
45 ((eq mode 'quoted-string)
50 (?\" (setq mode 'token) 'ew:qs-end-tok)
51 ((?\\ ?\r ?\n [" \t"]) 'ew:qs-qfold-tok)
52 ((?\\ ?\r ?\n [^ " \t"])
53 (setq p q) 'ew:err-tok)
55 (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"]))
59 (ew-add-frag res r (- p 3) 'ew:qs-texts-tok)
63 (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"]))
67 (ew-add-frag res r (- p 3) 'ew:qs-texts-tok)
69 (setq p q) 'ew:err-tok)
75 (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"]))
79 (progn (setq p q) 'ew:err-tok)))))
80 (ew-add-frag res r p type))
81 ((eq mode 'domain-literal)
86 (?\] (setq mode 'token) 'ew:dl-end-tok)
87 ((?\\ ?\r ?\n [" \t"])
89 ((?\\ ?\r ?\n [^ " \t"])
90 (setq p q) 'ew:err-tok)
92 (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"]))
96 (ew-add-frag res r (- p 3) 'ew:dl-texts-tok)
100 (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"]))
104 (ew-add-frag res r (- p 3) 'ew:dl-texts-tok)
106 (setq p q) 'ew:err-tok)
111 (((* [^ "[]\\ \t\r"])
112 (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"]))
116 (progn (setq p q) 'ew:err-tok)))))
117 (ew-add-frag res r p type))
123 (?\( (setq nest (1+ nest)) 'ew:cm-nested-begin-tok)
124 (?\) (setq nest (1- nest))
126 (progn (setq mode 'token) 'ew:cm-end-tok)
127 'ew:cm-nested-end-tok))
128 ((?\\ ?\r ?\n [" \t"])
130 ((?\\ ?\r ?\n [^ " \t"])
131 (setq p q) 'ew:err-tok)
132 (((* [^ "()\\ \t\r"])
133 (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"]))
137 (ew-add-frag res r (- p 3) 'ew:cm-texts-tok)
140 (((* [^ "()\\ \t\r"])
141 (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"]))
145 (ew-add-frag res r (- p 3) 'ew:cm-texts-tok)
147 (setq p q) 'ew:err-tok)
152 (((* [^ "()\\ \t\r"])
153 (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"]))
157 (progn (setq p q) 'ew:err-tok)))))
158 (ew-add-frag res r p type))))
162 (defun ew-scan-unibyte-mime (col str)
163 (ew-scan-mime lex-scan-unibyte col str))
164 (defun ew-scan-multibyte-mime (col str)
165 (ew-scan-mime lex-scan-multibyte col str))
170 (lambda (frag) (cons (get frag 'type) (symbol-name frag)))
172 (ew-scan-unibyte-mime
173 0 " text/vnd.latex-z; charset=ISO-2022-JP"))))