diff --git a/crates/typst-layout/src/rules.rs b/crates/typst-layout/src/rules.rs index 594f88496..77aa8034f 100644 --- a/crates/typst-layout/src/rules.rs +++ b/crates/typst-layout/src/rules.rs @@ -275,7 +275,7 @@ const HEADING_RULE: ShowFn = |elem, engine, styles| { let spacing = HElem::new(SPACING_TO_NUMBERING.into()).with_weak(true).pack(); - realized = numbering + spacing + realized; + realized = PdfMarkerTag::Label(numbering) + spacing + realized; } let block = if indent != Abs::zero() { @@ -477,7 +477,6 @@ const OUTLINE_ENTRY_RULE: ShowFn = |elem, engine, styles| { let context = Context::new(None, Some(styles)); let context = context.track(); - // TODO(accessibility): prefix should be wrapped in a `Lbl` structure element let prefix = elem.prefix(engine, context, span)?; let body = elem.body().at(span)?; let page = elem.page(engine, context, span)?; diff --git a/crates/typst-library/src/model/outline.rs b/crates/typst-library/src/model/outline.rs index 0f94b1f58..790dac6d2 100644 --- a/crates/typst-library/src/model/outline.rs +++ b/crates/typst-library/src/model/outline.rs @@ -21,6 +21,7 @@ use crate::layout::{ RepeatElem, Sides, }; use crate::model::{HeadingElem, NumberingPattern, ParElem, Refable}; +use crate::pdf::PdfMarkerTag; use crate::text::{LocalName, SpaceElem, TextElem}; /// A table of contents, figures, or other elements. @@ -493,7 +494,7 @@ impl OutlineEntry { let styles = context.styles().at(span)?; let numbers = outlinable.counter().display_at_loc(engine, loc, styles, numbering)?; - Ok(Some(outlinable.prefix(numbers))) + Ok(Some(PdfMarkerTag::Label(outlinable.prefix(numbers)))) } /// Creates the default inner content of the entry. diff --git a/crates/typst-library/src/pdf/accessibility.rs b/crates/typst-library/src/pdf/accessibility.rs index a2cea8ddc..732bac319 100644 --- a/crates/typst-library/src/pdf/accessibility.rs +++ b/crates/typst-library/src/pdf/accessibility.rs @@ -138,4 +138,6 @@ pdf_marker_tag! { ListItemLabel, /// `LBody` of the enum item ListItemBody, + /// A generic `Lbl` + Label, } diff --git a/crates/typst-pdf/src/tags/mod.rs b/crates/typst-pdf/src/tags/mod.rs index a2ad47d7d..d8eeb6faf 100644 --- a/crates/typst-pdf/src/tags/mod.rs +++ b/crates/typst-pdf/src/tags/mod.rs @@ -69,6 +69,7 @@ pub(crate) fn handle_start( push_stack(gc, loc, StackEntryKind::ListItemBody)?; return Ok(()); } + PdfMarkerTagKind::Label => TagKind::Lbl.into(), } } else if let Some(entry) = elem.to_packed::() { push_stack(gc, loc, StackEntryKind::OutlineEntry(entry.clone()))?;