3#include "di/function/value.h"
4#include "di/parser/basic/match_zero_or_more.h"
5#include "di/reflect/prelude.h"
6#include "di/types/floats.h"
7#include "di/types/integers.h"
39 static auto from_name(di::StringView color) -> di::Result<Color>;
40 static auto from_string(di::StringView color) -> di::Result<Color>;
72 auto operator==(
Color const& other) const ->
bool = default;
73 auto operator<=>(
Color const& other) const = default;
75 constexpr friend auto
tag_invoke(di::Tag<di::parser::create_parser_in_place>, di::InPlaceType<
Color>) {
76 return di::parser::match_zero_or_more(di::function::value(
true))
77 << []<
typename Context>(Context& context,
78 di::concepts::CopyConstructible
auto results) -> di::Result<Color> {
79 using Enc = di::meta::Encoding<Context>;
80 auto encoding = context.encoding();
82 auto const input = di::container::string::StringViewImpl<Enc> {
83 di::encoding::unicode_code_point_unwrap(encoding, results.begin()),
84 di::encoding::unicode_code_point_unwrap(encoding, results.end())
92constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<Color::Type>) {
94 return di::make_enumerators<
"Color::Type">(di::enumerator<
"Default", Default>, di::enumerator<
"Palette",
Palette>,
95 di::enumerator<
"Custom", Custom>, di::enumerator<
"Dynamic", Dynamic>);
98constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<Color::Palette>) {
100 return di::make_enumerators<
"Color::Palette">(
101 di::enumerator<
"Black", Black>, di::enumerator<
"Red", Red>, di::enumerator<
"Green", Green>,
102 di::enumerator<
"Brown", Yellow>, di::enumerator<
"Blue", Blue>, di::enumerator<
"Magenta", Magenta>,
103 di::enumerator<
"Cyan", Cyan>, di::enumerator<
"LightGrey", LightGrey>, di::enumerator<
"DarkGrey", DarkGrey>,
104 di::enumerator<
"LightRed", LightRed>, di::enumerator<
"LightGreen", LightGreen>,
105 di::enumerator<
"Yellow", LightYellow>, di::enumerator<
"LightBlue", LightBlue>,
106 di::enumerator<
"LightMagenta", LightMagenta>, di::enumerator<
"LightCyan", LightCyan>,
107 di::enumerator<
"White", White>);
Definition absolute_position.h:6
constexpr auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< Color::Type >)
Definition color.h:92
static auto from_name(di::StringView color) -> di::Result< Color >
Definition color.cpp:774
u8 g
Definition color.h:49
auto value_or(Color other) const
Definition color.h:68
auto is_palette() const
Definition color.h:53
auto dimmed(u32 dim_factor) const -> Color
Definition color.cpp:837
auto is_dynamic() const
Compute the perceived brightness of a color.
Definition color.h:55
auto is_default() const
Definition color.h:52
void IsAtom
Definition color.h:11
auto brightness() const -> f64
Dim the given color by a percentage.
Definition color.cpp:825
constexpr Color(Type t)
Definition color.h:45
Type
Definition color.h:13
@ Palette
Color is a palette color (256 colors are available).
Definition color.h:15
@ Default
Color is the default (unset SGR).
Definition color.h:14
@ Custom
Color is true color (r, b, g fully specified).
Definition color.h:16
@ Dynamic
Color is dynamic (e.g. for selection use reverse video).
Definition color.h:17
constexpr Color(u8 r, u8 g, u8 b)
Definition color.h:44
Type type
Definition color.h:47
auto to_string() const -> di::String
Definition color.cpp:812
u8 r
Definition color.h:48
constexpr Color(Palette c)
Definition color.h:43
auto is_custom() const
Definition color.h:54
constexpr friend auto tag_invoke(di::Tag< di::parser::create_parser_in_place >, di::InPlaceType< Color >)
Definition color.h:75
u8 b
Definition color.h:50
static auto from_string(di::StringView color) -> di::Result< Color >
Definition color.cpp:783
Palette
Definition color.h:20
@ LightRed
Definition color.h:30
@ LightGrey
Definition color.h:28
@ Cyan
Definition color.h:27
@ White
Definition color.h:36
@ Black
Definition color.h:21
@ DarkGrey
Definition color.h:29
@ Yellow
Definition color.h:24
@ Green
Definition color.h:23
@ Magenta
Definition color.h:26
@ LightCyan
Definition color.h:35
@ Blue
Definition color.h:25
@ LightBlue
Definition color.h:33
@ Red
Definition color.h:22
@ LightYellow
Definition color.h:32
@ LightGreen
Definition color.h:31
@ LightMagenta
Definition color.h:34