docx_rust/settings/
mod.rs

1//! Settings part
2//!
3//! The corresponding ZIP item is `/word/settings.xml`.
4//!
5
6use hard_xml::{XmlRead, XmlResult, XmlWrite, XmlWriter};
7use std::borrow::Cow;
8use std::io::Write;
9
10use crate::schema::{SCHEMA_MAIN, SCHEMA_RELATIONSHIPS_DOCUMENT, SCHEMA_WORDML_14};
11use crate::{__string_enum, __xml_test_suites, write_attr};
12
13/// The root element of the main document part.
14#[derive(Debug, Default, XmlRead, Clone)]
15#[cfg_attr(test, derive(PartialEq))]
16#[xml(tag = "w:settings")]
17pub struct Settings<'a> {
18    ///  Write Protection
19    #[xml(child = "w:writeProtection")]
20    pub write_protection: Option<WriteProtection>,
21    ///  Document View Setting
22    #[xml(child = "w:view")]
23    pub view: Option<View>,
24    ///  Magnification Setting
25    #[xml(child = "w:zoom")]
26    pub zoom: Option<Zoom>,
27    ///  Remove Personal Information from Document Properties
28    #[xml(child = "w:removePersonalInformation")]
29    pub remove_personal_information: Option<RemovePersonalInformation>,
30    ///  Remove Date and Time from Annotations
31    #[xml(child = "w:removeDateAndTime")]
32    pub remove_date_and_time: Option<RemoveDateAndTime>,
33    ///  Do Not Display Visual Boundary For Header/Footer or Between Pages
34    #[xml(child = "w:doNotDisplayPageBoundaries")]
35    pub do_not_display_page_boundaries: Option<DoNotDisplayPageBoundaries>,
36    ///  Display Background Objects When Displaying Document
37    #[xml(child = "w:displayBackgroundShape")]
38    pub display_background_shape: Option<DisplayBackgroundShape>,
39    ///  Print PostScript Codes With Document Text
40    #[xml(child = "w:printPostScriptOverText")]
41    pub print_post_script_over_text: Option<PrintPostScriptOverText>,
42    ///  Print Fractional Character Widths
43    #[xml(child = "w:printFractionalCharacterWidth")]
44    pub print_fractional_character_width: Option<PrintFractionalCharacterWidth>,
45    ///  Only Print Form Field Content
46    #[xml(child = "w:printFormsData")]
47    pub print_forms_data: Option<PrintFormsData>,
48    ///  Embed TrueType Fonts
49    #[xml(child = "w:embedTrueTypeFonts")]
50    pub embed_true_type_fonts: Option<EmbedTrueTypeFonts>,
51    ///  Embed Common System Fonts
52    #[xml(child = "w:embedSystemFonts")]
53    pub embed_system_fonts: Option<EmbedSystemFonts>,
54    ///  Subset Fonts When Embedding
55    #[xml(child = "w:saveSubsetFonts")]
56    pub save_subset_fonts: Option<SaveSubsetFonts>,
57    ///  Only Save Form Field Content
58    #[xml(child = "w:saveFormsData")]
59    pub save_forms_data: Option<SaveFormsData>,
60    ///  Mirror Page Margins
61    #[xml(child = "w:mirrorMargins")]
62    pub mirror_margins: Option<MirrorMargins>,
63    ///  Align Paragraph and Table Borders with Page Border
64    #[xml(child = "w:alignBordersAndEdges")]
65    pub align_borders_and_edges: Option<AlignBordersAndEdges>,
66    ///  Page Border Excludes Header
67    #[xml(child = "w:bordersDoNotSurroundHeader")]
68    pub borders_do_not_surround_header: Option<BordersDoNotSurroundHeader>,
69    ///  Page Border Excludes Footer
70    #[xml(child = "w:bordersDoNotSurroundFooter")]
71    pub borders_do_not_surround_footer: Option<BordersDoNotSurroundFooter>,
72    ///  Position Gutter At Top of Page
73    #[xml(child = "w:gutterAtTop")]
74    pub gutter_at_top: Option<GutterAtTop>,
75    ///  Do Not Display Visual Indication of Spelling Errors
76    #[xml(child = "w:hideSpellingErrors")]
77    pub hide_spelling_errors: Option<HideSpellingErrors>,
78    ///  Do Not Display Visual Indication of Grammatical Errors
79    #[xml(child = "w:hideGrammaticalErrors")]
80    pub hide_grammatical_errors: Option<HideGrammaticalErrors>,
81    ///  Grammar Checking Settings
82    #[xml(child = "w:activeWritingStyle")]
83    pub active_writing_style: Option<ActiveWritingStyle>,
84    ///  Spelling and Grammatical Checking State
85    #[xml(child = "w:proofState")]
86    pub proof_state: Option<ProofState>,
87    ///  Structured Document Tag Placeholder Text Should be Resaved
88    #[xml(child = "w:formsDesign")]
89    pub forms_design: Option<FormsDesign>,
90    ///  Attached Document Template
91    #[xml(child = "w:attachedTemplate")]
92    pub attached_template: Option<AttachedTemplate<'a>>,
93    ///  Automatically Update Styles From Document Template
94    #[xml(child = "w:linkStyles")]
95    pub link_styles: Option<LinkStyles>,
96    ///  Suggested Filtering for List of Document Styles
97    #[xml(child = "w:stylePaneFormatFilter")]
98    pub style_pane_format_filter: Option<StylePaneFormatFilter>,
99    ///  Suggested Sorting for List of Document Styles
100    #[xml(child = "w:stylePaneSortMethod")]
101    pub style_pane_sort_method: Option<StylePaneSortMethod>,
102    ///  Document Classification
103    #[xml(child = "w:documentType")]
104    pub document_type: Option<DocumentType>,
105    ///  Mail Merge Settings
106    #[xml(child = "w:mailMerge")]
107    pub mail_merge: Option<MailMerge>,
108    ///  Visibility of Annotation Types
109    #[xml(child = "w:revisionView")]
110    pub revision_view: Option<RevisionView>,
111    ///  Track Revisions to Document
112    #[xml(child = "w:trackRevisions")]
113    pub track_revisions: Option<TrackRevisions>,
114    ///  Do Not Use Move Syntax When Tracking Revisions
115    #[xml(child = "w:doNotTrackMoves")]
116    pub do_not_track_moves: Option<DoNotTrackMoves>,
117    ///  Do Not Track Formatting Revisions When Tracking Revisions
118    #[xml(child = "w:doNotTrackFormatting")]
119    pub do_not_track_formatting: Option<DoNotTrackFormatting>,
120    ///  Document Editing Restrictions
121    #[xml(child = "w:documentProtection")]
122    pub document_protection: Option<DocumentProtection>,
123    ///  Allow Automatic Formatting to Override Formatting Protection Settings
124    #[xml(child = "w:autoFormatOverride")]
125    pub auto_format_override: Option<AutoFormatOverride>,
126    ///  Prevent Modification of Themes Part
127    #[xml(child = "w:styleLockTheme")]
128    pub style_lock_theme: Option<StyleLockTheme>,
129    ///  Prevent Replacement of Styles Part
130    #[xml(child = "w:styleLockQFSet")]
131    pub style_lock_qfset: Option<StyleLockQfset>,
132    ///  Distance Between Automatic Tab Stops
133    #[xml(child = "w:defaultTabStop")]
134    pub default_tab_stop: Option<DefaultTabStop>,
135    ///  Automatically Hyphenate Document Contents When Displayed
136    #[xml(child = "w:autoHyphenation")]
137    pub auto_hyphenation: Option<AutoHyphenation>,
138    ///  Maximum Number of Consecutively Hyphenated Lines
139    #[xml(child = "w:consecutiveHyphenLimit")]
140    pub consecutive_hyphen_limit: Option<ConsecutiveHyphenLimit>,
141    ///  Hyphenation Zone
142    #[xml(child = "w:hyphenationZone")]
143    pub hyphenation_zone: Option<HyphenationZone>,
144    ///  Do Not Hyphenate Words in ALL CAPITAL LETTERS
145    #[xml(child = "w:doNotHyphenateCaps")]
146    pub do_not_hyphenate_caps: Option<DoNotHyphenateCaps>,
147    ///  Show E-Mail Message Header
148    #[xml(child = "w:showEnvelope")]
149    pub show_envelope: Option<ShowEnvelope>,
150    ///  Percentage of Document to Use When Generating Summary
151    #[xml(child = "w:summaryLength")]
152    pub summary_length: Option<SummaryLength>,
153    ///  Paragraph Style Applied to Automatically Generated Paragraphs
154    #[xml(child = "w:clickAndTypeStyle")]
155    pub click_and_type_style: Option<ClickAndTypeStyle>,
156    ///  Default Table Style for Newly Inserted Tables
157    #[xml(child = "w:defaultTableStyle")]
158    pub default_table_style: Option<DefaultTableStyle>,
159    ///  Different Even/Odd Page Headers and Footers
160    #[xml(child = "w:evenAndOddHeaders")]
161    pub even_and_odd_headers: Option<EvenAndOddHeaders>,
162    ///  Reverse Book Fold Printing
163    #[xml(child = "w:bookFoldRevPrinting")]
164    pub book_fold_rev_printing: Option<BookFoldRevPrinting>,
165    ///  Book Fold Printing
166    #[xml(child = "w:bookFoldPrinting")]
167    pub book_fold_printing: Option<BookFoldPrinting>,
168    ///  Number of Pages Per Booklet
169    #[xml(child = "w:bookFoldPrintingSheets")]
170    pub book_fold_printing_sheets: Option<BookFoldPrintingSheets>,
171    ///  Drawing Grid Horizontal Grid Unit Size
172    #[xml(child = "w:drawingGridHorizontalSpacing")]
173    pub drawing_grid_horizontal_spacing: Option<DrawingGridHorizontalSpacing>,
174    ///  Drawing Grid Vertical Grid Unit Size
175    #[xml(child = "w:drawingGridVerticalSpacing")]
176    pub drawing_grid_vertical_spacing: Option<DrawingGridVerticalSpacing>,
177    ///  Distance between Horizontal Gridlines
178    #[xml(child = "w:displayHorizontalDrawingGridEvery")]
179    pub display_horizontal_drawing_grid_every: Option<DisplayHorizontalDrawingGridEvery>,
180    ///  Distance between Vertical Gridlines
181    #[xml(child = "w:displayVerticalDrawingGridEvery")]
182    pub display_vertical_drawing_grid_every: Option<DisplayVerticalDrawingGridEvery>,
183    ///  Do Not Use Margins for Drawing Grid Origin
184    #[xml(child = "w:doNotUseMarginsForDrawingGridOrigin")]
185    pub do_not_use_margins_for_drawing_grid_origin: Option<DoNotUseMarginsForDrawingGridOrigin>,
186    ///  Drawing Grid Horizontal Origin Point
187    #[xml(child = "w:drawingGridHorizontalOrigin")]
188    pub drawing_grid_horizontal_origin: Option<DrawingGridHorizontalOrigin>,
189    ///  Drawing Grid Vertical Origin Point
190    #[xml(child = "w:drawingGridVerticalOrigin")]
191    pub drawing_grid_vertical_origin: Option<DrawingGridVerticalOrigin>,
192    ///  Do Not Show Visual Indicator For Form Fields
193    #[xml(child = "w:doNotShadeFormData")]
194    pub do_not_shade_form_data: Option<DoNotShadeFormData>,
195    ///  Never Kern Punctuation Characters
196    #[xml(child = "w:noPunctuationKerning")]
197    pub no_punctuation_kerning: Option<NoPunctuationKerning>,
198    ///  Character-Level Whitespace Compression
199    #[xml(child = "w:characterSpacingControl")]
200    pub character_spacing_control: Option<CharacterSpacingControl>,
201    ///  Print Two Pages Per Sheet
202    #[xml(child = "w:printTwoOnOne")]
203    pub print_two_on_one: Option<PrintTwoOnOne>,
204    ///  Use Strict Kinsoku Rules for Japanese Text
205    #[xml(child = "w:strictFirstAndLastChars")]
206    pub strict_first_and_last_chars: Option<StrictFirstAndLastChars>,
207    ///  Custom Set of Characters Which Cannot End a Line
208    #[xml(child = "w:noLineBreaksAfter")]
209    pub no_line_breaks_after: Option<NoLineBreaksAfter>,
210    ///  Custom Set Of Characters Which Cannot Begin A Line
211    #[xml(child = "w:noLineBreaksBefore")]
212    pub no_line_breaks_before: Option<NoLineBreaksBefore>,
213    ///  Generate Thumbnail For Document On Save
214    #[xml(child = "w:savePreviewPicture")]
215    pub save_preview_picture: Option<SavePreviewPicture>,
216    ///  Do Not Validate Custom XML Markup Against Schemas
217    #[xml(child = "w:doNotValidateAgainstSchema")]
218    pub do_not_validate_against_schema: Option<DoNotValidateAgainstSchema>,
219    ///  Allow Saving Document As XML File When Custom XML Markup Is Invalid
220    #[xml(child = "w:saveInvalidXml")]
221    pub save_invalid_xml: Option<SaveInvalidXml>,
222    ///  Ignore Mixed Content When Validating Custom XML Markup
223    #[xml(child = "w:ignoreMixedContent")]
224    pub ignore_mixed_content: Option<IgnoreMixedContent>,
225    ///  Use Custom XML Element Names as Default Placeholder Text
226    #[xml(child = "w:alwaysShowPlaceholderText")]
227    pub always_show_placeholder_text: Option<AlwaysShowPlaceholderText>,
228    ///  Do Not Show Visual Indicator For Invalid Custom XML Markup
229    #[xml(child = "w:doNotDemarcateInvalidXml")]
230    pub do_not_demarcate_invalid_xml: Option<DoNotDemarcateInvalidXml>,
231    ///  Only Save Custom XML Markup
232    #[xml(child = "w:saveXmlDataOnly")]
233    pub save_xml_data_only: Option<SaveXmlDataOnly>,
234    ///  Save Document as XML File through Custom XSL Transform
235    #[xml(child = "w:useXSLTWhenSaving")]
236    pub use_xsltwhen_saving: Option<UseXsltwhenSaving>,
237    ///  Custom XSL Transform To Use When Saving As XML File
238    #[xml(child = "w:saveThroughXslt")]
239    pub save_through_xslt: Option<SaveThroughXslt>,
240    ///  Show Visual Indicators for Custom XML Markup Start/End Locations
241    #[xml(child = "w:showXMLTags")]
242    pub show_xmltags: Option<ShowXmltags>,
243    ///  Do Not Mark Custom XML Elements With No Namespace As Invalid
244    #[xml(child = "w:alwaysMergeEmptyNamespace")]
245    pub always_merge_empty_namespace: Option<AlwaysMergeEmptyNamespace>,
246    ///  Automatically Recalculate Fields on Open
247    #[xml(child = "w:updateFields")]
248    pub update_fields: Option<UpdateFields>,
249    ///  Default Properties for VML Objects in Header and Footer
250    #[xml(child = "w:hdrShapeDefaults")]
251    pub hdr_shape_defaults: Option<HdrShapeDefaults>,
252    ///  Document-Wide Footnote Properties
253    #[xml(child = "w:footnotePr")]
254    pub footnote_pr: Option<crate::formatting::FootnoteProperty2>,
255    ///  Document-Wide Endnote Properties
256    #[xml(child = "w:endnotePr")]
257    pub endnote_pr: Option<crate::formatting::EndnoteProperty2>,
258    ///  Compatibility Settings
259    #[xml(child = "w:compat")]
260    pub compat: Option<Compat>,
261    ///  Document Variables
262    #[xml(child = "w:docVars")]
263    pub doc_vars: Option<DocVars<'a>>,
264    ///  Listing of All Revision Save ID Values
265    #[xml(child = "w:rsids")]
266    pub rsids: Option<Rsids<'a>>,
267    ///// properties of math in the document
268    //#[xml(child = "m:mathPr")]
269    //pub mathPr: Option<mathPr>,
270    ///  Disable Features Incompatible With Earlier Word Processing Formats
271    #[xml(child = "w:uiCompat97To2003")]
272    pub ui_compat97_to2003: Option<UiCompat97to2003>,
273    // /// Attached Custom XML Schema
274    // #[xml(child = "w:attachedSchema")]
275    // pub attachedSchema: Vec<attachedSchema>,
276    ///  Theme Font Languages
277    #[xml(child = "w:themeFontLang")]
278    pub theme_font_lang: Option<ThemeFontLang<'a>>,
279    ///  Theme Color Mappings
280    #[xml(child = "w:clrSchemeMapping")]
281    pub clr_scheme_mapping: Option<ClrSchemeMapping>,
282    ///  Do Not Include Content in Text Boxes, Footnotes, and Endnotes in Document Statistics
283    #[xml(child = "w:doNotIncludeSubdocsInStats")]
284    pub do_not_include_subdocs_in_stats: Option<DoNotIncludeSubdocsInStats>,
285    ///  Do Not Automatically Compress Images
286    #[xml(child = "w:doNotAutoCompressPictures")]
287    pub do_not_auto_compress_pictures: Option<DoNotAutoCompressPictures>,
288    ///  Upgrade Document on Open
289    #[xml(child = "w:forceUpgrade")]
290    pub force_upgrade: Option<ForceUpgrade>,
291    ///  Caption Settings
292    #[xml(child = "w:captions")]
293    pub captions: Option<Captions>,
294    ///  Freeze Document Layout
295    #[xml(child = "w:readModeInkLockDown")]
296    pub read_mode_ink_lock_down: Option<ReadModeInkLockDown>,
297    // /// Supplementary Smart Tag Information
298    // #[xml(child = "w:smartTagType")]
299    // pub smartTagType: Vec<smartTagType>,
300    //     /// Custom XML Schema List
301    // #[xml(child = "sl:schemaLibrary")]
302    // pub schemaLibrary: Option<schemaLibrary>,
303    ///  Default Properties for VML Objects in Main Document
304    #[xml(child = "w:shapeDefaults")]
305    pub shape_defaults: Option<ShapeDefaults>,
306    ///  Remove Smart Tags When Saving
307    #[xml(child = "w:doNotEmbedSmartTags")]
308    pub do_not_embed_smart_tags: Option<DoNotEmbedSmartTags>,
309    ///  Radix Point for Field Code Evaluation
310    #[xml(child = "w:decimalSymbol")]
311    pub decimal_symbol: Option<DecimalSymbol<'a>>,
312    ///  List Separator for Field Code Evaluation
313    #[xml(child = "w:listSeparator")]
314    pub list_separator: Option<ListSeparator<'a>>,
315}
316
317#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
318#[cfg_attr(test, derive(PartialEq))]
319#[xml(tag = "w:writeProtection")]
320pub struct WriteProtection {}
321
322#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
323#[cfg_attr(test, derive(PartialEq))]
324#[xml(tag = "w:smartTagType")]
325pub struct SmartTagType {}
326
327#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
328#[cfg_attr(test, derive(PartialEq))]
329#[xml(tag = "w:view")]
330pub struct View {
331    #[xml(attr = "w:val")]
332    pub val: ViewType,
333}
334
335#[derive(Debug, Default, Clone)]
336#[cfg_attr(test, derive(PartialEq))]
337pub enum ViewType {
338    #[default]
339    None, //	Default View
340    Print,       //	Print Layout View
341    Outline,     //	Outline View
342    MasterPages, //	Master Document View
343    Normal,      //	Draft View
344    Web,         //	Web Page View
345}
346
347__string_enum! {
348    ViewType {
349        None = "none",
350        Print = "print",
351        Outline = "outline",
352        MasterPages = "masterPages",
353        Normal = "normal",
354        Web = "web",
355    }
356}
357
358#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
359#[cfg_attr(test, derive(PartialEq))]
360#[xml(tag = "w:zoom")]
361pub struct Zoom {
362    #[xml(attr = "w:val")]
363    pub val: Option<ZoomType>,
364    #[xml(attr = "w:percent")]
365    pub percent: Option<i32>,
366}
367
368#[derive(Debug, Default, Clone)]
369#[cfg_attr(test, derive(PartialEq))]
370pub enum ZoomType {
371    #[default]
372    None, //	No Preset Magnification
373    FullPage, //	Display One Full Page
374    BestFit,  //	Display Page Width
375    TextFit,  //	Display Text Width
376}
377
378__string_enum! {
379    ZoomType {
380        None = "none",
381        FullPage = "fullPage",
382        BestFit = "bestFit",
383        TextFit = "textFit",
384    }
385}
386
387#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
388#[cfg_attr(test, derive(PartialEq))]
389#[xml(tag = "w:removePersonalInformation")]
390pub struct RemovePersonalInformation {
391    #[xml(attr = "w:value")]
392    pub val: Option<bool>,
393}
394
395#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
396#[cfg_attr(test, derive(PartialEq))]
397#[xml(tag = "w:removeDateAndTime")]
398pub struct RemoveDateAndTime {
399    #[xml(attr = "w:value")]
400    pub val: Option<bool>,
401}
402
403#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
404#[cfg_attr(test, derive(PartialEq))]
405#[xml(tag = "w:doNotDisplayPageBoundaries")]
406pub struct DoNotDisplayPageBoundaries {
407    #[xml(attr = "w:value")]
408    pub val: Option<bool>,
409}
410
411#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
412#[cfg_attr(test, derive(PartialEq))]
413#[xml(tag = "w:displayBackgroundShape")]
414pub struct DisplayBackgroundShape {
415    #[xml(attr = "w:value")]
416    pub val: Option<bool>,
417}
418
419#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
420#[cfg_attr(test, derive(PartialEq))]
421#[xml(tag = "w:printPostScriptOverText")]
422pub struct PrintPostScriptOverText {
423    #[xml(attr = "w:value")]
424    pub val: Option<bool>,
425}
426
427#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
428#[cfg_attr(test, derive(PartialEq))]
429#[xml(tag = "w:printFractionalCharacterWidth")]
430pub struct PrintFractionalCharacterWidth {
431    #[xml(attr = "w:value")]
432    pub val: Option<bool>,
433}
434
435#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
436#[cfg_attr(test, derive(PartialEq))]
437#[xml(tag = "w:printFormsData")]
438pub struct PrintFormsData {
439    #[xml(attr = "w:value")]
440    pub val: Option<bool>,
441}
442
443#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
444#[cfg_attr(test, derive(PartialEq))]
445#[xml(tag = "w:embedTrueTypeFonts")]
446pub struct EmbedTrueTypeFonts {
447    #[xml(attr = "w:value")]
448    pub val: Option<bool>,
449}
450
451#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
452#[cfg_attr(test, derive(PartialEq))]
453#[xml(tag = "w:embedSystemFonts")]
454pub struct EmbedSystemFonts {
455    #[xml(attr = "w:value")]
456    pub val: Option<bool>,
457}
458
459#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
460#[cfg_attr(test, derive(PartialEq))]
461#[xml(tag = "w:saveSubsetFonts")]
462pub struct SaveSubsetFonts {
463    #[xml(attr = "w:value")]
464    pub val: Option<bool>,
465}
466
467#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
468#[cfg_attr(test, derive(PartialEq))]
469#[xml(tag = "w:saveFormsData")]
470pub struct SaveFormsData {
471    #[xml(attr = "w:value")]
472    pub val: Option<bool>,
473}
474
475#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
476#[cfg_attr(test, derive(PartialEq))]
477#[xml(tag = "w:mirrorMargins")]
478pub struct MirrorMargins {
479    #[xml(attr = "w:value")]
480    pub val: Option<bool>,
481}
482
483#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
484#[cfg_attr(test, derive(PartialEq))]
485#[xml(tag = "w:alignBordersAndEdges")]
486pub struct AlignBordersAndEdges {
487    #[xml(attr = "w:value")]
488    pub val: Option<bool>,
489}
490
491#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
492#[cfg_attr(test, derive(PartialEq))]
493#[xml(tag = "w:bordersDoNotSurroundHeader")]
494pub struct BordersDoNotSurroundHeader {
495    #[xml(attr = "w:value")]
496    pub val: Option<bool>,
497}
498
499#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
500#[cfg_attr(test, derive(PartialEq))]
501#[xml(tag = "w:bordersDoNotSurroundFooter")]
502pub struct BordersDoNotSurroundFooter {
503    #[xml(attr = "w:value")]
504    pub val: Option<bool>,
505}
506
507#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
508#[cfg_attr(test, derive(PartialEq))]
509#[xml(tag = "w:gutterAtTop")]
510pub struct GutterAtTop {
511    #[xml(attr = "w:value")]
512    pub val: Option<bool>,
513}
514
515#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
516#[cfg_attr(test, derive(PartialEq))]
517#[xml(tag = "w:hideSpellingErrors")]
518pub struct HideSpellingErrors {
519    #[xml(attr = "w:value")]
520    pub val: Option<bool>,
521}
522
523#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
524#[cfg_attr(test, derive(PartialEq))]
525#[xml(tag = "w:hideGrammaticalErrors")]
526pub struct HideGrammaticalErrors {
527    #[xml(attr = "w:value")]
528    pub val: Option<bool>,
529}
530
531#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
532#[cfg_attr(test, derive(PartialEq))]
533#[xml(tag = "w:activeWritingStyle")]
534pub struct ActiveWritingStyle {}
535
536#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
537#[cfg_attr(test, derive(PartialEq))]
538#[xml(tag = "w:proofState")]
539pub struct ProofState {
540    #[xml(attr = "w:spelling")]
541    pub spelling: Option<ProofStateType>,
542    #[xml(attr = "w:grammar")]
543    pub grammar: Option<ProofStateType>,
544}
545
546#[derive(Debug, Default, Clone)]
547#[cfg_attr(test, derive(PartialEq))]
548pub enum ProofStateType {
549    #[default]
550    Clean, //	Check Completed
551    Dirty, //	Check Not Completed
552}
553
554__string_enum! {
555    ProofStateType {
556        Clean ="clean",
557        Dirty = "dirty",
558    }
559}
560
561#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
562#[cfg_attr(test, derive(PartialEq))]
563#[xml(tag = "w:formsDesign")]
564pub struct FormsDesign {
565    #[xml(attr = "w:value")]
566    pub val: Option<bool>,
567}
568
569#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
570#[cfg_attr(test, derive(PartialEq))]
571#[xml(tag = "w:attachedTemplate")]
572pub struct AttachedTemplate<'a> {
573    #[xml(attr = "r:id")]
574    pub val: Cow<'a, str>,
575}
576
577#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
578#[cfg_attr(test, derive(PartialEq))]
579#[xml(tag = "w:linkStyles")]
580pub struct LinkStyles {
581    #[xml(attr = "w:value")]
582    pub val: Option<bool>,
583}
584
585#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
586#[cfg_attr(test, derive(PartialEq))]
587#[xml(tag = "w:stylePaneFormatFilter")]
588pub struct StylePaneFormatFilter {}
589
590#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
591#[cfg_attr(test, derive(PartialEq))]
592#[xml(tag = "w:stylePaneSortMethod")]
593pub struct StylePaneSortMethod {}
594
595#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
596#[cfg_attr(test, derive(PartialEq))]
597#[xml(tag = "w:documentType")]
598pub struct DocumentType {}
599
600#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
601#[cfg_attr(test, derive(PartialEq))]
602#[xml(tag = "w:mailMerge")]
603pub struct MailMerge {
604    // ///required    Source Document Type
605    // #[xml(child = "w:mainDocumentType")]
606    // pub main_document_type: Option<mainDocumentType>,
607    // ///required    Query Contains Link to External Query File
608    // #[xml(child = "w:linkToQuery")]
609    // pub link_to_query: Option<linkToQuery>,
610    // ///required    Data Source Type
611    // #[xml(child = "w:dataType")]
612    // pub data_type: Option<dataType>,
613    // ///required    Data Source Connection String
614    // #[xml(child = "w:connectString")]
615    // pub connect_string: Option<connectString>,
616    // ///required    Query For Data Source Records To Merge
617    // #[xml(child = "w:query")]
618    // pub query: Option<query>,
619    // ///required    Data Source File Path
620    // #[xml(child = "w:dataSource")]
621    // pub data_source: Option<dataSource>,
622    // ///required    Header Definition File Path
623    // #[xml(child = "w:headerSource")]
624    // pub header_source: Option<headerSource>,
625    // ///required    Remove Blank Lines from Merged Documents
626    // #[xml(child = "w:doNotSuppressBlankLines")]
627    // pub do_not_suppress_blank_lines: Option<doNotSuppressBlankLines>,
628    // ///required    Merged Document Destination
629    // #[xml(child = "w:destination")]
630    // pub destination: Option<destination>,
631    // ///required    Column Containing E-mail Address
632    // #[xml(child = "w:addressFieldName")]
633    // pub address_field_name: Option<addressFieldName>,
634    // ///required    Merged E-mail or Fax Subject Line
635    // #[xml(child = "w:mailSubject")]
636    // pub mail_subject: Option<mailSubject>,
637    // ///required    Merged Document To E-Mail Attachment
638    // #[xml(child = "w:mailAsAttachment")]
639    // pub mail_as_attachment: Option<mailAsAttachment>,
640    // ///required    View Merged Data Within Document
641    // #[xml(child = "w:viewMergedData")]
642    // pub view_merged_data: Option<viewMergedData>,
643    // ///required    Record Currently Displayed In Merged Document
644    // #[xml(child = "w:activeRecord")]
645    // pub active_record: Option<activeRecord>,
646    // ///required    Mail Merge Error Reporting Setting
647    // #[xml(child = "w:checkErrors")]
648    // pub check_errors: Option<checkErrors>,
649    // ///required    Office Data Source Object Settings
650    // #[xml(child = "w:odso")]
651    // pub odso: Option<odso>,
652}
653
654#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
655#[cfg_attr(test, derive(PartialEq))]
656#[xml(tag = "w:revisionView")]
657pub struct RevisionView {}
658
659#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
660#[cfg_attr(test, derive(PartialEq))]
661#[xml(tag = "w:trackRevisions")]
662pub struct TrackRevisions {
663    #[xml(attr = "w:value")]
664    pub val: Option<bool>,
665}
666
667#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
668#[cfg_attr(test, derive(PartialEq))]
669#[xml(tag = "w:doNotTrackMoves")]
670pub struct DoNotTrackMoves {
671    #[xml(attr = "w:value")]
672    pub val: Option<bool>,
673}
674
675#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
676#[cfg_attr(test, derive(PartialEq))]
677#[xml(tag = "w:doNotTrackFormatting")]
678pub struct DoNotTrackFormatting {
679    #[xml(attr = "w:value")]
680    pub val: Option<bool>,
681}
682
683#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
684#[cfg_attr(test, derive(PartialEq))]
685#[xml(tag = "w:documentProtection")]
686pub struct DocumentProtection {}
687
688#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
689#[cfg_attr(test, derive(PartialEq))]
690#[xml(tag = "w:autoFormatOverride")]
691pub struct AutoFormatOverride {}
692
693#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
694#[cfg_attr(test, derive(PartialEq))]
695#[xml(tag = "w:styleLockTheme")]
696pub struct StyleLockTheme {
697    #[xml(attr = "w:value")]
698    pub val: Option<bool>,
699}
700
701#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
702#[cfg_attr(test, derive(PartialEq))]
703#[xml(tag = "w:styleLockQFSet")]
704pub struct StyleLockQfset {
705    #[xml(attr = "w:value")]
706    pub val: Option<bool>,
707}
708
709#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
710#[cfg_attr(test, derive(PartialEq))]
711#[xml(tag = "w:defaultTabStop")]
712pub struct DefaultTabStop {
713    #[xml(attr = "w:val")]
714    pub val: isize,
715}
716
717#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
718#[cfg_attr(test, derive(PartialEq))]
719#[xml(tag = "w:autoHyphenation")]
720pub struct AutoHyphenation {
721    #[xml(attr = "w:value")]
722    pub val: Option<bool>,
723}
724
725#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
726#[cfg_attr(test, derive(PartialEq))]
727#[xml(tag = "w:consecutiveHyphenLimit")]
728pub struct ConsecutiveHyphenLimit {}
729
730#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
731#[cfg_attr(test, derive(PartialEq))]
732#[xml(tag = "w:hyphenationZone")]
733pub struct HyphenationZone {}
734
735#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
736#[cfg_attr(test, derive(PartialEq))]
737#[xml(tag = "w:doNotHyphenateCaps")]
738pub struct DoNotHyphenateCaps {
739    #[xml(attr = "w:value")]
740    pub val: Option<bool>,
741}
742
743#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
744#[cfg_attr(test, derive(PartialEq))]
745#[xml(tag = "w:showEnvelope")]
746pub struct ShowEnvelope {
747    #[xml(attr = "w:value")]
748    pub val: Option<bool>,
749}
750
751#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
752#[cfg_attr(test, derive(PartialEq))]
753#[xml(tag = "w:summaryLength")]
754pub struct SummaryLength {}
755
756#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
757#[cfg_attr(test, derive(PartialEq))]
758#[xml(tag = "w:clickAndTypeStyle")]
759pub struct ClickAndTypeStyle {}
760
761#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
762#[cfg_attr(test, derive(PartialEq))]
763#[xml(tag = "w:defaultTableStyle")]
764pub struct DefaultTableStyle {}
765
766#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
767#[cfg_attr(test, derive(PartialEq))]
768#[xml(tag = "w:bookFoldRevPrinting")]
769pub struct BookFoldRevPrinting {
770    #[xml(attr = "w:value")]
771    pub val: Option<bool>,
772}
773
774#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
775#[cfg_attr(test, derive(PartialEq))]
776#[xml(tag = "w:bookFoldPrinting")]
777pub struct BookFoldPrinting {
778    #[xml(attr = "w:value")]
779    pub val: Option<bool>,
780}
781
782#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
783#[cfg_attr(test, derive(PartialEq))]
784#[xml(tag = "w:bookFoldPrintingSheets")]
785pub struct BookFoldPrintingSheets {}
786
787#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
788#[cfg_attr(test, derive(PartialEq))]
789#[xml(tag = "w:drawingGridHorizontalSpacing")]
790pub struct DrawingGridHorizontalSpacing {
791    #[xml(attr = "w:val")]
792    pub val: isize,
793}
794
795#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
796#[cfg_attr(test, derive(PartialEq))]
797#[xml(tag = "w:drawingGridVerticalSpacing")]
798pub struct DrawingGridVerticalSpacing {
799    #[xml(attr = "w:val")]
800    pub val: isize,
801}
802
803#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
804#[cfg_attr(test, derive(PartialEq))]
805#[xml(tag = "w:displayHorizontalDrawingGridEvery")]
806pub struct DisplayHorizontalDrawingGridEvery {
807    #[xml(attr = "w:val")]
808    pub val: isize,
809}
810
811#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
812#[cfg_attr(test, derive(PartialEq))]
813#[xml(tag = "w:displayVerticalDrawingGridEvery")]
814pub struct DisplayVerticalDrawingGridEvery {
815    #[xml(attr = "w:val")]
816    pub val: isize,
817}
818
819#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
820#[cfg_attr(test, derive(PartialEq))]
821#[xml(tag = "w:doNotUseMarginsForDrawingGridOrigin")]
822pub struct DoNotUseMarginsForDrawingGridOrigin {
823    #[xml(attr = "w:value")]
824    pub val: Option<bool>,
825}
826
827#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
828#[cfg_attr(test, derive(PartialEq))]
829#[xml(tag = "w:drawingGridHorizontalOrigin")]
830pub struct DrawingGridHorizontalOrigin {}
831
832#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
833#[cfg_attr(test, derive(PartialEq))]
834#[xml(tag = "w:drawingGridVerticalOrigin")]
835pub struct DrawingGridVerticalOrigin {}
836
837#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
838#[cfg_attr(test, derive(PartialEq))]
839#[xml(tag = "w:doNotShadeFormData")]
840pub struct DoNotShadeFormData {
841    #[xml(attr = "w:value")]
842    pub val: Option<bool>,
843}
844
845#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
846#[cfg_attr(test, derive(PartialEq))]
847#[xml(tag = "w:noPunctuationKerning")]
848pub struct NoPunctuationKerning {
849    #[xml(attr = "w:value")]
850    pub val: Option<bool>,
851}
852
853#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
854#[cfg_attr(test, derive(PartialEq))]
855#[xml(tag = "w:characterSpacingControl")]
856pub struct CharacterSpacingControl {
857    #[xml(attr = "w:val")]
858    pub val: CharacterSpacingControlType,
859}
860
861#[derive(Debug, Default, Clone)]
862#[cfg_attr(test, derive(PartialEq))]
863pub enum CharacterSpacingControlType {
864    #[default]
865    DoNotCompress, //	Do Not Compress Whitespace
866    CompressPunctuation, //	Compress Whitespace From Punctuation Characters
867    CompressPunctuationAndJapaneseKana, //	Compress Whitespace From Both Japanese Kana And Punctuation Characters
868}
869
870__string_enum! {
871    CharacterSpacingControlType {
872        DoNotCompress = "doNotCompress",
873        CompressPunctuation = "compressPunctuation",
874        CompressPunctuationAndJapaneseKana = "compressPunctuationAndJapaneseKana",
875    }
876}
877
878#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
879#[cfg_attr(test, derive(PartialEq))]
880#[xml(tag = "w:printTwoOnOne")]
881pub struct PrintTwoOnOne {
882    #[xml(attr = "w:value")]
883    pub val: Option<bool>,
884}
885
886#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
887#[cfg_attr(test, derive(PartialEq))]
888#[xml(tag = "w:strictFirstAndLastChars")]
889pub struct StrictFirstAndLastChars {
890    #[xml(attr = "w:value")]
891    pub val: Option<bool>,
892}
893
894#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
895#[cfg_attr(test, derive(PartialEq))]
896#[xml(tag = "w:noLineBreaksAfter")]
897pub struct NoLineBreaksAfter {}
898
899#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
900#[cfg_attr(test, derive(PartialEq))]
901#[xml(tag = "w:noLineBreaksBefore")]
902pub struct NoLineBreaksBefore {}
903
904#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
905#[cfg_attr(test, derive(PartialEq))]
906#[xml(tag = "w:savePreviewPicture")]
907pub struct SavePreviewPicture {
908    #[xml(attr = "w:value")]
909    pub val: Option<bool>,
910}
911
912#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
913#[cfg_attr(test, derive(PartialEq))]
914#[xml(tag = "w:doNotValidateAgainstSchema")]
915pub struct DoNotValidateAgainstSchema {
916    #[xml(attr = "w:value")]
917    pub val: Option<bool>,
918}
919
920#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
921#[cfg_attr(test, derive(PartialEq))]
922#[xml(tag = "w:saveInvalidXml")]
923pub struct SaveInvalidXml {
924    #[xml(attr = "w:value")]
925    pub val: Option<bool>,
926}
927
928#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
929#[cfg_attr(test, derive(PartialEq))]
930#[xml(tag = "w:ignoreMixedContent")]
931pub struct IgnoreMixedContent {
932    #[xml(attr = "w:value")]
933    pub val: Option<bool>,
934}
935
936#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
937#[cfg_attr(test, derive(PartialEq))]
938#[xml(tag = "w:alwaysShowPlaceholderText")]
939pub struct AlwaysShowPlaceholderText {
940    #[xml(attr = "w:value")]
941    pub val: Option<bool>,
942}
943
944#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
945#[cfg_attr(test, derive(PartialEq))]
946#[xml(tag = "w:doNotDemarcateInvalidXml")]
947pub struct DoNotDemarcateInvalidXml {
948    #[xml(attr = "w:value")]
949    pub val: Option<bool>,
950}
951
952#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
953#[cfg_attr(test, derive(PartialEq))]
954#[xml(tag = "w:saveXmlDataOnly")]
955pub struct SaveXmlDataOnly {
956    #[xml(attr = "w:value")]
957    pub val: Option<bool>,
958}
959
960#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
961#[cfg_attr(test, derive(PartialEq))]
962#[xml(tag = "w:useXSLTWhenSaving")]
963pub struct UseXsltwhenSaving {
964    #[xml(attr = "w:value")]
965    pub val: Option<bool>,
966}
967
968#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
969#[cfg_attr(test, derive(PartialEq))]
970#[xml(tag = "w:saveThroughXslt")]
971pub struct SaveThroughXslt {}
972
973#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
974#[cfg_attr(test, derive(PartialEq))]
975#[xml(tag = "w:showXMLTags")]
976pub struct ShowXmltags {
977    #[xml(attr = "w:value")]
978    pub val: Option<bool>,
979}
980
981#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
982#[cfg_attr(test, derive(PartialEq))]
983#[xml(tag = "w:alwaysMergeEmptyNamespace")]
984pub struct AlwaysMergeEmptyNamespace {
985    #[xml(attr = "w:value")]
986    pub val: Option<bool>,
987}
988
989#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
990#[cfg_attr(test, derive(PartialEq))]
991#[xml(tag = "w:updateFields")]
992pub struct UpdateFields {
993    #[xml(attr = "w:value")]
994    pub val: Option<bool>,
995}
996
997#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
998#[cfg_attr(test, derive(PartialEq))]
999#[xml(tag = "w:hdrShapeDefaults")]
1000pub struct HdrShapeDefaults {}
1001
1002#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1003#[cfg_attr(test, derive(PartialEq))]
1004#[xml(tag = "w:compat")]
1005pub struct Compat {}
1006
1007#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1008#[cfg_attr(test, derive(PartialEq))]
1009#[xml(tag = "w:docVars")]
1010pub struct DocVars<'a> {
1011    #[xml(child = "w:docVar")]
1012    pub vars: Vec<DocVar<'a>>,
1013}
1014
1015#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1016#[cfg_attr(test, derive(PartialEq))]
1017#[xml(tag = "w:docVar")]
1018pub struct DocVar<'a> {
1019    #[xml(attr = "w:name")]
1020    pub name: Cow<'a, str>,
1021    #[xml(attr = "w:val")]
1022    pub val: Cow<'a, str>,
1023}
1024
1025#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1026#[cfg_attr(test, derive(PartialEq))]
1027#[xml(tag = "w:rsids")]
1028pub struct Rsids<'a> {
1029    #[xml(child = "w:rsidRoot")]
1030    pub ro: Option<RsidRoot<'a>>,
1031    #[xml(child = "w:rsid")]
1032    pub rsids: Vec<Rsid<'a>>,
1033}
1034
1035#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1036#[cfg_attr(test, derive(PartialEq))]
1037#[xml(tag = "w:rsid")]
1038pub struct Rsid<'a> {
1039    #[xml(attr = "w:val")]
1040    pub val: Cow<'a, str>,
1041}
1042
1043#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1044#[cfg_attr(test, derive(PartialEq))]
1045#[xml(tag = "w:rsidRoot")]
1046pub struct RsidRoot<'a> {
1047    #[xml(attr = "w:val")]
1048    pub val: Cow<'a, str>,
1049}
1050
1051#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1052#[cfg_attr(test, derive(PartialEq))]
1053#[xml(tag = "w:uiCompat97To2003")]
1054pub struct UiCompat97to2003 {
1055    #[xml(attr = "w:value")]
1056    pub val: Option<bool>,
1057}
1058
1059#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1060#[cfg_attr(test, derive(PartialEq))]
1061#[xml(tag = "w:clrSchemeMapping")]
1062pub struct ClrSchemeMapping {}
1063
1064#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1065#[cfg_attr(test, derive(PartialEq))]
1066#[xml(tag = "w:doNotIncludeSubdocsInStats")]
1067pub struct DoNotIncludeSubdocsInStats {
1068    #[xml(attr = "w:value")]
1069    pub val: Option<bool>,
1070}
1071
1072#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1073#[cfg_attr(test, derive(PartialEq))]
1074#[xml(tag = "w:doNotAutoCompressPictures")]
1075pub struct DoNotAutoCompressPictures {
1076    #[xml(attr = "w:value")]
1077    pub val: Option<bool>,
1078}
1079
1080#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1081#[cfg_attr(test, derive(PartialEq))]
1082#[xml(tag = "w:forceUpgrade")]
1083pub struct ForceUpgrade {}
1084
1085#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1086#[cfg_attr(test, derive(PartialEq))]
1087#[xml(tag = "w:captions")]
1088pub struct Captions {}
1089
1090#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1091#[cfg_attr(test, derive(PartialEq))]
1092#[xml(tag = "w:readModeInkLockDown")]
1093pub struct ReadModeInkLockDown {}
1094
1095#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1096#[cfg_attr(test, derive(PartialEq))]
1097#[xml(tag = "w:shapeDefaults")]
1098pub struct ShapeDefaults {}
1099
1100#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1101#[cfg_attr(test, derive(PartialEq))]
1102#[xml(tag = "w:doNotEmbedSmartTags")]
1103pub struct DoNotEmbedSmartTags {
1104    #[xml(attr = "w:value")]
1105    pub val: Option<bool>,
1106}
1107
1108#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1109#[cfg_attr(test, derive(PartialEq))]
1110#[xml(tag = "w:decimalSymbol")]
1111pub struct DecimalSymbol<'a> {
1112    #[xml(attr = "w:val")]
1113    pub val: Cow<'a, str>,
1114}
1115
1116#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1117#[cfg_attr(test, derive(PartialEq))]
1118#[xml(tag = "w:listSeparator")]
1119pub struct ListSeparator<'a> {
1120    #[xml(attr = "w:val")]
1121    pub val: Cow<'a, str>,
1122}
1123
1124#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1125#[cfg_attr(test, derive(PartialEq))]
1126#[xml(tag = "w:evenAndOddHeaders")]
1127pub struct EvenAndOddHeaders {}
1128
1129#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
1130#[cfg_attr(test, derive(PartialEq))]
1131#[xml(tag = "w:themeFontLang")]
1132pub struct ThemeFontLang<'a> {
1133    #[xml(attr = "w:val")]
1134    pub val: Option<Cow<'a, str>>,
1135    #[xml(attr = "w:eastAsia")]
1136    pub east_asia: Option<Cow<'a, str>>,
1137}
1138
1139impl<'a> XmlWrite for Settings<'a> {
1140    fn to_writer<W: Write>(&self, writer: &mut XmlWriter<W>) -> XmlResult<()> {
1141        let Settings {
1142            write_protection,
1143            view,
1144            zoom,
1145            remove_personal_information,
1146            remove_date_and_time,
1147            do_not_display_page_boundaries,
1148            display_background_shape,
1149            print_post_script_over_text,
1150            print_fractional_character_width,
1151            print_forms_data,
1152            embed_true_type_fonts,
1153            embed_system_fonts,
1154            save_subset_fonts,
1155            save_forms_data,
1156            mirror_margins,
1157            align_borders_and_edges,
1158            borders_do_not_surround_header,
1159            borders_do_not_surround_footer,
1160            gutter_at_top,
1161            hide_spelling_errors,
1162            hide_grammatical_errors,
1163            active_writing_style,
1164            proof_state,
1165            forms_design,
1166            attached_template,
1167            link_styles,
1168            style_pane_format_filter,
1169            style_pane_sort_method,
1170            document_type,
1171            mail_merge,
1172            revision_view,
1173            track_revisions,
1174            do_not_track_moves,
1175            do_not_track_formatting,
1176            document_protection,
1177            auto_format_override,
1178            style_lock_theme,
1179            style_lock_qfset,
1180            default_tab_stop,
1181            auto_hyphenation,
1182            consecutive_hyphen_limit,
1183            hyphenation_zone,
1184            do_not_hyphenate_caps,
1185            show_envelope,
1186            summary_length,
1187            click_and_type_style,
1188            default_table_style,
1189            even_and_odd_headers,
1190            book_fold_rev_printing,
1191            book_fold_printing,
1192            book_fold_printing_sheets,
1193            drawing_grid_horizontal_spacing,
1194            drawing_grid_vertical_spacing,
1195            display_horizontal_drawing_grid_every,
1196            display_vertical_drawing_grid_every,
1197            do_not_use_margins_for_drawing_grid_origin,
1198            drawing_grid_horizontal_origin,
1199            drawing_grid_vertical_origin,
1200            do_not_shade_form_data,
1201            no_punctuation_kerning,
1202            character_spacing_control,
1203            print_two_on_one,
1204            strict_first_and_last_chars,
1205            no_line_breaks_after,
1206            no_line_breaks_before,
1207            save_preview_picture,
1208            do_not_validate_against_schema,
1209            save_invalid_xml,
1210            ignore_mixed_content,
1211            always_show_placeholder_text,
1212            do_not_demarcate_invalid_xml,
1213            save_xml_data_only,
1214            use_xsltwhen_saving,
1215            save_through_xslt,
1216            show_xmltags,
1217            always_merge_empty_namespace,
1218            update_fields,
1219            hdr_shape_defaults,
1220            footnote_pr,
1221            endnote_pr,
1222            compat,
1223            doc_vars,
1224            rsids,
1225            ui_compat97_to2003,
1226            theme_font_lang,
1227            clr_scheme_mapping,
1228            do_not_include_subdocs_in_stats,
1229            do_not_auto_compress_pictures,
1230            force_upgrade,
1231            captions,
1232            read_mode_ink_lock_down,
1233            shape_defaults,
1234            do_not_embed_smart_tags,
1235            decimal_symbol,
1236            list_separator,
1237        } = self;
1238
1239        log::debug!("[Settings] Started writing.");
1240        let _ = write!(writer.inner, "{}", crate::schema::SCHEMA_XML);
1241
1242        writer.write_element_start("w:settings")?;
1243
1244        writer.write_attribute("xmlns:r", SCHEMA_RELATIONSHIPS_DOCUMENT)?;
1245
1246        writer.write_attribute("xmlns:w", SCHEMA_MAIN)?;
1247
1248        writer.write_attribute("xmlns:w14", SCHEMA_WORDML_14)?;
1249
1250        writer.write_element_end_open()?;
1251
1252        write_attr(write_protection, writer)?;
1253        write_attr(view, writer)?;
1254        write_attr(zoom, writer)?;
1255        write_attr(remove_personal_information, writer)?;
1256        write_attr(remove_date_and_time, writer)?;
1257        write_attr(do_not_display_page_boundaries, writer)?;
1258        write_attr(display_background_shape, writer)?;
1259        write_attr(print_post_script_over_text, writer)?;
1260        write_attr(print_fractional_character_width, writer)?;
1261        write_attr(print_forms_data, writer)?;
1262        write_attr(embed_true_type_fonts, writer)?;
1263        write_attr(embed_system_fonts, writer)?;
1264        write_attr(save_subset_fonts, writer)?;
1265        write_attr(save_forms_data, writer)?;
1266        write_attr(mirror_margins, writer)?;
1267        write_attr(align_borders_and_edges, writer)?;
1268        write_attr(borders_do_not_surround_header, writer)?;
1269        write_attr(borders_do_not_surround_footer, writer)?;
1270        write_attr(gutter_at_top, writer)?;
1271        write_attr(hide_spelling_errors, writer)?;
1272        write_attr(hide_grammatical_errors, writer)?;
1273        write_attr(active_writing_style, writer)?;
1274        write_attr(proof_state, writer)?;
1275        write_attr(forms_design, writer)?;
1276        write_attr(attached_template, writer)?;
1277        write_attr(link_styles, writer)?;
1278        write_attr(style_pane_format_filter, writer)?;
1279        write_attr(style_pane_sort_method, writer)?;
1280        write_attr(document_type, writer)?;
1281        write_attr(mail_merge, writer)?;
1282        write_attr(revision_view, writer)?;
1283        write_attr(track_revisions, writer)?;
1284        write_attr(do_not_track_moves, writer)?;
1285        write_attr(do_not_track_formatting, writer)?;
1286        write_attr(document_protection, writer)?;
1287        write_attr(auto_format_override, writer)?;
1288        write_attr(style_lock_theme, writer)?;
1289        write_attr(style_lock_qfset, writer)?;
1290        write_attr(default_tab_stop, writer)?;
1291        write_attr(auto_hyphenation, writer)?;
1292        write_attr(consecutive_hyphen_limit, writer)?;
1293        write_attr(hyphenation_zone, writer)?;
1294        write_attr(do_not_hyphenate_caps, writer)?;
1295        write_attr(show_envelope, writer)?;
1296        write_attr(summary_length, writer)?;
1297        write_attr(click_and_type_style, writer)?;
1298        write_attr(default_table_style, writer)?;
1299        write_attr(even_and_odd_headers, writer)?;
1300        write_attr(book_fold_rev_printing, writer)?;
1301        write_attr(book_fold_printing, writer)?;
1302        write_attr(book_fold_printing_sheets, writer)?;
1303        write_attr(drawing_grid_horizontal_spacing, writer)?;
1304        write_attr(drawing_grid_vertical_spacing, writer)?;
1305        write_attr(display_horizontal_drawing_grid_every, writer)?;
1306        write_attr(display_vertical_drawing_grid_every, writer)?;
1307        write_attr(do_not_use_margins_for_drawing_grid_origin, writer)?;
1308        write_attr(drawing_grid_horizontal_origin, writer)?;
1309        write_attr(drawing_grid_vertical_origin, writer)?;
1310        write_attr(do_not_shade_form_data, writer)?;
1311        write_attr(no_punctuation_kerning, writer)?;
1312        write_attr(character_spacing_control, writer)?;
1313        write_attr(print_two_on_one, writer)?;
1314        write_attr(strict_first_and_last_chars, writer)?;
1315        write_attr(no_line_breaks_after, writer)?;
1316        write_attr(no_line_breaks_before, writer)?;
1317        write_attr(save_preview_picture, writer)?;
1318        write_attr(do_not_validate_against_schema, writer)?;
1319        write_attr(save_invalid_xml, writer)?;
1320        write_attr(ignore_mixed_content, writer)?;
1321        write_attr(always_show_placeholder_text, writer)?;
1322        write_attr(do_not_demarcate_invalid_xml, writer)?;
1323        write_attr(save_xml_data_only, writer)?;
1324        write_attr(use_xsltwhen_saving, writer)?;
1325        write_attr(save_through_xslt, writer)?;
1326        write_attr(show_xmltags, writer)?;
1327        write_attr(always_merge_empty_namespace, writer)?;
1328        write_attr(update_fields, writer)?;
1329        write_attr(hdr_shape_defaults, writer)?;
1330        write_attr(footnote_pr, writer)?;
1331        write_attr(endnote_pr, writer)?;
1332        write_attr(compat, writer)?;
1333        write_attr(doc_vars, writer)?;
1334        write_attr(rsids, writer)?;
1335        write_attr(ui_compat97_to2003, writer)?;
1336        write_attr(theme_font_lang, writer)?;
1337        write_attr(clr_scheme_mapping, writer)?;
1338        write_attr(do_not_include_subdocs_in_stats, writer)?;
1339        write_attr(do_not_auto_compress_pictures, writer)?;
1340        write_attr(force_upgrade, writer)?;
1341        write_attr(captions, writer)?;
1342        write_attr(read_mode_ink_lock_down, writer)?;
1343        write_attr(shape_defaults, writer)?;
1344        write_attr(do_not_embed_smart_tags, writer)?;
1345        write_attr(decimal_symbol, writer)?;
1346        write_attr(list_separator, writer)?;
1347
1348        writer.write_element_end_close("w:settings")?;
1349
1350        log::debug!("[Settings] Finished writing.");
1351
1352        Ok(())
1353    }
1354}
1355
1356__xml_test_suites!(
1357    Settings,
1358    Settings::default(),
1359    format!(
1360        r#"{}<w:settings xmlns:r="{}" xmlns:w="{}" xmlns:w14="{}"></w:settings>"#,
1361        crate::schema::SCHEMA_XML,
1362        SCHEMA_RELATIONSHIPS_DOCUMENT,
1363        SCHEMA_MAIN,
1364        SCHEMA_WORDML_14
1365    )
1366    .as_str(),
1367);