aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/color.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/color.h')
-rw-r--r--src/color.h176
1 files changed, 68 insertions, 108 deletions
diff --git a/src/color.h b/src/color.h
index 1faa35a6..2466e9e8 100644
--- a/src/color.h
+++ b/src/color.h
@@ -2,171 +2,131 @@
#ifndef FISH_COLOR_H
#define FISH_COLOR_H
+#include <stdbool.h>
#include <string.h>
#include <string>
+
#include "common.h"
-/* 24 bit color */
-struct color24_t
-{
+// 24-bit color.
+struct color24_t {
unsigned char rgb[3];
};
-/* A type that represents a color. We work hard to keep it at a size of 4 bytes. */
-class rgb_color_t
-{
-
- /* Types */
- enum
- {
- type_none,
- type_named,
- type_rgb,
- type_normal,
- type_reset
- };
- unsigned char type:4;
-
- /* Flags */
- enum
- {
- flag_bold = 1 << 0,
- flag_underline = 1 << 1
- };
- unsigned char flags:4;
-
- union
- {
- unsigned char name_idx; //0-10
+/// A type that represents a color. We work hard to keep it at a size of 4 bytes.
+class rgb_color_t {
+ // Types
+ enum { type_none, type_named, type_rgb, type_normal, type_reset };
+ unsigned char type : 4;
+
+ // Flags
+ enum { flag_bold = 1 << 0, flag_underline = 1 << 1 };
+ unsigned char flags : 4;
+
+ union {
+ unsigned char name_idx; // 0-10
color24_t color;
} data;
- /** Try parsing a special color name like "normal" */
+ /// Try parsing a special color name like "normal".
bool try_parse_special(const wcstring &str);
- /** Try parsing an rgb color like "#F0A030" */
+ /// Try parsing an rgb color like "#F0A030".
bool try_parse_rgb(const wcstring &str);
- /** Try parsing an explicit color name like "magenta" */
+ /// Try parsing an explicit color name like "magenta".
bool try_parse_named(const wcstring &str);
- /* Parsing entry point */
+ /// Parsing entry point.
void parse(const wcstring &str);
- /** Private constructor */
- explicit rgb_color_t(unsigned char t, unsigned char i=0);
-
-public:
+ /// Private constructor.
+ explicit rgb_color_t(unsigned char t, unsigned char i = 0);
- /** Default constructor of type none */
+ public:
+ /// Default constructor of type none.
explicit rgb_color_t() : type(type_none), flags(), data() {}
- /** Parse a color from a string */
+ /// Parse a color from a string.
explicit rgb_color_t(const wcstring &str);
explicit rgb_color_t(const std::string &str);
- /** Returns white */
+ /// Returns white.
static rgb_color_t white();
- /** Returns black */
+ /// Returns black.
static rgb_color_t black();
- /** Returns the reset special color */
+ /// Returns the reset special color.
static rgb_color_t reset();
- /** Returns the normal special color */
+ /// Returns the normal special color.
static rgb_color_t normal();
- /** Returns the none special color */
+ /// Returns the none special color.
static rgb_color_t none();
- /** Returns whether the color is the normal special color */
- bool is_normal(void) const
- {
- return type == type_normal;
- }
+ /// Returns whether the color is the normal special color.
+ bool is_normal(void) const { return type == type_normal; }
- /** Returns whether the color is the reset special color */
- bool is_reset(void) const
- {
- return type == type_reset;
- }
+ /// Returns whether the color is the reset special color.
+ bool is_reset(void) const { return type == type_reset; }
- /** Returns whether the color is the none special color */
- bool is_none(void) const
- {
- return type == type_none;
- }
+ /// Returns whether the color is the none special color.
+ bool is_none(void) const { return type == type_none; }
- /** Returns whether the color is a named color (like "magenta") */
- bool is_named(void) const
- {
- return type == type_named;
- }
+ /// Returns whether the color is a named color (like "magenta").
+ bool is_named(void) const { return type == type_named; }
- /** Returns whether the color is specified via RGB components */
- bool is_rgb(void) const
- {
- return type == type_rgb;
- }
+ /// Returns whether the color is specified via RGB components.
+ bool is_rgb(void) const { return type == type_rgb; }
- /** Returns whether the color is special, that is, not rgb or named */
- bool is_special(void) const
- {
- return type != type_named && type != type_rgb;
- }
+ /// Returns whether the color is special, that is, not rgb or named.
+ bool is_special(void) const { return type != type_named && type != type_rgb; }
- /** Returns a description of the color */
+ /// Returns a description of the color.
wcstring description() const;
- /** Returns the name index for the given color. Requires that the color be named or RGB. */
+ /// Returns the name index for the given color. Requires that the color be named or RGB.
unsigned char to_name_index() const;
- /** Returns the term256 index for the given color. Requires that the color be RGB. */
+ /// Returns the term256 index for the given color. Requires that the color be RGB.
unsigned char to_term256_index() const;
- /** Returns the 24 bit color for the given color. Requires that the color be RGB. */
+ /// Returns the 24 bit color for the given color. Requires that the color be RGB.
color24_t to_color24() const;
- /** Returns whether the color is bold */
- bool is_bold() const
- {
- return !!(flags & flag_bold);
- }
+ /// Returns whether the color is bold.
+ bool is_bold() const { return !!(flags & flag_bold); }
- /** Set whether the color is bold */
- void set_bold(bool x)
- {
- if (x) flags |= flag_bold;
- else flags &= ~flag_bold;
+ /// Set whether the color is bold.
+ void set_bold(bool x) {
+ if (x)
+ flags |= flag_bold;
+ else
+ flags &= ~flag_bold;
}
- /** Returns whether the color is underlined */
- bool is_underline() const
- {
- return !!(flags & flag_underline);
- }
+ /// Returns whether the color is underlined.
+ bool is_underline() const { return !!(flags & flag_underline); }
- /** Set whether the color is underlined */
- void set_underline(bool x)
- {
- if (x) flags |= flag_underline;
- else flags &= ~flag_underline;
+ /// Set whether the color is underlined.
+ void set_underline(bool x) {
+ if (x)
+ flags |= flag_underline;
+ else
+ flags &= ~flag_underline;
}
- /** Compare two colors for equality */
- bool operator==(const rgb_color_t &other) const
- {
- return type == other.type && ! memcmp(&data, &other.data, sizeof data);
+ /// Compare two colors for equality.
+ bool operator==(const rgb_color_t &other) const {
+ return type == other.type && !memcmp(&data, &other.data, sizeof data);
}
- /** Compare two colors for inequality */
- bool operator!=(const rgb_color_t &other) const
- {
- return !(*this == other);
- }
+ /// Compare two colors for inequality.
+ bool operator!=(const rgb_color_t &other) const { return !(*this == other); }
- /** Returns the names of all named colors */
+ /// Returns the names of all named colors.
static wcstring_list_t named_color_names(void);
};