hyper-literate/collects/xml/space.ss
Robby Findler 9e5d391dfb ...
original commit: 66a62c2f50bd2b8c85867be3e415c6a0b3881f20
2000-05-25 15:55:50 +00:00

29 lines
1.2 KiB
Scheme

(unit/sig space^
(import xml-structs^ mzlib:function^)
;; eliminate-whitespace : (listof Symbol) (Bool -> Bool) -> Element -> Element
(define (eliminate-whitespace special eliminate-special?)
(letrec ([blank-it
(lambda (el)
(let ([name (element-name el)]
[content (map (lambda (x)
(if (element? x) (blank-it x) x))
(element-content el))])
(make-element
(source-start el)
(source-stop el)
name
(element-attributes el)
(cond
[(eliminate-special? (memq (element-name el) special))
(filter (lambda (s)
(not (and (pcdata? s)
(or (all-blank (pcdata-string s))
(error 'eliminate-blanks "Element <~a> is not allowed to contain text ~s" name (pcdata-string s))))))
content)]
[else content]))))])
blank-it))
;; all-blank : String -> Bool
(define (all-blank s) (andmap char-whitespace? (string->list s))))