xref: /freebsd/stand/lua/color.lua (revision 2bb86aefecd5d75e7c4f3197e7c9d4357e57511a)
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(color_value)
62	if color.disabled then
63		return color_value
64	end
65	return core.KEYSTR_CSI .. "3" .. color_value .. "m"
66end
67
68function color.escapeb(color_value)
69	if color.disabled then
70		return color_value
71	end
72	return core.KEYSTR_CSI .. "4" .. color_value .. "m"
73end
74
75function color.escape(fg_color, bg_color, attribute)
76	if color.disabled then
77		return ""
78	end
79	if attribute == nil then
80		attribute = ""
81	else
82		attribute = attribute .. ";"
83	end
84	return core.KEYSTR_CSI .. attribute ..
85	    "3" .. fg_color .. ";4" .. bg_color .. "m"
86end
87
88function color.default()
89	if color.disabled then
90		return ""
91	end
92	return core.KEYSTR_CSI .. "0;37;40m"
93end
94
95function color.highlight(str)
96	if color.disabled then
97		return str
98	end
99	return core.KEYSTR_CSI .. "1m" .. str .. core.KEYSTR_CSI .. "0m"
100end
101
102return color
103