#![allow(dead_code, clippy::large_enum_variant)]
use serde::Deserialize;
use crate::docx::dimension::{Dimension, Twips};
use crate::docx::parse::primitives::st_enums::{StBrClear, StFldCharType};
use crate::docx::parse::properties::schema::paragraph::PPrXml;
use crate::docx::parse::properties::schema::run::RPrXml;
use crate::docx::parse::properties::schema::section::SectPrXml;
use crate::docx::parse::properties::schema::table::{TblPrXml, TcPrXml, TrPrXml};
#[derive(Deserialize, Default)]
pub(crate) struct BlockContainerXml {
#[serde(rename = "$value", default)]
pub children: Vec<BlockChildXml>,
}
#[derive(Deserialize)]
pub(crate) enum BlockChildXml {
#[serde(rename = "p")]
Paragraph(Box<ParaXml>),
#[serde(rename = "tbl")]
Table(Box<TableXml>),
#[serde(rename = "sectPr")]
SectPr(Box<SectPrXml>),
#[serde(rename = "bookmarkStart")]
BookmarkStart(BookmarkStartXml),
#[serde(rename = "bookmarkEnd")]
BookmarkEnd(BookmarkEndXml),
#[serde(rename = "commentRangeStart")]
CommentRangeStart(BookmarkEndXml),
#[serde(rename = "commentRangeEnd")]
CommentRangeEnd(BookmarkEndXml),
#[serde(rename = "proofErr")]
ProofErr(IgnoredXml),
#[serde(rename = "sdt")]
Sdt(Box<SdtBlockXml>),
#[serde(other)]
Other,
}
#[derive(Deserialize, Default)]
pub(crate) struct IgnoredXml {}
#[derive(Deserialize, Default)]
pub(crate) struct SdtBlockXml {
#[serde(rename = "sdtContent", default)]
pub content: Option<SdtBlockContentXml>,
}
#[derive(Deserialize, Default)]
pub(crate) struct SdtBlockContentXml {
#[serde(rename = "$value", default)]
pub children: Vec<BlockChildXml>,
}
#[derive(Deserialize, Default)]
pub(crate) struct ParaXml {
#[serde(rename = "@rsidR", default)]
pub rsid_r: Option<String>,
#[serde(rename = "@rsidRDefault", default)]
pub rsid_r_default: Option<String>,
#[serde(rename = "@rsidP", default)]
pub rsid_p: Option<String>,
#[serde(rename = "@rsidRPr", default)]
pub rsid_r_pr: Option<String>,
#[serde(rename = "@rsidDel", default)]
pub rsid_del: Option<String>,
#[serde(rename = "pPr", default)]
pub p_pr: Option<PPrXml>,
#[serde(rename = "$value", default)]
pub content: Vec<ParaChildXml>,
}
#[derive(Deserialize)]
pub(crate) enum ParaChildXml {
#[serde(rename = "r")]
Run(RunXml),
#[serde(rename = "hyperlink")]
Hyperlink(HyperlinkXml),
#[serde(rename = "fldSimple")]
FldSimple(FldSimpleXml),
#[serde(rename = "bookmarkStart")]
BookmarkStart(BookmarkStartXml),
#[serde(rename = "bookmarkEnd")]
BookmarkEnd(BookmarkEndXml),
#[serde(rename = "pPr")]
PPr(Box<PPrXml>),
#[serde(other)]
Other,
}
#[derive(Deserialize, Default)]
pub(crate) struct RunXml {
#[serde(rename = "@rsidR", default)]
pub rsid_r: Option<String>,
#[serde(rename = "@rsidRPr", default)]
pub rsid_r_pr: Option<String>,
#[serde(rename = "@rsidDel", default)]
pub rsid_del: Option<String>,
#[serde(rename = "rPr", default)]
pub r_pr: Option<RPrXml>,
#[serde(rename = "$value", default)]
pub content: Vec<RunChildXml>,
}
#[derive(Deserialize)]
pub(crate) enum RunChildXml {
#[serde(rename = "t")]
Text(TextXml),
#[serde(rename = "delText")]
DelText(TextXml),
#[serde(rename = "tab")]
Tab,
#[serde(rename = "br")]
Br(BrXml),
#[serde(rename = "cr")]
Cr,
#[serde(rename = "lastRenderedPageBreak")]
LastRenderedPageBreak,
#[serde(rename = "drawing")]
Drawing(DrawingXml),
#[serde(rename = "pict")]
Pict(crate::docx::parse::vml::schema::PictXml),
#[serde(rename = "sym")]
Sym(SymXml),
#[serde(rename = "instrText")]
InstrText(TextXml),
#[serde(rename = "fldChar")]
FldChar(FldCharXml),
#[serde(rename = "footnoteReference")]
FootnoteRef(NoteRefXml),
#[serde(rename = "endnoteReference")]
EndnoteRef(NoteRefXml),
#[serde(rename = "footnoteRef")]
FootnoteRefMark,
#[serde(rename = "endnoteRef")]
EndnoteRefMark,
#[serde(rename = "separator")]
Separator,
#[serde(rename = "continuationSeparator")]
ContinuationSeparator,
#[serde(rename = "AlternateContent")]
AlternateContent(AltContentXml),
#[serde(rename = "rPr")]
RPr(Box<RPrXml>),
}
#[derive(Deserialize, Default)]
pub(crate) struct TextXml {
#[serde(rename = "@xml:space", default)]
pub space: Option<String>,
#[serde(rename = "$text", default)]
pub content: String,
}
#[derive(Deserialize, Default)]
pub(crate) struct BrXml {
#[serde(rename = "@type", default)]
pub ty: Option<StBrType>,
#[serde(rename = "@clear", default)]
pub clear: Option<StBrClear>,
}
#[derive(Deserialize, Clone, Copy, Debug)]
#[serde(rename_all = "camelCase")]
pub(crate) enum StBrType {
Page,
Column,
TextWrapping,
}
#[derive(Deserialize, Default)]
pub(crate) struct SymXml {
#[serde(rename = "@font", default)]
pub font: String,
#[serde(rename = "@char", default)]
pub char: String,
}
#[derive(Deserialize)]
pub(crate) struct FldCharXml {
#[serde(rename = "@fldCharType")]
pub fld_char_type: StFldCharType,
#[serde(rename = "@dirty", default)]
pub dirty: Option<AttrBool>,
#[serde(rename = "@fldLock", default)]
pub fld_lock: Option<AttrBool>,
}
#[derive(Deserialize)]
pub(crate) struct NoteRefXml {
#[serde(rename = "@id")]
pub id: i64,
}
#[derive(Deserialize)]
pub(crate) struct BookmarkStartXml {
#[serde(rename = "@id")]
pub id: i64,
#[serde(rename = "@name", default)]
pub name: String,
}
#[derive(Deserialize)]
pub(crate) struct BookmarkEndXml {
#[serde(rename = "@id")]
pub id: i64,
}
#[derive(Deserialize)]
pub(crate) struct DrawingXml {
#[serde(rename = "inline", default)]
pub inline: Option<crate::docx::parse::drawing::schema::anchor::InlineXml>,
#[serde(rename = "anchor", default)]
pub anchor: Option<crate::docx::parse::drawing::schema::anchor::AnchorXml>,
}
#[derive(Deserialize)]
pub(crate) struct HyperlinkXml {
#[serde(rename = "@id", default)]
pub r_id: Option<String>,
#[serde(rename = "@anchor", default)]
pub anchor: Option<String>,
#[serde(rename = "$value", default)]
pub content: Vec<ParaChildXml>,
}
#[derive(Deserialize)]
pub(crate) struct FldSimpleXml {
#[serde(rename = "@instr", default)]
pub instr: String,
#[serde(rename = "$value", default)]
pub content: Vec<ParaChildXml>,
}
#[derive(Deserialize, Default)]
pub(crate) struct AltContentXml {
#[serde(rename = "Choice", default)]
pub choices: Vec<ChoiceXml>,
#[serde(rename = "Fallback", default)]
pub fallback: Option<FallbackXml>,
}
#[derive(Deserialize)]
pub(crate) struct ChoiceXml {
#[serde(rename = "@Requires", default)]
pub requires: String,
#[serde(rename = "$value", default)]
pub content: Vec<McContentXml>,
}
#[derive(Deserialize, Default)]
pub(crate) struct FallbackXml {
#[serde(rename = "$value", default)]
pub content: Vec<McContentXml>,
}
#[derive(Deserialize)]
pub(crate) enum McContentXml {
#[serde(rename = "drawing")]
Drawing(DrawingXml),
#[serde(rename = "pict")]
Pict(crate::docx::parse::vml::schema::PictXml),
}
#[derive(Deserialize, Default)]
pub(crate) struct TableXml {
#[serde(rename = "tblPr", default)]
pub tbl_pr: Option<TblPrXml>,
#[serde(rename = "tblGrid", default)]
pub tbl_grid: Option<TblGridXml>,
#[serde(rename = "tr", default)]
pub rows: Vec<TableRowXml>,
}
#[derive(Deserialize, Default)]
pub(crate) struct TblGridXml {
#[serde(rename = "gridCol", default)]
pub cols: Vec<GridColXml>,
}
#[derive(Deserialize)]
pub(crate) struct GridColXml {
#[serde(rename = "@w", default)]
pub w: Option<Dimension<Twips>>,
}
#[derive(Deserialize, Default)]
pub(crate) struct TableRowXml {
#[serde(rename = "@rsidR", default)]
pub rsid_r: Option<String>,
#[serde(rename = "@rsidRPr", default)]
pub rsid_r_pr: Option<String>,
#[serde(rename = "@rsidDel", default)]
pub rsid_del: Option<String>,
#[serde(rename = "@rsidTr", default)]
pub rsid_tr: Option<String>,
#[serde(rename = "trPr", default)]
pub tr_pr: Option<TrPrXml>,
#[serde(rename = "tc", default)]
pub cells: Vec<TableCellXml>,
}
#[derive(Deserialize, Default)]
pub(crate) struct TableCellXml {
#[serde(rename = "tcPr", default)]
pub tc_pr: Option<TcPrXml>,
#[serde(rename = "$value", default)]
pub content: Vec<BlockChildXml>,
}
pub(crate) use crate::docx::parse::primitives::AttrBool;