@@ -146,7 +146,6 @@ def from_filename(klass, fname, **kwargs):
146146class CaretSpecParser (xml .XmlParser ):
147147 def __init__ (self , encoding = None , buffer_size = 3500000 , verbose = 0 ):
148148 super ().__init__ (encoding = encoding , buffer_size = buffer_size , verbose = verbose )
149- self .fsm_state = []
150149 self .struct_state = []
151150
152151 self .caret_spec = None
@@ -164,8 +163,7 @@ def StartElementHandler(self, name, attrs):
164163 elif name == 'MetaData' :
165164 self .caret_spec .metadata = CaretMetaData ()
166165 elif name == 'MD' :
167- self .fsm_state .append ('MD' )
168- self .struct_state .append (['' , '' ])
166+ self .struct_state .append ({})
169167 elif name in ('Name' , 'Value' ):
170168 self .write_to = name
171169 elif name == 'DataFile' :
@@ -181,13 +179,9 @@ def StartElementHandler(self, name, attrs):
181179
182180 def EndElementHandler (self , name ):
183181 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' ]
191185 elif name in ('Name' , 'Value' ):
192186 self .write_to = None
193187 elif name == 'DataFile' :
@@ -212,23 +206,12 @@ def flush_chardata(self):
212206 if self ._char_blocks is None :
213207 return
214208
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 ()
219210 # Reset the char collector
220211 self ._char_blocks = None
221212 # 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
231215
232216 elif self .write_to == 'DataFile' :
233- data = data .strip ()
234217 self .struct_state [- 1 ].uri = data
0 commit comments