1313import warnings
1414import zlib
1515from ..externals .six import StringIO
16- from xml .parsers .expat import ParserCreate , ExpatError
1716
1817import numpy as np
1918
2322 GiftiCoordSystem )
2423from .util import (array_index_order_codes , gifti_encoding_codes ,
2524 gifti_endian_codes )
26-
25+ from .. xmlbasedimages import XmlImageParser
2726
2827DEBUG_PRINT = False
2928
@@ -71,14 +70,11 @@ def read_data_block(encoding, endian, ordering, datatype, shape, data):
7170 return newarr
7271
7372
74- class Outputter ( object ):
73+ class GiftiImageParser ( XmlImageParser ):
7574
7675 def __init__ (self ):
77- self . initialize ()
76+ super ( GiftiImageParser , self ). __init__ ()
7877
79- def initialize (self ):
80- """ Initialize outputter
81- """
8278 # finite state machine stack
8379 self .fsm_state = []
8480
@@ -95,7 +91,6 @@ def initialize(self):
9591
9692 # where to write CDATA:
9793 self .write_to = None
98- self .img = None
9994
10095 # Collecting char buffer fragments
10196 self ._char_blocks = None
@@ -316,57 +311,3 @@ def flush_chardata(self):
316311 def pending_data (self ):
317312 " True if there is character data pending for processing "
318313 return not self ._char_blocks is None
319-
320-
321- def parse_gifti_file (fname = None , fptr = None , buffer_size = None ):
322- """ Parse gifti file named `fname`, return image
323-
324- Parameters
325- ----------
326- fname : str
327- filename of gifti file
328- buffer_size: None or int, optional
329- size of read buffer. None gives default of 35000000 unless on python <
330- 2.6, in which case it is read only in the parser. In that case values
331- other than None cause a ValueError on execution
332-
333- Returns
334- -------
335- img : gifti image
336- """
337- assert (fname is not None ) + (fptr is not None ) == 1 , "Specify only fname or fptr, not both"
338-
339- if fptr is None :
340- with open (fname , 'rb' ) as datasource :
341- return parse_gifti_file (fptr = datasource , buffer_size = buffer_size )
342- else :
343- datasource = fptr
344-
345- if buffer_size is None :
346- buffer_sz_val = 35000000
347- else :
348- buffer_sz_val = buffer_size
349-
350- parser = ParserCreate ()
351- parser .buffer_text = True
352- try :
353- parser .buffer_size = buffer_sz_val
354- except AttributeError :
355- if not buffer_size is None :
356- raise ValueError ('Cannot set buffer size for parser' )
357- HANDLER_NAMES = ['StartElementHandler' ,
358- 'EndElementHandler' ,
359- 'CharacterDataHandler' ]
360- out = Outputter ()
361- for name in HANDLER_NAMES :
362- setattr (parser , name , getattr (out , name ))
363- try :
364- parser .ParseFile (datasource )
365- except ExpatError :
366- print ('An expat error occured while parsing the Gifti file.' )
367-
368- # Reality check for pending data
369- assert out .pending_data is False
370- # update filename
371- out .img .filename = fname
372- return out .img
0 commit comments