#include "hl.h" typedef struct { char * attribute; char * foreground_color; char * background_color; } terminal_hl_t; void cterm_render_callback(const char * const string, const int length, void * const attributes) { if(!length){ fputs(TERMINAL_STYLE_BOLD, stdout); putchar(*string); fputs(TERMINAL_RESET, stdout); return; } terminal_hl_t * term_hl = (terminal_hl_t*)attributes; if (term_hl->attribute) { fputs(term_hl->attribute, stdout); } if (term_hl->foreground_color) { fputs(term_hl->foreground_color, stdout); } for (int i = 0; i < length; i++) { putchar(*(string+i)); } fputs(TERMINAL_RESET, stdout); } display_t * cterm = &(display_t) { .key = "cterm", .callback = cterm_render_callback }; void fun(const char * const attribute, const char * const color, hl_group_t * * group){ terminal_hl_t * t = (terminal_hl_t *)malloc(sizeof(terminal_hl_t)); t->attribute = attribute; t->foreground_color = color;; t->background_color = NULL; (*group) = (hl_group_t *)malloc(sizeof(hl_group_t)); (*group)->link = NULL; (*group)->attributes = (void*)t; } int terminal_hl_init(void){ hl_init(); new_display_mode(cterm); // fun(TERMINAL_STYLE_BOLD, TERMINAL_COLOR_FG_CYAN, &special_hl); fun(TERMINAL_STYLE_BOLD, TERMINAL_COLOR_FG_YELLOW, &control_hl); fun(NULL, TERMINAL_COLOR_FG_YELLOW, &operator_hl); fun(TERMINAL_STYLE_BOLD, TERMINAL_COLOR_FG_GREEN, &keyword_hl); fun(TERMINAL_STYLE_BOLD, TERMINAL_COLOR_FG_BLUE, &comment_hl); fun(TERMINAL_STYLE_BOLD, TERMINAL_COLOR_FG_RED, &string_literal_hl); return 0; }