libcopp  1.2.0
shell_font.h
Go to the documentation of this file.
1 /*
2  * shell_fonts.h
3  *
4  * Created on: 2014年3月11日
5  * Author: owent
6  *
7  * Released under the MIT license
8  * @history
9  * 2015-06-30 增加Windows控制台支持,增加通用输出流
10  */
11 
12 #ifndef UTIL_CLI_SHELLFONT_H
13 #define UTIL_CLI_SHELLFONT_H
14 
15 #pragma once
16 
17 #include <iostream>
18 #include <string>
19 #include <map>
20 
21 namespace util {
22  namespace cli {
23 
24  //下面是编码表
25  //
26  //编码 颜色/动作
27  //0 重新设置属性到缺省设置
28  //1 设置粗体
29  //2 设置一半亮度(模拟彩色显示器的颜色)
30  //4 设置下划线(模拟彩色显示器的颜色)
31  //5 设置闪烁
32  //7 设置反向图象
33  //22 设置一般密度
34  //24 关闭下划线
35  //25 关闭闪烁
36  //27 关闭反向图象
37  //30 设置黑色前景
38  //31 设置红色前景
39  //32 设置绿色前景
40  //33 设置棕色前景
41  //34 设置蓝色前景
42  //35 设置紫色前景
43  //36 设置青色前景
44  //37 设置白色前景
45  //38 在缺省的前景颜色上设置下划线
46  //39 在缺省的前景颜色上关闭下划线
47  //40 设置黑色背景
48  //41 设置红色背景
49  //42 设置绿色背景
50  //43 设置棕色背景
51  //44 设置蓝色背景
52  //45 设置紫色背景
53  //46 设置青色背景
54  //47 设置白色背景
55  //49 设置缺省黑色背景
56 
59  {
65  };
66 
68  {
69  SHELL_FONT_COLOR_BLACK = 0x0100, //30
77  };
78 
80  {
89  };
90  };
91 
92 
93  class shell_font
94  {
95  private:
96  int m_iFlag;
97  public:
102  shell_font(int iFlag = 0);
103  virtual ~shell_font();
104 
110  std::string GenerateString(const std::string& strInput);
111 
118  static std::string GenerateString(const std::string& strInput, int iFlag);
119 
125  static std::string GetStyleCode(int iFlag);
126 
131  std::string GetStyleCode();
132 
137  static std::string GetStyleCloseCode();
138  };
139 
140 
146 #ifdef _MSC_VER
147 
148 #include <Windows.h>
149 
150 #define SHELL_FONT_USING_WIN32_CONSOLE
151 
152 #endif
153 
154 
155  class shell_stream {
156  public:
157  typedef std::ostream stream_t;
159  public:
161 
162  private:
163  stream_t* pOs;
164 #ifdef SHELL_FONT_USING_WIN32_CONSOLE
165  HANDLE hOsHandle;
166 #endif
167  mutable int flag;
168 
169  // 进允许内部复制构造
171  shell_stream_opr& operator=(const shell_stream_opr&);
172 
173  friend class shell_stream;
174  public:
175  shell_stream_opr(stream_t* os);
176  ~shell_stream_opr();
177 
178 
179  template<typename Ty>
180  const shell_stream_opr& operator<<(const Ty& v) const {
181  close();
182  (*pOs) << v;
183  return (*this);
184  }
185 
187  open(style);
188  return (*this);
189  }
190 
192  open(style);
193  return (*this);
194  }
195 
197  open(style);
198  return (*this);
199  }
200 
201  const shell_stream_opr& operator<<(stream_t& (*fn)(stream_t&)) const {
202  close();
203  (*pOs) << fn;
204  return (*this);
205  }
206 
207  const shell_stream_opr& open(int flag) const;
208 
209  void close() const;
210 
211  void reset() const;
212 
213  operator stream_t&() const {
214  return *pOs;
215  }
216 
217  operator const stream_t&() const {
218  return *pOs;
219  }
220  };
221 
222 
223  public:
224  shell_stream(stream_t& stream = std::cout);
225 
227  return shell_stream_opr(m_pOs);
228  }
229 
230  private:
231  stream_t* m_pOs;
232  };
233 
234  }
235 }
236 
237 #endif /* SHELLFONT_H_ */
const shell_stream_opr & operator<<(shell_font_style::shell_font_spec style) const
Definition: shell_font.h:186
const shell_stream_opr & operator<<(const Ty &v) const
Definition: shell_font.h:180
const shell_stream_opr & operator<<(stream_t &(*fn)(stream_t &)) const
Definition: shell_font.h:201
const shell_stream_opr & operator<<(shell_font_style::shell_font_color style) const
Definition: shell_font.h:191
const shell_stream_opr & operator<<(shell_font_style::shell_font_background_color style) const
Definition: shell_font.h:196
shell_stream_opr operator()() const
Definition: shell_font.h:226
std::ostream stream_t
Definition: shell_font.h:157