#NEWLINE# def _parse_sample( text ) : #NEWLINE# #INDENT# name = [ ] #NEWLINE# labelname = [ ] #NEWLINE# labelvalue = [ ] #NEWLINE# value = [ ] #NEWLINE# labels = { #NEWLINE# #INDENT# #NEWLINE# #UNINDENT# } #NEWLINE# state = 'name' #NEWLINE# for char in text : #NEWLINE# #INDENT# if ( state == 'name' ) : #NEWLINE# #INDENT# if ( char == '{' ) : #NEWLINE# #INDENT# state = 'startoflabelname' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# state = 'endofname' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# name . append ( char ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'endofname' ) : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# pass #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( char == '{' ) : #NEWLINE# #INDENT# state = 'startoflabelname' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# value . append ( char ) #NEWLINE# state = 'value' #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'startoflabelname' ) : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# pass #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( char == '}' ) : #NEWLINE# #INDENT# state = 'endoflabels' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# state = 'labelname' #NEWLINE# labelname . append ( char ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'labelname' ) : #NEWLINE# #INDENT# if ( char == '=' ) : #NEWLINE# #INDENT# state = 'labelvaluequote' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# state = 'labelvalueequals' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# labelname . append ( char ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'labelvalueequals' ) : #NEWLINE# #INDENT# if ( char == '=' ) : #NEWLINE# #INDENT# state = 'labelvaluequote' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# pass #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# raise ValueError ( ( 'Invalid line: ' + text ) ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'labelvaluequote' ) : #NEWLINE# #INDENT# if ( char == '"' ) : #NEWLINE# #INDENT# state = 'labelvalue' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# pass #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# raise ValueError ( ( 'Invalid line: ' + text ) ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'labelvalue' ) : #NEWLINE# #INDENT# if ( char == '\\' ) : #NEWLINE# #INDENT# state = 'labelvalueslash' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( char == '"' ) : #NEWLINE# #INDENT# labels [ '' . join ( labelname ) ] = '' . join ( labelvalue ) #NEWLINE# labelname = [ ] #NEWLINE# labelvalue = [ ] #NEWLINE# state = 'nextlabel' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# labelvalue . append ( char ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'labelvalueslash' ) : #NEWLINE# #INDENT# state = 'labelvalue' #NEWLINE# if ( char == '\\' ) : #NEWLINE# #INDENT# labelvalue . append ( '\\' ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( char == 'n' ) : #NEWLINE# #INDENT# labelvalue . append ( '\n' ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( char == '"' ) : #NEWLINE# #INDENT# labelvalue . append ( '"' ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# labelvalue . append ( ( '\\' + char ) ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'nextlabel' ) : #NEWLINE# #INDENT# if ( char == ',' ) : #NEWLINE# #INDENT# state = 'labelname' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( char == '}' ) : #NEWLINE# #INDENT# state = 'endoflabels' #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# pass #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# raise ValueError ( ( 'Invalid line: ' + text ) ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'endoflabels' ) : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# pass #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# value . append ( char ) #NEWLINE# state = 'value' #NEWLINE# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( state == 'value' ) : #NEWLINE# #INDENT# if ( ( char == ' ' ) or ( char == '\t' ) ) : #NEWLINE# #INDENT# break #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# value . append ( char ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# return ( '' . join ( name ) , labels , float ( '' . join ( value ) ) )