From 5ba6146ca02a5722896b752f0f268ee1c83bc656 Mon Sep 17 00:00:00 2001 From: Aoran Zeng Date: Tue, 5 Sep 2023 15:15:55 +0800 Subject: [PATCH] Add `xy_str_to_` styles --- test_xy.c | 17 ++++++++++ xy.h | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) diff --git a/test_xy.c b/test_xy.c index c4f9aa5..b25eaff 100644 --- a/test_xy.c +++ b/test_xy.c @@ -25,6 +25,23 @@ main (int argc, char const *argv[]) puts(xy_strjoin(6, "楚山横地出,", "汉水接天回。", "冠盖非新里,", "章华即旧台。", "习池风景异,", "归路满尘埃。")); + puts(xy_str_to_bold("粗体")); + puts(xy_str_to_faint("浅体")); + puts(xy_str_to_italic("斜体")); + puts(xy_str_to_underline("下划线")); + puts(xy_str_to_blink("闪烁")); + puts(xy_str_to_cross("删除线")); + + puts(xy_str_to_red("红色")); + puts(xy_str_to_green("绿色")); + puts(xy_str_to_yellow("黄色")); + puts(xy_str_to_blue("蓝色")); + puts(xy_str_to_magenta("紫色")); + puts(xy_str_to_purple("紫色")); + puts(xy_str_to_cyan("青色")); + + + putb(xy_str_end_with("abcdef", "abcdefg")); // false putb(xy_str_end_with("abcdef", "def")); // true putb(xy_str_end_with("abcdef", "bcdef")); // true diff --git a/xy.h b/xy.h index 8497408..5bb996d 100644 --- a/xy.h +++ b/xy.h @@ -264,6 +264,98 @@ xy_strdup(const char* str) } +#define XY_STR_BOLD 1 +#define XY_STR_FAINT 2 +#define XY_STR_ITALIC 3 +#define XY_STR_UNDERLINE 4 +#define XY_STR_BLINK 5 +#define XY_STR_CROSS 9 + +#define xy_str_to_bold(str) xy_str_to_terminal_style_(XY_STR_BOLD, str) +#define xy_str_to_faint(str) xy_str_to_terminal_style_(XY_STR_FAINT, str) +#define xy_str_to_italic(str) xy_str_to_terminal_style_(XY_STR_ITALIC, str) +#define xy_str_to_underline(str) xy_str_to_terminal_style_(XY_STR_UNDERLINE,str) +#define xy_str_to_blink(str) xy_str_to_terminal_style_(XY_STR_BLINK, str) +#define xy_str_to_cross(str) xy_str_to_terminal_style_(XY_STR_CROSS, str) + +#define XY_STR_RED 31 +#define XY_STR_GREEN 32 +#define XY_STR_YELLOW 33 +#define XY_STR_BLUE 34 +#define XY_STR_MAGENTA 35 +#define XY_STR_CYAN 36 + +#define xy_str_to_red(str) xy_str_to_terminal_style_(XY_STR_RED, str) +#define xy_str_to_green(str) xy_str_to_terminal_style_(XY_STR_GREEN, str) +#define xy_str_to_yellow(str) xy_str_to_terminal_style_(XY_STR_YELLOW, str) +#define xy_str_to_blue(str) xy_str_to_terminal_style_(XY_STR_BLUE, str) +#define xy_str_to_magenta(str) xy_str_to_terminal_style_(XY_STR_MAGENTA,str) +#define xy_str_to_purple xy_str_to_magenta +#define xy_str_to_cyan(str) xy_str_to_terminal_style_(XY_STR_CYAN, str) + +char* +xy_str_to_terminal_style_(int style, const char* str) +{ + char* color_fmt_str = NULL; + if (XY_STR_RED==style) + { + color_fmt_str = "\e[31m%s\e[0m"; // 红色 + } + else if (XY_STR_GREEN==style) + { + color_fmt_str = "\e[32m%s\e[0m"; // 绿色 + } + else if (XY_STR_YELLOW==style) + { + color_fmt_str = "\e[33m%s\e[0m"; // 黄色 + } + else if (XY_STR_BLUE==style) + { + color_fmt_str = "\e[34m%s\e[0m"; // 蓝色 + } + else if (XY_STR_MAGENTA==style) + { + color_fmt_str = "\e[35m%s\e[0m"; // 蓝色 + } + else if (XY_STR_CYAN==style) + { + color_fmt_str = "\e[36m%s\e[0m"; // 蓝色 + } + + + else if (XY_STR_BOLD==style) + { + color_fmt_str = "\e[1m%s\e[0m"; + } + else if (XY_STR_FAINT==style) + { + color_fmt_str = "\e[2m%s\e[0m"; + } + else if (XY_STR_ITALIC==style) + { + color_fmt_str = "\e[3m%s\e[0m"; + } + else if (XY_STR_UNDERLINE==style) + { + color_fmt_str = "\e[4m%s\e[0m"; + } + else if (XY_STR_BLINK==style) + { + color_fmt_str = "\e[5m%s\e[0m"; + } + else if (XY_STR_CROSS==style) + { + color_fmt_str = "\e[9m%s\e[0m"; + } + + // -2 把中间%s减掉 + size_t len = strlen(color_fmt_str) -2; + char* buf = malloc(strlen(str) + len + 1); + sprintf (buf, color_fmt_str, str); + return buf; +} + + bool xy_streql(const char* str1, const char* str2) { return strcmp(str1, str2) == 0 ? true : false;