From 2df62a9f985c88229ede3641ac2b36f83fa95831 Mon Sep 17 00:00:00 2001 From: bokuweb Date: Wed, 13 Nov 2019 14:08:00 +0900 Subject: [PATCH] feat: Add table grid --- docx-core/src/documents/elements/table.rs | 38 +++++++++++++++++++++-- docx-core/tests/lib.rs | 20 ++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/docx-core/src/documents/elements/table.rs b/docx-core/src/documents/elements/table.rs index dcc4bba..7b36a11 100644 --- a/docx-core/src/documents/elements/table.rs +++ b/docx-core/src/documents/elements/table.rs @@ -1,4 +1,4 @@ -use super::{TableProperty, TableRow}; +use super::{TableGrid, TableProperty, TableRow}; use crate::documents::BuildXML; use crate::xml_builder::*; @@ -6,20 +6,33 @@ use crate::xml_builder::*; pub struct Table { property: TableProperty, rows: Vec, + grid: Vec, } impl Table { pub fn new(rows: Vec) -> Table { let property = TableProperty::new(); - Self { property, rows } + let grid = vec![]; + Self { + property, + rows, + grid, + } + } + + pub fn set_grid(mut self, grid: Vec) -> Table { + self.grid = grid; + self } } impl BuildXML for Table { fn build(&self) -> Vec { + let grid = TableGrid::new(self.grid.clone()); let b = XMLBuilder::new() .open_table() .add_child(&self.property) + .add_child(&grid) .add_children(&self.rows); b.close().build() } @@ -34,7 +47,7 @@ mod tests { use std::str; #[test] - fn test_row() { + fn test_table() { let b = Table::new(vec![TableRow::new(vec![])]).build(); assert_eq!( str::from_utf8(&b).unwrap(), @@ -46,4 +59,23 @@ mod tests { "# ); } + + #[test] + fn test_table_grid() { + let b = Table::new(vec![TableRow::new(vec![])]) + .set_grid(vec![100, 200]) + .build(); + assert_eq!( + str::from_utf8(&b).unwrap(), + r#" + + + + + + + +"# + ); + } } diff --git a/docx-core/tests/lib.rs b/docx-core/tests/lib.rs index 47d067f..074147d 100644 --- a/docx-core/tests/lib.rs +++ b/docx-core/tests/lib.rs @@ -77,3 +77,23 @@ pub fn table() -> Result<(), DocxError> { Docx::new().add_table(table).build().pack(file)?; Ok(()) } + +#[test] +pub fn table_with_grid() -> Result<(), DocxError> { + let path = std::path::Path::new("./tests/output/table_with_grid.docx"); + let file = std::fs::File::create(&path).unwrap(); + + let table = Table::new(vec![ + TableRow::new(vec![ + TableCell::new().add_paragraph(Paragraph::new().add_run(Run::new("Hello"))), + TableCell::new().add_paragraph(Paragraph::new().add_run(Run::new("World"))), + ]), + TableRow::new(vec![ + TableCell::new().add_paragraph(Paragraph::new().add_run(Run::new("Foo"))), + TableCell::new().add_paragraph(Paragraph::new().add_run(Run::new("Bar"))), + ]), + ]) + .set_grid(vec![3000, 3000]); + Docx::new().add_table(table).build().pack(file)?; + Ok(()) +}