buildframework/helium/external/python/lib/common/Sphinx-0.5.1-py2.5.egg/sphinx/util/console.py
author wbernard
Wed, 23 Dec 2009 19:29:07 +0200
changeset 179 d8ac696cc51f
permissions -rw-r--r--
helium_7.0-r14027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
179
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     2
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     3
    sphinx.util.console
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     4
    ~~~~~~~~~~~~~~~~~~~
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     5
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     6
    Format colored console output.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     7
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     8
    :copyright: 2007-2008 by Georg Brandl.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     9
    :license: BSD.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    10
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    11
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    12
import os
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    13
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    14
codes = {}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    15
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    16
def get_terminal_width():
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    17
    """Borrowed from the py lib."""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    18
    try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    19
        import os, termios, fcntl, struct
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    20
        call = fcntl.ioctl(0, termios.TIOCGWINSZ, "\000"*8)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    21
        height, width = struct.unpack("hhhh", call)[:2]
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    22
        terminal_width = width
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    23
    except (SystemExit, KeyboardInterrupt):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    24
        raise
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    25
    except:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    26
        # FALLBACK
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    27
        terminal_width = int(os.environ.get('COLUMNS', 80))-1
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    28
    return terminal_width
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    29
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    30
_tw = get_terminal_width()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    31
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    32
def print_and_backspace(text, func):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    33
    if not codes:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    34
        # if no coloring, don't output fancy backspaces
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    35
        func(text)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    36
    else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    37
        func(text.ljust(_tw) + _tw * "\b")
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    38
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    39
def color_terminal():
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    40
    if 'COLORTERM' in os.environ:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    41
        return True
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    42
    term = os.environ.get('TERM', 'dumb').lower()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    43
    if 'xterm' in term or 'color' in term:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    44
        return True
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    45
    return False
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    46
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    47
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    48
def nocolor():
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    49
    codes.clear()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    50
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    51
def coloron():
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    52
    codes.update(_orig_codes)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    53
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    54
def colorize(name, text):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    55
    return codes.get(name, '') + text + codes.get('reset', '')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    56
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    57
def create_color_func(name):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    58
    def inner(text):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    59
        return colorize(name, text)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    60
    globals()[name] = inner
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    61
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    62
_attrs = {
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    63
    'reset':     '39;49;00m',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    64
    'bold':      '01m',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    65
    'faint':     '02m',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    66
    'standout':  '03m',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    67
    'underline': '04m',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    68
    'blink':     '05m',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    69
}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    70
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    71
for _name, _value in _attrs.items():
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    72
    codes[_name] = '\x1b[' + _value
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    73
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    74
_colors = [
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    75
    ('black',     'darkgray'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    76
    ('darkred',   'red'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    77
    ('darkgreen', 'green'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    78
    ('brown',     'yellow'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    79
    ('darkblue',  'blue'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    80
    ('purple',    'fuchsia'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    81
    ('turquoise', 'teal'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    82
    ('lightgray', 'white'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    83
]
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    84
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    85
for i, (dark, light) in enumerate(_colors):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    86
    codes[dark] = '\x1b[%im' % (i+30)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    87
    codes[light] = '\x1b[%i;01m' % (i+30)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    88
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    89
_orig_codes = codes.copy()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    90
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    91
for _name in codes:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    92
    create_color_func(_name)