mirror of
https://github.com/typst/typst
synced 2025-07-27 14:27:56 +08:00
feat!: remove unfinished manual tagging code for now
This commit is contained in:
parent
484f633e27
commit
b5c6f7132b
@ -23,9 +23,7 @@ use typst_library::model::{
|
||||
LinkElem, LinkTarget, ListElem, Outlinable, OutlineElem, OutlineEntry, ParElem,
|
||||
ParbreakElem, QuoteElem, RefElem, StrongElem, TableCell, TableElem, TermsElem, Works,
|
||||
};
|
||||
use typst_library::pdf::{
|
||||
ArtifactElem, EmbedElem, PdfMarkerTag, PdfMarkerTagKind, PdfTagElem,
|
||||
};
|
||||
use typst_library::pdf::{ArtifactElem, EmbedElem, PdfMarkerTag, PdfMarkerTagKind};
|
||||
use typst_library::text::{
|
||||
DecoLine, Decoration, HighlightElem, ItalicToggle, LinebreakElem, LocalName,
|
||||
OverlineElem, RawElem, RawLine, ScriptKind, ShiftSettings, Smallcaps, SmallcapsElem,
|
||||
@ -106,7 +104,6 @@ pub fn register(rules: &mut NativeRuleMap) {
|
||||
|
||||
// PDF.
|
||||
rules.register(Paged, EMBED_RULE);
|
||||
rules.register(Paged, PDF_TAG_RULE);
|
||||
rules.register(Paged, PDF_ARTIFACT_RULE);
|
||||
rules.register(Paged, PDF_MARKER_TAG_RULE);
|
||||
}
|
||||
@ -930,8 +927,6 @@ const EQUATION_RULE: ShowFn<EquationElem> = |elem, _, styles| {
|
||||
|
||||
const EMBED_RULE: ShowFn<EmbedElem> = |_, _, _| Ok(Content::empty());
|
||||
|
||||
const PDF_TAG_RULE: ShowFn<PdfTagElem> = |elem, _, _| Ok(elem.body.clone());
|
||||
|
||||
const PDF_ARTIFACT_RULE: ShowFn<ArtifactElem> = |elem, _, _| Ok(elem.body.clone());
|
||||
|
||||
const PDF_MARKER_TAG_RULE: ShowFn<PdfMarkerTag> = |elem, _, _| Ok(elem.body.clone());
|
||||
|
@ -1,177 +1,12 @@
|
||||
use std::num::NonZeroU32;
|
||||
|
||||
use ecow::EcoString;
|
||||
use typst_macros::{cast, elem, func, Cast};
|
||||
use typst_macros::{elem, func, Cast};
|
||||
use typst_utils::NonZeroExt;
|
||||
|
||||
use crate::foundations::{Content, NativeElement, Smart};
|
||||
use crate::introspection::Locatable;
|
||||
use crate::model::TableCell;
|
||||
|
||||
// TODO: docs
|
||||
#[elem(Locatable)]
|
||||
pub struct PdfTagElem {
|
||||
#[default(PdfTagKind::NonStruct)]
|
||||
pub kind: PdfTagKind,
|
||||
|
||||
/// An alternate description.
|
||||
pub alt: Option<EcoString>,
|
||||
/// Exact replacement for this structure element and its children.
|
||||
pub actual_text: Option<EcoString>,
|
||||
/// The expanded form of an abbreviation/acronym.
|
||||
pub expansion: Option<EcoString>,
|
||||
|
||||
/// The content to underline.
|
||||
#[required]
|
||||
pub body: Content,
|
||||
}
|
||||
|
||||
// TODO: docs
|
||||
/// PDF structure elements
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
pub enum PdfTagKind {
|
||||
// grouping elements
|
||||
/// (Part)
|
||||
Part,
|
||||
/// (Article)
|
||||
Art,
|
||||
/// (Section)
|
||||
Sect,
|
||||
/// (Division)
|
||||
Div,
|
||||
/// (Block quotation)
|
||||
BlockQuote,
|
||||
/// (Caption)
|
||||
Caption,
|
||||
/// (Table of contents)
|
||||
TOC,
|
||||
/// (Table of contents item)
|
||||
TOCI,
|
||||
/// (Index)
|
||||
Index,
|
||||
/// (Nonstructural element)
|
||||
NonStruct,
|
||||
/// (Private element)
|
||||
Private,
|
||||
|
||||
// paragraph like elements
|
||||
/// (Heading)
|
||||
H { title: Option<EcoString> },
|
||||
/// (Heading level 1)
|
||||
H1 { title: Option<EcoString> },
|
||||
/// (Heading level 2)
|
||||
H2 { title: Option<EcoString> },
|
||||
/// (Heading level 3)
|
||||
H4 { title: Option<EcoString> },
|
||||
/// (Heading level 4)
|
||||
H3 { title: Option<EcoString> },
|
||||
/// (Heading level 5)
|
||||
H5 { title: Option<EcoString> },
|
||||
/// (Heading level 6)
|
||||
H6 { title: Option<EcoString> },
|
||||
/// (Paragraph)
|
||||
P,
|
||||
|
||||
// list elements
|
||||
/// (List)
|
||||
L { numbering: ListNumbering },
|
||||
/// (List item)
|
||||
LI,
|
||||
/// (Label)
|
||||
Lbl,
|
||||
/// (List body)
|
||||
LBody,
|
||||
|
||||
// table elements
|
||||
/// (Table)
|
||||
Table,
|
||||
/// (Table row)
|
||||
TR,
|
||||
/// (Table header)
|
||||
TH { scope: TableHeaderScope },
|
||||
/// (Table data cell)
|
||||
TD,
|
||||
/// (Table header row group)
|
||||
THead,
|
||||
/// (Table body row group)
|
||||
TBody,
|
||||
/// (Table footer row group)
|
||||
TFoot,
|
||||
|
||||
// inline elements
|
||||
/// (Span)
|
||||
Span,
|
||||
/// (Quotation)
|
||||
Quote,
|
||||
/// (Note)
|
||||
Note,
|
||||
/// (Reference)
|
||||
Reference,
|
||||
/// (Bibliography Entry)
|
||||
BibEntry,
|
||||
/// (Code)
|
||||
Code,
|
||||
/// (Link)
|
||||
Link,
|
||||
/// (Annotation)
|
||||
Annot,
|
||||
|
||||
/// (Ruby)
|
||||
Ruby,
|
||||
/// (Ruby base text)
|
||||
RB,
|
||||
/// (Ruby annotation text)
|
||||
RT,
|
||||
/// (Ruby punctuation)
|
||||
RP,
|
||||
|
||||
/// (Warichu)
|
||||
Warichu,
|
||||
/// (Warichu text)
|
||||
WT,
|
||||
/// (Warichu punctuation)
|
||||
WP,
|
||||
|
||||
/// (Figure)
|
||||
Figure,
|
||||
/// (Formula)
|
||||
Formula,
|
||||
/// (Form)
|
||||
Form,
|
||||
}
|
||||
|
||||
cast! {
|
||||
PdfTagKind,
|
||||
self => match self {
|
||||
PdfTagKind::Part => "part".into_value(),
|
||||
_ => todo!(),
|
||||
},
|
||||
"part" => Self::Part,
|
||||
// TODO
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
pub enum ListNumbering {
|
||||
/// No numbering.
|
||||
None,
|
||||
/// Solid circular bullets.
|
||||
Disc,
|
||||
/// Open circular bullets.
|
||||
Circle,
|
||||
/// Solid square bullets.
|
||||
Square,
|
||||
/// Decimal numbers.
|
||||
Decimal,
|
||||
/// Lowercase Roman numerals.
|
||||
LowerRoman,
|
||||
/// Uppercase Roman numerals.
|
||||
UpperRoman,
|
||||
/// Lowercase letters.
|
||||
LowerAlpha,
|
||||
/// Uppercase letters.
|
||||
UpperAlpha,
|
||||
}
|
||||
|
||||
/// Mark content as a PDF artifact.
|
||||
/// TODO: maybe generalize this and use it to mark html elements with `aria-hidden="true"`?
|
||||
#[elem(Locatable)]
|
||||
|
@ -13,7 +13,6 @@ pub fn module() -> Module {
|
||||
let mut pdf = Scope::deduplicating();
|
||||
pdf.start_category(crate::Category::Pdf);
|
||||
pdf.define_elem::<EmbedElem>();
|
||||
pdf.define_elem::<PdfTagElem>();
|
||||
pdf.define_elem::<ArtifactElem>();
|
||||
pdf.define_func::<header_cell>();
|
||||
pdf.define_func::<data_cell>();
|
||||
|
@ -20,9 +20,7 @@ use typst_library::model::{
|
||||
Destination, EnumElem, FigureCaption, FigureElem, HeadingElem, ListElem, Outlinable,
|
||||
OutlineEntry, TableCell, TableElem,
|
||||
};
|
||||
use typst_library::pdf::{
|
||||
ArtifactElem, ArtifactKind, PdfMarkerTag, PdfMarkerTagKind, PdfTagElem, PdfTagKind,
|
||||
};
|
||||
use typst_library::pdf::{ArtifactElem, ArtifactKind, PdfMarkerTag, PdfMarkerTagKind};
|
||||
use typst_library::visualize::ImageElem;
|
||||
|
||||
use crate::convert::GlobalContext;
|
||||
@ -56,13 +54,7 @@ pub(crate) fn handle_start(
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let tag: Tag = if let Some(pdf_tag) = elem.to_packed::<PdfTagElem>() {
|
||||
let kind = pdf_tag.kind.get_ref(StyleChain::default());
|
||||
match kind {
|
||||
PdfTagKind::Part => TagKind::Part.into(),
|
||||
_ => todo!(),
|
||||
}
|
||||
} else if let Some(tag) = elem.to_packed::<PdfMarkerTag>() {
|
||||
let tag: Tag = if let Some(tag) = elem.to_packed::<PdfMarkerTag>() {
|
||||
match tag.kind {
|
||||
PdfMarkerTagKind::OutlineBody => {
|
||||
push_stack(gc, loc, StackEntryKind::Outline(OutlineCtx::new()))?;
|
||||
|
Loading…
x
Reference in New Issue
Block a user