summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2025-07-10 12:54:06 +0200
committerGitHub <noreply@github.com>2025-07-10 10:54:06 +0000
commit275012d7c624be85173315286752888e20996072 (patch)
tree902db921719c9e0cf399bbe48372f4d8f347273b
parent98802dde7e3eab456bf4892b586076431e3bb386 (diff)
Handle `lower` and `upper` in HTML export (#6585)
-rw-r--r--crates/typst-html/src/convert.rs7
-rw-r--r--tests/ref/html/cases-content-html.html10
-rw-r--r--tests/suite/text/case.typ4
3 files changed, 20 insertions, 1 deletions
diff --git a/crates/typst-html/src/convert.rs b/crates/typst-html/src/convert.rs
index 49995e0a..171b4cb7 100644
--- a/crates/typst-html/src/convert.rs
+++ b/crates/typst-html/src/convert.rs
@@ -86,7 +86,12 @@ fn handle(
} else if child.is::<SpaceElem>() {
output.push(HtmlNode::text(' ', child.span()));
} else if let Some(elem) = child.to_packed::<TextElem>() {
- output.push(HtmlNode::text(elem.text.clone(), elem.span()));
+ let text = if let Some(case) = styles.get(TextElem::case) {
+ case.apply(&elem.text).into()
+ } else {
+ elem.text.clone()
+ };
+ output.push(HtmlNode::text(text, elem.span()));
} else if let Some(elem) = child.to_packed::<LinebreakElem>() {
output.push(HtmlElement::new(tag::br).spanned(elem.span()).into());
} else if let Some(elem) = child.to_packed::<SmartQuoteElem>() {
diff --git a/tests/ref/html/cases-content-html.html b/tests/ref/html/cases-content-html.html
new file mode 100644
index 00000000..0890f061
--- /dev/null
+++ b/tests/ref/html/cases-content-html.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ </head>
+ <body>
+ <p>my <strong>lower</strong> a<br>MY <strong>UPPER</strong> A<br></p>
+ </body>
+</html>
diff --git a/tests/suite/text/case.typ b/tests/suite/text/case.typ
index 964ff28b..c045ce7a 100644
--- a/tests/suite/text/case.typ
+++ b/tests/suite/text/case.typ
@@ -14,6 +14,10 @@
// Check that cases are applied to symbols nested in content
#lower($H I !$.body)
+--- cases-content-html html ---
+#lower[MY #html.strong[Lower] #symbol("A")] \
+#upper[my #html.strong[Upper] #symbol("a")] \
+
--- upper-bad-type ---
// Error: 8-9 expected string or content, found integer
#upper(1)