]> git.xolatile.top Git - public-libhl.git/commitdiff
roast me
authoranon <anon@anon.anon>
Thu, 24 Aug 2023 01:37:40 +0000 (03:37 +0200)
committeranon <anon@anon.anon>
Thu, 24 Aug 2023 01:37:40 +0000 (03:37 +0200)
source/hl.h
source/hl_c.inc [new file with mode: 0644]
source/main.c
source/terminal_hl.h [new file with mode: 0644]

index 4af59ebb92c4d62aabb9ff0c1572c60a1ccdce6b..22ae2a708cd4733f11778e9f382061239a7e1a9e 100644 (file)
@@ -16,6 +16,10 @@ typedef enum {
        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;
@@ -33,10 +37,6 @@ typedef struct {
        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];
@@ -225,6 +225,9 @@ void render_string(const char * const string,
 // -------------------------
 // ### 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;
diff --git a/source/hl_c.inc b/source/hl_c.inc
new file mode 100644 (file)
index 0000000..8ce987f
--- /dev/null
@@ -0,0 +1,17 @@
+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);
index 6afc7a137ca3dbdb58d43ff891d1721d5faf4b32..5027f930bae4c2e3d49854087228a566c9b775cc 100644 (file)
 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);
@@ -59,62 +34,9 @@ int main(int      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');
diff --git a/source/terminal_hl.h b/source/terminal_hl.h
new file mode 100644 (file)
index 0000000..5d4e2c7
--- /dev/null
@@ -0,0 +1,67 @@
+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;
+}