use crate::field::FieldInstruction;
use super::drawing::Image;
use super::identifiers::{BookmarkId, NoteId, RevisionIds, StyleId};
use super::paragraph::Paragraph;
use super::run_properties::RunProperties;
use super::section::SectionProperties;
use super::table::Table;
use super::vml::Pict;
#[derive(Clone, Debug)]
pub enum Block {
Paragraph(Box<Paragraph>),
Table(Box<Table>),
SectionBreak(Box<SectionProperties>),
}
#[derive(Clone, Debug)]
pub enum RunElement {
Text(String),
Tab,
LineBreak(BreakKind),
ColumnBreak,
PageBreak,
LastRenderedPageBreak,
}
#[derive(Clone, Debug)]
pub enum Inline {
TextRun(Box<TextRun>),
Image(Box<Image>),
FootnoteRef(NoteId),
EndnoteRef(NoteId),
Hyperlink(Hyperlink),
Field(Field),
BookmarkStart {
id: BookmarkId,
name: String,
},
BookmarkEnd(BookmarkId),
Symbol(Symbol),
Separator,
ContinuationSeparator,
FieldChar(FieldChar),
InstrText(String),
FootnoteRefMark,
EndnoteRefMark,
Pict(Pict),
AlternateContent(AlternateContent),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct FieldChar {
pub field_char_type: FieldCharType,
pub dirty: Option<bool>,
pub fld_lock: Option<bool>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum FieldCharType {
Begin,
Separate,
End,
}
#[derive(Clone, Debug)]
pub struct TextRun {
pub style_id: Option<StyleId>,
pub properties: RunProperties,
pub content: Vec<RunElement>,
pub rsids: RevisionIds,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum BreakKind {
TextWrapping,
Clear(BreakClear),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum BreakClear {
None,
Left,
Right,
All,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Symbol {
pub font: String,
pub char_code: u16,
}
#[derive(Clone, Debug)]
pub struct Hyperlink {
pub target: HyperlinkTarget,
pub content: Vec<Inline>,
}
#[derive(Clone, Debug)]
pub enum HyperlinkTarget {
External(super::identifiers::RelId),
Internal { anchor: String },
}
#[derive(Clone, Debug)]
pub struct Field {
pub instruction: FieldInstruction,
pub content: Vec<Inline>,
}
#[derive(Clone, Debug)]
pub struct AlternateContent {
pub choices: Vec<McChoice>,
pub fallback: Option<Vec<Inline>>,
}
#[derive(Clone, Debug)]
pub struct McChoice {
pub requires: McRequires,
pub content: Vec<Inline>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum McRequires {
Wps,
Wpg,
Wpc,
Wpi,
Math,
A14,
W14,
W15,
W16,
}