diff --git a/README.md b/README.md index 10bde37..2e0f115 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,9 @@ -colout — Color Up Arbitrary Command Output -========================================== - -

-Colout logo -

+colout(1) -- Color Up Arbitrary Command Output +============================================== ## Synopsis -`colout [-h] [-r [RESOURCE]]` +`colout [-h] [-r RESOURCE]` `colout [-g] [-c] [-l min,max] [-a] [-t] [-T DIR] [-P DIR] [-d COLORMAP] [-s] [-e CHAR] [-E CHAR] [--debug] PATTERN [COLOR(S) [STYLE(S)]]` @@ -145,10 +137,10 @@ $ sudo apt-get/aptitude install colout Also, external palettes are converted from RGB to 256-ANSI and will thus not work if you use them as default colormaps for a 8-colors mode special color. -* `-r [TYPE(S)]`, `--resources [TYPE(S)]`: +* `-r TYPE(S)`, `--resources TYPE(S)`: Print the names of available resources. Use a comma-separated list of resources names (styles, colors, special, themes, palettes, colormaps or lexers), - use 'all' (or no argument) to print all resources. + use 'all' to print everything. * `-s`, `--source`: Interpret PATTERN as source code readable by the Pygments library. If the first letter of PATTERN diff --git a/colout/colout.py b/colout/colout.py index 2d51fac..39e8a0f 100755 --- a/colout/colout.py +++ b/colout/colout.py @@ -41,7 +41,7 @@ context["styles"] = { "reverse": 7, "conceal": 8 } -error_codes = {"UnknownColor": 1, "DuplicatedPalette": 2, "MixedModes": 3, "UnknownLexer": 4, "UnknownResource": 5} +error_codes = {"UnknownColor": 1, "DuplicatedPalette": 2, "MixedModes": 3, "UnknownLexer": 4} # Available color names in 8-colors mode. eight_colors = ["black","red","green","yellow","blue","magenta","cyan","white"] @@ -177,7 +177,7 @@ def parse_gimp_palette( filename ): palette = [] for line in lines: # skip lines with only a comment - if re.match(r"^\s*#.*$", line ): + if re.match("^\s*#.*$", line ): continue # decode the columns-ths codes. Generally [R G B] followed by a comment colors = [ int(c) for c in line.split()[:columns] ] @@ -249,13 +249,13 @@ def hex_to_rgb(h): def load_themes( themes_dir): global context logging.debug("search for themes in: %s" % themes_dir) + os.chdir( themes_dir ) sys.path.append( themes_dir ) # load available themes - for f in glob.iglob(os.path.join(themes_dir, "colout_*.py")): - basename = os.path.basename(f) # Remove path. - module = os.path.splitext(basename)[0] # Remove extension. - name = "_".join(module.split("_")[1:]) # Remove the 'colout_' prefix. + for f in glob.iglob("colout_*.py"): + module = ".".join(f.split(".")[:-1]) # remove extension + name = "_".join(module.split("_")[1:]) # remove the prefix if name in context["themes"]: raise DuplicatedTheme(name) logging.debug("load theme %s" % name) @@ -265,9 +265,10 @@ def load_themes( themes_dir): def load_palettes( palettes_dir, ignore_duplicates = True ): global context logging.debug("search for palettes in: %s" % palettes_dir) + os.chdir( palettes_dir ) # load available colormaps (GIMP palettes format) - for p in glob.iglob(os.path.join(palettes_dir, "*.gpl")): + for p in glob.iglob("*.gpl"): try: name,palette = parse_gimp_palette(p) except Exception as e: @@ -305,21 +306,11 @@ def load_lexers(): from pygments.lexers import get_all_lexers try: for lexer in get_all_lexers(): - l = None - # If the tuple has one-word aliases - # (which are usually a better option than the long names - # for a command line argument). - if lexer[1]: - l = lexer[1][0] # Take the first one. - else: - assert(lexer[0]) - l = lexer[0] # Take the long name, which should alway exists. - if not l: + try: + lexers.append(lexer[1][0]) + except IndexError: logging.warning("cannot load lexer: %s" % lexer[1][0]) - pass # Forget about this lexer. - else: - assert(" " not in l) # Should be very rare, but probably a source of bugs. - lexers.append(l) + pass except: logging.warning("error while executing the pygment module, syntax coloring is not available") @@ -663,8 +654,20 @@ def colorup(text, pattern, color="red", style="normal", on_groups=False, sep_lis in which case the different matching groups may be formatted differently. If there is less colors/styles than groups, the last format is used for the additional groups. - """ + >>> colorup("Fetchez la vache", "vache", "red", "bold") + 'Fetchez la \x1b[1;31mvache\x1b[0m' + >>> colorup("Faites chier la vache", "[Fv]a", "red", "bold") + '\x1b[1;31mFa\x1b[0mites chier la \x1b[1;31mva\x1b[0mche' + >>> colorup("Faites Chier la Vache", "[A-Z](\S+)\s", "red", "bold") + 'F\x1b[1;31maites\x1b[0m C\x1b[1;31mhier\x1b[0m la Vache' + >>> colorup("Faites Chier la Vache", "([A-Z])(\S+)\s", "red,green", "bold") + '\x1b[1;31mF\x1b[0m\x1b[1;32maites\x1b[0m \x1b[1;31mC\x1b[0m\x1b[1;32mhier\x1b[0m la Vache' + >>> colorup("Faites Chier la Vache", "([A-Z])(\S+)\s", "green") + '\x1b[0;32mF\x1b[0m\x1b[0;32maites\x1b[0m \x1b[0;32mC\x1b[0m\x1b[0;32mhier\x1b[0m la Vache' + >>> colorup("Faites Chier la Vache", "([A-Z])(\S+)\s", "blue", "bold,italic") + '\x1b[1;34mF\x1b[0m\x1b[3;34maites\x1b[0m \x1b[1;34mC\x1b[0m\x1b[3;34mhier\x1b[0m la Vache' + """ global context global debug @@ -877,10 +880,6 @@ def _args_parse(argv, usage=""): parser.add_argument("--debug", action="store_true", help="Debug mode: print what's going on internally, useful if you want to check what features are available.") - # HACK: Mock up "--resources ALL" if just "--resources" on command line - if (len(sys.argv) == 2 and (sys.argv[1] in ["-r", "--resources"])): - sys.argv.append("ALL") - args = parser.parse_args() return args.pattern[0], args.color, args.style, args.groups, \ @@ -938,17 +937,23 @@ def main(): # try additional directories if asked if palettes_dirs: for adir in palettes_dirs: - if os.path.isdir(adir): - load_palettes( adir ) - else: + try: + os.chdir( adir ) + except OSError as e: logging.warning("cannot read palettes directory %s, ignore it" % adir) + continue + else: + load_palettes( adir ) if themes_dirs: for adir in themes_dirs: - if os.path.isdir(adir): - load_themes( adir ) - else: + try: + os.chdir( adir ) + except OSError as e: logging.warning("cannot read themes directory %s, ignore it" % adir) + continue + else: + load_themes( adir ) except DuplicatedPalette as e: logging.error( "duplicated palette file name: %s" % e ) @@ -973,49 +978,33 @@ def main(): return ", ".join(sorted(l, key=lambda s: s.lower()+s)) # print("Available resources:") - resources_not_found = [] for res in asked: - resource_found = False - if "style" in res or "all" in res: print("STYLES: %s" % join_sort(context["styles"]) ) - resource_found = True if "color" in res or "all" in res: print("COLORS: %s" % join_sort(context["colors"]) ) - resource_found = True if "special" in res or "all" in res: print("SPECIAL: %s" % join_sort(["random", "Random", "scale", "Scale", "hash", "Hash", "colormap"]) ) - resource_found = True if "theme" in res or "all" in res: if len(context["themes"]) > 0: print("THEMES: %s" % join_sort(context["themes"].keys()) ) else: print("NO THEME") - resource_found = True if "colormap" in res or "all" in res: if len(context["colormaps"]) > 0: print("COLORMAPS: %s" % join_sort(context["colormaps"]) ) else: print("NO COLORMAPS") - resource_found = True if "lexer" in res or "all" in res: if len(context["lexers"]) > 0: print("SYNTAX COLORING: %s" % join_sort(context["lexers"]) ) else: print("NO SYNTAX COLORING (check that python3-pygments is installed)") - resource_found = True - - if not resource_found: - resources_not_found.append(res) - - if resources_not_found: - logging.error( "Unknown resources: %s" % ", ".join(resources_not_found) ) - sys.exit( error_codes["UnknownResource"] ) sys.exit(0) # not an error, we asked for help diff --git a/colout/colout_catch2.py b/colout/colout_catch2.py deleted file mode 100644 index e67d86a..0000000 --- a/colout/colout_catch2.py +++ /dev/null @@ -1,23 +0,0 @@ -def theme(context): - - return context,[ - ["^ (Start)(.*): (.*):(.*)$", "yellow", "normal,normal,normal,bold"], # Test start. - # path file ext:line : - ["^(tests): (/.*?)/([^/:]+):([0-9]+): (.*)", "yellow,none,white,yellow,red", "bold,normal,bold,normal,bold"], - ["(`)(.*)('.*)", "red,Cpp,red", "bold,normal,bold"], - [r"^\.+$", "yellow", "bold"], - ["^=+$", "yellow", "bold"], - ["(/.*?)/([^/:]+):([0-9]+): (FAILED):", "white,white,yellow,red", "normal,bold,normal,bold"], - [r"(REQUIRE\(|CHECK\(|REQUIRE_THAT\()(.*)(\))$","yellow,Cpp,yellow","bold,normal,bold"], - # Hide uninteresting stuff: - ["[0-9]+/[0-9]+ Test.*","blue"], - ["^Filters:.*","blue"], - ["^Randomness seeded to:.*","blue"], - ["^tests is a Catch2.*","blue"], - ["^Run with.*", "blue"], - ["^~+$","blue"], - ["^-+$","blue"], - [r"^\s*(Scenario:|Given:|When:|Then:).*","blue"], - ["^(/.*?)/([^/:]+):([0-9]+)", "blue"], - ["^(test cases|assertions)(.*)", "blue"], - ] diff --git a/colout/colout_clang.py b/colout/colout_clang.py deleted file mode 100644 index a5525ef..0000000 --- a/colout/colout_clang.py +++ /dev/null @@ -1,85 +0,0 @@ -#encoding: utf-8 - -def default_gettext( msg ): - return msg - -def theme(context): - import os - import gettext - import locale - - section="blue" - - # get g++ version - gv = os.popen("g++ -dumpversion").read().strip() - - # get the current translations of gcc - try: - t = gettext.translation("gcc-"+gv) - except IOError: - _ = default_gettext - else: - _ = t.gettext - # _("msg") will return the given message, translated - - # if the locale is unicode - enc = locale.getpreferredencoding() - if "UTF" in enc: - # gcc will use unicode quotes - qo = "[‘`]" - qc = "[’']" - else: - # rather than ascii ones - qo = "['`]" - qc = "'" - - return context,[ - # Command line - [ r"[/\s]([cg]\+\+-*[0-9]*\.*[0-9]*)", "white", "bold" ], - [ r"\s(\-D)(\s*[^\s]+)", "none,green", "normal,bold" ], - [ r"\s(-g)", "green", "normal" ], - [ r"\s-O[0-4]", "green", "normal" ], - [ r"\s-[Wf][^\s]*", "magenta", "normal" ], - [ r"\s-pedantic", "magenta", "normal" ], - [ r"\s(-I)(/*[^\s]+/)([^/\s]+)", "none,blue", "normal,normal,bold" ], - [ r"\s(-L)(/*[^\s]+/)([^/\s]+)", "none,cyan", "normal,normal,bold" ], - [ r"\s(-l)([^/\s]+)", "none,cyan", "normal,bold" ], - [ r"\s-[oc]", "red", "bold" ], - [ r"\s(-+std(?:lib)?)=?([^\s]+)", "red", "normal,bold" ], - - # Important messages - [ _("error: "), "red", "bold" ], - [ _("fatal error: "), "red", "bold" ], - [ _("warning: "), "magenta", "bold" ], - [ _("undefined reference to "), "red", "bold" ], - # [-Wflag] - [ r"\[-W.*\]", "magenta"], - - # Highlight message start: - # path file ext : line : col … - [ "(/.*?)/([^/:]+): (In .*)"+qo, - section, - "normal,normal,bold" ], - - [ "(/.*?)/([^/:]+): (At .*)", - section, - "normal,normal,bold" ], - - [ _("In file included from"), section ], - - # Highlight locations: - # path file ext : line : col … - [ "(/.*?)/([^/:]+):([0-9]+):*([0-9]*)(.*)", - "none,white,yellow,none,none", - "normal,normal,normal,normal" ], - - # source code in single quotes - [ qo+"(.*?)"+qc, "Cpp", "monokai" ], - - # source code after a "note: candidate are/is:" - [ _("note: ")+"((?!.*("+qo+"|"+qc+")).*)$", "Cpp", "monokai" ], - # [ _("note: ")+"(candidate:)(.*)$", "green,Cpp", "normal,monokai" ], - # after the code part, to avoid matching ANSI escape chars - [ _("note: "), "green", "normal" ] - ] - diff --git a/colout/colout_clang.py b/colout/colout_clang.py new file mode 120000 index 0000000..2df53b5 --- /dev/null +++ b/colout/colout_clang.py @@ -0,0 +1 @@ +colout_g++.py \ No newline at end of file diff --git a/colout/colout_cmake.py b/colout/colout_cmake.py index 66ab5a8..ae9027d 100644 --- a/colout/colout_cmake.py +++ b/colout/colout_cmake.py @@ -26,8 +26,7 @@ def theme(context): [ "^--.*", performing ], # Errors [ "CMake Error", "red" ], - [ "CMake Warning", "magenta" ], - [ "CMake Deprecation Warning", "magenta" ], + [ "CMake Warning", "yellow" ], # Scan [ "^(Scanning dependencies of target)(.*)$", performing, "normal,bold" ], @@ -36,20 +35,20 @@ def theme(context): [ "^(Linking .* )(library|executable) (.*)$", untimed, "normal,normal,bold" ], # [percent] Creating something - [ r"^\[\s*[0-9/]+%?\]\s(.*Creating.*)$", + [ "^\[\s*[0-9/]+%?\]\s(.*Creating.*)$", performing, "normal" ], # [percent] Built - [ r"^\[\s*[0-9/]+%?\]\s(Built target)(\s.*)$", + [ "^\[\s*[0-9/]+%?\]\s(Built target)(\s.*)$", performed, "normal,bold" ], # [percent] Building - [ r"^\[\s*[0-9/]+%?\]\s(Building \w* object)\s+(.*)(\.dir)(.*/)([-\w]+).c.*.o$", + [ "^\[\s*[0-9/]+%?\]\s(Building \w* object)\s+(.*)(\.dir)(.*/)([-\w]+).c.*.o$", performing+","+performing+","+performing+",Hash,"+performing, "normal,normal,normal,normal,bold"], # [percent] Generating - [ r"^\[\s*[0-9/]+%?\]\s(Generating)(\s+.*)$", + [ "^\[\s*[0-9/]+%?\]\s(Generating)(\s+.*)$", performing, "normal,bold"], # make errors - [ r"make\[[0-9]+\].*", "yellow"], - [ r"(make: \*\*\* \[.+\] )(.* [0-9]+)", "red", "normal,bold"], + [ "make\[[0-9]+\].*", "yellow"], + [ "(make: \*\*\* \[.+\] )(.* [0-9]+)", "red", "normal,bold"], # progress percentage (make) - [ r"^(\[\s*[0-9]+%\])","Scale" ] + [ "^(\[\s*[0-9]+%\])","Scale" ] ] diff --git a/colout/colout_configure.py b/colout/colout_configure.py index 63e63a4..2f5e2b7 100644 --- a/colout/colout_configure.py +++ b/colout/colout_configure.py @@ -11,6 +11,6 @@ def theme(context): ["^(config.status:) (creating|linking)(.*)", "cyan,blue","normal,normal,bold"], ["^(config.status:) (executing )(.*)", "cyan,green","normal,normal,bold"], ["^(config.status:) (.*)(is unchanged)", "cyan,green","normal,normal,bold"], - [r"^\s*(Build.*)(yes)$","green", "normal,bold"], - [r"^\s*(Build.*)(no)$","yellow", "normal,bold"], + ["^\s*(Build.*)(yes)$","green", "normal,bold"], + ["^\s*(Build.*)(no)$","yellow", "normal,bold"], ] diff --git a/colout/colout_ctest.py b/colout/colout_ctest.py index f2dd372..ba7e56e 100644 --- a/colout/colout_ctest.py +++ b/colout/colout_ctest.py @@ -2,7 +2,6 @@ def theme(context): # CTest theme: passed="green" - notrun="yellow" notpassed="red" # If the user do not ask for his own colormap @@ -13,7 +12,6 @@ def theme(context): return context,[ # Passed - [ r"^\s*[0-9]+/[0-9]+ Test\s+#[0-9]+: (.*)\s+\.+\s+(Passed)", "blue,"+passed], - [ r"^\s*[0-9]+/[0-9]+ Test\s+#[0-9]+: (.*)\s+\.+(\*{3}Not Run.*)\s+.*", "blue,"+notrun], - [ r"^\s*[0-9]+/[0-9]+ Test\s+#[0-9]+: (.*)\s+\.+(.*\*{3}.*)\s+.*", "blue,"+notpassed], + [ "^\s*[0-9]+/[0-9]+ Test\s+#[0-9]+: (.*)\s+\.+\s+(Passed)", "blue,"+passed], + [ "^\s*[0-9]+/[0-9]+ Test\s+#[0-9]+: (.*)\s+\.+(\*{3}.*)\s+.*", "blue,"+notpassed] ] diff --git a/colout/colout_django.py b/colout/colout_django.py deleted file mode 100644 index fcacc00..0000000 --- a/colout/colout_django.py +++ /dev/null @@ -1,36 +0,0 @@ - -def theme(context): - return context,[ - # Waiting - ["^Waiting for .*$", "red", "bold"], - [".*Sending.*", "green"], - # Watches - [r"^(Watching) (\S*) (.*)", "yellow", "bold,bold,normal"], - [".*reloading.$","yellow"], - # File from python/lib - [r"^(File) (/.*/lib/python[^/]*/site-packages/)([^/]*)\S* (first seen) (with mtime [0-9]*.*)$", - "blue,blue,white,blue,blue", "bold,normal,bold,bold,normal"], - # File from app (last 3 name highlighted) - [r"^(File) (/\S*/)(\S*/\S*/)(\S*) (first seen) (with mtime [0-9]*.*)$", - "magenta,magenta,white,white,magenta,magenta", "bold,normal,normal,bold,bold,normal"], - # SQL - ["(.*)(SELECT)(.*)(FROM)(.*)", - "green", "normal,bold,normal,bold,normal"], - ["(.*)(SELECT)(.*)(FROM)(.*)(WHERE)(.*)", - "green", "normal,bold,normal,bold,normal,bold,normal"], - # HTTP - [r"\"(GET) (\S*) (HTTP\S*)\" ([0-9]+) (.*)$", - "green,white,green,green,green", "bold,bold,normal,bold,normal"], - # Errors - ["(Exception) (while .*) '(.*)' (in) (.*) '(.*)'", "red,red,white,red,red,white", "bold,normal,bold,bold,normal,bold"], - ["(.*Error): (.*) '(.*)'", "red,red,white", "bold,normal,bold"], - [r"(django[^:\s]*)\.([^.:\s]*): (.*)", "red","normal,bold,normal"], - ["Traceback.*:","yellow"], - ["During handling.*","yellow"], - # File, line, in - [ - r"^\s{2}(File \")(/*.*?/)*([^/:]+)(\", line) ([0-9]+)(, in) (.*)$", - "blue, none, white,blue, yellow,blue", - "normal,normal,bold, normal,normal,bold" - ], - ] diff --git a/colout/colout_g++.py b/colout/colout_g++.py index a5525ef..c4abe03 100644 --- a/colout/colout_g++.py +++ b/colout/colout_g++.py @@ -35,17 +35,17 @@ def theme(context): return context,[ # Command line - [ r"[/\s]([cg]\+\+-*[0-9]*\.*[0-9]*)", "white", "bold" ], - [ r"\s(\-D)(\s*[^\s]+)", "none,green", "normal,bold" ], - [ r"\s(-g)", "green", "normal" ], - [ r"\s-O[0-4]", "green", "normal" ], - [ r"\s-[Wf][^\s]*", "magenta", "normal" ], - [ r"\s-pedantic", "magenta", "normal" ], - [ r"\s(-I)(/*[^\s]+/)([^/\s]+)", "none,blue", "normal,normal,bold" ], - [ r"\s(-L)(/*[^\s]+/)([^/\s]+)", "none,cyan", "normal,normal,bold" ], - [ r"\s(-l)([^/\s]+)", "none,cyan", "normal,bold" ], - [ r"\s-[oc]", "red", "bold" ], - [ r"\s(-+std(?:lib)?)=?([^\s]+)", "red", "normal,bold" ], + [ "[/\s]([cg]\+\+-*[0-9]*\.*[0-9]*)", "white", "bold" ], + [ "\s(\-D)(\s*[^\s]+)", "none,green", "normal,bold" ], + [ "\s(-g)", "green", "normal" ], + [ "\s-O[0-4]", "green", "normal" ], + [ "\s-[Wf][^\s]*", "magenta", "normal" ], + [ "\s-pedantic", "magenta", "normal" ], + [ "\s(-I)(/*[^\s]+/)([^/\s]+)", "none,blue", "normal,normal,bold" ], + [ "\s(-L)(/*[^\s]+/)([^/\s]+)", "none,cyan", "normal,normal,bold" ], + [ "\s(-l)([^/\s]+)", "none,cyan", "normal,bold" ], + [ "\s-[oc]", "red", "bold" ], + [ "\s(-+std(?:lib)?)=?([^\s]+)", "red", "normal,bold" ], # Important messages [ _("error: "), "red", "bold" ], @@ -53,7 +53,7 @@ def theme(context): [ _("warning: "), "magenta", "bold" ], [ _("undefined reference to "), "red", "bold" ], # [-Wflag] - [ r"\[-W.*\]", "magenta"], + [ "\[-W.*\]", "magenta"], # Highlight message start: # path file ext : line : col … diff --git a/colout/colout_javac.py b/colout/colout_javac.py index 92e5a2c..0acaba0 100644 --- a/colout/colout_javac.py +++ b/colout/colout_javac.py @@ -3,13 +3,13 @@ def theme(context): style="monokai" return context,[ - [ r"^(.*\.java):([0-9]+):\s*(warning:.*)$", "white,yellow,magenta", "normal,normal,bold" ], - [ r"^(.*\.java):([0-9]+):(.*)$", "white,yellow,red", "normal,normal,bold" ], - [ r"^(symbol|location)\s*:\s*(.*)$", "blue,Java", "bold,"+style ], - [ r"^(found)\s*:\s*(.*)", "red,Java", "bold,"+style ], - [ r"^(required)\s*:\s*(.*)", "green,Java", "bold,"+style ], - [ r"^\s*\^$", "cyan", "bold" ], - [ r"^\s+.*$", "Java", style ], + [ "^(.*\.java):([0-9]+):\s*(warning:.*)$", "white,yellow,magenta", "normal,normal,bold" ], + [ "^(.*\.java):([0-9]+):(.*)$", "white,yellow,red", "normal,normal,bold" ], + [ "^(symbol|location)\s*:\s*(.*)$", "blue,Java", "bold,"+style ], + [ "^(found)\s*:\s*(.*)", "red,Java", "bold,"+style ], + [ "^(required)\s*:\s*(.*)", "green,Java", "bold,"+style ], + [ "^\s*\^$", "cyan", "bold" ], + [ "^\s+.*$", "Java", style ], [ "[0-9]+ error[s]*", "red", "bold" ], [ "[0-9]+ warning[s]*", "magenta", "bold" ], ] diff --git a/colout/colout_json.py b/colout/colout_json.py index 2f9898e..62ddee4 100644 --- a/colout/colout_json.py +++ b/colout/colout_json.py @@ -3,10 +3,10 @@ def theme(context): # This theme expect a formatted JSON input, with items spread across lines. # See tools like "python -m json.tool" or "json_xs" return context,[ - [ r'[\[\]{}],*\s*\n' ], + [ '[\[\]{}],*\s*\n' ], [ '" (:) ', "yellow" ], - [ r'[\]}"](,)', "yellow" ], - [ r"\"(-*[0-9]+\.*[0-9]*e*-*[0-9]*)\"", "blue" ], + [ '[\]}"](,)', "yellow" ], + [ "\"(-*[0-9]+\.*[0-9]*e*-*[0-9]*)\"", "blue" ], [ '"(.*)"', "green" ], [ """["']""", "cyan" ] ] diff --git a/colout/colout_latex.py b/colout/colout_latex.py index 5567fbd..c19287f 100644 --- a/colout/colout_latex.py +++ b/colout/colout_latex.py @@ -7,20 +7,19 @@ def theme(context): "magenta,magenta,white,magenta", "normal,bold,normal" ], ["(LaTeX Warning): (.*)", "magenta", "normal,bold" ], ["(LaTeX Error): (.*)", "red", "normal,bold" ], - [r"^(.*\.tex):([0-9]+): (.*)", "white,yellow,red", "normal,normal,bold" ], + ["^(.*\.tex):([0-9]+): (.*)", "white,yellow,red", "normal,normal,bold" ], # ["on (page [0-9]+)", "yellow", "normal" ], ["on input (line [0-9]+)", "yellow", "normal" ], ["^! .*$", "red", "bold"], - [r"(.*erfull) ([^\s]+).* in [^\s]+ at (lines [0-9]+--[0-9]+)", + ["(.*erfull) ([^\s]+).* in [^\s]+ at (lines [0-9]+--[0-9]+)", "magenta,magenta,yellow", "normal"], - [r"\\[^\s]+\s", "white", "bold"], - [r"^l\.([0-9]+) (.*)", "yellow,tex"], - [r"^\s+(.*)", "tex"], - [r"(Output written on) (.*) \(([0-9]+ pages), [0-9]+ bytes\).", + ["\\[^\s]+\s", "white", "bold"], + ["^l\.([0-9]+) (.*)", "yellow,tex"], + ["^\s+(.*)", "tex"], + ["(Output written on) (.*) \(([0-9]+ pages), [0-9]+ bytes\).", "blue,white,blue", "normal,bold,normal"], ["WARNING.*", "magenta", "normal"], - ["[wW]arning.*", "magenta", "normal"], - ["No pages of output", "red", "bold"], + ["warning.*", "magenta", "normal"], # BiBTeX ["^(I couldn't) (.*)", "red", "normal,bold"], diff --git a/colout/colout_ninja.py b/colout/colout_ninja.py index 34dd9ec..1d416c9 100644 --- a/colout/colout_ninja.py +++ b/colout/colout_ninja.py @@ -11,9 +11,9 @@ def theme(context): context["scale"] = (0,1) # Link (ninja) - th.append( [ r"^\[[0-9/]+\]\s?(Linking .* )(library|executable) (.*/)*(.+(\.[aso]+)*)$", + th.append( [ "^\[[0-9/]+\]\s?(Linking .* )(library|executable) (.*/)*(.+(\.[aso]+)*)$", "blue", "normal,normal,bold" ] ) # progress percentage (ninja) - th.append( [ r"^(\[[0-9]+/[0-9]+\])","Scale" ] ) + th.append( [ "^(\[[0-9]+/[0-9]+\])","Scale" ] ) return context,th diff --git a/colout/colout_perm.py b/colout/colout_perm.py index 048230c..ffcb2a5 100644 --- a/colout/colout_perm.py +++ b/colout/colout_perm.py @@ -1,7 +1,7 @@ def theme(context): p="([-rwxsStT])" - reg=r"^([-dpcCDlMmpPs?])"+p*9+r"\s.*$" + reg="^([-dpcCDlMmpPs?])"+p*9+"\s.*$" colors="blue"+",green"*3+",yellow"*3+",red"*3 styles="normal"+ ",normal,italic,bold"*3 return context,[ [reg, colors, styles] ] diff --git a/colout/colout_python.py b/colout/colout_python.py index 40e4b34..3623d04 100644 --- a/colout/colout_python.py +++ b/colout/colout_python.py @@ -5,16 +5,16 @@ def theme(context): ["^Traceback .*$", "blue" ], # File, line, in [ - r"^\s{2}(File \")(/*.*?/)*([^/:]+)(\", line) ([0-9]+)(, in) (.*)$", + "^\s{2}(File \")(/*.*?/)*([^/:]+)(\", line) ([0-9]+)(, in) (.*)$", "blue, none, white,blue, yellow,blue", "normal,normal,bold, normal,normal,bold" ], - # [r"^\s{2}File \"(.*)\", line ([0-9]+), in (.*)$", "white,yellow,white", "normal,normal,bold" ], + # ["^\s{2}File \"(.*)\", line ([0-9]+), in (.*)$", "white,yellow,white", "normal,normal,bold" ], # Error name ["^([A-Za-z]*Error):*", "red", "bold" ], ["^([A-Za-z]*Exception):*", "red", "bold" ], # any quoted things - [r"Error.*['\"](.*)['\"]", "magenta" ], + ["Error.*['\"](.*)['\"]", "magenta" ], # python code - [r"^\s{4}.*$", "Python", "monokai" ], + ["^\s{4}.*$", "Python", "monokai" ], ] diff --git a/colout/colout_slurm.py b/colout/colout_slurm.py deleted file mode 100644 index 9f5af8d..0000000 --- a/colout/colout_slurm.py +++ /dev/null @@ -1,117 +0,0 @@ - -def theme(context): - # SLURM's states (from squeue manual). - - col_width = 9 - - COMPLETED =r"\bCOMPLETED" - PENDING =r"\bPENDING" - RUNNING =r"\bRUNNING" - CONFIGURING =r"\bCONFIGURING" - COMPLETING =r"\bCOMPLETING" - FAILED =r"\bFAILED" - DEADLINE =r"\bDEADLINE" - OUT_OF_MEMORY=r"\bOUT_OF_MEMORY" - TIMEOUT =r"\bTIMEOUT" - CANCELLED =r"\bCANCELLED" - BOOT_FAIL =r"\bBOOT_FAIL" - NODE_FAIL =r"\bNODE_FAIL" - PREEMPTED =r"\bPREEMPTED" - RESV_DEL_HOLD=r"\bRESV_DEL_HOLD" - REQUEUE_FED =r"\bREQUEUE_FED" - REQUEUE_HOLD =r"\bREQUEUE_HOLD" - REQUEUED =r"\bREQUEUED" - RESIZING =r"\bRESIZING" - REVOKED =r"\bREVOKED" - SIGNALING =r"\bSIGNALING" - SPECIAL_EXIT =r"\bSPECIAL_EXIT" - STAGE_OUT =r"\bSTAGE_OUT" - STOPPED =r"\bSTOPPED" - SUSPENDED =r"\bSUSPENDED" - - return context,[ - - ## No problem: greens - - #Job has terminated all processes on all nodes with an exit code of zero. - [r"\bCD\b", "22"], - [COMPLETED[0:col_width]+r"\w*\b", "22"], - #Job is awaiting resource allocation. - [r"\bPD\b", "28"], - [PENDING[0:col_width]+r"\w*\b", "28"], - #Job currently has an allocation. - [r"\bR\b", "34"], - [RUNNING[0:col_width]+r"\w*\b", "34"], - #Job has been allocated resources, but are waiting for them to become ready for use (e.g. booting). - [r"\bCF\b", "58"], - [CONFIGURING[0:col_width]+r"\w*\b", "58"], - #Job is in the process of completing. Some processes on some nodes may still be active. - [r"\bCG\b", "23"], - [COMPLETING[0:col_width]+r"\w*\b", "23"], - - ## Problem for the user: bold reds - - #Job terminated with non-zero exit code or other failure condition. - [r"\bF\b", "196"], - [FAILED[0:col_width]+r"\w*\b", "196", "bold"], - #Job terminated on deadline. - [r"\bDL\b", "160"], - [DEADLINE[0:col_width]+r"\w*\b", "160", "bold"], - #Job experienced out of memory error. - [r"\bOO\b", "197"], - [OUT_OF_MEMORY[0:col_width]+r"\w*\b", "197", "bold"], - #Job terminated upon reaching its time limit. - [r"\bTO\b", "161"], - [TIMEOUT[0:col_width]+r"\w*\b", "161", "bold"], - - ## Problem for the sysadmin: oranges - - #Job was explicitly cancelled by the user or system administrator. The job may or may not have been initiated. - [r"\bCA\b", "202"], - [CANCELLED[0:col_width]+r"\w*\b", "202", "bold"], - #Job terminated due to launch failure, typically due to a hardware failure (e.g. unable to boot the node or block and the job can not be requeued). - [r"\bBF\b", "166"], - [BOOT_FAIL[0:col_width]+r"\w*\b", "166"], - #Job terminated due to failure of one or more allocated nodes. - [r"\bNF\b", "208"], - [NODE_FAIL[0:col_width]+r"\w*\b", "208"], - - ## Non-blocking events: blues - - #Job terminated due to preemption. - [r"\bPR\b", "105"], - [PREEMPTED[0:col_width]+r"\w*\b", "105", "bold"], - #Job is being held after requested reservation was deleted. - [r"\bRD\b", "25"], - [RESV_DEL_HOLD[0:col_width]+r"\w*\b", "25"], - #Job is being requeued by a federation. - [r"\bRF\b", "26"], - [REQUEUE_FED[0:col_width]+r"\w*\b", "26"], - #Held job is being requeued. - [r"\bRH\b", "27"], - [REQUEUE_HOLD[0:col_width]+r"\w*\b", "27"], - #Completing job is being requeued. - [r"\bRQ\b", "31"], - [REQUEUED[0:col_width]+r"\w*\b", "31"], - #Job is about to change size. - [r"\bRS\b", "32"], - [RESIZING[0:col_width]+r"\w*\b", "32"], - #Sibling was removed from cluster due to other cluster starting the job. - [r"\bRV\b", "33"], - [REVOKED[0:col_width]+r"\w*\b", "33"], - #Job is being signaled. - [r"\bSI\b", "37"], - [SIGNALING[0:col_width]+r"\w*\b", "37"], - #The job was requeued in a special state. This state can be set by users, typically in EpilogSlurmctld, if the job has terminated with a particular exit value. - [r"\bSE\b", "38"], - [SPECIAL_EXIT[0:col_width]+r"\w*\b", "38"], - #Job is staging out files. - [r"\bSO\b", "39"], - [STAGE_OUT[0:col_width]+r"\w*\b", "39"], - #Job has an allocation, but execution has been stopped with SIGSTOP signal. CPUS have been retained by this job. - [r"\bST\b", "44"], - [STOPPED[0:col_width]+r"\w*\b", "44"], - #Job has an allocation, but execution has been suspended and CPUs have been released for other jobs. - [r"\bS\b", "45"], - [SUSPENDED[0:col_width]+r"\w*\b", "45"], - ] diff --git a/colout/colout_valgrind.py b/colout/colout_valgrind.py index 7fc33a2..fe95982 100644 --- a/colout/colout_valgrind.py +++ b/colout/colout_valgrind.py @@ -4,30 +4,30 @@ def theme(context): return context, [ # section title - [r"^(==[0-9]+==\s{1})(Memcheck|Copyright|Using)(.*)$","blue",""], - [r"^(==[0-9]+==\s{1})(Warning)(.*)$","magenta",""], - [r"^(==[0-9]+==\s{1}Command: )(\S*)(.*)$","green,white","normal,bold,normal"], - [r"^(==[0-9]+==\s{1})(HEAP SUMMARY:)(.*)$","green",""], - [r"^(==[0-9]+==\s{1})(All heap blocks were freed)(.*)$","green",""], - [r"^(==[0-9]+==\s{1})(.*[rR]erun.*)$","blue",""], - [r"^(==[0-9]+==\s{1})(Use --.*)$","blue",""], - [r"^(==[0-9]+==\s{1}\S+.*)$","red",""], + ["^(==[0-9]+==\s{1})(Memcheck|Copyright|Using)(.*)$","blue",""], + ["^(==[0-9]+==\s{1})(Warning)(.*)$","magenta",""], + ["^(==[0-9]+==\s{1}Command: )(\S*)(.*)$","green,white","normal,bold,normal"], + ["^(==[0-9]+==\s{1})(HEAP SUMMARY:)(.*)$","green",""], + ["^(==[0-9]+==\s{1})(All heap blocks were freed)(.*)$","green",""], + ["^(==[0-9]+==\s{1})(.*[rR]erun.*)$","blue",""], + ["^(==[0-9]+==\s{1})(Use --.*)$","blue",""], + ["^(==[0-9]+==\s{1}\S+.*)$","red",""], # section explanation - [r"^==[0-9]+==\s{2}(\S+.*)$","orange",""], + ["^==[0-9]+==\s{2}(\S+.*)$","orange",""], # locations adresses - [r"^==[0-9]+==\s{4}([atby]{2}) (0x0): (\?{3})", + ["^==[0-9]+==\s{4}([atby]{2}) (0x0): (\?{3})", "blue,yellow,red", "normal,normal,bold"], - [r"^==[0-9]+==\s{4}([atby]{2}) (0x)([^:]*:) (\S+)", + ["^==[0-9]+==\s{4}([atby]{2}) (0x)([^:]*:) (\S+)", "blue,blue,blue,none", "normal"], # locations: library - [r"\(in (.*)\)", "cyan", "normal"], + ["\(in (.*)\)", "cyan", "normal"], # locations: file - [r"\(([^\.]*\.[^:]+):([0-9]+)\)", "white,yellow", "bold,normal"], + ["\(([^\.]*\.[^:]+):([0-9]+)\)", "white,yellow", "bold,normal"], # leak summary - [r"^==[0-9]+==\s{4}(definitely lost): .* (in) .*","red","bold"], - [r"^==[0-9]+==\s{4}(indirectly lost): .* (in) .*","orange","bold"], - [r"^==[0-9]+==\s{6}(possibly lost): .* (in) .*","yellow","bold"], - [r"^==[0-9]+==\s{4}(still reachable): .* (in) .*","green","bold"], - [r"^==[0-9]+==\s{9}(suppressed): .* (in) .*","cyan","bold"], + ["^==[0-9]+==\s{4}(definitely lost): .* (in) .*","red","bold"], + ["^==[0-9]+==\s{4}(indirectly lost): .* (in) .*","orange","bold"], + ["^==[0-9]+==\s{6}(possibly lost): .* (in) .*","yellow","bold"], + ["^==[0-9]+==\s{4}(still reachable): .* (in) .*","green","bold"], + ["^==[0-9]+==\s{9}(suppressed): .* (in) .*","cyan","bold"], ] diff --git a/colout/colout_vivado.py b/colout/colout_vivado.py deleted file mode 100644 index aa74216..0000000 --- a/colout/colout_vivado.py +++ /dev/null @@ -1,26 +0,0 @@ - -def theme(context): - # Theme for coloring AMD/Xilinx Vivado IDE synthesis and implementation output - return context,[ - [ r"^\s*\*+.+$", "green" ], - [ "^#.+", "green" ], - - [ "^.+ Checksum: .+$", "green" ], - - [ r"^.+Time \(s\).+", "green" ], - [ r"^Time \(s\).+", "green" ], - - [ r"Estimated Timing Summary \|.+\|.+\|", "cyan", "bold" ], - [ r"Intermediate Timing Summary \|.+\|.+\|", "cyan", "bold" ], - - [ "^INFO:", "white", "bold" ], - [ "^WARNING:.+$", "yellow" ], - [ "^CRITICAL WARNING:.+$", "red" ], - [ "^ERROR:.+$", "red" ], - - [ "^Phase [0-9]+.[0-9]+.[0-9]+.[0-9]+.+$", "magenta", "bold" ], - [ "^Phase [0-9]+.[0-9]+.[0-9]+.+$", "magenta", "bold" ], - [ "^Phase [0-9]+.[0-9]+.+$", "magenta", "bold" ], - [ "^Phase [0-9]+.+$", "magenta", "bold" ] - ] - diff --git a/colout_logo.svg b/colout_logo.svg deleted file mode 100644 index 8db7984..0000000 --- a/colout_logo.svg +++ /dev/null @@ -1,612 +0,0 @@ - - - - - colout logo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - colout logo - 2022-08-31 - - - nojhan - - - - - - diff --git a/setup.py b/setup.py index 6bf5211..887c0eb 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ Development Status :: 5 - Production/Stable License :: OSI Approved :: GNU General Public License v3 (GPLv3) Operating System :: POSIX Operating System :: POSIX :: Linux -Programming Language :: Python :: 3 +Programming Language :: Python :: 3 :: Only Programming Language :: Python :: 3.5 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7