xref: /freebsd/stand/lua/color.lua (revision eb69d1f144a6fcc765d1b9d44a5ae8082353e70b)
1--
2-- Copyright (c) 2015 Pedro Souza <pedrosouza@freebsd.org>
3-- All rights reserved.
4--
5-- Redistribution and use in source and binary forms, with or without
6-- modification, are permitted provided that the following conditions
7-- are met:
8-- 1. Redistributions of source code must retain the above copyright
9--    notice, this list of conditions and the following disclaimer.
10-- 2. Redistributions in binary form must reproduce the above copyright
11--    notice, this list of conditions and the following disclaimer in the
12--    documentation and/or other materials provided with the distribution.
13--
14-- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17-- ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24-- SUCH DAMAGE.
25--
26-- $FreeBSD$
27--
28
29local color = {};
30
31local core = require("core");
32
33color.BLACK   = 0;
34color.RED     = 1;
35color.GREEN   = 2;
36color.YELLOW  = 3;
37color.BLUE    = 4;
38color.MAGENTA = 5;
39color.CYAN    = 6;
40color.WHITE   = 7;
41
42color.DEFAULT = 0;
43color.BRIGHT  = 1;
44color.DIM     = 2;
45
46function color.isEnabled()
47	local c = loader.getenv("loader_color");
48	if (c ~= nil) then
49		if (c:lower() == "no") or (c == "0") then
50			return false;
51		end
52	end
53	return (not core.bootserial());
54end
55
56color.disabled = (not color.isEnabled());
57
58function color.escapef(c)
59	if (color.disabled) then
60		return c;
61	end
62	return "\027[3"..c.."m";
63end
64
65function color.escapeb(c)
66	if (color.disabled) then
67		return c;
68	end
69	return "\027[4"..c.."m";
70end
71
72function color.escape(fg, bg, att)
73	if (color.disabled) then
74		return "";
75	end
76	if (not att) then
77		att = ""
78	else
79		att = att..";";
80	end
81	return "\027["..att.."3"..fg..";4"..bg.."m";
82end
83
84function color.default()
85	if (color.disabled) then
86		return "";
87	end
88	return "\027[0;37;40m";
89end
90
91function color.highlight(str)
92	if (color.disabled) then
93		return str;
94	end
95	return "\027[1m"..str.."\027[0m";
96end
97
98return color;
99