xref: /freebsd/stand/lua/color.lua (revision 74fe6c29fb7eef3418d7919dcd41dc1a04a982a1)
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 color.escape(color.WHITE, color.BLACK, color.DEFAULT)
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