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