docx-rs/docx-core/src/documents/numberings.rs

183 lines
4.7 KiB
Rust

use super::*;
use crate::documents::BuildXML;
use crate::types::*;
use crate::xml_builder::*;
use serde::Serialize;
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Numberings {
abstract_nums: Vec<AbstractNumbering>,
numberings: Vec<Numbering>,
}
impl Numberings {
pub fn new() -> Self {
Default::default()
}
pub fn add_abstract_numbering(mut self, n: AbstractNumbering) -> Self {
self.abstract_nums.push(n);
self
}
pub fn add_numbering(mut self, n: Numbering) -> Self {
self.numberings.push(n);
self
}
}
impl Default for Numberings {
fn default() -> Self {
Self {
abstract_nums: vec![],
numberings: vec![],
}
}
}
impl BuildXML for Numberings {
fn build(&self) -> Vec<u8> {
let mut b = XMLBuilder::new().declaration(Some(true)).open_numbering();
b = b.add_child(&create_default_numbering());
for n in &self.abstract_nums {
b = b.add_child(n);
}
b = b.add_child(&Numbering::new(1, 1));
for n in &self.numberings {
b = b.add_child(n);
}
b.close().build()
}
}
fn create_default_numbering() -> AbstractNumbering {
AbstractNumbering::new(1)
.add_level(
Level::new(
0,
Start::new(1),
NumberFormat::new("decimal"),
LevelText::new("%1."),
LevelJc::new("left"),
)
.indent(Some(420), Some(SpecialIndentType::Hanging(420)), None, None),
)
.add_level(
Level::new(
1,
Start::new(1),
NumberFormat::new("decimal"),
LevelText::new("(%2)"),
LevelJc::new("left"),
)
.indent(Some(840), Some(SpecialIndentType::Hanging(420)), None, None),
)
.add_level(
Level::new(
2,
Start::new(1),
NumberFormat::new("decimalEnclosedCircle"),
LevelText::new("%3"),
LevelJc::new("left"),
)
.indent(
Some(1260),
Some(SpecialIndentType::Hanging(420)),
None,
None,
),
)
.add_level(
Level::new(
3,
Start::new(1),
NumberFormat::new("decimal"),
LevelText::new("%4."),
LevelJc::new("left"),
)
.indent(
Some(1680),
Some(SpecialIndentType::Hanging(420)),
None,
None,
),
)
.add_level(
Level::new(
4,
Start::new(1),
NumberFormat::new("decimal"),
LevelText::new("(%5)"),
LevelJc::new("left"),
)
.indent(
Some(2100),
Some(SpecialIndentType::Hanging(420)),
None,
None,
),
)
.add_level(
Level::new(
5,
Start::new(1),
NumberFormat::new("decimalEnclosedCircle"),
LevelText::new("%6"),
LevelJc::new("left"),
)
.indent(
Some(2520),
Some(SpecialIndentType::Hanging(420)),
None,
None,
),
)
.add_level(
Level::new(
6,
Start::new(1),
NumberFormat::new("decimal"),
LevelText::new("%7."),
LevelJc::new("left"),
)
.indent(
Some(2940),
Some(SpecialIndentType::Hanging(420)),
None,
None,
),
)
.add_level(
Level::new(
7,
Start::new(1),
NumberFormat::new("decimal"),
LevelText::new("(%8)"),
LevelJc::new("left"),
)
.indent(
Some(3360),
Some(SpecialIndentType::Hanging(420)),
None,
None,
),
)
.add_level(
Level::new(
8,
Start::new(1),
NumberFormat::new("decimalEnclosedCircle"),
LevelText::new("%9"),
LevelJc::new("left"),
)
.indent(
Some(3780),
Some(SpecialIndentType::Hanging(420)),
None,
None,
),
)
}