@@ -146,7 +146,6 @@ def from_filename(klass, fname, **kwargs):
146
146
class CaretSpecParser (xml .XmlParser ):
147
147
def __init__ (self , encoding = None , buffer_size = 3500000 , verbose = 0 ):
148
148
super ().__init__ (encoding = encoding , buffer_size = buffer_size , verbose = verbose )
149
- self .fsm_state = []
150
149
self .struct_state = []
151
150
152
151
self .caret_spec = None
@@ -164,8 +163,7 @@ def StartElementHandler(self, name, attrs):
164
163
elif name == 'MetaData' :
165
164
self .caret_spec .metadata = CaretMetaData ()
166
165
elif name == 'MD' :
167
- self .fsm_state .append ('MD' )
168
- self .struct_state .append (['' , '' ])
166
+ self .struct_state .append ({})
169
167
elif name in ('Name' , 'Value' ):
170
168
self .write_to = name
171
169
elif name == 'DataFile' :
@@ -181,13 +179,9 @@ def StartElementHandler(self, name, attrs):
181
179
182
180
def EndElementHandler (self , name ):
183
181
self .flush_chardata ()
184
- if name == 'CaretSpecFile' :
185
- ...
186
- elif name == 'MetaData' :
187
- ...
188
- elif name == 'MD' :
189
- key , value = self .struct_state .pop ()
190
- self .caret_spec .metadata [key ] = value
182
+ if name == 'MD' :
183
+ MD = self .struct_state .pop ()
184
+ self .caret_spec .metadata [MD ['Name' ]] = MD ['Value' ]
191
185
elif name in ('Name' , 'Value' ):
192
186
self .write_to = None
193
187
elif name == 'DataFile' :
@@ -212,23 +206,12 @@ def flush_chardata(self):
212
206
if self ._char_blocks is None :
213
207
return
214
208
215
- # Just join the strings to get the data. Maybe there are some memory
216
- # optimizations we could do by passing the list of strings to the
217
- # read_data_block function.
218
- data = '' .join (self ._char_blocks )
209
+ data = '' .join (self ._char_blocks ).strip ()
219
210
# Reset the char collector
220
211
self ._char_blocks = None
221
212
# Process data
222
- if self .write_to == 'Name' :
223
- data = data .strip () # .decode('utf-8')
224
- pair = self .struct_state [- 1 ]
225
- pair [0 ] = data
226
-
227
- elif self .write_to == 'Value' :
228
- data = data .strip () # .decode('utf-8')
229
- pair = self .struct_state [- 1 ]
230
- pair [1 ] = data
213
+ if self .write_to in ('Name' , 'Value' ):
214
+ self .struct_state [- 1 ][self .write_to ] = data
231
215
232
216
elif self .write_to == 'DataFile' :
233
- data = data .strip ()
234
217
self .struct_state [- 1 ].uri = data
0 commit comments