Add RSID and optionally enable track revisions in settings.xml. Args: path: Path to settings.xml track_revisions: If True, adds trackRevisions element Places elements per OOXML schema order: - trackRevisions: early (before defaultTabStop) - r
(self, path, track_revisions=False)
| 986 | editor.append_to(root, rel_xml) |
| 987 | |
| 988 | def _update_settings(self, path, track_revisions=False): |
| 989 | """Add RSID and optionally enable track revisions in settings.xml. |
| 990 | |
| 991 | Args: |
| 992 | path: Path to settings.xml |
| 993 | track_revisions: If True, adds trackRevisions element |
| 994 | |
| 995 | Places elements per OOXML schema order: |
| 996 | - trackRevisions: early (before defaultTabStop) |
| 997 | - rsids: late (after compat) |
| 998 | """ |
| 999 | editor = self["word/settings.xml"] |
| 1000 | root = editor.get_node(tag="w:settings") |
| 1001 | prefix = root.tagName.split(":")[0] if ":" in root.tagName else "w" |
| 1002 | |
| 1003 | # Conditionally add trackRevisions if requested |
| 1004 | if track_revisions: |
| 1005 | track_revisions_exists = any( |
| 1006 | elem.tagName == f"{prefix}:trackRevisions" |
| 1007 | for elem in editor.dom.getElementsByTagName(f"{prefix}:trackRevisions") |
| 1008 | ) |
| 1009 | |
| 1010 | if not track_revisions_exists: |
| 1011 | track_rev_xml = f"<{prefix}:trackRevisions/>" |
| 1012 | # Try to insert before documentProtection, defaultTabStop, or at start |
| 1013 | inserted = False |
| 1014 | for tag in [f"{prefix}:documentProtection", f"{prefix}:defaultTabStop"]: |
| 1015 | elements = editor.dom.getElementsByTagName(tag) |
| 1016 | if elements: |
| 1017 | editor.insert_before(elements[0], track_rev_xml) |
| 1018 | inserted = True |
| 1019 | break |
| 1020 | if not inserted: |
| 1021 | # Insert as first child of settings |
| 1022 | if root.firstChild: |
| 1023 | editor.insert_before(root.firstChild, track_rev_xml) |
| 1024 | else: |
| 1025 | editor.append_to(root, track_rev_xml) |
| 1026 | |
| 1027 | # Always check if rsids section exists |
| 1028 | rsids_elements = editor.dom.getElementsByTagName(f"{prefix}:rsids") |
| 1029 | |
| 1030 | if not rsids_elements: |
| 1031 | # Add new rsids section |
| 1032 | rsids_xml = f'''<{prefix}:rsids> |
| 1033 | <{prefix}:rsidRoot {prefix}:val="{self.rsid}"/> |
| 1034 | <{prefix}:rsid {prefix}:val="{self.rsid}"/> |
| 1035 | </{prefix}:rsids>''' |
| 1036 | |
| 1037 | # Try to insert after compat, before clrSchemeMapping, or before closing tag |
| 1038 | inserted = False |
| 1039 | compat_elements = editor.dom.getElementsByTagName(f"{prefix}:compat") |
| 1040 | if compat_elements: |
| 1041 | editor.insert_after(compat_elements[0], rsids_xml) |
| 1042 | inserted = True |
| 1043 | |
| 1044 | if not inserted: |
| 1045 | clr_elements = editor.dom.getElementsByTagName( |
no test coverage detected