* ew-data.el:
[elisp/flim.git] / ew-scan-u.el
1 (require 'lex)
2 (require 'automata)
3 (require 'ew-data)
4 (require 'ew-parse)
5 (provide 'ew-scan-u)
6
7 (defmacro ew-scan-unstructured (scan col str)
8   `(let ((res (ew-make-anchor col str))
9          (p 0)
10          (q (length str))
11          r)
12      (while (< p q)
13        (setq r p)
14        (,scan
15         str p q
16         ([" \t"] (ew-add-frag res r p 'ew:us-wsp-tok))
17         (((* [^ " \t\r"]) (* (+ ?\r) [^ " \t\r\n"] (* [^ " \t\r"])) (* ?\r)
18           (?\r ?\n [" \t"]))
19          (when (< r (- p 3))
20            (ew-add-frag res r (- p 3) 'ew:us-texts-tok)
21            (setq r (- p 3)))
22          (ew-add-frag res r p 'ew:us-fold-tok))
23         (((* [^ " \t\r"]) (* (+ ?\r) [^ " \t\r\n"] (* [^ " \t\r"])) (* ?\r)
24           (?\r ?\n [^ " \t"]))
25          (when (< r (- p 3))
26            (ew-add-frag res r (- p 3) 'ew:us-texts-tok)
27            (setq r (- p 3)))
28          (ew-add-frag res r (setq p q) 'ew:err-tok))
29         (((* [^ " \t\r"]) (* (+ ?\r) [^ " \t\r\n"] (* [^ " \t\r"])) (* ?\r))
30          (if (< r p)
31              (ew-add-frag res r p 'ew:us-texts-tok)
32            (ew-add-frag res r (setq p q) 'ew:err-tok)))))
33      (ew-terminate res)
34      res))
35
36 (defun ew-scan-unibyte-unstructured (col str)
37   (ew-scan-unstructured lex-scan-unibyte col str))
38 (defun ew-scan-multibyte-unstructured (col str)
39   (ew-scan-unstructured lex-scan-multibyte col str))
40
41 '(      
42 (npp
43  (mapcar
44   (lambda (frag) (cons (get frag 'type) (symbol-name frag)))
45   (ew-frag-list
46    (ew-scan-unibyte-unstructured
47     0 " Hello! =?US-ASCII?Q?Hello!?="))))
48
49 (npp
50  (mapcar
51   (lambda (frag) (cons (get frag 'type) (symbol-name frag)))
52   (ew-frag-list
53    (ew-scan-unibyte-unstructured
54     0 " \r\na"))))
55
56 )