typlite/writer/docx/
styles.rsuse docx_rs::*;
#[derive(Clone, Debug)]
pub struct DocxStyles {
initialized: bool,
}
impl DocxStyles {
pub fn new() -> Self {
Self { initialized: false }
}
fn create_heading_style(name: &str, display_name: &str, size: usize) -> Style {
Style::new(name, StyleType::Paragraph)
.name(display_name)
.size(size)
.bold()
}
pub fn initialize_styles(&self, docx: Docx) -> Docx {
if self.initialized {
return docx;
}
let heading1 = Self::create_heading_style("Heading1", "Heading 1", 32);
let heading2 = Self::create_heading_style("Heading2", "Heading 2", 28);
let heading3 = Self::create_heading_style("Heading3", "Heading 3", 26);
let heading4 = Self::create_heading_style("Heading4", "Heading 4", 24);
let heading5 = Self::create_heading_style("Heading5", "Heading 5", 22);
let heading6 = Self::create_heading_style("Heading6", "Heading 6", 20);
let courier_fonts = RunFonts::new()
.ascii("Courier New")
.hi_ansi("Courier New")
.east_asia("Courier New")
.cs("Courier New");
let code_block = Style::new("CodeBlock", StyleType::Paragraph)
.name("Code Block")
.fonts(courier_fonts.clone())
.size(18);
let code_inline = Style::new("CodeInline", StyleType::Character)
.name("Code Inline")
.fonts(courier_fonts)
.size(18);
let math_block = Style::new("MathBlock", StyleType::Paragraph)
.name("Math Block")
.align(AlignmentType::Center);
let emphasis = Style::new("Emphasis", StyleType::Character)
.name("Emphasis")
.italic();
let strong = Style::new("Strong", StyleType::Character)
.name("Strong")
.bold();
let highlight = Style::new("Highlight", StyleType::Character)
.name("Highlight")
.highlight("yellow");
let hyperlink = Style::new("Hyperlink", StyleType::Character)
.name("Hyperlink")
.color("0000FF")
.underline("single");
let blockquote = Style::new("Blockquote", StyleType::Paragraph)
.name("Block Quote")
.indent(Some(720), None, None, None)
.italic();
let caption = Style::new("Caption", StyleType::Paragraph)
.name("Caption")
.italic()
.size(16)
.align(AlignmentType::Center);
let table = Style::new("Table", StyleType::Table)
.name("Table")
.table_align(TableAlignmentType::Center);
docx.add_style(heading1)
.add_style(heading2)
.add_style(heading3)
.add_style(heading4)
.add_style(heading5)
.add_style(heading6)
.add_style(code_block)
.add_style(code_inline)
.add_style(math_block)
.add_style(emphasis)
.add_style(strong)
.add_style(highlight)
.add_style(hyperlink)
.add_style(blockquote)
.add_style(caption)
.add_style(table)
}
}