summaryrefslogtreecommitdiffstats
path: root/contrib/pygments_crmsh_lexers/ansiclr.py
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/pygments_crmsh_lexers/ansiclr.py')
-rw-r--r--contrib/pygments_crmsh_lexers/ansiclr.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/contrib/pygments_crmsh_lexers/ansiclr.py b/contrib/pygments_crmsh_lexers/ansiclr.py
new file mode 100644
index 0000000..b30ee85
--- /dev/null
+++ b/contrib/pygments_crmsh_lexers/ansiclr.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+"""
+ pygments.lexers.console
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ Lexers for misc console output.
+
+ :copyright: Copyright 2006-2015 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+from __future__ import unicode_literals
+
+from pygments.lexer import RegexLexer, bygroups
+from pygments.token import Generic, Text
+
+__all__ = ['ANSIColorsLexer']
+
+_ESC = "\x1b\["
+# this is normally to reset (reset attributes, set primary font)
+# there could be however other reset sequences and in that case
+# sgr0 needs to be updated
+_SGR0 = "%s(?:0;10|10;0)m" % _ESC
+# BLACK RED GREEN YELLOW
+# BLUE MAGENTA CYAN WHITE
+_ANSI_COLORS = (Generic.Emph, Generic.Error, Generic.Inserted, Generic.Keyword,
+ Generic.Keyword, Generic.Prompt, Generic.Traceback, Generic.Output)
+
+
+def _ansi2rgb(lexer, match):
+ code = match.group(1)
+ text = match.group(2)
+ yield match.start(), _ANSI_COLORS[int(code)-30], text
+
+
+class ANSIColorsLexer(RegexLexer):
+ """
+ Interpret ANSI colors.
+ """
+ name = 'ANSI Colors'
+ aliases = ['ansiclr']
+ filenames = ["*.typescript"]
+
+ tokens = {
+ 'root': [
+ (r'%s(3[0-7]+)m(.*?)%s' % (_ESC, _SGR0), _ansi2rgb),
+ (r'[^\x1b]+', Text),
+ # drop the rest of the graphic codes
+ (r'(%s[0-9;]+m)()' % _ESC, bygroups(None, Text)),
+ ]
+ }