Skip to content

Commit

Permalink
Enhance pygments style integration
Browse files Browse the repository at this point in the history
  • Loading branch information
chhsiao90 committed Sep 10, 2016
1 parent 53936af commit 686e852
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 29 deletions.
2 changes: 1 addition & 1 deletion gviewer/styles/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
except: # pragma: no cover
pygments_style = []
else:
pygments_style = palette_from_pygments(get_style_by_name("default").styles)
pygments_style = palette_from_pygments(get_style_by_name("default"))

palette = [
("header", "white,bold", "dark green"),
Expand Down
42 changes: 29 additions & 13 deletions gviewer/styles/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,25 @@
])


def palette_from_pygments(style):
palettes = dict()
for k, v in style.styles.iteritems():
if v:
palettes[k] = _parse_pygments_style(v)

for token, style in palettes.items():
_enrich_pygments_style_subtypes(palettes, token, style)

palettes_list = []
for k, v in palettes.iteritems():
palette = [k]
palette.extend(v)
palettes_list.append(palette)
return palettes_list


class _PygmentsStyle(object):
def __init__(self, name):
self.name = name
def __init__(self):
self.text_color = "default"
self.bg_color = "default"
self.styles = []
Expand All @@ -54,10 +70,10 @@ def update(self, value):

def palette(self):
if self.high_text_color:
return (self.name, ",".join(self.styles + [self.text_color]),
return (",".join(self.styles + [self.text_color]),
self.bg_color, None, self.high_text_color, self.high_bg_color)
else:
return (self.name, ",".join(self.styles + [self.text_color]),
return (",".join(self.styles + [self.text_color]),
self.bg_color)


Expand All @@ -82,15 +98,15 @@ def _parse_pygments_color(value):
raise ValueError("not legal color code: {0}".format(value))


def palette_from_pygments(styles):
palettes = []
for k, v in styles.iteritems():
palettes.append(_parse_pygments_style(k, v))
return palettes


def _parse_pygments_style(style_name, style_value):
style = _PygmentsStyle(style_name)
def _parse_pygments_style(style_value):
style = _PygmentsStyle()
for style_item in style_value.split(" "):
style.update(style_item)
return style.palette()


def _enrich_pygments_style_subtypes(palettes, token, style):
if token not in palettes:
palettes[token] = style
for child_token in token.subtypes:
_enrich_pygments_style_subtypes(palettes, child_token, style)
30 changes: 15 additions & 15 deletions gviewer/tests/styles/test_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,60 +8,60 @@

class TestPygmentsStyle(unittest.TestCase):
def test_default(self):
style = _PygmentsStyle("name")
style = _PygmentsStyle()
self.assertEqual(
style.palette(),
("name", "default", "default"))
("default", "default"))

def test_text_color_16(self):
style = _PygmentsStyle("name")
style = _PygmentsStyle()
style.update("#f00")
self.assertEqual(
style.palette(),
("name", "light red", "default", None, "#f00", "default"))
("light red", "default", None, "#f00", "default"))

def test_text_color_256(self):
style = _PygmentsStyle("name")
style = _PygmentsStyle()
style.update("#ff0000")
self.assertEqual(
style.palette(),
("name", "light red", "default", None, "#f00", "default"))
("light red", "default", None, "#f00", "default"))

def test_bold(self):
style = _PygmentsStyle("name")
style = _PygmentsStyle()
style.update("bold")
self.assertEqual(
style.palette(),
("name", "bold,default", "default"))
("bold,default", "default"))

def test_text_bf_color_16(self):
style = _PygmentsStyle("name")
style = _PygmentsStyle()
style.update("bg:#f00")
style.update("#00f")
self.assertEqual(
style.palette(),
("name", "light blue", "light red", None, "#00f", "#f00"))
("light blue", "light red", None, "#00f", "#f00"))

def test_text_bg_color_256(self):
style = _PygmentsStyle("name")
style = _PygmentsStyle()
style.update("bg:#ff0000")
style.update("#00ff00")
self.assertEqual(
style.palette(),
("name", "light green", "light red", None, "#0f0", "#f00"))
("light green", "light red", None, "#0f0", "#f00"))

def test_text_bg_color_transparent(self):
style = _PygmentsStyle("name")
style = _PygmentsStyle()
style.update("bg:")
self.assertEqual(
style.palette(),
("name", "default", "default"))
("default", "default"))


class TestStylesUtil(unittest.TestCase):
def test_palette_from_pygments(self):
for style_name in get_all_styles():
palette = palette_from_pygments(get_style_by_name(style_name).styles)
palette = palette_from_pygments(get_style_by_name(style_name))
self.assertIsNotNone(palette)
self.assertIsInstance(palette, list)
self.assertTrue(len(palette))

0 comments on commit 686e852

Please sign in to comment.