@@ -147,7 +147,6 @@ def from_filename(klass, fname, **kwargs):
147147class CaretSpecParser (xml .XmlParser ):
148148 def __init__ (self , encoding = None , buffer_size = 3500000 , verbose = 0 ):
149149 super ().__init__ (encoding = encoding , buffer_size = buffer_size , verbose = verbose )
150- self .fsm_state = []
151150 self .struct_state = []
152151
153152 self .caret_spec = None
@@ -165,8 +164,7 @@ def StartElementHandler(self, name, attrs):
165164 elif name == 'MetaData' :
166165 self .caret_spec .metadata = CaretMetaData ()
167166 elif name == 'MD' :
168- self .fsm_state .append ('MD' )
169- self .struct_state .append (['' , '' ])
167+ self .struct_state .append ({})
170168 elif name in ('Name' , 'Value' ):
171169 self .write_to = name
172170 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' :
@@ -213,23 +207,12 @@ def flush_chardata(self):
213207 if self ._char_blocks is None :
214208 return
215209
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 ()
220211 # Reset the char collector
221212 self ._char_blocks = None
222213 # 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
232216
233217 elif self .write_to == 'DataFile' :
234- data = data .strip ()
235218 self .struct_state [- 1 ].uri = data
0 commit comments