|
- #include "terminal.h"
-
- display_t * cterm = &(display_t) {
- .key = "cterm",
- .callback = cterm_render_callback
- };
-
- 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) {
- 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);
- }
-
-
- void fun(const char * attribute,
- const char * 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;
- }
|