From 6c1d6e89b228c1b1eb95da7477a8d4558f6212c5 Mon Sep 17 00:00:00 2001 From: bokuweb Date: Mon, 31 Mar 2025 17:35:53 +0900 Subject: [PATCH] fix: disable bool el (#811) --- docx-core/src/documents/elements/bold.rs | 6 ++++- docx-core/src/documents/elements/dstrike.rs | 6 ++++- docx-core/src/documents/elements/italic.rs | 6 ++++- docx-core/src/documents/elements/strike.rs | 6 ++++- docx-core/src/xml_builder/elements.rs | 27 ++++++++++++++++++++- 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/docx-core/src/documents/elements/bold.rs b/docx-core/src/documents/elements/bold.rs index aa52934..edc6be1 100644 --- a/docx-core/src/documents/elements/bold.rs +++ b/docx-core/src/documents/elements/bold.rs @@ -40,6 +40,10 @@ impl BuildXML for Bold { &self, stream: xml::writer::EventWriter, ) -> xml::writer::Result> { - XMLBuilder::from(stream).b()?.into_inner() + if self.val { + XMLBuilder::from(stream).b()?.into_inner() + } else { + XMLBuilder::from(stream).disable_bold()?.into_inner() + } } } diff --git a/docx-core/src/documents/elements/dstrike.rs b/docx-core/src/documents/elements/dstrike.rs index 8dc86c6..a7e866f 100644 --- a/docx-core/src/documents/elements/dstrike.rs +++ b/docx-core/src/documents/elements/dstrike.rs @@ -40,6 +40,10 @@ impl BuildXML for Dstrike { &self, stream: xml::writer::EventWriter, ) -> xml::writer::Result> { - XMLBuilder::from(stream).dstrike()?.into_inner() + if self.val { + XMLBuilder::from(stream).dstrike()?.into_inner() + } else { + XMLBuilder::from(stream).disable_dstrike()?.into_inner() + } } } diff --git a/docx-core/src/documents/elements/italic.rs b/docx-core/src/documents/elements/italic.rs index 3d4de4a..029b0b8 100644 --- a/docx-core/src/documents/elements/italic.rs +++ b/docx-core/src/documents/elements/italic.rs @@ -40,6 +40,10 @@ impl BuildXML for Italic { &self, stream: xml::writer::EventWriter, ) -> xml::writer::Result> { - XMLBuilder::from(stream).i()?.into_inner() + if self.val { + XMLBuilder::from(stream).i()?.into_inner() + } else { + XMLBuilder::from(stream).disable_italic()?.into_inner() + } } } diff --git a/docx-core/src/documents/elements/strike.rs b/docx-core/src/documents/elements/strike.rs index 7814695..b43fc67 100644 --- a/docx-core/src/documents/elements/strike.rs +++ b/docx-core/src/documents/elements/strike.rs @@ -40,6 +40,10 @@ impl BuildXML for Strike { &self, stream: xml::writer::EventWriter, ) -> xml::writer::Result> { - XMLBuilder::from(stream).strike()?.into_inner() + if self.val { + XMLBuilder::from(stream).strike()?.into_inner() + } else { + XMLBuilder::from(stream).disable_strike()?.into_inner() + } } } diff --git a/docx-core/src/xml_builder/elements.rs b/docx-core/src/xml_builder/elements.rs index 439b96f..04ec5cd 100644 --- a/docx-core/src/xml_builder/elements.rs +++ b/docx-core/src/xml_builder/elements.rs @@ -183,14 +183,39 @@ impl XMLBuilder { closed!(b, "w:b"); closed!(b_cs, "w:bCs"); + pub(crate) fn disable_bold(self) -> Result { + let f = "false"; + self.write(XmlEvent::start_element("w:b").attr("w:val", &f))? + .close() + } + closed_with_str!(caps, "w:caps"); closed!(i, "w:i"); closed!(i_cs, "w:iCs"); + pub(crate) fn disable_italic(self) -> Result { + let f = "false"; + self.write(XmlEvent::start_element("w:i").attr("w:val", &f))? + .close() + } + closed!(strike, "w:strike"); + + pub(crate) fn disable_strike(self) -> Result { + let f = "false"; + self.write(XmlEvent::start_element("w:strike").attr("w:val", &f))? + .close() + } + closed!(dstrike, "w:dstrike"); + pub(crate) fn disable_dstrike(self) -> Result { + let f = "false"; + self.write(XmlEvent::start_element("w:dstrike").attr("w:val", &f))? + .close() + } + // Build w:style element // i.e. pub(crate) fn open_style(self, style_type: StyleType, id: &str) -> Result { @@ -471,7 +496,7 @@ impl XMLBuilder { closed!(keep_lines, "w:keepLines"); closed!(page_break_before, "w:pageBreakBefore"); closed!(widow_control, "w:widowControl", "w:val"); - closed!(bidi,"w:bidi"); + closed!(bidi, "w:bidi"); /*