From 99ee7037069f8909d724f740f6b5fb7782b1c166 Mon Sep 17 00:00:00 2001 From: xolatile Date: Sat, 18 Nov 2023 17:34:05 -0500 Subject: [PATCH] Changed a lot of stuff... --- xighlight.c | 233 ++++++++++++++++++++++++------------------------------------ 1 file changed, 93 insertions(+), 140 deletions(-) diff --git a/xighlight.c b/xighlight.c index 2499a86..f6674a3 100644 --- a/xighlight.c +++ b/xighlight.c @@ -9,8 +9,6 @@ It is distributed in the hope that it will be useful or harmful, it really depen #include #include -static int highlighted = 0; - static void echo_version (void) { echo ("xighlight: Terminal syntax highlighter (version 144000)\n"); } @@ -20,22 +18,12 @@ static void echo_license (void) { } static void highlight_common (void) { /* Should be changed to support basic GCC, Clang, Valgrind and Splint output... */ - char * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\" \t\r\n"; + char * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\"@#$` \t\r\n"; - if (highlighted != 0) { - syntax_delete (); - } - - syntax_define_separators (separators); - - syntax_define_range ("'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); - syntax_define_range ("`", "'", '\\', COLOUR_PINK, EFFECT_BOLD); - - syntax_define_operators (".,:;<=>+*-/%!&~^?|()[]{}", COLOUR_BLUE, EFFECT_BOLD); - - syntax_define_default (1, COLOUR_RED, EFFECT_NORMAL, COLOUR_CYAN, EFFECT_BOLD); - - highlighted = 1; + syntax_define (FALSE, FALSE, "\"", "\"", '\\', COLOUR_PINK, EFFECT_NORMAL); + syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); + syntax_define (TRUE, FALSE, ".,:;<=>+*-/%!&~^?|@#$`", "", '\0', COLOUR_CYAN, EFFECT_NORMAL); + syntax_define (TRUE, TRUE, "0123456789", separators, '\0', COLOUR_PINK, EFFECT_BOLD); } static void highlight_c (void) { @@ -48,24 +36,25 @@ static void highlight_c (void) { "char", "short", "int", "long", "signed", "unsigned", "float", "double" }; - if (highlighted != 0) { - syntax_delete (); + int word; + + syntax_define (FALSE, FALSE, "/*", "*/", '\0', COLOUR_GREY, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "//", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "#", "\n", '\\', COLOUR_YELLOW, EFFECT_ITALIC); + syntax_define (FALSE, FALSE, "'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "\"", "\"", '\\', COLOUR_PINK, EFFECT_NORMAL); + + for (word = 0; word != (int) (sizeof (keywords) / sizeof (keywords [0])); ++word) { + syntax_define (FALSE, TRUE, keywords [word], separators, '\0', COLOUR_YELLOW, EFFECT_BOLD); } - syntax_define_separators (separators); + syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); + syntax_define (TRUE, FALSE, ".,:;<=>+*-/%!&~^?|", "", '\0', COLOUR_CYAN, EFFECT_NORMAL); - syntax_define_range ("/*", "*/", '\0', COLOUR_GREY, EFFECT_BOLD); - syntax_define_range ("//", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); - syntax_define_range ("#", "\n", '\\', COLOUR_PINK, EFFECT_NORMAL); - syntax_define_range ("'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); - - syntax_define_operators (".,:;<=>+*-/%!&~^?|()[]{}", COLOUR_BLUE, EFFECT_BOLD); - - syntax_define_words (keywords, sizeof (keywords) / sizeof (keywords [0]), COLOUR_BLUE, EFFECT_NORMAL); - - syntax_define_default (1, COLOUR_RED, EFFECT_NORMAL, COLOUR_CYAN, EFFECT_BOLD); - - highlighted = 1; + syntax_define (TRUE, TRUE, "0123456789", separators, '\0', COLOUR_PINK, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "abcdefghijklmnopqrstuvwxyz", separators, '\0', COLOUR_WHITE, EFFECT_NORMAL); + syntax_define (TRUE, TRUE, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", separators, '\0', COLOUR_WHITE, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "_", separators, '\0', COLOUR_WHITE, EFFECT_ITALIC); } static void highlight_ada (void) { @@ -84,22 +73,22 @@ static void highlight_ada (void) { "terminate" }; - if (highlighted != 0) { - syntax_delete (); + int word; + + syntax_define (FALSE, FALSE, "--", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "\"", "\"", '\\', COLOUR_PINK, EFFECT_NORMAL); + + for (word = 0; word != (int) (sizeof (keywords) / sizeof (keywords [0])); ++word) { + syntax_define (FALSE, TRUE, keywords [word], separators, '\0', COLOUR_YELLOW, EFFECT_BOLD); } - syntax_define_separators (separators); + syntax_define (TRUE, FALSE, "()", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); + syntax_define (TRUE, FALSE, ".,:;<=>+-*/&|'", "", '\0', COLOUR_CYAN, EFFECT_NORMAL); - syntax_define_range ("--", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); - syntax_define_range ("'", "'", '\0', COLOUR_PINK, EFFECT_BOLD); - - syntax_define_operators (".,:;<=>+-*/&|()'", COLOUR_BLUE, EFFECT_BOLD); - - syntax_define_words (keywords, sizeof (keywords) / sizeof (keywords [0]), COLOUR_BLUE, EFFECT_NORMAL); - - syntax_define_default (0, COLOUR_RED, EFFECT_NORMAL, COLOUR_CYAN, EFFECT_BOLD); - - highlighted = 1; + syntax_define (TRUE, TRUE, "0123456789", separators, '\0', COLOUR_PINK, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "abcdefghijklmnopqrstuvwxyz", separators, '\0', COLOUR_WHITE, EFFECT_NORMAL); + syntax_define (TRUE, TRUE, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", separators, '\0', COLOUR_WHITE, EFFECT_BOLD); } static void highlight_cpp (void) { @@ -121,79 +110,34 @@ static void highlight_cpp (void) { "xor_eq", "final", "override", "import", "module", "transaction_safe" }; - if (highlighted != 0) { - syntax_delete (); + int word; + + syntax_define (FALSE, FALSE, "/*", "*/", '\0', COLOUR_GREY, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "//", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "#", "\n", '\\', COLOUR_YELLOW, EFFECT_ITALIC); + syntax_define (FALSE, FALSE, "'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "\"", "\"", '\\', COLOUR_PINK, EFFECT_NORMAL); + + for (word = 0; word != (int) (sizeof (keywords) / sizeof (keywords [0])); ++word) { + syntax_define (FALSE, TRUE, keywords [word], separators, '\0', COLOUR_YELLOW, EFFECT_BOLD); } - syntax_define_separators (separators); + syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); + syntax_define (TRUE, FALSE, ".,:;<=>+*-/%!&~^?|", "", '\0', COLOUR_CYAN, EFFECT_NORMAL); - syntax_define_range ("/*", "*/", '\0', COLOUR_GREY, EFFECT_BOLD); - syntax_define_range ("//", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); - syntax_define_range ("#", "\n", '\\', COLOUR_PINK, EFFECT_NORMAL); - syntax_define_range ("'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); - - syntax_define_operators (".,:;<=>+*-/%!&~^?|()[]{}", COLOUR_BLUE, EFFECT_BOLD); - - syntax_define_words (keywords, sizeof (keywords) / sizeof (keywords [0]), COLOUR_BLUE, EFFECT_NORMAL); - - syntax_define_default (1, COLOUR_RED, EFFECT_NORMAL, COLOUR_CYAN, EFFECT_BOLD); - - highlighted = 1; + syntax_define (TRUE, TRUE, "0123456789", separators, '\0', COLOUR_PINK, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "abcdefghijklmnopqrstuvwxyz", separators, '\0', COLOUR_WHITE, EFFECT_NORMAL); + syntax_define (TRUE, TRUE, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", separators, '\0', COLOUR_WHITE, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "_", separators, '\0', COLOUR_WHITE, EFFECT_ITALIC); } -/* -static void highlight_python (void) { - char * separators = ".,:<=>+*-/%!&~^?|()[]'\" \t\r\n"; - char * keywords [] = { - "False", "await", "else", "import", "pass", "None", "break", "except", - "in", "raise", "True", "class", "finally", "is", "return", "and", - "continue", "for", "lambda", "try", "as", "def", "from", "nonlocal", - "while", "assert", "del", "global", "not", "with", "async", "elif", - "if", "or", "yield" - }; - - if (highlighted != 0) { - syntax_delete (); - } - - syntax_define_separators (separators); - - syntax_define_range ("#", "\n", '\\', COLOUR_GREY, EFFECT_BOLD); - syntax_define_range ("'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); - - syntax_define_operators (".,:<=>+*-/%!&~^?|()[]", COLOUR_BLUE, EFFECT_BOLD); - - syntax_define_words (keywords, sizeof (keywords) / sizeof (keywords [0]), COLOUR_BLUE, EFFECT_NORMAL); - - syntax_define_default (0, COLOUR_RED, EFFECT_NORMAL, COLOUR_CYAN, EFFECT_BOLD); - - highlighted = 1; -} -*/ static void highlight_valgrind (void) { char * separators = "./-=?() \t\r\n"; - char * keywords [] = { - "Invalid" - }; + syntax_define (FALSE, FALSE, "==", "==", '\0', COLOUR_GREY, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "???", "\n", '\0', COLOUR_YELLOW, EFFECT_BOLD); - if (highlighted != 0) { - syntax_delete (); - } - - syntax_define_separators (separators); - - syntax_define_range ("==", "==", '\0', COLOUR_GREY, EFFECT_BOLD); - syntax_define_range ("(", ")", '\0', COLOUR_PINK, EFFECT_NORMAL); - syntax_define_range ("???", "\n", '\0', COLOUR_RED, EFFECT_BOLD); - - syntax_define_operators ("./-:", COLOUR_BLUE, EFFECT_BOLD); - - syntax_define_words (keywords, sizeof (keywords) / sizeof (keywords [0]), COLOUR_BLUE, EFFECT_NORMAL); - - syntax_define_default (0, COLOUR_RED, EFFECT_NORMAL, COLOUR_CYAN, EFFECT_BOLD); - - highlighted = 1; + syntax_define (TRUE, TRUE, "0123456789", separators, '\0', COLOUR_PINK, EFFECT_BOLD); } static void highlight_common_assembly (void) { @@ -231,26 +175,31 @@ static void highlight_common_assembly (void) { "ah", "ch", "dh", "bh" }; - if (highlighted != 0) { - syntax_delete (); + int word; + + syntax_define (FALSE, FALSE, ";", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "\"", "\"", '\\', COLOUR_PINK, EFFECT_NORMAL); + + for (word = 0; word != (int) (sizeof (instructions) / sizeof (instructions [0])); ++word) { + syntax_define (FALSE, TRUE, instructions [word], separators, '\0', COLOUR_YELLOW, EFFECT_BOLD); } - syntax_define_separators (separators); + for (word = 0; word != (int) (sizeof (registers) / sizeof (registers [0])); ++word) { + syntax_define (FALSE, TRUE, registers [word], separators, '\0', COLOUR_CYAN, EFFECT_BOLD); + } - syntax_define_range ("[", "]", '\0', COLOUR_RED, EFFECT_NORMAL); + syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); + syntax_define (TRUE, FALSE, ".,+*-/%$<>", "", '\0', COLOUR_CYAN, EFFECT_NORMAL); - syntax_define_operators (".,+-", COLOUR_BLUE, EFFECT_BOLD); - - syntax_define_words (instructions, sizeof (instructions) / sizeof (instructions [0]), COLOUR_BLUE, EFFECT_NORMAL); - syntax_define_words (registers, sizeof (registers) / sizeof (registers [0]), COLOUR_CYAN, EFFECT_NORMAL); - - syntax_define_default (1, COLOUR_WHITE, EFFECT_NORMAL, COLOUR_WHITE, EFFECT_NORMAL); - - highlighted = 1; + syntax_define (TRUE, TRUE, "0123456789", separators, '\0', COLOUR_PINK, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "abcdefghijklmnopqrstuvwxyz", separators, '\0', COLOUR_WHITE, EFFECT_NORMAL); + syntax_define (TRUE, TRUE, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", separators, '\0', COLOUR_WHITE, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "_", separators, '\0', COLOUR_WHITE, EFFECT_ITALIC); } static void highlight_flat_assembly (void) { - char * separators = ".,+-=:;{}[]$ \t\r\n"; + char * separators = ".,+-=:;(){}[]%$<> \t\r\n"; char * instructions [] = { "mov", "movabs", "movapd", "movaps", "movebe", "movsd", "movsx", "movzx", @@ -289,24 +238,31 @@ static void highlight_flat_assembly (void) { "db", "dw", "dd", "dq", "rb", "rw", "rd", "rq" }; - if (highlighted != 0) { - syntax_delete (); + int word; + + syntax_define (FALSE, FALSE, ";", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "'", "'", '\\', COLOUR_PINK, EFFECT_BOLD); + syntax_define (FALSE, FALSE, "\"", "\"", '\\', COLOUR_PINK, EFFECT_NORMAL); + + for (word = 0; word != (int) (sizeof (instructions) / sizeof (instructions [0])); ++word) { + syntax_define (FALSE, TRUE, instructions [word], separators, '\0', COLOUR_YELLOW, EFFECT_BOLD); } - syntax_define_separators (separators); + for (word = 0; word != (int) (sizeof (registers) / sizeof (registers [0])); ++word) { + syntax_define (FALSE, TRUE, registers [word], separators, '\0', COLOUR_CYAN, EFFECT_BOLD); + } - syntax_define_range (";", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); - syntax_define_range ("[", "]", '\0', COLOUR_RED, EFFECT_NORMAL); + for (word = 0; word != (int) (sizeof (keywords) / sizeof (keywords [0])); ++word) { + syntax_define (FALSE, TRUE, keywords [word], separators, '\0', COLOUR_YELLOW, EFFECT_ITALIC); + } - syntax_define_operators (".,+-=:{}$", COLOUR_BLUE, EFFECT_BOLD); + syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); + syntax_define (TRUE, FALSE, ".,+-=:;%$<>", "", '\0', COLOUR_CYAN, EFFECT_NORMAL); - syntax_define_words (instructions, sizeof (instructions) / sizeof (instructions [0]), COLOUR_BLUE, EFFECT_NORMAL); - syntax_define_words (registers, sizeof (registers) / sizeof (registers [0]), COLOUR_CYAN, EFFECT_NORMAL); - syntax_define_words (keywords, sizeof (keywords) / sizeof (keywords [0]), COLOUR_PINK, EFFECT_NORMAL); - - syntax_define_default (1, COLOUR_RED, EFFECT_NORMAL, COLOUR_CYAN, EFFECT_NORMAL); - - highlighted = 1; + syntax_define (TRUE, TRUE, "0123456789", separators, '\0', COLOUR_PINK, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "abcdefghijklmnopqrstuvwxyz", separators, '\0', COLOUR_WHITE, EFFECT_NORMAL); + syntax_define (TRUE, TRUE, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", separators, '\0', COLOUR_WHITE, EFFECT_BOLD); + syntax_define (TRUE, TRUE, "_", separators, '\0', COLOUR_WHITE, EFFECT_ITALIC); } int main (int argc, char * * argv) { @@ -320,7 +276,6 @@ int main (int argc, char * * argv) { argument_define ("-c", "--c", highlight_c); argument_define ("-a", "--ada", highlight_ada); argument_define ("-C", "--c++", highlight_cpp); - /*argument_define ("-p", "--python", highlight_python);*/ argument_define ("-V", "--valgrind", highlight_valgrind); argument_define ("-A", "--assembly", highlight_common_assembly); argument_define ("-F", "--flat-assembly", highlight_flat_assembly); @@ -338,7 +293,7 @@ int main (int argc, char * * argv) { } } - if (highlighted == 0) { + if (syntax_active == FALSE) { if ((select == FILE_TYPE_C_SOURCE) || (select == FILE_TYPE_C_HEADER)) { highlight_c (); } else if ((select == FILE_TYPE_ADA_BODY) || (select == FILE_TYPE_ADA_SPECIFICATION)) { @@ -358,7 +313,7 @@ int main (int argc, char * * argv) { select = syntax_select (& buffer [offset], & length); if (select >= syntax_count) { - terminal_colour (COLOUR_RED, EFFECT_REVERSE); + terminal_colour (COLOUR_WHITE, EFFECT_NORMAL); } else { terminal_colour (syntax_colour [select], syntax_effect [select]); } @@ -370,8 +325,6 @@ int main (int argc, char * * argv) { buffer = deallocate (buffer); - syntax_delete (); - argument_delete (); return (EXIT_SUCCESS);