REGION
} token_type_t;
+typedef void (*attribute_callback_t) (const char * const string,
+ const int length,
+ void * const attributes);
+
typedef struct {
char * key;
attribute_callback_t callback;
char * syntax;
} token_t;
-typedef void (*attribute_callback_t) (const char * const string,
- const int length,
- void * const attributes);
-
// GLOBALS
token_t * token_table[1000];
// -------------------------
// ### Library Mangement ###
// -------------------------
+hl_group_t * keyword_hl = NULL;
+hl_group_t * preprocessor_hl = NULL;
+hl_group_t * symbol_hl = NULL;
int hl_init(void) {
return 0;
--- /dev/null
+const char * c_keywords[] = {
+ "register", "volatile", "auto", "const", "static", "extern", "if", "else",
+ "do", "while", "for", "continue", "switch", "case", "default", "break",
+ "enum", "union", "struct", "typedef", "goto", "void", "return", "sizeof",
+ "char", "short", "int", "long", "signed", "unsigned", "float", "double",
+ NULL
+};
+
+const char * preprocessor_keywords[] = {
+ "#include", "#pragma", "#define", "#undef", "#ifdef", "#ifndef", "#elifdef", "#elifndef",
+ "#if", "#elif", "#else", "#endif", "#embed", "#line", "#error", "#warning",
+ NULL
+};
+
+new_char_tokens("&|()[]{}*,", symbol_hl);
+new_keyword_tokens(c_keywords, keyword_hl);
+new_keyword_tokens(preprocessor_keywords, preprocessor_hl);
static char * buffer = NULL;
static size_t buffer_size = 0;
-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;
- fputs(term_hl->attribute, stdout);
- fputs(term_hl->foreground_color, stdout);
- for (int i = 0; i < length; i++) {
- putchar(*(string+i));
- }
- fputs(TERMINAL_RESET, stdout);
-}
-
int main(int argc,
char * * argv) {
UNUSED(argc);
buffer[buffer_size - 1] = '\0';
// Highlight init
- hl_init();
- const char * c_keywords[] = {
- "register", "volatile", "auto", "const", "static", "extern", "if", "else",
- "do", "while", "for", "continue", "switch", "case", "default", "break",
- "enum", "union", "struct", "typedef", "goto", "void", "return", "sizeof",
- "char", "short", "int", "long", "signed", "unsigned", "float", "double",
- NULL
- };
-
- const char * preprocessor_keywords[] = {
- "#include", "#pragma", "#define", "#undef", "#ifdef", "#ifndef", "#elifdef", "#elifndef",
- "#if", "#elif", "#else", "#endif", "#embed", "#line", "#error", "#warning",
- NULL
- };
-
-
- //
- display_t * cterm = &(display_t) {
- .key = "cterm",
- .callback = cterm_render_callback
- };
- //
- terminal_hl_t terminal_keyword_hl = (terminal_hl_t) {
- .attribute = TERMINAL_STYLE_BOLD,
- .foreground_color = TERMINAL_COLOR_FG_GREEN,
- .background_color = NULL
- };
- hl_group_t keyword_hl = (hl_group_t) {
- .link = NULL,
- .attributes = (void*)&terminal_keyword_hl
- };
- //
- terminal_hl_t terminal_preprocessor_hl = (terminal_hl_t) {
- .attribute = TERMINAL_STYLE_BOLD,
- .foreground_color = TERMINAL_COLOR_FG_BLUE,
- .background_color = NULL
- };
- hl_group_t preprocessor_hl = (hl_group_t) {
- .link = NULL,
- .attributes = (void*)&terminal_preprocessor_hl
- };
- //
- terminal_hl_t terminal_symbol_hl = (terminal_hl_t) {
- .attribute = TERMINAL_STYLE_BOLD,
- .foreground_color = TERMINAL_COLOR_FG_YELLOW,
- .background_color = NULL
- };
- hl_group_t symbol_hl = (hl_group_t) {
- .link = NULL,
- .attributes = (void*)&terminal_symbol_hl
- };
+ terminal_hl_init();
//
- new_display_mode(cterm);
- new_char_tokens("&|()[]{}*,", &symbol_hl);
- new_keyword_tokens(c_keywords, &keyword_hl);
- new_keyword_tokens(preprocessor_keywords, &preprocessor_hl);
+ #include "hl_c.inc";
//
render_string(buffer, "cterm");
putchar('\n');
--- /dev/null
+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;
+ fputs(term_hl->attribute, stdout);
+ 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
+};
+
+
+int terminal_hl_init(void){
+ hl_init();
+ new_display_mode(cterm);
+ //
+ terminal_hl_t terminal_keyword_hl = (terminal_hl_t) {
+ .attribute = TERMINAL_STYLE_BOLD,
+ .foreground_color = TERMINAL_COLOR_FG_GREEN,
+ .background_color = NULL
+ };
+ keyword_hl = (hl_group_t) {
+ .link = NULL,
+ .attributes = (void*)&terminal_keyword_hl
+ };
+ //
+ terminal_hl_t terminal_preprocessor_hl = (terminal_hl_t) {
+ .attribute = TERMINAL_STYLE_BOLD,
+ .foreground_color = TERMINAL_COLOR_FG_BLUE,
+ .background_color = NULL
+ };
+ preprocessor_hl = (hl_group_t) {
+ .link = NULL,
+ .attributes = (void*)&terminal_preprocessor_hl
+ };
+ //
+ terminal_hl_t terminal_symbol_hl = (terminal_hl_t) {
+ .attribute = TERMINAL_STYLE_BOLD,
+ .foreground_color = TERMINAL_COLOR_FG_YELLOW,
+ .background_color = NULL
+ };
+ symbol_hl = (hl_group_t) {
+ .link = NULL,
+ .attributes = (void*)&terminal_symbol_hl
+ };
+
+ return 0;
+}