@@ -12,12 +12,21 @@ def read_xml(file) -> ET.ElementTree:
12
12
return ET .parse (file , parser = parser )
13
13
14
14
def write_xml (tree : ET .ElementTree , file ):
15
+ with open (file , 'r' , encoding = 'utf-8' ) as f :
16
+ text = f .read ()
17
+ closing_tag = '</resources>'
18
+ closing_tag_index = text .rfind (closing_tag )
19
+ if closing_tag_index > - 1 :
20
+ ending = text [(text .rfind (closing_tag ) + len (closing_tag )):]
21
+ else :
22
+ ending = ''
23
+
15
24
tree .write (file , encoding = 'utf-8' , xml_declaration = True , short_empty_elements = True )
16
25
# Replace the single quotes with double quotes
17
26
with open (file , 'r' , encoding = 'utf-8' ) as f :
18
27
content = f .read ()
19
28
with open (file , 'w' , encoding = 'utf-8' ) as f :
20
- f .write (content .replace ("<?xml version='1.0' encoding='utf-8'?>" , '<?xml version="1.0" encoding="utf-8"?>' ))
29
+ f .write (content .replace ("<?xml version='1.0' encoding='utf-8'?>" , '<?xml version="1.0" encoding="utf-8"?>' ). strip () + ending )
21
30
22
31
def delete_element (tree , element ):
23
32
root = tree .getroot ()
@@ -50,7 +59,7 @@ def check(self, source_tree, tree, element) -> bool:
50
59
51
60
def fix (self , source_tree , tree , element ) -> bool :
52
61
return False
53
-
62
+
54
63
def is_warning (self ) -> bool :
55
64
return False
56
65
@@ -66,7 +75,7 @@ def check(self, source_tree, tree, element) -> bool:
66
75
def fix (self , source_tree , tree , element ) -> bool :
67
76
delete_element (tree , element )
68
77
return True
69
-
78
+
70
79
def is_warning (self ) -> bool :
71
80
return True
72
81
@@ -82,13 +91,13 @@ def check(self, source_tree, tree, element) -> bool:
82
91
83
92
if len (source_urls ) != len (urls ):
84
93
return True
85
-
94
+
86
95
for i in range (len (source_urls )):
87
96
if source_urls [i ] != urls [i ]:
88
97
return True
89
-
98
+
90
99
return False
91
-
100
+
92
101
def __get_urls (self , text ):
93
102
# Regex to get all URLs
94
103
r = r'(https?://[^\s]+)'
@@ -98,7 +107,7 @@ def __get_urls(self, text):
98
107
def fix (self , source_tree , tree , element ) -> bool :
99
108
delete_element (tree , element )
100
109
return True
101
-
110
+
102
111
def is_warning (self ) -> bool :
103
112
return False
104
113
@@ -115,7 +124,7 @@ def check(self, source_tree, tree, element) -> bool:
115
124
def fix (self , source_tree , tree , element ) -> bool :
116
125
add_attribute (element , 'translatable' , 'false' )
117
126
return True
118
-
127
+
119
128
def is_warning (self ) -> bool :
120
129
return True
121
130
@@ -126,7 +135,7 @@ def check(self, source_tree, tree, element) -> bool:
126
135
source_element = get_string_element (source_tree , element .get ('name' ))
127
136
if source_element is None :
128
137
return False
129
-
138
+
130
139
# Get the format arguments from the source string
131
140
source_format_args = self .__get_format_args (source_element .text )
132
141
@@ -136,21 +145,21 @@ def check(self, source_tree, tree, element) -> bool:
136
145
# If the number of format arguments does not match, return true
137
146
if len (source_format_args ) != len (format_args ):
138
147
return True
139
-
148
+
140
149
# If the format arguments do not match, return true
141
150
remaining = format_args .copy ()
142
151
for source_format_arg in source_format_args :
143
152
if source_format_arg in remaining :
144
153
remaining .remove (source_format_arg )
145
154
else :
146
155
return True
147
-
156
+
148
157
return False
149
158
150
159
def fix (self , source_tree , tree , element ) -> bool :
151
160
delete_element (tree , element )
152
161
return True
153
-
162
+
154
163
def is_warning (self ) -> bool :
155
164
return False
156
165
@@ -184,7 +193,7 @@ def fix(self, source_tree, tree, element) -> bool:
184
193
for i , match in enumerate (matches ):
185
194
replace_text (element , element .text .replace (match , '%' + str (i + 1 ) + '$' + match [1 ], 1 ))
186
195
return True
187
-
196
+
188
197
def is_warning (self ) -> bool :
189
198
return True
190
199
@@ -198,7 +207,7 @@ def check(self, source_tree, tree, element) -> bool:
198
207
def fix (self , source_tree , tree , element ) -> bool :
199
208
delete_element (tree , element )
200
209
return True
201
-
210
+
202
211
def is_warning (self ) -> bool :
203
212
return True
204
213
@@ -212,7 +221,7 @@ def check(self, source_tree, tree, element) -> bool:
212
221
213
222
def fix (self , source_tree , tree , element ) -> bool :
214
223
return False
215
-
224
+
216
225
def is_warning (self ) -> bool :
217
226
return True
218
227
@@ -228,7 +237,7 @@ def check(self, source_tree, tree, element) -> bool:
228
237
229
238
def fix (self , source_tree , tree , element ) -> bool :
230
239
return False
231
-
240
+
232
241
def is_warning (self ) -> bool :
233
242
return True
234
243
@@ -241,7 +250,7 @@ def check(self, source_tree, tree, element) -> bool:
241
250
def fix (self , source_tree , tree , element ) -> bool :
242
251
delete_element (tree , element )
243
252
return True
244
-
253
+
245
254
def is_warning (self ) -> bool :
246
255
return True
247
256
@@ -286,4 +295,4 @@ def is_warning(self) -> bool:
286
295
if diagnostic .check (reference_tree , tree , string_elem ):
287
296
address_issue (tree , string_elem , diagnostic , strings_file_path )
288
297
if should_fix_issues :
289
- write_xml (tree , strings_file_path )
298
+ write_xml (tree , strings_file_path )
0 commit comments