diff --git a/crates/formats/src/html.rs b/crates/formats/src/html.rs
index 6dc03017b..014b7a94c 100644
--- a/crates/formats/src/html.rs
+++ b/crates/formats/src/html.rs
@@ -1156,8 +1156,18 @@ impl<'r> Builder<'r> {
fmt.font = Some(fam);
}
}
- if let Some(sz) = attr(attrs, "size").and_then(|s| s.trim().parse::().ok()) {
- fmt.size = Some([7.5, 10.0, 12.0, 13.5, 18.0, 24.0, 36.0].get((sz.clamp(1, 7) - 1) as usize).copied().unwrap_or(12.0));
+ if let Some(sz) = attr(attrs, "size") {
+ let s = sz.trim();
+ let val = if let Some(rest) = s.strip_prefix('+') {
+ rest.parse::().ok().map(|d| 3 + d)
+ } else if let Some(rest) = s.strip_prefix('-') {
+ rest.parse::().ok().map(|d| 3 - d)
+ } else {
+ s.parse::().ok()
+ };
+ if let Some(sz) = val {
+ fmt.size = Some([7.5, 10.0, 12.0, 13.5, 18.0, 24.0, 36.0].get((sz.clamp(1, 7) - 1) as usize).copied().unwrap_or(12.0));
+ }
}
}
"a" => {
@@ -1941,4 +1951,21 @@ mod tests {
assert!(!paras2[0].page_break);
assert!(paras2[1].page_break);
}
+
+ #[test]
+ fn font_size_relative_and_absolute() {
+ let f = parse("largersmallerhuge");
+ let inls = match &f.blocks[0] {
+ FBlock::Para(p) => &p.inlines,
+ _ => panic!("expected para"),
+ };
+ let sizes: Vec