| Index: third_party/twisted_8_1/twisted/conch/ui/ansi.py
|
| diff --git a/third_party/twisted_8_1/twisted/conch/ui/ansi.py b/third_party/twisted_8_1/twisted/conch/ui/ansi.py
|
| deleted file mode 100644
|
| index d71864176465fe5ec1631a56b12719d3e0c4ae01..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/conch/ui/ansi.py
|
| +++ /dev/null
|
| @@ -1,240 +0,0 @@
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -#
|
| -"""Module to parse ANSI escape sequences
|
| -
|
| -Maintainer: U{Jean-Paul Calderone <exarkun@twistedmatrix.com>}
|
| -"""
|
| -
|
| -import string
|
| -
|
| -# Twisted imports
|
| -from twisted.python import log
|
| -
|
| -class ColorText:
|
| - """
|
| - Represents an element of text along with the texts colors and
|
| - additional attributes.
|
| - """
|
| -
|
| - # The colors to use
|
| - COLORS = ('b', 'r', 'g', 'y', 'l', 'm', 'c', 'w')
|
| - BOLD_COLORS = tuple([x.upper() for x in COLORS])
|
| - BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(len(COLORS))
|
| -
|
| - # Color names
|
| - COLOR_NAMES = (
|
| - 'Black', 'Red', 'Green', 'Yellow', 'Blue', 'Magenta', 'Cyan', 'White'
|
| - )
|
| -
|
| - def __init__(self, text, fg, bg, display, bold, underline, flash, reverse):
|
| - self.text, self.fg, self.bg = text, fg, bg
|
| - self.display = display
|
| - self.bold = bold
|
| - self.underline = underline
|
| - self.flash = flash
|
| - self.reverse = reverse
|
| - if self.reverse:
|
| - self.fg, self.bg = self.bg, self.fg
|
| -
|
| -
|
| -class AnsiParser:
|
| - """
|
| - Parser class for ANSI codes.
|
| - """
|
| -
|
| - # Terminators for cursor movement ansi controls - unsupported
|
| - CURSOR_SET = ('H', 'f', 'A', 'B', 'C', 'D', 'R', 's', 'u', 'd','G')
|
| -
|
| - # Terminators for erasure ansi controls - unsupported
|
| - ERASE_SET = ('J', 'K', 'P')
|
| -
|
| - # Terminators for mode change ansi controls - unsupported
|
| - MODE_SET = ('h', 'l')
|
| -
|
| - # Terminators for keyboard assignment ansi controls - unsupported
|
| - ASSIGN_SET = ('p',)
|
| -
|
| - # Terminators for color change ansi controls - supported
|
| - COLOR_SET = ('m',)
|
| -
|
| - SETS = (CURSOR_SET, ERASE_SET, MODE_SET, ASSIGN_SET, COLOR_SET)
|
| -
|
| - def __init__(self, defaultFG, defaultBG):
|
| - self.defaultFG, self.defaultBG = defaultFG, defaultBG
|
| - self.currentFG, self.currentBG = self.defaultFG, self.defaultBG
|
| - self.bold, self.flash, self.underline, self.reverse = 0, 0, 0, 0
|
| - self.display = 1
|
| - self.prepend = ''
|
| -
|
| -
|
| - def stripEscapes(self, string):
|
| - """
|
| - Remove all ANSI color escapes from the given string.
|
| - """
|
| - result = ''
|
| - show = 1
|
| - i = 0
|
| - L = len(string)
|
| - while i < L:
|
| - if show == 0 and string[i] in _sets:
|
| - show = 1
|
| - elif show:
|
| - n = string.find('\x1B', i)
|
| - if n == -1:
|
| - return result + string[i:]
|
| - else:
|
| - result = result + string[i:n]
|
| - i = n
|
| - show = 0
|
| - i = i + 1
|
| - return result
|
| -
|
| - def writeString(self, colorstr):
|
| - pass
|
| -
|
| - def parseString(self, str):
|
| - """
|
| - Turn a string input into a list of L{ColorText} elements.
|
| - """
|
| -
|
| - if self.prepend:
|
| - str = self.prepend + str
|
| - self.prepend = ''
|
| - parts = str.split('\x1B')
|
| -
|
| - if len(parts) == 1:
|
| - self.writeString(self.formatText(parts[0]))
|
| - else:
|
| - self.writeString(self.formatText(parts[0]))
|
| - for s in parts[1:]:
|
| - L = len(s)
|
| - i = 0
|
| - type = None
|
| - while i < L:
|
| - if s[i] not in string.digits+'[;?':
|
| - break
|
| - i+=1
|
| - if not s:
|
| - self.prepend = '\x1b'
|
| - return
|
| - if s[0]!='[':
|
| - self.writeString(self.formatText(s[i+1:]))
|
| - continue
|
| - else:
|
| - s=s[1:]
|
| - i-=1
|
| - if i==L-1:
|
| - self.prepend = '\x1b['
|
| - return
|
| - type = _setmap.get(s[i], None)
|
| - if type is None:
|
| - continue
|
| -
|
| - if type == AnsiParser.COLOR_SET:
|
| - self.parseColor(s[:i + 1])
|
| - s = s[i + 1:]
|
| - self.writeString(self.formatText(s))
|
| - elif type == AnsiParser.CURSOR_SET:
|
| - cursor, s = s[:i+1], s[i+1:]
|
| - self.parseCursor(cursor)
|
| - self.writeString(self.formatText(s))
|
| - elif type == AnsiParser.ERASE_SET:
|
| - erase, s = s[:i+1], s[i+1:]
|
| - self.parseErase(erase)
|
| - self.writeString(self.formatText(s))
|
| - elif type == AnsiParser.MODE_SET:
|
| - mode, s = s[:i+1], s[i+1:]
|
| - #self.parseErase('2J')
|
| - self.writeString(self.formatText(s))
|
| - elif i == L:
|
| - self.prepend = '\x1B[' + s
|
| - else:
|
| - log.msg('Unhandled ANSI control type: %c' % (s[i],))
|
| - s = s[i + 1:]
|
| - self.writeString(self.formatText(s))
|
| -
|
| - def parseColor(self, str):
|
| - """
|
| - Handle a single ANSI color sequence
|
| - """
|
| - # Drop the trailing 'm'
|
| - str = str[:-1]
|
| -
|
| - if not str:
|
| - str = '0'
|
| -
|
| - try:
|
| - parts = map(int, str.split(';'))
|
| - except ValueError:
|
| - log.msg('Invalid ANSI color sequence (%d): %s' % (len(str), str))
|
| - self.currentFG, self.currentBG = self.defaultFG, self.defaultBG
|
| - return
|
| -
|
| - for x in parts:
|
| - if x == 0:
|
| - self.currentFG, self.currentBG = self.defaultFG, self.defaultBG
|
| - self.bold, self.flash, self.underline, self.reverse = 0, 0, 0, 0
|
| - self.display = 1
|
| - elif x == 1:
|
| - self.bold = 1
|
| - elif 30 <= x <= 37:
|
| - self.currentFG = x - 30
|
| - elif 40 <= x <= 47:
|
| - self.currentBG = x - 40
|
| - elif x == 39:
|
| - self.currentFG = self.defaultFG
|
| - elif x == 49:
|
| - self.currentBG = self.defaultBG
|
| - elif x == 4:
|
| - self.underline = 1
|
| - elif x == 5:
|
| - self.flash = 1
|
| - elif x == 7:
|
| - self.reverse = 1
|
| - elif x == 8:
|
| - self.display = 0
|
| - elif x == 22:
|
| - self.bold = 0
|
| - elif x == 24:
|
| - self.underline = 0
|
| - elif x == 25:
|
| - self.blink = 0
|
| - elif x == 27:
|
| - self.reverse = 0
|
| - elif x == 28:
|
| - self.display = 1
|
| - else:
|
| - log.msg('Unrecognised ANSI color command: %d' % (x,))
|
| -
|
| - def parseCursor(self, cursor):
|
| - pass
|
| -
|
| - def parseErase(self, erase):
|
| - pass
|
| -
|
| -
|
| - def pickColor(self, value, mode, BOLD = ColorText.BOLD_COLORS):
|
| - if mode:
|
| - return ColorText.COLORS[value]
|
| - else:
|
| - return self.bold and BOLD[value] or ColorText.COLORS[value]
|
| -
|
| -
|
| - def formatText(self, text):
|
| - return ColorText(
|
| - text,
|
| - self.pickColor(self.currentFG, 0),
|
| - self.pickColor(self.currentBG, 1),
|
| - self.display, self.bold, self.underline, self.flash, self.reverse
|
| - )
|
| -
|
| -
|
| -_sets = ''.join(map(''.join, AnsiParser.SETS))
|
| -
|
| -_setmap = {}
|
| -for s in AnsiParser.SETS:
|
| - for r in s:
|
| - _setmap[r] = s
|
| -del s
|
|
|