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)
|
||||
(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
|
||||
sxml
|
||||
`((*default* . ,(lambda (tag . body)
|
||||
(let ((tag (if (string-prefix? "svg:" (symbol->string tag))
|
||||
(string->symbol (substring (symbol->string tag) 4))
|
||||
tag)))
|
||||
(if (can-contain-p? tag)
|
||||
(wpautop tag body)
|
||||
(cons tag body))))
|
||||
(cons tag body)))))
|
||||
(*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*
|
||||
`((a (href . ,urlish?) title)
|
||||
|
|
Loading…
Reference in a new issue