Add trickery to support embedded SVG images
- Specify the svg and xlink namespaces to the `xml->sxml' procedure so that it doesn't include them in full for each tag. - For the default `pre-post-order' handler strip the `svg:' prefix if found. - Strip the `svg:' namespace from the SVG element and insert the `xmlns' and `xmlns:xlink' namespace definition attributes into the attributes. This is all very brittle and badly done, but for the moment this fixes my use-case of wanting to display SVG images embedded in the HTML.
This commit is contained in:
parent
ae3d83d5f2
commit
3924728bab
1 changed files with 14 additions and 5 deletions
|
@ -80,15 +80,24 @@
|
||||||
|
|
||||||
(define (wordpress->sxml text)
|
(define (wordpress->sxml text)
|
||||||
(let ((sxml (cadr (with-input-from-string* (string-append "<div>" text "</div>")
|
(let ((sxml (cadr (with-input-from-string* (string-append "<div>" text "</div>")
|
||||||
xml->sxml))))
|
(lambda () (xml->sxml #:namespaces '((svg . "http://www.w3.org/2000/svg"))))))))
|
||||||
(pre-post-order
|
(pre-post-order
|
||||||
sxml
|
sxml
|
||||||
`((*default* . ,(lambda (tag . body)
|
`((*default* . ,(lambda (tag . body)
|
||||||
(if (can-contain-p? tag)
|
(let ((tag (if (string-prefix? "svg:" (symbol->string tag))
|
||||||
(wpautop tag body)
|
(string->symbol (substring (symbol->string tag) 4))
|
||||||
(cons tag body))))
|
tag)))
|
||||||
|
(if (can-contain-p? tag)
|
||||||
|
(wpautop tag body)
|
||||||
|
(cons tag body)))))
|
||||||
(*text* . ,(lambda (tag text)
|
(*text* . ,(lambda (tag text)
|
||||||
text))))))
|
text))
|
||||||
|
(svg:svg . ,(lambda (tag . body)
|
||||||
|
(cons 'svg
|
||||||
|
(cons `(@ (xmlns "http://www.w3.org/2000/svg")
|
||||||
|
(xmlns:xlink "http://www.w3.org/1999/xlink")
|
||||||
|
,@(cdar body))
|
||||||
|
(cdr body)))))))))
|
||||||
|
|
||||||
(define *allowed-tags*
|
(define *allowed-tags*
|
||||||
`((a (href . ,urlish?) title)
|
`((a (href . ,urlish?) title)
|
||||||
|
|
Loading…
Reference in a new issue