libcopp  2.2.0
shell_font.h
Go to the documentation of this file.
1 // Copyright 2023 owent
2 
3 #pragma once
4 
5 #include <iostream>
6 #include <map>
7 #include <string>
8 
14 #ifdef _MSC_VER
15 # ifndef WIN32_LEAN_AND_MEAN
16 # define WIN32_LEAN_AND_MEAN
17 # endif
18 # include <Windows.h>
19 
20 # define SHELL_FONT_USING_WIN32_CONSOLE
21 
22 #endif
23 
24 namespace util {
25 namespace cli {
26 
27 // 下面是编码表
28 //
29 // 编码 颜色/动作
30 // 0 重新设置属性到缺省设置
31 // 1 设置粗体
32 // 2 设置一半亮度(模拟彩色显示器的颜色)
33 // 4 设置下划线(模拟彩色显示器的颜色)
34 // 5 设置闪烁
35 // 7 设置反向图象
36 // 22 设置一般密度
37 // 24 关闭下划线
38 // 25 关闭闪烁
39 // 27 关闭反向图象
40 // 30 设置黑色前景
41 // 31 设置红色前景
42 // 32 设置绿色前景
43 // 33 设置棕色前景
44 // 34 设置蓝色前景
45 // 35 设置紫色前景
46 // 36 设置青色前景
47 // 37 设置白色前景
48 // 38 在缺省的前景颜色上设置下划线
49 // 39 在缺省的前景颜色上关闭下划线
50 // 40 设置黑色背景
51 // 41 设置红色背景
52 // 42 设置绿色背景
53 // 43 设置棕色背景
54 // 44 设置蓝色背景
55 // 45 设置紫色背景
56 // 46 设置青色背景
57 // 47 设置白色背景
58 // 49 设置缺省黑色背景
59 
67  };
68 
70  SHELL_FONT_COLOR_BLACK = 0x0100, // 30
78  };
79 
89  };
90 };
91 
92 class shell_font {
93  private:
94  int m_iFlag;
95 
96  public:
101  shell_font(int iFlag = 0);
102  virtual ~shell_font();
103 
109  std::string GenerateString(const std::string &strInput);
110 
117  static std::string GenerateString(const std::string &strInput, int iFlag);
118 
124  static std::string GetStyleCode(int iFlag);
125 
130  std::string GetStyleCode();
131 
136  static std::string GetStyleCloseCode();
137 };
138 
140  public:
141  typedef std::ostream stream_t;
143  public:
145 
146  private:
148 #ifdef SHELL_FONT_USING_WIN32_CONSOLE
149  HANDLE hOsHandle;
150 #endif
151  mutable int flag;
152 
153  // 进允许内部复制构造
156 
157  friend class shell_stream;
158 
159  public:
162 
163  template <typename Ty>
164  const shell_stream_opr &operator<<(const Ty &v) const {
165  close();
166  (*pOs) << v;
167  return (*this);
168  }
169 
170  const shell_stream_opr &operator<<(std::nullptr_t) const;
174  const shell_stream_opr &operator<<(stream_t &(*fn)(stream_t &)) const;
175 
176  const shell_stream_opr &open(int flag) const;
177 
178  void close() const;
179 
180  void reset() const;
181 
182  inline operator stream_t &() const { return *pOs; }
183 
184  inline operator const stream_t &() const { return *pOs; }
185  };
186 
187  public:
188  shell_stream(stream_t &stream = std::cout);
189  shell_stream_opr operator()() const;
190 
191  private:
193 };
194 
195 } // namespace cli
196 } // namespace util
static std::string GetStyleCloseCode()
Definition: shell_font.cpp:134
shell_font(int iFlag=0)
Definition: shell_font.cpp:75
std::string GenerateString(const std::string &strInput)
Definition: shell_font.cpp:260
std::string GetStyleCode()
Definition: shell_font.cpp:132
shell_stream_opr & operator=(const shell_stream_opr &)
Definition: shell_font.cpp:322
shell_stream_opr(const shell_stream_opr &)
Definition: shell_font.cpp:320
const shell_stream_opr & operator<<(const Ty &v) const
Definition: shell_font.h:164
const shell_stream_opr & open(int flag) const
Definition: shell_font.cpp:363
shell_stream_opr operator()() const
Definition: shell_font.cpp:427
std::ostream stream_t
Definition: shell_font.h:141
shell_stream(stream_t &stream=std::cout)
Definition: shell_font.cpp:425