From e44590468e2d8b5e3b1c8b85e9183aa5534a04ae Mon Sep 17 00:00:00 2001 From: bokuweb Date: Wed, 4 Dec 2019 17:25:31 +0900 Subject: [PATCH] feat: Add comment range --- .../documents/elements/comment_range_end.rs | 39 ++++++++++++++ .../documents/elements/comment_range_start.rs | 39 ++++++++++++++ docx-core/src/documents/elements/mod.rs | 4 ++ docx-core/src/xml_builder/elements.rs | 3 ++ fixtures/comment/[Content_Types].xml | 3 ++ fixtures/comment/_rels/.rels | 3 ++ fixtures/comment/comment.docx | Bin 0 -> 5010 bytes fixtures/comment/docProps/app.xml | 2 + fixtures/comment/docProps/core.xml | 2 + fixtures/comment/word/_rels/document.xml.rels | 3 ++ fixtures/comment/word/comments.xml | 46 ++++++++++++++++ fixtures/comment/word/document.xml | 49 ++++++++++++++++++ fixtures/comment/word/fontTable.xml | 2 + fixtures/comment/word/settings.xml | 2 + fixtures/comment/word/styles.xml | 2 + 15 files changed, 199 insertions(+) create mode 100644 docx-core/src/documents/elements/comment_range_end.rs create mode 100644 docx-core/src/documents/elements/comment_range_start.rs create mode 100644 fixtures/comment/[Content_Types].xml create mode 100644 fixtures/comment/_rels/.rels create mode 100644 fixtures/comment/comment.docx create mode 100644 fixtures/comment/docProps/app.xml create mode 100644 fixtures/comment/docProps/core.xml create mode 100644 fixtures/comment/word/_rels/document.xml.rels create mode 100644 fixtures/comment/word/comments.xml create mode 100644 fixtures/comment/word/document.xml create mode 100644 fixtures/comment/word/fontTable.xml create mode 100644 fixtures/comment/word/settings.xml create mode 100644 fixtures/comment/word/styles.xml diff --git a/docx-core/src/documents/elements/comment_range_end.rs b/docx-core/src/documents/elements/comment_range_end.rs new file mode 100644 index 0000000..6b27946 --- /dev/null +++ b/docx-core/src/documents/elements/comment_range_end.rs @@ -0,0 +1,39 @@ +use crate::documents::BuildXML; +use crate::xml_builder::*; + +#[derive(Debug, Clone)] +pub struct CommentRangeEnd<'a> { + id: &'a str, +} + +impl<'a> CommentRangeEnd<'a> { + pub fn new(id: &'a str) -> CommentRangeEnd<'a> { + CommentRangeEnd { id } + } +} + +impl<'a> BuildXML for CommentRangeEnd<'a> { + fn build(&self) -> Vec { + let b = XMLBuilder::new(); + b.comment_range_end(&self.id).build() + } +} + +#[cfg(test)] +mod tests { + + use super::*; + #[cfg(test)] + use pretty_assertions::assert_eq; + use std::str; + + #[test] + fn test_comment_range_end() { + let c = CommentRangeEnd::new("mockid"); + let b = c.build(); + assert_eq!( + str::from_utf8(&b).unwrap(), + r#""# + ); + } +} diff --git a/docx-core/src/documents/elements/comment_range_start.rs b/docx-core/src/documents/elements/comment_range_start.rs new file mode 100644 index 0000000..68f3dcc --- /dev/null +++ b/docx-core/src/documents/elements/comment_range_start.rs @@ -0,0 +1,39 @@ +use crate::documents::BuildXML; +use crate::xml_builder::*; + +#[derive(Debug, Clone)] +pub struct CommentRangeStart<'a> { + id: &'a str, +} + +impl<'a> CommentRangeStart<'a> { + pub fn new(id: &'a str) -> CommentRangeStart<'a> { + CommentRangeStart { id } + } +} + +impl<'a> BuildXML for CommentRangeStart<'a> { + fn build(&self) -> Vec { + let b = XMLBuilder::new(); + b.comment_range_start(&self.id).build() + } +} + +#[cfg(test)] +mod tests { + + use super::*; + #[cfg(test)] + use pretty_assertions::assert_eq; + use std::str; + + #[test] + fn test_comment_range_start() { + let c = CommentRangeStart::new("mockid"); + let b = c.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 b459a55..f1264ba 100644 --- a/docx-core/src/documents/elements/mod.rs +++ b/docx-core/src/documents/elements/mod.rs @@ -5,6 +5,8 @@ mod bookmark_end; mod bookmark_start; mod br; mod color; +mod comment_range_end; +mod comment_range_start; mod default_tab_stop; mod delete; mod delete_text; @@ -55,6 +57,8 @@ pub use bookmark_end::*; pub use bookmark_start::*; pub use br::*; pub use color::*; +pub use comment_range_end::*; +pub use comment_range_start::*; pub use default_tab_stop::*; pub use delete::*; pub use delete_text::*; diff --git a/docx-core/src/xml_builder/elements.rs b/docx-core/src/xml_builder/elements.rs index b43bf27..fd89f1b 100644 --- a/docx-core/src/xml_builder/elements.rs +++ b/docx-core/src/xml_builder/elements.rs @@ -170,6 +170,9 @@ impl XMLBuilder { closed_el!(bookmark_start, "w:bookmarkStart", "w:id", "w:name"); closed_el!(bookmark_end, "w:bookmarkEnd", "w:id"); + + closed_el!(comment_range_start, "w:commentRangeStart", "w:id"); + closed_el!(comment_range_end, "w:commentRangeEnd", "w:id"); } #[cfg(test)] diff --git a/fixtures/comment/[Content_Types].xml b/fixtures/comment/[Content_Types].xml new file mode 100644 index 0000000..1f64908 --- /dev/null +++ b/fixtures/comment/[Content_Types].xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/fixtures/comment/_rels/.rels b/fixtures/comment/_rels/.rels new file mode 100644 index 0000000..f0b72e7 --- /dev/null +++ b/fixtures/comment/_rels/.rels @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/fixtures/comment/comment.docx b/fixtures/comment/comment.docx new file mode 100644 index 0000000000000000000000000000000000000000..2580bcbe455154df0d2ba31f8294e449bd533534 GIT binary patch literal 5010 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 W)_~w)*ulag!hF0irwsV{kN*Xf2}4Ez literal 0 HcmV?d00001 diff --git a/fixtures/comment/docProps/app.xml b/fixtures/comment/docProps/app.xml new file mode 100644 index 0000000..8962e3b --- /dev/null +++ b/fixtures/comment/docProps/app.xml @@ -0,0 +1,2 @@ + +1LibreOffice/6.0.7.3$Linux_X86_64 LibreOffice_project/00m0$Build-31528331 \ No newline at end of file diff --git a/fixtures/comment/docProps/core.xml b/fixtures/comment/docProps/core.xml new file mode 100644 index 0000000..4324eb5 --- /dev/null +++ b/fixtures/comment/docProps/core.xml @@ -0,0 +1,2 @@ + +2019-12-04T16:57:40Zja-JP2019-12-04T16:58:51Z1 \ No newline at end of file diff --git a/fixtures/comment/word/_rels/document.xml.rels b/fixtures/comment/word/_rels/document.xml.rels new file mode 100644 index 0000000..f8607e1 --- /dev/null +++ b/fixtures/comment/word/_rels/document.xml.rels @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/fixtures/comment/word/comments.xml b/fixtures/comment/word/comments.xml new file mode 100644 index 0000000..96e2148 --- /dev/null +++ b/fixtures/comment/word/comments.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hello world!! + + + + \ No newline at end of file diff --git a/fixtures/comment/word/document.xml b/fixtures/comment/word/document.xml new file mode 100644 index 0000000..666ceb0 --- /dev/null +++ b/fixtures/comment/word/document.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + Comment is + + + + + here + + + + + + + + + + + . Comment Example + + + + + + + + + + + + \ No newline at end of file diff --git a/fixtures/comment/word/fontTable.xml b/fixtures/comment/word/fontTable.xml new file mode 100644 index 0000000..94f56db --- /dev/null +++ b/fixtures/comment/word/fontTable.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/fixtures/comment/word/settings.xml b/fixtures/comment/word/settings.xml new file mode 100644 index 0000000..97dba84 --- /dev/null +++ b/fixtures/comment/word/settings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/fixtures/comment/word/styles.xml b/fixtures/comment/word/styles.xml new file mode 100644 index 0000000..72e6f53 --- /dev/null +++ b/fixtures/comment/word/styles.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file