1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
###############################################################################
#
# FeaturePropertyBag - A class for writing the Excel XLSX featurePropertyBag.xml
# file.
#
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2013-2025, John McNamara, jmcnamara@cpan.org
#
# Package imports.
from . import xmlwriter
class FeaturePropertyBag(xmlwriter.XMLwriter):
"""
A class for writing the Excel XLSX FeaturePropertyBag file.
"""
###########################################################################
#
# Public API.
#
###########################################################################
def __init__(self):
"""
Constructor.
"""
super().__init__()
self.feature_property_bags = set()
###########################################################################
#
# Private API.
#
###########################################################################
def _assemble_xml_file(self):
# Assemble and write the XML file.
# Write the XML declaration.
self._xml_declaration()
# Write the FeaturePropertyBags element.
self._write_feature_property_bags()
# Write the Checkbox bag element.
self._write_checkbox_bag()
# Write the XFControls bag element.
self._write_xf_control_bag()
# Write the XFComplement bag element.
self._write_xf_compliment_bag()
# Write the XFComplements bag element.
self._write_xf_compliments_bag()
# Write the DXFComplements bag element.
if "DXFComplements" in self.feature_property_bags:
self._write_dxf_compliments_bag()
self._xml_end_tag("FeaturePropertyBags")
# Close the file.
self._xml_close()
###########################################################################
#
# XML methods.
#
###########################################################################
def _write_feature_property_bags(self):
# Write the <FeaturePropertyBags> element.
xmlns = (
"http://schemas.microsoft.com/office/spreadsheetml/2022/featurepropertybag"
)
attributes = [("xmlns", xmlns)]
self._xml_start_tag("FeaturePropertyBags", attributes)
def _write_checkbox_bag(self):
# Write the Checkbox <bag> element.
attributes = [("type", "Checkbox")]
self._xml_empty_tag("bag", attributes)
def _write_xf_control_bag(self):
# Write the XFControls<bag> element.
attributes = [("type", "XFControls")]
self._xml_start_tag("bag", attributes)
# Write the bagId element.
self._write_bag_id("CellControl", 0)
self._xml_end_tag("bag")
def _write_xf_compliment_bag(self):
# Write the XFComplement <bag> element.
attributes = [("type", "XFComplement")]
self._xml_start_tag("bag", attributes)
# Write the bagId element.
self._write_bag_id("XFControls", 1)
self._xml_end_tag("bag")
def _write_xf_compliments_bag(self):
# Write the XFComplements <bag> element.
attributes = [
("type", "XFComplements"),
("extRef", "XFComplementsMapperExtRef"),
]
self._xml_start_tag("bag", attributes)
self._xml_start_tag("a", [("k", "MappedFeaturePropertyBags")])
self._write_bag_id("", 2)
self._xml_end_tag("a")
self._xml_end_tag("bag")
def _write_dxf_compliments_bag(self):
# Write the DXFComplements <bag> element.
attributes = [
("type", "DXFComplements"),
("extRef", "DXFComplementsMapperExtRef"),
]
self._xml_start_tag("bag", attributes)
self._xml_start_tag("a", [("k", "MappedFeaturePropertyBags")])
self._write_bag_id("", 2)
self._xml_end_tag("a")
self._xml_end_tag("bag")
def _write_bag_id(self, key, bag_id):
# Write the <bagId> element.
attributes = []
if key:
attributes = [("k", key)]
self._xml_data_element("bagId", bag_id, attributes)
|