summaryrefslogtreecommitdiff
path: root/pygments
diff options
context:
space:
mode:
Diffstat (limited to 'pygments')
-rw-r--r--pygments/formatters/html.py21
-rw-r--r--pygments/formatters/terminal256.py22
-rw-r--r--pygments/style.py50
3 files changed, 65 insertions, 28 deletions
diff --git a/pygments/formatters/html.py b/pygments/formatters/html.py
index 38e49f15..b03a4bd5 100644
--- a/pygments/formatters/html.py
+++ b/pygments/formatters/html.py
@@ -20,23 +20,6 @@ from pygments.token import Token, Text, STANDARD_TYPES
from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
StringIO, string_types, iteritems
-
-_deansify_map = {
- '#darkyellow':'#brown',
- '#darkteal': '#turquoise',
- '#fusia': '#fushia'
-}
-
-
-
-def _deansify(color):
- if color.startswith('#ansi'):
- color = color[5:]
- else:
- color = '#%s'% color
-
- return _deansify_map.get(color, color)
-
try:
import ctags
except ImportError:
@@ -461,7 +444,7 @@ class HtmlFormatter(Formatter):
name = self._get_css_class(ttype)
style = ''
if ndef['color']:
- style += 'color: %s; ' % _deansify(ndef['color'])
+ style += 'color: #%s; ' % ndef['color']
if ndef['bold']:
style += 'font-weight: bold; '
if ndef['italic']:
@@ -469,7 +452,7 @@ class HtmlFormatter(Formatter):
if ndef['underline']:
style += 'text-decoration: underline; '
if ndef['bgcolor']:
- style += 'background-color: %s; ' % _deansify(ndef['bgcolor'])
+ style += 'background-color: #%s; ' % ndef['bgcolor']
if ndef['border']:
style += 'border: 1px solid #%s; ' % ndef['border']
if style:
diff --git a/pygments/formatters/terminal256.py b/pygments/formatters/terminal256.py
index 913536c4..1aa19f25 100644
--- a/pygments/formatters/terminal256.py
+++ b/pygments/formatters/terminal256.py
@@ -50,11 +50,20 @@ class EscapeSequence:
attrs = []
if self.fg is not None:
if self.fg in ansilist:
- attrs.append(codes[self.fg[5:]][2:-1])
+ esc = codes[self.fg[5:]]
+ if ';01m' in esc:
+ self.bold = True
+ # extract fg color code.
+ attrs.append(esc[2:4])
else :
attrs.extend(("38", "5", "%i" % self.fg))
if self.bg is not None:
- attrs.extend(("48", "5", "%i" % self.bg))
+ if self.bg in ansilist:
+ esc = codes[self.bg[5:]]
+ # extract fg color code, add 10 for bg.
+ attrs.append(str(int(esc[2:4])+10))
+ else :
+ attrs.extend(("48", "5", "%i" % self.bg))
if self.bold:
attrs.append("01")
if self.underline:
@@ -201,9 +210,14 @@ class Terminal256Formatter(Formatter):
def _setup_styles(self):
for ttype, ndef in self.style:
escape = EscapeSequence()
- if ndef['color']:
+ # get foreground from ansicolor if set
+ if ndef['ansicolor']:
+ escape.fg = self._color_index(ndef['ansicolor'])
+ elif ndef['color']:
escape.fg = self._color_index(ndef['color'])
- if ndef['bgcolor']:
+ if ndef['bgansicolor']:
+ escape.bg = self._color_index(ndef['bgansicolor'])
+ elif ndef['bgcolor']:
escape.bg = self._color_index(ndef['bgcolor'])
if self.usebold and ndef['bold']:
escape.bold = True
diff --git a/pygments/style.py b/pygments/style.py
index 7a272b53..bc318354 100644
--- a/pygments/style.py
+++ b/pygments/style.py
@@ -11,11 +11,31 @@
from pygments.token import Token, STANDARD_TYPES
from pygments.util import add_metaclass
-from pygments.console import codes
-ansilist = ['#ansi'+x for x in codes.keys() if x]
+_ansimap = {
+ ##
+ '#ansiblack': '000000',
+ '#ansidarkred': '7f0000',
+ '#ansidarkgreen': '007f00',
+ '#ansibrown': '7f7fe0',
+ '#ansidarkblue': '00007f',
+ '#ansipurple': '7f007f',
+ '#ansiteal': '007f7f',
+ '#ansilightgray': 'e5e5e5',
+ ### normal
+ '#ansidarkgray': '555555',
+ '#ansired': 'ff0000',
+ '#ansigreen': '00ff00',
+ '#ansiyellow': 'ffff00',
+ '#ansiblue': '0000ff',
+ '#ansifuchsia': 'ff00ff',
+ '#ansiturquoise': '00ffff',
+ '#ansiwhite': 'ffffff',
+ }
+ansilist = list(_ansimap.keys())
+
class StyleMeta(type):
def __new__(mcs, name, bases, dct):
@@ -35,7 +55,13 @@ class StyleMeta(type):
return col[0]*2 + col[1]*2 + col[2]*2
elif text == '':
return ''
- assert False, "wrong color format %r" % text
+ didyoumean = ''
+ if 'ansi' in text:
+ import difflib
+ possibility = difflib.get_close_matches(text, ansilist, 1)
+ if possibility:
+ didyoumean = '. Did you mean {} ?'.format(possibility[0])
+ assert False, "wrong color format %r%s" % (text, didyoumean)
_styles = obj._styles = {}
@@ -84,16 +110,30 @@ class StyleMeta(type):
def style_for_token(cls, token):
t = cls._styles[token]
+ ansicolor = None
+ color = t[0]
+ if color.startswith('#ansi'):
+ ansicolor = color
+ color = _ansimap[color]
+ bgansicolor = None
+ bgcolor = t[4]
+ if bgcolor.startswith('#ansi'):
+ bgansicolor = bgcolor
+ bgcolor = _ansimap[bgcolor]
+
return {
- 'color': t[0] or None,
+ 'color': color or None,
'bold': bool(t[1]),
'italic': bool(t[2]),
'underline': bool(t[3]),
- 'bgcolor': t[4] or None,
+ 'bgcolor': bgcolor or None,
'border': t[5] or None,
'roman': bool(t[6]) or None,
'sans': bool(t[7]) or None,
'mono': bool(t[8]) or None,
+ 'ansicolor': ansicolor,
+ 'bgansicolor': bgansicolor,
+
}
def list_styles(cls):