13
13
import warnings
14
14
import zlib
15
15
from ..externals .six import StringIO
16
- from xml .parsers .expat import ParserCreate , ExpatError
17
16
18
17
import numpy as np
19
18
23
22
GiftiCoordSystem )
24
23
from .util import (array_index_order_codes , gifti_encoding_codes ,
25
24
gifti_endian_codes )
26
-
25
+ from .. xmlbasedimages import XmlImageParser
27
26
28
27
DEBUG_PRINT = False
29
28
@@ -71,14 +70,11 @@ def read_data_block(encoding, endian, ordering, datatype, shape, data):
71
70
return newarr
72
71
73
72
74
- class Outputter ( object ):
73
+ class GiftiImageParser ( XmlImageParser ):
75
74
76
75
def __init__ (self ):
77
- self . initialize ()
76
+ super ( GiftiImageParser , self ). __init__ ()
78
77
79
- def initialize (self ):
80
- """ Initialize outputter
81
- """
82
78
# finite state machine stack
83
79
self .fsm_state = []
84
80
@@ -95,7 +91,6 @@ def initialize(self):
95
91
96
92
# where to write CDATA:
97
93
self .write_to = None
98
- self .img = None
99
94
100
95
# Collecting char buffer fragments
101
96
self ._char_blocks = None
@@ -316,57 +311,3 @@ def flush_chardata(self):
316
311
def pending_data (self ):
317
312
" True if there is character data pending for processing "
318
313
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