diff options
| author | Laurenz <laurmaedje@gmail.com> | 2025-07-10 12:54:06 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-10 10:54:06 +0000 |
| commit | 275012d7c624be85173315286752888e20996072 (patch) | |
| tree | 902db921719c9e0cf399bbe48372f4d8f347273b | |
| parent | 98802dde7e3eab456bf4892b586076431e3bb386 (diff) | |
Handle `lower` and `upper` in HTML export (#6585)
| -rw-r--r-- | crates/typst-html/src/convert.rs | 7 | ||||
| -rw-r--r-- | tests/ref/html/cases-content-html.html | 10 | ||||
| -rw-r--r-- | tests/suite/text/case.typ | 4 |
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) |
