From b28c482c757ae203986d1fc1ebc4690dfd027cdb Mon Sep 17 00:00:00 2001 From: bokuweb Date: Mon, 11 Nov 2019 16:48:28 +0900 Subject: [PATCH] feat: Support indent --- docx-core/examples/indent.rs | 24 + docx-core/src/documents/elements/indent.rs | 59 +++ docx-core/src/documents/elements/mod.rs | 2 + docx-core/src/documents/elements/paragraph.rs | 5 + .../documents/elements/paragraph_property.rs | 39 +- docx-core/src/types/mod.rs | 2 + docx-core/src/types/special_indent_type.rs | 7 + docx-core/src/xml_builder/elements.rs | 30 +- .../indent_word_online/[Content_Types].xml | 1 + fixtures/indent_word_online/_rels/.rels | 1 + fixtures/indent_word_online/docProps/app.xml | 1 + fixtures/indent_word_online/docProps/core.xml | 1 + fixtures/indent_word_online/indent.docx | Bin 0 -> 11704 bytes .../word/_rels/document.xml.rels | 3 + .../word/_rels/document2.xml.rels | 1 + fixtures/indent_word_online/word/document.xml | 106 +++++ .../indent_word_online/word/fontTable.xml | 45 ++ fixtures/indent_word_online/word/settings.xml | 1 + fixtures/indent_word_online/word/styles.xml | 428 ++++++++++++++++++ .../indent_word_online/word/theme/theme1.xml | 259 +++++++++++ .../indent_word_online/word/webSettings.xml | 9 + 21 files changed, 1013 insertions(+), 11 deletions(-) create mode 100644 docx-core/examples/indent.rs create mode 100644 docx-core/src/documents/elements/indent.rs create mode 100644 docx-core/src/types/special_indent_type.rs create mode 100644 fixtures/indent_word_online/[Content_Types].xml create mode 100644 fixtures/indent_word_online/_rels/.rels create mode 100644 fixtures/indent_word_online/docProps/app.xml create mode 100644 fixtures/indent_word_online/docProps/core.xml create mode 100644 fixtures/indent_word_online/indent.docx create mode 100644 fixtures/indent_word_online/word/_rels/document.xml.rels create mode 100644 fixtures/indent_word_online/word/_rels/document2.xml.rels create mode 100644 fixtures/indent_word_online/word/document.xml create mode 100644 fixtures/indent_word_online/word/fontTable.xml create mode 100644 fixtures/indent_word_online/word/settings.xml create mode 100644 fixtures/indent_word_online/word/styles.xml create mode 100644 fixtures/indent_word_online/word/theme/theme1.xml create mode 100644 fixtures/indent_word_online/word/webSettings.xml diff --git a/docx-core/examples/indent.rs b/docx-core/examples/indent.rs new file mode 100644 index 0000000..e0e4aa0 --- /dev/null +++ b/docx-core/examples/indent.rs @@ -0,0 +1,24 @@ +use docx_core::*; + +pub const DUMMY: &str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; + +pub fn main() { + let path = std::path::Path::new("./output/indent.docx"); + let file = std::fs::File::create(&path).unwrap(); + Docx::new() + .add_paragraph(Paragraph::new().add_run(Run::new(DUMMY)).indent(840, None)) + .add_paragraph(Paragraph::new()) + .add_paragraph( + Paragraph::new() + .add_run(Run::new(DUMMY)) + .indent(840, Some(SpecialIndentType::FirstLine(720))), + ) + .add_paragraph(Paragraph::new()) + .add_paragraph( + Paragraph::new() + .add_run(Run::new(DUMMY)) + .indent(1560, Some(SpecialIndentType::Hanging(720))), + ) + .build() + .pack(file); +} diff --git a/docx-core/src/documents/elements/indent.rs b/docx-core/src/documents/elements/indent.rs new file mode 100644 index 0000000..d1c34ea --- /dev/null +++ b/docx-core/src/documents/elements/indent.rs @@ -0,0 +1,59 @@ +use crate::documents::BuildXML; +use crate::types::*; +use crate::xml_builder::*; + +#[derive(Debug)] +pub struct Indent { + left: usize, + special_indent: Option, +} + +impl Indent { + pub fn new(left: usize, special_indent: Option) -> Indent { + Indent { + left, + special_indent, + } + } +} + +impl BuildXML for Indent { + fn build(&self) -> Vec { + XMLBuilder::new() + .indent(self.left, self.special_indent) + .build() + } +} + +#[cfg(test)] +mod tests { + + use super::*; + #[cfg(test)] + use pretty_assertions::assert_eq; + use std::str; + + #[test] + fn test_left() { + let b = Indent::new(20, None).build(); + assert_eq!(str::from_utf8(&b).unwrap(), r#""#); + } + + #[test] + fn test_first_line() { + let b = Indent::new(20, Some(SpecialIndentType::FirstLine(40))).build(); + assert_eq!( + str::from_utf8(&b).unwrap(), + r#""# + ); + } + + #[test] + fn test_hanging() { + let b = Indent::new(20, Some(SpecialIndentType::Hanging(50))).build(); + assert_eq!( + str::from_utf8(&b).unwrap(), + r#""# + ); + } +} diff --git a/docx-core/src/documents/elements/mod.rs b/docx-core/src/documents/elements/mod.rs index 70fab11..dd2fcd4 100644 --- a/docx-core/src/documents/elements/mod.rs +++ b/docx-core/src/documents/elements/mod.rs @@ -1,6 +1,7 @@ mod based_on; mod color; mod doc_defaults; +mod indent; mod justification; mod name; mod next; @@ -19,6 +20,7 @@ mod text; pub use based_on::*; pub use color::*; pub use doc_defaults::*; +pub use indent::*; pub use justification::*; pub use name::*; pub use next::*; diff --git a/docx-core/src/documents/elements/paragraph.rs b/docx-core/src/documents/elements/paragraph.rs index 771cba1..8e43fc6 100644 --- a/docx-core/src/documents/elements/paragraph.rs +++ b/docx-core/src/documents/elements/paragraph.rs @@ -42,6 +42,11 @@ impl Paragraph { self.property = self.property.style(style_id); self } + + pub fn indent(mut self, left: usize, special_indent: Option) -> Paragraph { + self.property = self.property.indent(left, special_indent); + self + } } impl BuildXML for Paragraph { diff --git a/docx-core/src/documents/elements/paragraph_property.rs b/docx-core/src/documents/elements/paragraph_property.rs index e7210b1..60d4a84 100644 --- a/docx-core/src/documents/elements/paragraph_property.rs +++ b/docx-core/src/documents/elements/paragraph_property.rs @@ -1,22 +1,24 @@ -use super::{Justification, ParagraphStyle, RunProperty, Sz, SzCs}; +use super::{Indent, Justification, ParagraphStyle, RunProperty}; use crate::documents::BuildXML; -use crate::types::AlignmentType; +use crate::types::{AlignmentType, SpecialIndentType}; use crate::xml_builder::*; #[derive(Debug)] pub struct ParagraphProperty { - alignment: Option, run_property: RunProperty, style: ParagraphStyle, + alignment: Option, + indent: Option, } impl Default for ParagraphProperty { fn default() -> Self { let s: Option<&str> = None; ParagraphProperty { - alignment: None, run_property: RunProperty::new(), style: ParagraphStyle::new(s), + alignment: None, + indent: None, } } } @@ -40,13 +42,25 @@ impl ParagraphProperty { self.style = ParagraphStyle::new(Some(style_id)); self } + + pub fn indent( + mut self, + left: usize, + special_indent: Option, + ) -> ParagraphProperty { + self.indent = Some(Indent::new(left, special_indent)); + self + } } impl BuildXML for ParagraphProperty { fn build(&self) -> Vec { XMLBuilder::new() .open_paragraph_property() + .add_child(&self.style) + .add_child(&self.run_property) .add_optional_child(&self.alignment) + .add_optional_child(&self.indent) .close() .build() } @@ -64,7 +78,10 @@ mod tests { fn test_default() { let c = ParagraphProperty::new(); let b = c.build(); - assert_eq!(str::from_utf8(&b).unwrap(), r#""#); + assert_eq!( + str::from_utf8(&b).unwrap(), + r#""# + ); } #[test] @@ -73,7 +90,17 @@ mod tests { let b = c.align(AlignmentType::Right).build(); assert_eq!( str::from_utf8(&b).unwrap(), - r#""# + r#""# + ); + } + + #[test] + fn test_indent() { + let c = ParagraphProperty::new(); + let b = c.indent(20, None).build(); + assert_eq!( + str::from_utf8(&b).unwrap(), + r#""# ); } } diff --git a/docx-core/src/types/mod.rs b/docx-core/src/types/mod.rs index f87533e..243f6c6 100644 --- a/docx-core/src/types/mod.rs +++ b/docx-core/src/types/mod.rs @@ -1,5 +1,7 @@ pub mod alignment_type; +pub mod special_indent_type; pub mod style_type; pub use alignment_type::*; +pub use special_indent_type::*; pub use style_type::*; diff --git a/docx-core/src/types/special_indent_type.rs b/docx-core/src/types/special_indent_type.rs new file mode 100644 index 0000000..60c0675 --- /dev/null +++ b/docx-core/src/types/special_indent_type.rs @@ -0,0 +1,7 @@ +// INFO: wasm-bindgen allow c-style enum for now +// Please convert typescript type to following type. +#[derive(Copy, Clone, Debug)] +pub enum SpecialIndentType { + FirstLine(usize), + Hanging(usize), +} diff --git a/docx-core/src/xml_builder/elements.rs b/docx-core/src/xml_builder/elements.rs index 14e3493..34bb5e9 100644 --- a/docx-core/src/xml_builder/elements.rs +++ b/docx-core/src/xml_builder/elements.rs @@ -2,6 +2,8 @@ use super::XMLBuilder; use super::XmlEvent; use crate::types::*; +const EXPECT_MESSAGE: &str = "should write buf"; + impl XMLBuilder { // i.e. opened_el!(open_body, "w:body"); @@ -16,8 +18,8 @@ impl XMLBuilder { }; self.writer .write(XmlEvent::start_element("w:t").attr("xml:space", space)) - .expect("should write to buf"); - self.writer.write(text).expect("should write to buf"); + .expect(EXPECT_MESSAGE); + self.writer.write(text).expect(EXPECT_MESSAGE); self.close() } // i.e. @@ -49,14 +51,14 @@ impl XMLBuilder { .attr("w:type", &style_type.to_string()) .attr("w:styleId", id), ) - .expect("should write to buf"); + .expect(EXPECT_MESSAGE); self } // i.e. pub(crate) fn next(mut self, val: &str) -> Self { self.writer .write(XmlEvent::start_element("w:next").attr("w:val", val)) - .expect("should write to buf"); + .expect(EXPECT_MESSAGE); self.close() } @@ -64,7 +66,25 @@ impl XMLBuilder { pub(crate) fn color(mut self, val: &str) -> Self { self.writer .write(XmlEvent::start_element("w:color").attr("w:val", val)) - .expect("should write to buf"); + .expect(EXPECT_MESSAGE); + self.close() + } + + // i.e. + pub(crate) fn indent(mut self, left: usize, special_indent: Option) -> Self { + let left = &format!("{}", left); + let base = XmlEvent::start_element("w:ind").attr("w:left", left); + match special_indent { + Some(SpecialIndentType::FirstLine(v)) => self + .writer + .write(base.attr("w:firstLine", &format!("{}", v))) + .expect(EXPECT_MESSAGE), + Some(SpecialIndentType::Hanging(v)) => self + .writer + .write(base.attr("w:hanging", &format!("{}", v))) + .expect(EXPECT_MESSAGE), + _ => self.writer.write(base).expect(EXPECT_MESSAGE), + }; self.close() } } diff --git a/fixtures/indent_word_online/[Content_Types].xml b/fixtures/indent_word_online/[Content_Types].xml new file mode 100644 index 0000000..4d5931e --- /dev/null +++ b/fixtures/indent_word_online/[Content_Types].xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fixtures/indent_word_online/_rels/.rels b/fixtures/indent_word_online/_rels/.rels new file mode 100644 index 0000000..0afe5c3 --- /dev/null +++ b/fixtures/indent_word_online/_rels/.rels @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fixtures/indent_word_online/docProps/app.xml b/fixtures/indent_word_online/docProps/app.xml new file mode 100644 index 0000000..5af8832 --- /dev/null +++ b/fixtures/indent_word_online/docProps/app.xml @@ -0,0 +1 @@ +Microsoft Office Word0falsefalsefalse00.0001Normal.dotmfalse \ No newline at end of file diff --git a/fixtures/indent_word_online/docProps/core.xml b/fixtures/indent_word_online/docProps/core.xml new file mode 100644 index 0000000..a751965 --- /dev/null +++ b/fixtures/indent_word_online/docProps/core.xml @@ -0,0 +1 @@ +2019-11-11T06:45:09.0517060Z2019-11-11T06:48:02.2167547ZSatoshi UekiSatoshi Ueki \ No newline at end of file diff --git a/fixtures/indent_word_online/indent.docx b/fixtures/indent_word_online/indent.docx new file mode 100644 index 0000000000000000000000000000000000000000..0ed341c5b3f68e8342c605344b121b0bd4abe384 GIT binary patch literal 11704 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 dKk)w(jTL2Jo*d*yCMY7H`$?!>r~PsEe*mKUJ + + \ No newline at end of file diff --git a/fixtures/indent_word_online/word/_rels/document2.xml.rels b/fixtures/indent_word_online/word/_rels/document2.xml.rels new file mode 100644 index 0000000..d9d3612 --- /dev/null +++ b/fixtures/indent_word_online/word/_rels/document2.xml.rels @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fixtures/indent_word_online/word/document.xml b/fixtures/indent_word_online/word/document.xml new file mode 100644 index 0000000..8d00c87 --- /dev/null +++ b/fixtures/indent_word_online/word/document.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/indent_word_online/word/fontTable.xml b/fixtures/indent_word_online/word/fontTable.xml new file mode 100644 index 0000000..4d95c7e --- /dev/null +++ b/fixtures/indent_word_online/word/fontTable.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/indent_word_online/word/settings.xml b/fixtures/indent_word_online/word/settings.xml new file mode 100644 index 0000000..dc93b1a --- /dev/null +++ b/fixtures/indent_word_online/word/settings.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fixtures/indent_word_online/word/styles.xml b/fixtures/indent_word_online/word/styles.xml new file mode 100644 index 0000000..c391f5a --- /dev/null +++ b/fixtures/indent_word_online/word/styles.xml @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/indent_word_online/word/theme/theme1.xml b/fixtures/indent_word_online/word/theme/theme1.xml new file mode 100644 index 0000000..31e6197 --- /dev/null +++ b/fixtures/indent_word_online/word/theme/theme1.xml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/indent_word_online/word/webSettings.xml b/fixtures/indent_word_online/word/webSettings.xml new file mode 100644 index 0000000..b5d824d --- /dev/null +++ b/fixtures/indent_word_online/word/webSettings.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file