diff --git a/scribble-lib/scribble/html-render.rkt b/scribble-lib/scribble/html-render.rkt index 9aa7db7b62..5ab2c88866 100644 --- a/scribble-lib/scribble/html-render.rkt +++ b/scribble-lib/scribble/html-render.rkt @@ -1672,6 +1672,13 @@ (let ([s (content-style e)]) (and (style? s) (style->tag s)))] + [semantic-tag + (and (symbol? name) + (case name + [(emph) 'em] + [(superscript) 'sup] + [(subscript) 'sub] + [else #f]))] [resources (for/list ([p (in-list properties)] #:when (install-resource? p)) (install-resource-path p))] @@ -1720,7 +1727,8 @@ (not link?) (not anchor?) (not newline?) - (not alt-tag)) + (not alt-tag) + (not semantic-tag)) content `(,@(if anchor? (append-map (lambda (v) @@ -1733,6 +1741,7 @@ [alt-tag alt-tag] [link? 'a] [newline? 'br] + [semantic-tag semantic-tag] [else 'span]) ,(append (if link-resource @@ -1754,8 +1763,8 @@ [(url) '([class "url"])] [(no-break) '([class "nobreak"])] [(sf) '([class "ssansserif"])] - [(superscript) '([style "vertical-align: super; font-size: 80%"])] - [(subscript) '([style "vertical-align: sub; font-size: 80%"])] + [(superscript) '([style "vertical-align: super; font-size: 80%; line-height: inherit"])] + [(subscript) '([style "vertical-align: sub; font-size: 80%; line-height: inherit"])] [(smaller) '([class "Smaller"])] [(larger) '([class "Larger"])] [(hspace) '([class "hspace"])] diff --git a/scribble-test/tests/scribble/html-render.rkt b/scribble-test/tests/scribble/html-render.rkt new file mode 100644 index 0000000000..40b476c38f --- /dev/null +++ b/scribble-test/tests/scribble/html-render.rkt @@ -0,0 +1,63 @@ +#lang racket/base + +(require racket/class + rackunit + scribble/base + scribble/base-render + scribble/core + scribble/html-properties + (prefix-in html: scribble/html-render)) + +(define renderer + (new (html:render-mixin render%) + [dest-dir (find-system-path 'temp-dir)])) + +(define (render-content content) + (send renderer render-content content #f #f)) + +(test-case "semantic text styles" + (check-equal? + (render-content (emph "emphasized")) + '((em ((class "emph")) "emphasized"))) + + (check-equal? + (render-content (emph "outer " (emph "inner"))) + '((em ((class "emph")) "outer " + (em ((class "emph")) "inner")))) + + (check-equal? + (render-content + (elem #:style + (make-style 'emph + (list (attributes '((data-test . "value"))))) + "styled emphasis")) + '((em ((class "emph") (data-test "value")) "styled emphasis"))) + + (check-equal? + (render-content (superscript "superscript")) + '((sup ((style "vertical-align: super; font-size: 80%; line-height: inherit")) + "superscript"))) + + (check-equal? + (render-content (subscript "subscript")) + '((sub ((style "vertical-align: sub; font-size: 80%; line-height: inherit")) + "subscript"))) + + (check-equal? + (render-content + (elem #:style + (make-style 'emph (list (alt-tag "i"))) + "alternate tag")) + '((i ((class "emph")) "alternate tag"))) + + (check-equal? + (render-content + (elem #:style + (make-style 'emph + (list (target-url "https://example.com"))) + "linked")) + '((a ((href "https://example.com") (class "emph")) "linked"))) + + (check-equal? + (render-content (elem #:style "emph" "custom style")) + '((span ((class "emph")) "custom style"))))