<s> try : <EOL> from collections import OrderedDict <EOL> except ImportError : <EOL> from ordereddict import OrderedDict <EOL> class OutputFormatterStyle ( object ) : <EOL> FOREGROUND_COLORS = { <EOL> '<STR_LIT>' : <NUM_LIT:30> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT:32> , <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> BACKGROUND_COLORS = { <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> OPTIONS = { <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:4> , <EOL> '<STR_LIT>' : <NUM_LIT:5> , <EOL> '<STR_LIT>' : <NUM_LIT:7> , <EOL> '<STR_LIT>' : <NUM_LIT:8> , <EOL> } <EOL> def __init__ ( self , foreground = None , background = None , options = None ) : <EOL> self . foreground = None <EOL> self . background = None <EOL> if foreground : <EOL> self . set_foreground ( foreground ) <EOL> if background : <EOL> self . set_background ( background ) <EOL> options = options or [ ] <EOL> if not isinstance ( options , list ) : <EOL> options = [ options ] <EOL> self . set_options ( options ) <EOL> def set_foreground ( self , foreground ) : <EOL> self . foreground = self . FOREGROUND_COLORS [ foreground ] <EOL> def set_background ( self , background ) : <EOL> self . background = self . BACKGROUND_COLORS [ background ] <EOL> def set_option ( self , option ) : <EOL> if option not in self . OPTIONS : <EOL> raise Exception ( '<STR_LIT>' <EOL> % ( option , '<STR_LIT:U+002CU+0020>' . join ( self . OPTIONS . keys ( ) ) ) ) <EOL> if option not in self . options : <EOL> self . options [ self . OPTIONS [ option ] ] = option <EOL> def unset_option ( self , option ) : <EOL> if not option in self . OPTIONS : <EOL> raise Exception ( '<STR_LIT>' <EOL> % ( option , '<STR_LIT:U+002CU+0020>' . join ( self . OPTIONS . keys ( ) ) ) ) <EOL> del self . options [ self . OPTIONS [ option ] ] <EOL> def set_options ( self , options ) : <EOL> self . options = OrderedDict ( ) <EOL> for option in options : <EOL> self . set_option ( option ) <EOL> def apply ( self , text ) : <EOL> codes = [ ] <EOL> if self . foreground : <EOL> codes . append ( self . foreground ) <EOL> if self . background : <EOL> codes . append ( self . background ) <EOL> if len ( self . options ) : <EOL> codes += list ( self . options . keys ( ) ) <EOL> if not len ( codes ) : <EOL> return text <EOL> return '<STR_LIT>' % ( '<STR_LIT:;>' . join ( map ( str , codes ) ) , text ) </s>
