diff --git a/docx-core/fixtures/hello/word/settings.xml b/docx-core/fixtures/hello/word/settings.xml
deleted file mode 100644
index a516ac4..0000000
--- a/docx-core/fixtures/hello/word/settings.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docx-core/src/documents/elements/doc_defaults.rs b/docx-core/src/documents/elements/doc_defaults.rs
new file mode 100644
index 0000000..4a0efcd
--- /dev/null
+++ b/docx-core/src/documents/elements/doc_defaults.rs
@@ -0,0 +1,45 @@
+use crate::documents::BuildXML;
+use crate::xml_builder::*;
+
+use super::run_property_default::*;
+
+pub struct DocDefaults {
+ run_property_default: RunPropertyDefault,
+}
+
+impl DocDefaults {
+ pub fn new() -> DocDefaults {
+ let run_property_default = RunPropertyDefault::new();
+ DocDefaults {
+ run_property_default,
+ }
+ }
+}
+
+impl BuildXML for DocDefaults {
+ fn build(&self) -> Vec {
+ let b = XMLBuilder::new();
+ let run_property_default = self.run_property_default.build();
+ b.open_doc_defaults()
+ .add_child_buffer(&run_property_default)
+ .close()
+ .build()
+ }
+}
+
+#[cfg(test)]
+mod tests {
+
+ use super::*;
+ use std::str;
+
+ #[test]
+ fn test_build() {
+ let c = DocDefaults::new();
+ 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
new file mode 100644
index 0000000..33ad843
--- /dev/null
+++ b/docx-core/src/documents/elements/mod.rs
@@ -0,0 +1,5 @@
+mod doc_defaults;
+mod run_property_default;
+
+pub use doc_defaults::*;
+pub use run_property_default::*;
diff --git a/docx-core/src/documents/elements/run_property_default.rs b/docx-core/src/documents/elements/run_property_default.rs
new file mode 100644
index 0000000..7b9fedb
--- /dev/null
+++ b/docx-core/src/documents/elements/run_property_default.rs
@@ -0,0 +1,31 @@
+use crate::documents::BuildXML;
+use crate::xml_builder::*;
+
+pub struct RunPropertyDefault {}
+
+impl RunPropertyDefault {
+ pub fn new() -> RunPropertyDefault {
+ RunPropertyDefault {}
+ }
+}
+
+impl BuildXML for RunPropertyDefault {
+ fn build(&self) -> Vec {
+ let b = XMLBuilder::new();
+ b.open_run_property_default().close().build()
+ }
+}
+
+#[cfg(test)]
+mod tests {
+
+ use super::*;
+ use std::str;
+
+ #[test]
+ fn test_build() {
+ let c = RunPropertyDefault::new();
+ let b = c.build();
+ assert_eq!(str::from_utf8(&b).unwrap(), r#""#);
+ }
+}
diff --git a/docx-core/src/documents/mod.rs b/docx-core/src/documents/mod.rs
index 54c0be9..0903d2c 100644
--- a/docx-core/src/documents/mod.rs
+++ b/docx-core/src/documents/mod.rs
@@ -1,12 +1,15 @@
mod build_xml;
mod content_types;
mod doc_props;
+mod elements;
mod rels;
mod xml_document;
-use build_xml::*;
+pub(crate) use build_xml::*;
+
use content_types::*;
use doc_props::*;
+use elements::*;
use rels::*;
pub(crate) struct Document {
diff --git a/docx-core/src/xml_builder/core_properties.rs b/docx-core/src/xml_builder/core_properties.rs
index 0504d69..92e6fe8 100644
--- a/docx-core/src/xml_builder/core_properties.rs
+++ b/docx-core/src/xml_builder/core_properties.rs
@@ -1,4 +1,5 @@
use super::XMLBuilder;
+use super::XmlEvent;
impl XMLBuilder {
// i.e.
diff --git a/docx-core/src/xml_builder/elements/doc_defaults.rs b/docx-core/src/xml_builder/elements/doc_defaults.rs
new file mode 100644
index 0000000..75bc2df
--- /dev/null
+++ b/docx-core/src/xml_builder/elements/doc_defaults.rs
@@ -0,0 +1,6 @@
+use super::super::XmlEvent;
+use crate::xml_builder::*;
+
+impl XMLBuilder {
+ opened_el!(open_doc_defaults, "w:docDefaults");
+}
diff --git a/docx-core/src/xml_builder/elements/mod.rs b/docx-core/src/xml_builder/elements/mod.rs
new file mode 100644
index 0000000..33ad843
--- /dev/null
+++ b/docx-core/src/xml_builder/elements/mod.rs
@@ -0,0 +1,5 @@
+mod doc_defaults;
+mod run_property_default;
+
+pub use doc_defaults::*;
+pub use run_property_default::*;
diff --git a/docx-core/src/xml_builder/elements/run_property_default.rs b/docx-core/src/xml_builder/elements/run_property_default.rs
new file mode 100644
index 0000000..f6e4fb3
--- /dev/null
+++ b/docx-core/src/xml_builder/elements/run_property_default.rs
@@ -0,0 +1,6 @@
+use super::super::XmlEvent;
+use crate::xml_builder::*;
+
+impl XMLBuilder {
+ opened_el!(open_run_property_default, "w:rPrDefault");
+}
diff --git a/docx-core/src/xml_builder/macros.rs b/docx-core/src/xml_builder/macros.rs
index 6b0c710..f0a0da5 100644
--- a/docx-core/src/xml_builder/macros.rs
+++ b/docx-core/src/xml_builder/macros.rs
@@ -1,8 +1,16 @@
macro_rules! opened_el {
+ ($name: ident, $el_name: expr) => {
+ pub(crate) fn $name(mut self) -> Self {
+ self.writer
+ .write(XmlEvent::start_element($el_name))
+ .expect("should write to buf");
+ self
+ }
+ };
($name: ident, $el_name: expr, $attr0: expr) => {
pub(crate) fn $name(mut self, arg0: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0))
.expect("should write to buf");
self
}
@@ -10,7 +18,7 @@ macro_rules! opened_el {
($name: ident, $el_name: expr, $attr0: expr, $attr1: expr) => {
pub(crate) fn $name(mut self, arg0: &str, arg1: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1))
.expect("should write to buf");
self
}
@@ -18,7 +26,7 @@ macro_rules! opened_el {
($name: ident, $el_name: expr, $attr0: expr, $attr1: expr, $attr2: expr) => {
pub(crate) fn $name(mut self, arg0: &str, arg1: &str, arg2: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2))
.expect("should write to buf");
self
}
@@ -26,7 +34,7 @@ macro_rules! opened_el {
($name: ident, $el_name: expr, $attr0: expr, $attr1: expr, $attr2: expr, $attr3: expr) => {
pub(crate) fn $name(mut self, arg0: &str, arg1: &str, arg2: &str, arg3: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2).attr($attr3, arg3))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2).attr($attr3, arg3))
.expect("should write to buf");
self
}
@@ -34,7 +42,7 @@ macro_rules! opened_el {
($name: ident, $el_name: expr, $attr0: expr, $attr1: expr, $attr2: expr, $attr3: expr, $attr4: expr) => {
pub(crate) fn $name(mut self, arg0: &str, arg1: &str, arg2: &str, arg3: &str, arg4: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2).attr($attr3, arg3).attr($attr4, arg4))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2).attr($attr3, arg3).attr($attr4, arg4))
.expect("should write to buf");
self
}
@@ -45,7 +53,7 @@ macro_rules! closed_el_with_child {
($name: ident, $el_name: expr) => {
pub(crate) fn $name(mut self, child: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name))
+ .write(XmlEvent::start_element($el_name))
.expect("should write to buf");
self.writer
.write(child)
@@ -56,7 +64,7 @@ macro_rules! closed_el_with_child {
($name: ident, $el_name: expr, $attr0: expr) => {
pub(crate) fn $name(mut self, arg0: &str, child: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0))
.expect("should write to buf");
self.writer
.write(child)
@@ -67,7 +75,7 @@ macro_rules! closed_el_with_child {
($name: ident, $el_name: expr, $attr0: expr, $attr1: expr) => {
pub(crate) fn $name(mut self, arg0: &str, arg1: &str, child: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1))
.expect("should write to buf");
self.writer
.write(child)
@@ -78,7 +86,7 @@ macro_rules! closed_el_with_child {
($name: ident, $el_name: expr, $attr0: expr, $attr1: expr, $attr2: expr) => {
pub(crate) fn $name(mut self, arg0: &str, arg1: &str, arg2: &str, child: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2))
.expect("should write to buf");
self.writer
.write(child)
@@ -92,7 +100,7 @@ macro_rules! closed_el {
($name: ident, $el_name: expr, $attr0: expr) => {
pub(crate) fn $name(mut self, arg0: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0))
.expect("should write to buf");
self.close()
}
@@ -100,7 +108,7 @@ macro_rules! closed_el {
($name: ident, $el_name: expr, $attr0: expr, $attr1: expr) => {
pub(crate) fn $name(mut self, arg0: &str, arg1: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1))
.expect("should write to buf");
self.close()
}
@@ -108,7 +116,7 @@ macro_rules! closed_el {
($name: ident, $el_name: expr, $attr0: expr, $attr1: expr, $attr2: expr) => {
pub(crate) fn $name(mut self, arg0: &str, arg1: &str, arg2: &str) -> Self {
self.writer
- .write(super::XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2))
+ .write(XmlEvent::start_element($el_name).attr($attr0, arg0).attr($attr1, arg1).attr($attr2, arg2))
.expect("should write to buf");
self.close()
}
diff --git a/docx-core/src/xml_builder/mod.rs b/docx-core/src/xml_builder/mod.rs
index f38a826..5453463 100644
--- a/docx-core/src/xml_builder/mod.rs
+++ b/docx-core/src/xml_builder/mod.rs
@@ -2,12 +2,17 @@
mod macros;
mod core_properties;
mod declaration;
+mod elements;
mod properties;
mod relationship;
+use std::io::BufReader;
+use std::str;
use xml::common::XmlVersion;
use xml::writer::{EmitterConfig, EventWriter, XmlEvent};
+use xml::reader::EventReader;
+
pub struct XMLBuilder {
writer: EventWriter>,
}
@@ -15,10 +20,11 @@ pub struct XMLBuilder {
impl XMLBuilder {
pub(crate) fn new() -> XMLBuilder {
let buf = Vec::new();
- let writer = EmitterConfig::new()
+ let mut config = EmitterConfig::new()
.write_document_declaration(false)
- .perform_indent(true)
- .create_writer(buf);
+ .perform_indent(true);
+ config.perform_escaping = false;
+ let writer = config.create_writer(buf);
XMLBuilder { writer }
}
@@ -44,6 +50,12 @@ impl XMLBuilder {
self.close()
}
+ pub(crate) fn add_child_buffer(mut self, buf: &[u8]) -> Self {
+ let text = str::from_utf8(buf).unwrap();
+ self.writer.write(text).expect("should write to buf");
+ self
+ }
+
// Close tag
pub(crate) fn close(mut self) -> Self {
self.writer
@@ -67,7 +79,6 @@ impl XMLBuilder {
mod tests {
use super::*;
- use std::str;
#[test]
fn test_open_types() {
diff --git a/docx-core/src/xml_builder/properties.rs b/docx-core/src/xml_builder/properties.rs
index 49f6fac..35f8bb5 100644
--- a/docx-core/src/xml_builder/properties.rs
+++ b/docx-core/src/xml_builder/properties.rs
@@ -1,4 +1,5 @@
use super::XMLBuilder;
+use super::XmlEvent;
impl XMLBuilder {
// Build Properties element
@@ -45,7 +46,7 @@ mod tests {
#[test]
fn test_application() {
let b = XMLBuilder::new();
- let r = b.template("Lawgue").build();
+ let r = b.application("Lawgue").build();
assert_eq!(
str::from_utf8(&r).unwrap(),
r#"Lawgue"#
diff --git a/docx-core/src/xml_builder/relationship.rs b/docx-core/src/xml_builder/relationship.rs
index eb9f509..9b08b2c 100644
--- a/docx-core/src/xml_builder/relationship.rs
+++ b/docx-core/src/xml_builder/relationship.rs
@@ -1,4 +1,5 @@
use super::XMLBuilder;
+use super::XmlEvent;
impl XMLBuilder {
// Build RelationShips element