Skip to content

Commit ef81d35

Browse files
committed
RF: Simplify CaretSpecParser slightly
1 parent ab4104f commit ef81d35

File tree

1 file changed

+7
-24
lines changed

1 file changed

+7
-24
lines changed

nibabel/cifti2/caretspec.py

+7-24
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ def from_filename(klass, fname, **kwargs):
147147
class 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

Comments
 (0)