<s> import Formatting <EOL> from BIFFRecords import * <EOL> FIRST_USER_DEFINED_NUM_FORMAT_IDX = <NUM_LIT> <EOL> class XFStyle ( object ) : <EOL> def __init__ ( self ) : <EOL> self . num_format_str = '<STR_LIT>' <EOL> self . font = Formatting . Font ( ) <EOL> self . alignment = Formatting . Alignment ( ) <EOL> self . borders = Formatting . Borders ( ) <EOL> self . pattern = Formatting . Pattern ( ) <EOL> self . protection = Formatting . Protection ( ) <EOL> default_style = XFStyle ( ) <EOL> class StyleCollection ( object ) : <EOL> _std_num_fmt_list = [ <EOL> '<STR_LIT>' , <EOL> '<STR_LIT:0>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT:@>' <EOL> ] <EOL> def __init__ ( self , style_compression = <NUM_LIT:0> ) : <EOL> self . style_compression = style_compression <EOL> self . stats = [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] <EOL> self . _font_id2x = { } <EOL> self . _font_x2id = { } <EOL> self . _font_val2x = { } <EOL> for x in ( <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:5> ) : <EOL> font = Formatting . Font ( ) <EOL> search_key = font . _search_key ( ) <EOL> self . _font_id2x [ font ] = x <EOL> self . _font_x2id [ x ] = font <EOL> self . _font_val2x [ search_key ] = x <EOL> self . _xf_id2x = { } <EOL> self . _xf_x2id = { } <EOL> self . _xf_val2x = { } <EOL> self . _num_formats = { } <EOL> for fmtidx , fmtstr in zip ( range ( <NUM_LIT:0> , <NUM_LIT> ) , StyleCollection . _std_num_fmt_list [ <NUM_LIT:0> : <NUM_LIT> ] ) : <EOL> self . _num_formats [ fmtstr ] = fmtidx <EOL> for fmtidx , fmtstr in zip ( range ( <NUM_LIT> , <NUM_LIT:50> ) , StyleCollection . _std_num_fmt_list [ <NUM_LIT> : ] ) : <EOL> self . _num_formats [ fmtstr ] = fmtidx <EOL> self . default_style = XFStyle ( ) <EOL> self . _default_xf = self . _add_style ( self . default_style ) [ <NUM_LIT:0> ] <EOL> def add ( self , style ) : <EOL> if style == None : <EOL> return <NUM_LIT> <EOL> return self . _add_style ( style ) [ <NUM_LIT:1> ] <EOL> def _add_style ( self , style ) : <EOL> num_format_str = style . num_format_str <EOL> if num_format_str in self . _num_formats : <EOL> num_format_idx = self . _num_formats [ num_format_str ] <EOL> else : <EOL> num_format_idx = ( <EOL> FIRST_USER_DEFINED_NUM_FORMAT_IDX <EOL> + len ( self . _num_formats ) <EOL> - len ( StyleCollection . _std_num_fmt_list ) <EOL> ) <EOL> self . _num_formats [ num_format_str ] = num_format_idx <EOL> font = style . font <EOL> if font in self . _font_id2x : <EOL> font_idx = self . _font_id2x [ font ] <EOL> self . stats [ <NUM_LIT:0> ] += <NUM_LIT:1> <EOL> elif self . style_compression : <EOL> search_key = font . _search_key ( ) <EOL> font_idx = self . _font_val2x . get ( search_key ) <EOL> if font_idx is not None : <EOL> self . _font_id2x [ font ] = font_idx <EOL> self . stats [ <NUM_LIT:1> ] += <NUM_LIT:1> <EOL> else : <EOL> font_idx = len ( self . _font_x2id ) + <NUM_LIT:1> <EOL> self . _font_id2x [ font ] = font_idx <EOL> self . _font_val2x [ search_key ] = font_idx <EOL> self . _font_x2id [ font_idx ] = font <EOL> self . stats [ <NUM_LIT:2> ] += <NUM_LIT:1> <EOL> else : <EOL> font_idx = len ( self . _font_id2x ) + <NUM_LIT:1> <EOL> self . _font_id2x [ font ] = font_idx <EOL> self . stats [ <NUM_LIT:2> ] += <NUM_LIT:1> <EOL> gof = ( style . alignment , style . borders , style . pattern , style . protection ) <EOL> xf = ( font_idx , num_format_idx ) + gof <EOL> if xf in self . _xf_id2x : <EOL> xf_index = self . _xf_id2x [ xf ] <EOL> self . stats [ <NUM_LIT:3> ] += <NUM_LIT:1> <EOL> elif self . style_compression == <NUM_LIT:2> : <EOL> xf_key = ( font_idx , num_format_idx ) + tuple ( [ obj . _search_key ( ) for obj in gof ] ) <EOL> xf_index = self . _xf_val2x . get ( xf_key ) <EOL> if xf_index is not None : <EOL> self . _xf_id2x [ xf ] = xf_index <EOL> self . stats [ <NUM_LIT:4> ] += <NUM_LIT:1> <EOL> else : <EOL> xf_index = <NUM_LIT> + len ( self . _xf_x2id ) <EOL> self . _xf_id2x [ xf ] = xf_index <EOL> self . _xf_val2x [ xf_key ] = xf_index <EOL> self . _xf_x2id [ xf_index ] = xf <EOL> self . stats [ <NUM_LIT:5> ] += <NUM_LIT:1> <EOL> else : <EOL> xf_index = <NUM_LIT> + len ( self . _xf_id2x ) <EOL> self . _xf_id2x [ xf ] = xf_index <EOL> self . stats [ <NUM_LIT:5> ] += <NUM_LIT:1> <EOL> if xf_index >= <NUM_LIT> : <EOL> raise ValueError ( "<STR_LIT>" ) <EOL> return xf , xf_index <EOL> def get_biff_data ( self ) : <EOL> result = '<STR_LIT>' <EOL> result += self . _all_fonts ( ) <EOL> result += self . _all_num_formats ( ) <EOL> result += self . _all_cell_styles ( ) <EOL> result += self . _all_styles ( ) <EOL> return result <EOL> def _all_fonts ( self ) : <EOL> result = '<STR_LIT>' <EOL> if self . style_compression : <EOL> alist = self . _font_x2id . items ( ) <EOL> else : <EOL> alist = [ ( x , o ) for o , x in self . _font_id2x . items ( ) ] <EOL> alist . sort ( ) <EOL> for font_idx , font in alist : <EOL> result += font . get_biff_record ( ) . get ( ) <EOL> return result <EOL> def _all_num_formats ( self ) : <EOL> result = '<STR_LIT>' <EOL> alist = [ <EOL> ( v , k ) <EOL> for k , v in self . _num_formats . items ( ) <EOL> if v >= FIRST_USER_DEFINED_NUM_FORMAT_IDX <EOL> ] <EOL> alist . sort ( ) <EOL> for fmtidx , fmtstr in alist : <EOL> result += NumberFormatRecord ( fmtidx , fmtstr ) . get ( ) <EOL> return result <EOL> def _all_cell_styles ( self ) : <EOL> result = '<STR_LIT>' <EOL> for i in range ( <NUM_LIT:0> , <NUM_LIT:16> ) : <EOL> result += XFRecord ( self . _default_xf , '<STR_LIT>' ) . get ( ) <EOL> if self . style_compression == <NUM_LIT:2> : <EOL> alist = self . _xf_x2id . items ( ) <EOL> else : <EOL> alist = [ ( x , o ) for o , x in self . _xf_id2x . items ( ) ] <EOL> alist . sort ( ) <EOL> for xf_idx , xf in alist : <EOL> result += XFRecord ( xf ) . get ( ) <EOL> return result <EOL> def _all_styles ( self ) : <EOL> return StyleRecord ( ) . get ( ) <EOL> class EasyXFException ( Exception ) : <EOL> pass <EOL> class EasyXFCallerError ( EasyXFException ) : <EOL> pass <EOL> class EasyXFAuthorError ( EasyXFException ) : <EOL> pass <EOL> class IntULim ( object ) : <EOL> def __init__ ( self , limit ) : <EOL> self . limit = limit <EOL> def __call__ ( self , astring ) : <EOL> try : <EOL> value = int ( astring , <NUM_LIT:0> ) <EOL> except ValueError : <EOL> return None <EOL> if not <NUM_LIT:0> <= value <= self . limit : <EOL> return None <EOL> return value <EOL> bool_map = { <EOL> '<STR_LIT:1>' : <NUM_LIT:1> , '<STR_LIT:yes>' : <NUM_LIT:1> , '<STR_LIT:true>' : <NUM_LIT:1> , '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT:0>' : <NUM_LIT:0> , '<STR_LIT>' : <NUM_LIT:0> , '<STR_LIT:false>' : <NUM_LIT:0> , '<STR_LIT>' : <NUM_LIT:0> , <EOL> } <EOL> border_line_map = { <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> } <EOL> charset_map = { <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> } <EOL> _colour_map_text = """<STR_LIT>""" <EOL> colour_map = { } <EOL> for _line in _colour_map_text . splitlines ( ) : <EOL> _name , _num = _line . split ( ) <EOL> _num = int ( _num , <NUM_LIT:0> ) <EOL> colour_map [ _name ] = _num <EOL> if '<STR_LIT>' in _name : <EOL> colour_map [ _name . replace ( '<STR_LIT>' , '<STR_LIT>' ) ] = _num <EOL> del _colour_map_text , _line , _name , _num <EOL> pattern_map = { <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT:none>' : <NUM_LIT:0> , <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:2> , <EOL> '<STR_LIT>' : <NUM_LIT:3> , <EOL> '<STR_LIT>' : <NUM_LIT:4> , <EOL> '<STR_LIT>' : <NUM_LIT:5> , <EOL> '<STR_LIT>' : <NUM_LIT:6> , <EOL> '<STR_LIT>' : <NUM_LIT:7> , <EOL> '<STR_LIT>' : <NUM_LIT:8> , <EOL> '<STR_LIT>' : <NUM_LIT:9> , <EOL> '<STR_LIT>' : <NUM_LIT:10> , <EOL> '<STR_LIT>' : <NUM_LIT:11> , <EOL> '<STR_LIT>' : <NUM_LIT:12> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT:15> , <EOL> '<STR_LIT>' : <NUM_LIT:16> , <EOL> } <EOL> def any_str_func ( s ) : <EOL> return s . strip ( ) <EOL> def colour_index_func ( s , maxval = <NUM_LIT> ) : <EOL> try : <EOL> value = int ( s , <NUM_LIT:0> ) <EOL> except ValueError : <EOL> return None <EOL> if not ( <NUM_LIT:0> <= value <= maxval ) : <EOL> return None <EOL> return value <EOL> colour_index_func_7 = colour_index_func <EOL> def colour_index_func_15 ( s ) : <EOL> return colour_index_func ( s , maxval = <NUM_LIT> ) <EOL> def rotation_func ( s ) : <EOL> try : <EOL> value = int ( s , <NUM_LIT:0> ) <EOL> except ValueError : <EOL> return None <EOL> if not ( - <NUM_LIT> <= value <= <NUM_LIT> ) : <EOL> raise EasyXFCallerError ( "<STR_LIT>" % value ) <EOL> if value < <NUM_LIT:0> : <EOL> value = <NUM_LIT> - value <EOL> return value <EOL> xf_dict = { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:2> , <EOL> } , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT:left>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:2> , <EOL> '<STR_LIT>' : <NUM_LIT:2> , <EOL> '<STR_LIT:right>' : <NUM_LIT:3> , <EOL> '<STR_LIT>' : <NUM_LIT:4> , <EOL> '<STR_LIT>' : <NUM_LIT:5> , <EOL> '<STR_LIT>' : <NUM_LIT:6> , <EOL> '<STR_LIT>' : <NUM_LIT:6> , <EOL> '<STR_LIT>' : <NUM_LIT:7> , <EOL> } , <EOL> '<STR_LIT>' : IntULim ( <NUM_LIT:15> ) , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ { '<STR_LIT>' : <NUM_LIT:255> , '<STR_LIT:none>' : <NUM_LIT:0> , } , rotation_func ] , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : bool_map , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:2> , <EOL> '<STR_LIT>' : <NUM_LIT:3> , <EOL> '<STR_LIT>' : <NUM_LIT:4> , <EOL> } , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : bool_map , <EOL> } , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:left>' : [ border_line_map , IntULim ( <NUM_LIT> ) ] , <EOL> '<STR_LIT:right>' : [ border_line_map , IntULim ( <NUM_LIT> ) ] , <EOL> '<STR_LIT>' : [ border_line_map , IntULim ( <NUM_LIT> ) ] , <EOL> '<STR_LIT>' : [ border_line_map , IntULim ( <NUM_LIT> ) ] , <EOL> '<STR_LIT>' : [ border_line_map , IntULim ( <NUM_LIT> ) ] , <EOL> '<STR_LIT>' : [ colour_map , colour_index_func_7 ] , <EOL> '<STR_LIT>' : [ colour_map , colour_index_func_7 ] , <EOL> '<STR_LIT>' : [ colour_map , colour_index_func_7 ] , <EOL> '<STR_LIT>' : [ colour_map , colour_index_func_7 ] , <EOL> '<STR_LIT>' : [ colour_map , colour_index_func_7 ] , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : bool_map , <EOL> '<STR_LIT>' : bool_map , <EOL> } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : bool_map , <EOL> '<STR_LIT>' : charset_map , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ colour_map , colour_index_func_15 ] , <EOL> '<STR_LIT>' : { '<STR_LIT:none>' : <NUM_LIT:0> , '<STR_LIT>' : <NUM_LIT:1> , '<STR_LIT>' : <NUM_LIT:2> } , <EOL> '<STR_LIT>' : { '<STR_LIT:none>' : <NUM_LIT:0> , '<STR_LIT>' : <NUM_LIT:1> , '<STR_LIT>' : <NUM_LIT:2> , '<STR_LIT>' : <NUM_LIT:3> , '<STR_LIT>' : <NUM_LIT:4> , '<STR_LIT>' : <NUM_LIT:5> , } , <EOL> '<STR_LIT>' : IntULim ( <NUM_LIT> ) , <EOL> '<STR_LIT>' : bool_map , <EOL> '<STR_LIT:name>' : any_str_func , <EOL> '<STR_LIT>' : bool_map , <EOL> '<STR_LIT>' : bool_map , <EOL> '<STR_LIT>' : bool_map , <EOL> '<STR_LIT>' : [ bool_map , { '<STR_LIT:none>' : <NUM_LIT:0> , '<STR_LIT>' : <NUM_LIT:1> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT:2> , '<STR_LIT>' : <NUM_LIT> , } ] , <EOL> } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ pattern_map , IntULim ( <NUM_LIT:16> ) ] , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ colour_map , colour_index_func_7 ] , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ colour_map , colour_index_func_7 ] , <EOL> } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : bool_map , <EOL> '<STR_LIT>' : bool_map , <EOL> } , <EOL> } <EOL> def _esplit ( s , split_char , esc_char = "<STR_LIT:\\>" ) : <EOL> escaped = False <EOL> olist = [ '<STR_LIT>' ] <EOL> for c in s : <EOL> if escaped : <EOL> olist [ - <NUM_LIT:1> ] += c <EOL> escaped = False <EOL> elif c == esc_char : <EOL> escaped = True <EOL> elif c == split_char : <EOL> olist . append ( '<STR_LIT>' ) <EOL> else : <EOL> olist [ - <NUM_LIT:1> ] += c <EOL> return olist <EOL> def _parse_strg_to_obj ( strg , obj , parse_dict , <EOL> field_sep = "<STR_LIT:U+002C>" , line_sep = "<STR_LIT:;>" , intro_sep = "<STR_LIT::>" , esc_char = "<STR_LIT:\\>" , debug = False ) : <EOL> for line in _esplit ( strg , line_sep , esc_char ) : <EOL> line = line . strip ( ) <EOL> if not line : <EOL> break <EOL> split_line = _esplit ( line , intro_sep , esc_char ) <EOL> if len ( split_line ) != <NUM_LIT:2> : <EOL> raise EasyXFCallerError ( '<STR_LIT>' % ( line , intro_sep ) ) <EOL> section , item_str = split_line <EOL> section = section . strip ( ) . lower ( ) <EOL> for counter in range ( <NUM_LIT:2> ) : <EOL> result = parse_dict . get ( section ) <EOL> if result is None : <EOL> raise EasyXFCallerError ( '<STR_LIT>' % section ) <EOL> if isinstance ( result , dict ) : <EOL> break <EOL> if not isinstance ( result , str ) : <EOL> raise EasyXFAuthorError ( <EOL> '<STR_LIT>' % ( section , type ( result ) ) ) <EOL> old_section = section <EOL> section = result <EOL> else : <EOL> raise EasyXFAuthorError ( '<STR_LIT>' % ( old_section , result ) ) <EOL> section_dict = result <EOL> section_obj = getattr ( obj , section , None ) <EOL> if section_obj is None : <EOL> raise EasyXFAuthorError ( '<STR_LIT>' % ( obj . __class__ . __name__ , section ) ) <EOL> for kv_str in _esplit ( item_str , field_sep , esc_char ) : <EOL> guff = kv_str . split ( ) <EOL> if not guff : <EOL> continue <EOL> k = guff [ <NUM_LIT:0> ] . lower ( ) . replace ( '<STR_LIT:->' , '<STR_LIT:_>' ) <EOL> v = '<STR_LIT:U+0020>' . join ( guff [ <NUM_LIT:1> : ] ) <EOL> if not v : <EOL> raise EasyXFCallerError ( "<STR_LIT>" % ( section , k ) ) <EOL> for counter in xrange ( <NUM_LIT:2> ) : <EOL> result = section_dict . get ( k ) <EOL> if result is None : <EOL> raise EasyXFCallerError ( '<STR_LIT>' % ( section , k ) ) <EOL> if not isinstance ( result , basestring ) : <EOL> break <EOL> old_k = k <EOL> k = result <EOL> else : <EOL> raise EasyXFAuthorError ( '<STR_LIT>' % ( old_k , result ) ) <EOL> value_info = result <EOL> if not isinstance ( value_info , list ) : <EOL> value_info = [ value_info ] <EOL> for value_rule in value_info : <EOL> if isinstance ( value_rule , dict ) : <EOL> vl = v . lower ( ) . replace ( '<STR_LIT:->' , '<STR_LIT:_>' ) <EOL> if vl in value_rule : <EOL> value = value_rule [ vl ] <EOL> break <EOL> elif callable ( value_rule ) : <EOL> value = value_rule ( v ) <EOL> if value is not None : <EOL> break <EOL> else : <EOL> raise EasyXFAuthorError ( "<STR_LIT>" % ( k , value_rule ) ) <EOL> else : <EOL> raise EasyXFCallerError ( "<STR_LIT>" % ( v , section , k ) ) <EOL> try : <EOL> orig = getattr ( section_obj , k ) <EOL> except AttributeError : <EOL> raise EasyXFAuthorError ( '<STR_LIT>' % ( section , k ) ) <EOL> if debug : print "<STR_LIT>" % ( section , k , value , v , orig ) <EOL> setattr ( section_obj , k , value ) <EOL> def easyxf ( strg_to_parse = "<STR_LIT>" , num_format_str = None , <EOL> field_sep = "<STR_LIT:U+002C>" , line_sep = "<STR_LIT:;>" , intro_sep = "<STR_LIT::>" , esc_char = "<STR_LIT:\\>" , debug = False ) : <EOL> xfobj = XFStyle ( ) <EOL> if num_format_str is not None : <EOL> xfobj . num_format_str = num_format_str <EOL> if strg_to_parse : <EOL> _parse_strg_to_obj ( strg_to_parse , xfobj , xf_dict , <EOL> field_sep = field_sep , line_sep = line_sep , intro_sep = intro_sep , esc_char = esc_char , debug = debug ) <EOL> return xfobj </s>
