Internals

- Modified color processing so that it can be disabled completely at
  compile time.  This is to assist the Windows port.
This commit is contained in:
Paul Beckingham 2012-03-03 09:08:46 -05:00
parent d230ea4001
commit d4f85484df
4 changed files with 43 additions and 0 deletions

View file

@ -32,6 +32,7 @@
#include <sstream> #include <sstream>
#include <vector> #include <vector>
#include <algorithm> #include <algorithm>
#include <main.h>
#include <Color.h> #include <Color.h>
#include <text.h> #include <text.h>
#include <i18n.h> #include <i18n.h>
@ -76,12 +77,14 @@ Color::Color (const Color& other)
Color::Color (unsigned int c) Color::Color (unsigned int c)
: _value (0) : _value (0)
{ {
#ifdef FEATURE_COLOR
if (!(c & _COLOR_HASFG)) _value &= ~_COLOR_FG; if (!(c & _COLOR_HASFG)) _value &= ~_COLOR_FG;
if (!(c & _COLOR_HASBG)) _value &= ~_COLOR_BG; if (!(c & _COLOR_HASBG)) _value &= ~_COLOR_BG;
_value = c & (_COLOR_256 | _COLOR_HASBG | _COLOR_HASFG |_COLOR_UNDERLINE | _value = c & (_COLOR_256 | _COLOR_HASBG | _COLOR_HASFG |_COLOR_UNDERLINE |
_COLOR_INVERSE | _COLOR_BOLD | _COLOR_BRIGHT | _COLOR_BG | _COLOR_INVERSE | _COLOR_BOLD | _COLOR_BRIGHT | _COLOR_BG |
_COLOR_FG); _COLOR_FG);
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -99,6 +102,7 @@ Color::Color (unsigned int c)
Color::Color (const std::string& spec) Color::Color (const std::string& spec)
: _value (0) : _value (0)
{ {
#ifdef FEATURE_COLOR
// By converting underscores to spaces, we inherently support the old "on_red" // By converting underscores to spaces, we inherently support the old "on_red"
// style of specifying background colors. We consider underscores to be // style of specifying background colors. We consider underscores to be
// deprecated. // deprecated.
@ -230,23 +234,27 @@ Color::Color (const std::string& spec)
// Now combine the fg and bg into a single color. // Now combine the fg and bg into a single color.
_value = fg_value; _value = fg_value;
blend (Color (bg_value)); blend (Color (bg_value));
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Color::Color (color_id fg) Color::Color (color_id fg)
: _value (0) : _value (0)
{ {
#ifdef FEATURE_COLOR
if (fg != Color::nocolor) if (fg != Color::nocolor)
{ {
_value |= _COLOR_HASFG; _value |= _COLOR_HASFG;
_value |= fg; _value |= fg;
} }
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Color::Color (color_id fg, color_id bg) Color::Color (color_id fg, color_id bg)
: _value (0) : _value (0)
{ {
#ifdef FEATURE_COLOR
if (bg != Color::nocolor) if (bg != Color::nocolor)
{ {
_value |= _COLOR_HASBG; _value |= _COLOR_HASBG;
@ -258,12 +266,14 @@ Color::Color (color_id fg, color_id bg)
_value |= _COLOR_HASFG; _value |= _COLOR_HASFG;
_value |= fg; _value |= fg;
} }
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Color::Color (color_id fg, color_id bg, bool underline, bool bold, bool bright) Color::Color (color_id fg, color_id bg, bool underline, bool bold, bool bright)
: _value (0) : _value (0)
{ {
#ifdef FEATURE_COLOR
_value |= ((underline ? 1 : 0) << 18) _value |= ((underline ? 1 : 0) << 18)
| ((bold ? 1 : 0) << 17) | ((bold ? 1 : 0) << 17)
| ((bright ? 1 : 0) << 16); | ((bright ? 1 : 0) << 16);
@ -279,6 +289,7 @@ Color::Color (color_id fg, color_id bg, bool underline, bool bold, bool bright)
_value |= _COLOR_HASFG; _value |= _COLOR_HASFG;
_value |= fg; _value |= fg;
} }
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -299,6 +310,7 @@ Color& Color::operator= (const Color& other)
Color::operator std::string () const Color::operator std::string () const
{ {
std::string description; std::string description;
#ifdef FEATURE_COLOR
if (_value & _COLOR_BOLD) description += "bold"; if (_value & _COLOR_BOLD) description += "bold";
if (_value & _COLOR_UNDERLINE) if (_value & _COLOR_UNDERLINE)
@ -319,6 +331,7 @@ Color::operator std::string () const
description += " " + bg (); description += " " + bg ();
} }
#endif
return description; return description;
} }
@ -334,6 +347,7 @@ Color::operator int () const
// other take precedence. // other take precedence.
void Color::blend (const Color& other) void Color::blend (const Color& other)
{ {
#ifdef FEATURE_COLOR
Color c (other); Color c (other);
_value |= (c._value & _COLOR_UNDERLINE); // Always inherit underline. _value |= (c._value & _COLOR_UNDERLINE); // Always inherit underline.
_value |= (c._value & _COLOR_INVERSE); // Always inherit inverse. _value |= (c._value & _COLOR_INVERSE); // Always inherit inverse.
@ -382,11 +396,13 @@ void Color::blend (const Color& other)
_value |= (c._value & _COLOR_BG); // Apply other color. _value |= (c._value & _COLOR_BG); // Apply other color.
} }
} }
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void Color::upgrade () void Color::upgrade ()
{ {
#ifdef FEATURE_COLOR
if (!(_value & _COLOR_256)) if (!(_value & _COLOR_256))
{ {
if (_value & _COLOR_HASFG) if (_value & _COLOR_HASFG)
@ -409,6 +425,7 @@ void Color::upgrade ()
_value |= _COLOR_256; _value |= _COLOR_256;
} }
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -425,6 +442,7 @@ void Color::upgrade ()
// 256 bg \033[48;5;Nm // 256 bg \033[48;5;Nm
std::string Color::colorize (const std::string& input) std::string Color::colorize (const std::string& input)
{ {
#ifdef FEATURE_COLOR
if (_value == 0) if (_value == 0)
return input; return input;
@ -505,6 +523,7 @@ std::string Color::colorize (const std::string& input)
result << "m" << input << "\033[0m"; result << "m" << input << "\033[0m";
return result.str (); return result.str ();
} }
#endif
return input; return input;
} }
@ -513,6 +532,7 @@ std::string Color::colorize (const std::string& input)
// Remove color codes from a string. // Remove color codes from a string.
std::string Color::strip (const std::string& input) std::string Color::strip (const std::string& input)
{ {
#ifdef FEATURE_COLOR
int length = input.length (); int length = input.length ();
bool inside = false; bool inside = false;
std::string output; std::string output;
@ -533,13 +553,20 @@ std::string Color::strip (const std::string& input)
} }
return output; return output;
#else
return input;
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
std::string Color::colorize (const std::string& input, const std::string& spec) std::string Color::colorize (const std::string& input, const std::string& spec)
{ {
#ifdef FEATURE_COLOR
Color c (spec); Color c (spec);
return c.colorize (input); return c.colorize (input);
#else
return input;
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -561,6 +588,7 @@ int Color::find (const std::string& input)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
std::string Color::fg () const std::string Color::fg () const
{ {
#ifdef FEATURE_COLOR
int index = _value & _COLOR_FG; int index = _value & _COLOR_FG;
if (_value & _COLOR_256) if (_value & _COLOR_256)
@ -578,6 +606,7 @@ std::string Color::fg () const
if (allColors[i].index == index) if (allColors[i].index == index)
return allColors[i].english_name; return allColors[i].english_name;
} }
#endif
return ""; return "";
} }
@ -585,6 +614,7 @@ std::string Color::fg () const
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
std::string Color::bg () const std::string Color::bg () const
{ {
#ifdef FEATURE_COLOR
int index = (_value & _COLOR_BG) >> 8; int index = (_value & _COLOR_BG) >> 8;
if (_value & _COLOR_256) if (_value & _COLOR_256)
@ -602,6 +632,7 @@ std::string Color::bg () const
if (allColors[i].index == index) if (allColors[i].index == index)
return allColors[i].english_name; return allColors[i].english_name;
} }
#endif
return ""; return "";
} }

View file

@ -389,6 +389,7 @@ int Context::dispatch (std::string &out)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool Context::color () bool Context::color ()
{ {
#ifdef FEATURE_COLOR
if (determine_color_use) if (determine_color_use)
{ {
// What the config says. // What the config says.
@ -420,6 +421,9 @@ bool Context::color ()
// Cached result. // Cached result.
return use_color; return use_color;
#else
return false;
#endif
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View file

@ -30,6 +30,7 @@
#include <sstream> #include <sstream>
#include <ViewText.h> #include <ViewText.h>
#include <Context.h> #include <Context.h>
#include <main.h>
#include <Color.h> #include <Color.h>
#include <text.h> #include <text.h>
#include <i18n.h> #include <i18n.h>
@ -52,6 +53,7 @@ int CmdColor::execute (std::string& output)
{ {
int rc = 0; int rc = 0;
#ifdef FEATURE_COLOR
// Get the non-attribute, non-fancy command line arguments. // Get the non-attribute, non-fancy command line arguments.
bool legend = false; bool legend = false;
std::vector <std::string> words = context.a3.extract_words (); std::vector <std::string> words = context.a3.extract_words ();
@ -262,6 +264,10 @@ int CmdColor::execute (std::string& output)
} }
output = out.str (); output = out.str ();
#else
output = "Color not supported.\n";
#endif
return rc; return rc;
} }

View file

@ -29,6 +29,8 @@
#define INCLUDED_MAIN #define INCLUDED_MAIN
#define L10N // Localization complete. #define L10N // Localization complete.
#define FEATURE_COLOR 1 // Enable color.
#include <string> #include <string>
#include <vector> #include <vector>
#include <map> #include <map>