From 885c7d96eea73f478faea9877f0dbc40c00b0d7b Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 2 Dec 2024 14:19:24 +0100 Subject: A few basic HTML show rules These are very incomplete and ignore various properties. They are just to get things started. --- crates/typst-library/src/model/enum.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'crates/typst-library/src/model/enum.rs') diff --git a/crates/typst-library/src/model/enum.rs b/crates/typst-library/src/model/enum.rs index bac792d3..e0121ba2 100644 --- a/crates/typst-library/src/model/enum.rs +++ b/crates/typst-library/src/model/enum.rs @@ -1,13 +1,15 @@ use std::str::FromStr; +use ecow::eco_format; use smallvec::SmallVec; use crate::diag::{bail, SourceResult}; use crate::engine::Engine; use crate::foundations::{ cast, elem, scope, Array, Content, NativeElement, Packed, Show, Smart, StyleChain, - Styles, + Styles, TargetElem, }; +use crate::html::{attr, tag, HtmlElem}; use crate::layout::{Alignment, BlockElem, Em, HAlignment, Length, VAlignment, VElem}; use crate::model::{ListItemLike, ListLike, Numbering, NumberingPattern, ParElem}; @@ -214,6 +216,19 @@ impl EnumElem { impl Show for Packed { fn show(&self, engine: &mut Engine, styles: StyleChain) -> SourceResult { + if TargetElem::target_in(styles).is_html() { + return Ok(HtmlElem::new(tag::ol) + .with_body(Some(Content::sequence(self.children.iter().map(|item| { + let mut li = HtmlElem::new(tag::li); + if let Some(nr) = item.number(styles) { + li = li.with_attr(attr::value, eco_format!("{nr}")); + } + li.with_body(Some(item.body.clone())).pack().spanned(item.span()) + })))) + .pack() + .spanned(self.span())); + } + let mut realized = BlockElem::multi_layouter(self.clone(), engine.routines.layout_enum) .pack() -- cgit v1.2.3