summaryrefslogtreecommitdiff
path: root/src/rebar_colour.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebar_colour.erl')
-rw-r--r--src/rebar_colour.erl101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/rebar_colour.erl b/src/rebar_colour.erl
new file mode 100644
index 0000000..bff080d
--- /dev/null
+++ b/src/rebar_colour.erl
@@ -0,0 +1,101 @@
+-module(rebar_colour).
+
+-export([format/1, format/2]).
+
+-define(NR, "\033[0;31m").
+-define(NG, "\033[0;32m").
+-define(NY, "\033[0;33m").
+-define(NB, "\033[0;34m").
+-define(NM, "\033[0;35m").
+-define(NC, "\033[0;36m").
+-define(NW, "\033[0;37m").
+-define(BR, "\033[1;31m").
+-define(BG, "\033[1;32m").
+-define(BY, "\033[1;33m").
+-define(BB, "\033[1;34m").
+-define(BM, "\033[1;35m").
+-define(BC, "\033[1;36m").
+-define(BW, "\033[1;37m").
+-define(R, "\033[0m").
+
+format(Fmt) ->
+ format(Fmt, []).
+format(Fmt, Args) ->
+ io_lib:format(cfmt(Fmt), Args).
+
+%% FROM https://github.com/erlware/erlware_commons/blob/49bc69e35a282bde4a0a6a8f211b5f77d8585256/src/ec_cmd_log.erl
+%% @doc Query the term enviroment
+%% For reasons of simplicity, we don't parse terminal capabilities yet, although
+%% a later version could do so. Rather, we provide a simple match-list of terminal
+%% capabilities.
+%% @end
+-spec query_term_env() -> full | dumb.
+query_term_env() ->
+ term_capabilities(os:getenv("TERM")).
+
+-spec term_capabilities(string()) -> full | dumb.
+term_capabilities("xterm") -> full;
+term_capabilities("dumb") -> dumb;
+term_capabilities(_) -> full. %% Default to the backwards compatible version.
+
+
+cfmt(S) ->
+ cfmt(S, query_term_env() =:= full).
+
+cfmt(S, Enabled) ->
+ lists:flatten(cfmt_(S, ?R, Enabled)).
+
+cfmt_([$~,$!,_C | S], Last, false) ->
+ cfmt_(S, Last, false);
+
+cfmt_([$~,$!,$! | S], _Last, Enabled) ->
+ [?R | cfmt_(S, ?R, Enabled)];
+
+cfmt_([$~,$!,$r | S], _Last, Enabled) ->
+ [?NR | cfmt_(S, ?NR, Enabled)];
+cfmt_([$~,$!,$R | S], _Last, Enabled) ->
+ [?BR | cfmt_(S, ?BR, Enabled)];
+
+cfmt_([$~,$!,$g | S], _Last, Enabled) ->
+ [?NG | cfmt_(S, ?NG, Enabled)];
+cfmt_([$~,$!,$G | S], _Last, Enabled) ->
+ [?BG | cfmt_(S, ?BG, Enabled)];
+
+cfmt_([$~,$!,$y | S], _Last, Enabled) ->
+ [?NY | cfmt_(S, ?NY, Enabled)];
+cfmt_([$~,$!,$Y | S], _Last, Enabled) ->
+ [?BY | cfmt_(S, ?BY, Enabled)];
+
+cfmt_([$~,$!,$b | S], _Last, Enabled) ->
+ [?NB | cfmt_(S, ?NB, Enabled)];
+cfmt_([$~,$!,$B | S], _Last, Enabled) ->
+ [?BB | cfmt_(S, ?BB, Enabled)];
+
+cfmt_([$~,$!,$m | S], _Last, Enabled) ->
+ [?NM | cfmt_(S, ?NM, Enabled)];
+cfmt_([$~,$!,$M | S], _Last, Enabled) ->
+ [?BM | cfmt_(S, ?BM, Enabled)];
+
+cfmt_([$~,$!,$c | S], _Last, Enabled) ->
+ [?NC | cfmt_(S, ?NC, Enabled)];
+cfmt_([$~,$!,$C | S], _Last, Enabled) ->
+ [?BC | cfmt_(S, ?BC, Enabled)];
+
+cfmt_([$~,$!,$w | S], _Last, Enabled) ->
+ [?NW | cfmt_(S, ?NW, Enabled)];
+cfmt_([$~,$!,$W | S], _Last, Enabled) ->
+ [?BW | cfmt_(S, ?BW, Enabled)];
+
+cfmt_([$~,$~ | S], Last, Enabled) ->
+ [$~,$~ | cfmt_(S, Last, Enabled)];
+
+cfmt_([$~,$s| S], Last, Enabled) ->
+ [$~,$s, Last | cfmt_(S, Last, Enabled)];
+
+cfmt_([C | S], Last, Enabled) ->
+ [C | cfmt_(S, Last, Enabled)];
+
+cfmt_([], _Last, false) ->
+ "";
+cfmt_([], _Last, _Enabled) ->
+ ?R.