web/lib/django/utils/termcolors.py
changeset 0 0d40e90630ef
child 29 cc9b7e14412b
equal deleted inserted replaced
-1:000000000000 0:0d40e90630ef
       
     1 """
       
     2 termcolors.py
       
     3 """
       
     4 
       
     5 color_names = ('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white')
       
     6 foreground = dict([(color_names[x], '3%s' % x) for x in range(8)])
       
     7 background = dict([(color_names[x], '4%s' % x) for x in range(8)])
       
     8 del color_names
       
     9 
       
    10 RESET = '0'
       
    11 opt_dict = {'bold': '1', 'underscore': '4', 'blink': '5', 'reverse': '7', 'conceal': '8'}
       
    12 
       
    13 def colorize(text='', opts=(), **kwargs):
       
    14     """
       
    15     Returns your text, enclosed in ANSI graphics codes.
       
    16 
       
    17     Depends on the keyword arguments 'fg' and 'bg', and the contents of
       
    18     the opts tuple/list.
       
    19 
       
    20     Returns the RESET code if no parameters are given.
       
    21 
       
    22     Valid colors:
       
    23         'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'
       
    24 
       
    25     Valid options:
       
    26         'bold'
       
    27         'underscore'
       
    28         'blink'
       
    29         'reverse'
       
    30         'conceal'
       
    31         'noreset' - string will not be auto-terminated with the RESET code
       
    32 
       
    33     Examples:
       
    34         colorize('hello', fg='red', bg='blue', opts=('blink',))
       
    35         colorize()
       
    36         colorize('goodbye', opts=('underscore',))
       
    37         print colorize('first line', fg='red', opts=('noreset',))
       
    38         print 'this should be red too'
       
    39         print colorize('and so should this')
       
    40         print 'this should not be red'
       
    41     """
       
    42     text = str(text)
       
    43     code_list = []
       
    44     if text == '' and len(opts) == 1 and opts[0] == 'reset':
       
    45         return '\x1b[%sm' % RESET
       
    46     for k, v in kwargs.iteritems():
       
    47         if k == 'fg':
       
    48             code_list.append(foreground[v])
       
    49         elif k == 'bg':
       
    50             code_list.append(background[v])
       
    51     for o in opts:
       
    52         if o in opt_dict:
       
    53             code_list.append(opt_dict[o])
       
    54     if 'noreset' not in opts:
       
    55         text = text + '\x1b[%sm' % RESET
       
    56     return ('\x1b[%sm' % ';'.join(code_list)) + text
       
    57 
       
    58 def make_style(opts=(), **kwargs):
       
    59     """
       
    60     Returns a function with default parameters for colorize()
       
    61 
       
    62     Example:
       
    63         bold_red = make_style(opts=('bold',), fg='red')
       
    64         print bold_red('hello')
       
    65         KEYWORD = make_style(fg='yellow')
       
    66         COMMENT = make_style(fg='blue', opts=('bold',))
       
    67     """
       
    68     return lambda text: colorize(text, opts, **kwargs)