diff --git a/source/hl.h b/source/hl.h index 89abe25..8735177 100644 --- a/source/hl.h +++ b/source/hl.h @@ -37,10 +37,51 @@ typedef struct { typedef struct { hl_group_t * hl; - token_type_t t; regex_t * syntax; + token_type_t t; + char _pad[4]; } token_t; +extern vector_t token_table; +extern display_t * display_table; + +extern hl_group_t * keyword_hl; +extern hl_group_t * preprocessor_hl; +extern hl_group_t * symbol_hl; + +extern void new_display_mode(display_t * mode); +extern int free_token(token_t * token); +extern int append_token(token_t * token); + +// TODO: ALIGN PROPERLY... + +extern token_t * new_symbol_token(const char * const c, + hl_group_t * const g); +extern int new_symbol_tokens(const char * const * symbols, + hl_group_t * const g); +extern int new_char_tokens(const char * characters, + hl_group_t * const g); +extern token_t * new_keyword_token(const char * const word, + hl_group_t * const g); +extern int new_keyword_tokens(const char * const * words, + hl_group_t * const g); +extern token_t * new_token(const char * const word, + const token_type_t t, + hl_group_t * const g); + +// TODO: ALIGN PROPERLY... + +extern int token_fits(const token_t * const token, + const char * const to, + const int string_offset, + int * match_offset); + +extern void render_string(const char * const string, + const char * const mode); + +extern int hl_init(void); +extern int hl_deinit(void); + // GLOBALS vector_t token_table = { @@ -96,7 +137,7 @@ int new_symbol_tokens(const char * const * symbols, if(new_symbol_token(*symbols, g)) { ++i; } else { - assert(!"Kinda failed to new symbol token thing."); + assert(!(bool)"Kinda failed to new symbol token thing."); } ++symbols; } @@ -117,7 +158,7 @@ int new_char_tokens(const char * characters, if(new_symbol_token(is_magic(*s) ? buffer : buffer + 1, g)) { ++i; } else { - assert(!"Kinda failed to new char token thing."); + assert(!(bool)"Kinda failed to new char token thing."); } } @@ -203,10 +244,10 @@ token_t * new_token(const char * const word, // ### Highlighting ### // -------------------- -int token_fits(const token_t * const token, - const char * const to, - const int string_offset, - int * match_offset) { +int token_fits(const token_t * const token, + const char * const to, + const int string_offset, + int * match_offset) { UNUSED(match_offset); //return regex_match(pattern, to, string_offset, match_offset); @@ -223,7 +264,7 @@ void render_string(const char * const string, for (; token_index < token_table.element_count; token_index++) { token_t * t = *(token_t**)vector_get(&token_table, token_index); - f = token_fits(t, string, s - string, &offset); + f = token_fits(t, string, (int) (s - string), &offset); if (f) { break; } diff --git a/source/main.c b/source/main.c index 2a09724..2b6ad6a 100644 --- a/source/main.c +++ b/source/main.c @@ -49,5 +49,7 @@ int main(int argc, //hl_deinit(); free(buffer); + //terminal_hl_deinit(); + return 0; } diff --git a/source/terminal_hl.h b/source/terminal_hl.h index c71cdaa..5fe1947 100644 --- a/source/terminal_hl.h +++ b/source/terminal_hl.h @@ -6,6 +6,19 @@ typedef struct { char * background_color; } terminal_hl_t; +extern display_t * cterm; + +extern void cterm_render_callback(const char * const string, + const int length, + void * const attributes); + +extern int terminal_hl_init(void); + +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) { @@ -29,10 +42,6 @@ void cterm_render_callback(const char * const string, 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, @@ -46,7 +55,7 @@ void fun(const char * const attribute, (*group)->attributes = (void*)t; } -int terminal_hl_init(void){ +int terminal_hl_init(void) { hl_init(); new_display_mode(cterm); //