aabf4a3eff2a07fa53e695ec2a078f24cc1bd4cd
[calu.git] / 3b_sim / ccolor.h
1 #ifndef COLOR_H
2 #define COLOR_H
3
4 //
5 //taken from
6 //http://www.velocityreviews.com/forums/t279115-design-question-a-little-c-header-for-colorizing-text-in-linux-comments-ideas.html
7
8 #include <iostream>
9 using namespace std;
10
11 enum ColorName
12 {
13         black,
14         red,
15         green,
16         brown,
17         blue,
18         magenta,
19         cyan,
20         gray,
21
22         darkgray,
23         lightred,
24         lightgreen,
25         yellow,
26         lightblue,
27         lightmagenta,
28         lightcyan,
29         white
30 };
31
32
33 struct color
34 {
35         color(ColorName f = white, ColorName b = black) : fore(f), back(b) {}
36
37         ColorName fore;
38         ColorName back;
39 };
40
41
42 inline ostream& operator<<(ostream& o, const color& c)
43 {
44         o << "\033[";
45
46         if(c.back != black) {
47                 o << "4" << c.back << ";";
48         }
49         else {
50                 o << "0;";
51         }
52
53         if(c.fore > gray) {
54                 // bold color
55                 o << "1;3" << c.fore - gray - 1;
56         }
57         else {
58                 o << "0;3" << c.fore ;
59         }
60
61         return o << "m";
62
63 }
64
65 #endif