Fileheader 1.13.1 - ColorLinux

为了在控制台打印彩色内容而设计的头文件

早就想封了,今天实现一下

普通输出

这是第一版写的,因为觉得不好就弃用,但是并没有删,在某些场合可能会用的方便点

这一版定义了一个 color_print()

其定义为

#define color_print(x) printf("%s",((string)""+(x)+color.NONE).c_str())

可以看出来,你在 color_print() 函数中填入的应该是正常的字符串

当然你也可以像普通 printf 一样使用 color_print("12345") 来输出普通字符串,然而这并没有什么意义

因此,你可以在你要输出的字符串前面加上限定参数,譬如

color_print(color.RED+"12345");

这样控制台就会打印一个红色的字符串

所有诸如此类的字符串都在 color 结构体内,具体来说包含以下几个

    const string NONE

    const string BLACK
    const string L_BLACK
    const string RED
    const string L_RED
    const string GREEN
    const string L_GREEN
    const string BROWN
    const string YELLOW
    const string BLUE
    const string L_BLUE
    const string PURPLE
    const string L_PURPLE
    const string CYAN
    const string L_CYAN
    const string GRAY
    const string WHITE

    const string BOLD  //粗体
    const string UNDERLINE  //下划线
    const string BLINK   //闪烁
    const string REVERSE   //颜色反转
    const string HIDE   //隐藏
    const string CLEAR   //清屏

其中颜色标识的都是修改前景颜色的参数,带 L_颜色 的是高亮显示的颜色参数

这一版的特点

  • 可以拼接,比如 color_print(color.RED+"123"+color.GREEN+"45") 这样的用法
  • 只有一个限定参数,如果你使用 color_print(color.RED+color.UNDERLINE+"123"),程序会选择使用最后传入的限定参数,因此不会显示红色

printc

这一版个人觉得比较满意

程序定义了 printc(x,info),表示在 x 做限定参数的情况下输出 info,也就是说,x 是限定参数,info 是输出内容

#define printc(x,info) printf("%s",(__color_info.START()+(x)()+"m"+info+__color_info.NONE()).c_str())

关于限定参数的选取,你可以直接调用已经存在的 __color_info 中的内容,或者你嫌这个名字太长,也可以自行定义一个参数库

__color_t a;

然后你只需要从 a 中调用参数即可

可供选用的参数如下

    const __const_color_t START;
    const __const_color_t NONE;
    
    const color_t HIGHLIGHT; //高亮
    const color_t VAGUE;   //模糊,在 bash 下测试时,bash 对这个参数的行为是变暗
    const color_t ITALIC;  //斜体
    const color_t UNDERLINE; //下划线
    const color_t TWINKLE;  //高闪,bash 不处理这个参数
    const color_t FAST_TWINKLE;  //快速闪烁,base 不处理这个参数
    const color_t REVERSE_COLOR;  //颜色反转
    const color_t HIDE;    //隐藏

    struct{
        const color_t BLACK;
        const color_t RED;
        const color_t GREEN;
        const color_t YELLOW;
        const color_t BLUE;
        const color_t PERPLE;
        const color_t CRAY;
        const color_t WHITE;
    }FRONTCOLOR;

    struct{
        const color_t BLACK;
        const color_t RED;
        const color_t GREEN;
        const color_t YELLOW;
        const color_t BLUE;
        const color_t PERPLE;
        const color_t CRAY;
        const color_t WHITE;
    }BACKGROUND;

color_t 已经重载了加号,在你需要使用多个限定参数的时候,只需要使用加号将其拼接在一起即可

__color_t a;
printc(a.UNDERLINE+a.ITALIC+a.BACKGROUND.RED,"12345");

请注意参数可能会有冲突,比如选了两个背景颜色做限定参数,此时行为依控制台而定

源码

FileHeader

#ifndef COLORLINUX_H
#define COLORLINUX_H
#include<bits/stdc++.h>
using namespace std;
class color{
    public:

    const string NONE=                 "\e[0m";
    const string BLACK=                "\e[0;30m";
    const string L_BLACK=              "\e[1;30m";
    const string RED=                  "\e[0;31m";
    const string L_RED=                "\e[1;31m";
    const string GREEN=                "\e[0;32m";
    const string L_GREEN=              "\e[1;32m";
    const string BROWN=                "\e[0;33m";
    const string YELLOW=               "\e[1;33m";
    const string BLUE=                 "\e[0;34m";
    const string L_BLUE=               "\e[1;34m";
    const string PURPLE=               "\e[0;35m";
    const string L_PURPLE=             "\e[1;35m";
    const string CYAN=                 "\e[0;36m";
    const string L_CYAN=               "\e[1;36m";
    const string GRAY=                 "\e[0;37m";
    const string WHITE=                "\e[1;37m";

    const string BOLD=                 "\e[1m";
    const string UNDERLINE=            "\e[4m";
    const string BLINK=                "\e[5m";
    const string REVERSE=              "\e[7m";
    const string HIDE=                 "\e[8m";
    const string CLEAR=                "\e[2J";
}color;
class color_t{
    private:string x;
    public:
    color_t operator =(const std::string y){x=y;return *this;};
    color_t(const std::string y){x=y;}
    color_t operator +(const color_t&A)const{
        color_t ans=*this;ans.x=ans.x+";"+A.x;
        return ans;
    }
    const std::string operator()()const{return x;}
};
class __const_color_t{
    private:string x;
    public:
    __const_color_t operator =(const string y){x=y;return *this;};
    __const_color_t(const string y){x=y;}
    const string operator()()const{return x;}
};
class __color{
    public:
    const __const_color_t START=(string)"\e[";
    const __const_color_t NONE=(string)"\e[0m";
    
    const color_t HIGHLIGHT=(string)"1";
    const color_t VAGUE=(string)"2";
    const color_t ITALIC=(string)"3";
    const color_t UNDERLINE=(string)"4";
    const color_t TWINKLE=(string)"5";
    const color_t FAST_TWINKLE=(string)"6";
    const color_t REVERSE_COLOR=(string)"7";
    const color_t HIDE=(string)"8";

    struct{
        const color_t BLACK=(string)"30";
        const color_t RED=(string)"31";
        const color_t GREEN=(string)"32";
        const color_t YELLOW=(string)"33";
        const color_t BLUE=(string)"34";
        const color_t PERPLE=(string)"35";
        const color_t CRAY=(string)"36";
        const color_t WHITE=(string)"37";
    }FRONTCOLOR;

    struct{
        const color_t BLACK=(string)"40";
        const color_t RED=(string)"41";
        const color_t GREEN=(string)"42";
        const color_t YELLOW=(string)"43";
        const color_t BLUE=(string)"44";
        const color_t PERPLE=(string)"45";
        const color_t CRAY=(string)"46";
        const color_t WHITE=(string)"47";
    }BACKGROUND;
};
typedef __color __color_t;
__color_t __color_info;
#define color_print(x) printf("%s",((string)""+(x)+color.NONE).c_str())
#define printc(x,info) printf("%s",(__color_info.START()+(x)()+"m"+info+__color_info.NONE()).c_str())
#endif
posted @ 2024-10-15 17:33  HaneDaniko  阅读(44)  评论(2编辑  收藏  举报