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