| Index: third_party/buildbot_7_12/buildbot/status/web/ansi2html.py
|
| diff --git a/third_party/buildbot_7_12/buildbot/status/web/ansi2html.py b/third_party/buildbot_7_12/buildbot/status/web/ansi2html.py
|
| deleted file mode 100644
|
| index 6ef77ac2c3252ae629bf6443ae9b13c260b83bce..0000000000000000000000000000000000000000
|
| --- a/third_party/buildbot_7_12/buildbot/status/web/ansi2html.py
|
| +++ /dev/null
|
| @@ -1,161 +0,0 @@
|
| -# Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import cStringIO
|
| -import re
|
| -
|
| -DEFAULTS = {
|
| - 'color' : 'white',
|
| - 'background-color' : 'black',
|
| - 'font-weight' : 'normal',
|
| - 'text-decoration' : 'none',
|
| -}
|
| -
|
| -
|
| -class Ansi2HTML:
|
| - """Class for converting text streams with ANSI codes into html"""
|
| -
|
| - ANSIEscape = '['
|
| -
|
| - ANSIAttributes = {
|
| - 0 : ['color:' + DEFAULTS['color'],
|
| - 'font-weight:' + DEFAULTS['font-weight'],
|
| - 'text-decoration:' + DEFAULTS['text-decoration'],
|
| - 'background-color:' + DEFAULTS['background-color']], # reset
|
| - 1 : ['font-weight:bold'],
|
| - 2 : ['font-weight:lighter'],
|
| - 4 : ['text-decoration:underline'],
|
| - 5 : ['text-decoration:blink'],
|
| - 7 : [], # invert attribute?
|
| - 8 : [], # invisible attribute?
|
| - 30 : ['color:black'],
|
| - 31 : ['color:red'],
|
| - 32 : ['color:green'],
|
| - 33 : ['color:yellow'],
|
| - 34 : ['color:blue'],
|
| - 35 : ['color:magenta'],
|
| - 36 : ['color:cyan'],
|
| - 37 : ['color:white'],
|
| - 39 : ['color:' + DEFAULTS['color']],
|
| - 40 : ['background-color:black'],
|
| - 41 : ['background-color:red'],
|
| - 42 : ['background-color:green'],
|
| - 43 : ['background-color:yellow'],
|
| - 44 : ['background-color:blue'],
|
| - 45 : ['background-color:magenta'],
|
| - 46 : ['background-color:cyan'],
|
| - 47 : ['background-color:white'],
|
| - 49 : ['background-color:' + DEFAULTS['background-color']],
|
| - }
|
| -
|
| - def __init__(self):
|
| - self.ctx = {}
|
| - # Send a 0 code, resetting ctx to defaults.
|
| - self.attrib('0')
|
| - # Prepare a regexp recognizing all ANSI codes.
|
| - code_src = '|'.join(self.ANSICodes)
|
| - # This captures non-greedy code argument and code itself, both grouped.
|
| - self.code_re = re.compile("(.*?)(" + code_src + ")")
|
| -
|
| - def noop(self, arg):
|
| - """Noop code, for ANSI codes that have no html equivalent."""
|
| - return ''
|
| -
|
| - def attrib(self, arg):
|
| - """Text atribute code"""
|
| - if arg == '':
|
| - # Apparently, empty code argument means reset (0).
|
| - arg = '0'
|
| - for attr in arg.split(";"):
|
| - try:
|
| - for change in self.ANSIAttributes[int(attr)]:
|
| - pieces = change.split(":")
|
| - self.ctx[pieces[0]] = pieces[1]
|
| - except KeyError:
|
| - # Invalid key? Hmmm.
|
| - return 'color:red">ANSI code not found: ' + \
|
| - arg + '<font style="color:' + self.ctx['color']
|
| - return self.printStyle()
|
| -
|
| - ANSICodes = {
|
| - 'H' : noop, # cursor_pos, # ESC[y,xH - Cursor position y,x
|
| - 'A' : noop, # cursor_up, # ESC[nA - Cursor Up n lines
|
| - 'B' : noop, # cursor_down, # ESC[nB - Cursor Down n lines
|
| - 'C' : noop, # cursor_forward, # ESC[nC - Cursor Forward n characters
|
| - 'D' : noop, # cursor_backward, # ESC[nD - Cursor Backward n characters
|
| - 'f' : noop, # cursor_xy, # ESC[y;xf - Cursor pos y,x (infrequent)
|
| - 'R' : noop, # cursor_report, # ESC[y;xR - Cursor position report y,x
|
| - 'n' : noop, # device_status, # ESC[6n - Dev status report (cursor pos)
|
| - 's' : noop, # save_cursor, # ESC[s - Save cursor position
|
| - 'u' : noop, # restore_cursor, # ESC[u - Restore cursor position
|
| - 'J' : noop, # clrscr, # ESC[2J - Erase display
|
| - 'K' : noop, # erase2eol, # ESC[K - Erase to end of line
|
| - 'L' : noop, # insertlines, # ESC[nL - Inserts n blank lines at cursor
|
| - 'M' : noop, # deletelines, # ESC[nM - Deletes n lines including cursor
|
| - '@' : noop, # insertchars, # ESC[n@ - Inserts n blank chars at cursor
|
| - 'P' : noop, # deletechars, # ESC[nP - Deletes n chars including cursor
|
| - 'y' : noop, # translate, # ESC[n;ny - Output char translate
|
| - 'p' : noop, # key_reassign, #ESC["str"p - Keyboard Key Reassignment
|
| - 'm' : attrib, # ESC[n;n;...nm - Set attributes
|
| - }
|
| -
|
| - def printStyle(self, showDefaults=False):
|
| - """Returns a text representing the style of the current context."""
|
| - style = ''
|
| - for attr in DEFAULTS:
|
| - if self.ctx[attr] != DEFAULTS[attr] or showDefaults:
|
| - style += attr + ':' + self.ctx[attr] + ';'
|
| - return style
|
| -
|
| - def printHtmlHeader(self, title):
|
| - text = '<html><head><title>%s</title></head>' % title
|
| - text += '<body bgcolor="%s"><pre>' % DEFAULTS['background-color']
|
| - return text
|
| -
|
| - def printHtmlFooter(self):
|
| - return '</pre></body></html>'
|
| -
|
| - def printHeader(self):
|
| - """Envelopes everything into defaults <font> tag and opens a stub."""
|
| - self.attrib("0") # this means reset to default
|
| - return '<font style="%s"><font>' % self.printStyle(showDefaults=True)
|
| -
|
| - def printFooter(self):
|
| - """Closes both stub and envelope font tags."""
|
| - return '</font></font>'
|
| -
|
| - def parseBlock(self, string):
|
| - """Takes a block of text and transform into html"""
|
| - output = cStringIO.StringIO()
|
| - skipfirst = True
|
| - # Splitting by ANSIEscape turns the line into following elements:
|
| - # arg,code,text
|
| - # First two change the context, text is carried.
|
| - for block in string.split(self.ANSIEscape):
|
| - if not block:
|
| - # First block is empty -> the line starts with escape code.
|
| - skipfirst = False
|
| - continue
|
| -
|
| - if skipfirst:
|
| - # The line doesn't start with escape code -> skip first block.
|
| - output.write(block)
|
| - skipfirst = False
|
| - continue
|
| -
|
| - match = self.code_re.match(block)
|
| - if not match:
|
| - # If there's no match, it is the line end. Don't parse it.
|
| - output.write(block)
|
| - continue
|
| -
|
| - parseFunc = self.ANSICodes[match.group(2)]
|
| - # Replace ANSI codes with </font><font> sequence
|
| - output.write('</font><font style="')
|
| - output.write(parseFunc(self, match.group(1)))
|
| - output.write('">')
|
| - # Output the text
|
| - output.write(block.split(match.group(2),1)[1])
|
| -
|
| - return output.getvalue()
|
|
|