|
|
@@ -1,11 +1,3 @@ |
|
|
|
/* |
|
|
|
Copyright (c) 2023 : Ognjen 'xolatile' Milan Robovic |
|
|
|
|
|
|
|
Xighlight is free software! You will redistribute it or modify it under the terms of the GNU General Public License by Free Software Foundation. |
|
|
|
And when you do redistribute it or modify it, it will use either version 3 of the License, or (at yours truly opinion) any later version. |
|
|
|
It is distributed in the hope that it will be useful or harmful, it really depends... But no warranty what so ever, seriously. See GNU/GPLv3. |
|
|
|
*/ |
|
|
|
|
|
|
|
#include <xolatile/xtandard.c> |
|
|
|
#include <xolatile/xyntax.c> |
|
|
|
|
|
|
@@ -17,13 +9,13 @@ static void echo_license (void) { |
|
|
|
echo ("xighlight: Terminal syntax highlighter (GNU general public license version 3)\n"); |
|
|
|
} |
|
|
|
|
|
|
|
static void highlight_common (void) { /* Should be changed to support basic GCC, Clang, Valgrind and Splint output... */ |
|
|
|
static void highlight_common (void) { |
|
|
|
char * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\"@#$` \t\r\n"; |
|
|
|
|
|
|
|
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); |
|
|
|
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) { |
|
|
@@ -38,23 +30,23 @@ static void highlight_c (void) { |
|
|
|
|
|
|
|
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); |
|
|
|
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 (false, true, keywords [word], separators, '\0', colour_yellow, effect_bold); |
|
|
|
} |
|
|
|
|
|
|
|
syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); |
|
|
|
syntax_define (TRUE, FALSE, ".,:;<=>+*-/%!&~^?|", "", '\0', COLOUR_CYAN, 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); |
|
|
|
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); |
|
|
|
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) { |
|
|
@@ -75,20 +67,20 @@ static void highlight_ada (void) { |
|
|
|
|
|
|
|
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); |
|
|
|
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 (false, true, keywords [word], separators, '\0', colour_yellow, effect_bold); |
|
|
|
} |
|
|
|
|
|
|
|
syntax_define (TRUE, FALSE, "()", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); |
|
|
|
syntax_define (TRUE, FALSE, ".,:;<=>+-*/&|'", "", '\0', COLOUR_CYAN, 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); |
|
|
|
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, "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) { |
|
|
@@ -112,32 +104,32 @@ static void highlight_cpp (void) { |
|
|
|
|
|
|
|
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); |
|
|
|
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 (false, true, keywords [word], separators, '\0', colour_yellow, effect_bold); |
|
|
|
} |
|
|
|
|
|
|
|
syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); |
|
|
|
syntax_define (TRUE, FALSE, ".,:;<=>+*-/%!&~^?|", "", '\0', COLOUR_CYAN, 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); |
|
|
|
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); |
|
|
|
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_valgrind (void) { |
|
|
|
char * separators = "./-=?() \t\r\n"; |
|
|
|
|
|
|
|
syntax_define (FALSE, FALSE, "==", "==", '\0', COLOUR_GREY, EFFECT_BOLD); |
|
|
|
syntax_define (FALSE, FALSE, "???", "\n", '\0', COLOUR_YELLOW, EFFECT_BOLD); |
|
|
|
syntax_define (false, false, "==", "==", '\0', colour_grey, effect_bold); |
|
|
|
syntax_define (false, false, "???", "\n", '\0', colour_yellow, effect_bold); |
|
|
|
|
|
|
|
syntax_define (TRUE, TRUE, "0123456789", separators, '\0', COLOUR_PINK, EFFECT_BOLD); |
|
|
|
syntax_define (true, true, "0123456789", separators, '\0', colour_pink, effect_bold); |
|
|
|
} |
|
|
|
|
|
|
|
static void highlight_common_assembly (void) { |
|
|
@@ -177,25 +169,25 @@ static void highlight_common_assembly (void) { |
|
|
|
|
|
|
|
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); |
|
|
|
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 (false, true, instructions [word], separators, '\0', colour_yellow, effect_bold); |
|
|
|
} |
|
|
|
|
|
|
|
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 (false, true, registers [word], separators, '\0', colour_cyan, effect_bold); |
|
|
|
} |
|
|
|
|
|
|
|
syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); |
|
|
|
syntax_define (TRUE, FALSE, ".,+*-/%$<>", "", '\0', COLOUR_CYAN, 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); |
|
|
|
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); |
|
|
|
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) { |
|
|
@@ -240,36 +232,36 @@ static void highlight_flat_assembly (void) { |
|
|
|
|
|
|
|
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); |
|
|
|
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 (false, true, instructions [word], separators, '\0', colour_yellow, effect_bold); |
|
|
|
} |
|
|
|
|
|
|
|
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 (false, true, registers [word], separators, '\0', colour_cyan, effect_bold); |
|
|
|
} |
|
|
|
|
|
|
|
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 (false, true, keywords [word], separators, '\0', colour_yellow, effect_italic); |
|
|
|
} |
|
|
|
|
|
|
|
syntax_define (TRUE, FALSE, "()[]{}", "", '\0', COLOUR_BLUE, EFFECT_NORMAL); |
|
|
|
syntax_define (TRUE, FALSE, ".,+-=:;%$<>", "", '\0', COLOUR_CYAN, 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); |
|
|
|
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); |
|
|
|
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) { |
|
|
|
int offset = 0; |
|
|
|
int select = 0; |
|
|
|
int length = 0; |
|
|
|
char * buffer = NULL; |
|
|
|
char * buffer = null; |
|
|
|
|
|
|
|
argument_define ("-v", "--version", echo_version); |
|
|
|
argument_define ("-l", "--license", echo_license); |
|
|
@@ -284,8 +276,8 @@ int main (int argc, char * * argv) { |
|
|
|
argument_select (argc, argv); |
|
|
|
} |
|
|
|
|
|
|
|
if (buffer == NULL) { |
|
|
|
if (argument_input == NULL) { |
|
|
|
if (buffer == null) { |
|
|
|
if (argument_input == null) { |
|
|
|
buffer = record (); |
|
|
|
} else { |
|
|
|
select = file_type (argument_input); |
|
|
@@ -293,16 +285,16 @@ int main (int argc, char * * argv) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (syntax_active == FALSE) { |
|
|
|
if ((select == FILE_TYPE_C_SOURCE) || (select == FILE_TYPE_C_HEADER)) { |
|
|
|
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)) { |
|
|
|
} else if ((select == file_type_ada_body) || (select == file_type_ada_specification)) { |
|
|
|
highlight_ada (); |
|
|
|
} else if ((select == FILE_TYPE_CPP_SOURCE) || (select == FILE_TYPE_CPP_HEADER)) { |
|
|
|
} else if ((select == file_type_cpp_source) || (select == file_type_cpp_header)) { |
|
|
|
highlight_cpp (); |
|
|
|
} else if (select == FILE_TYPE_COMMON_ASSEMBLY) { |
|
|
|
} else if (select == file_type_common_assembly) { |
|
|
|
highlight_common_assembly (); |
|
|
|
} else if (select == FILE_TYPE_FLAT_ASSEMBLY) { |
|
|
|
} else if (select == file_type_flat_assembly) { |
|
|
|
highlight_flat_assembly (); |
|
|
|
} else { |
|
|
|
highlight_common (); |
|
|
@@ -313,7 +305,7 @@ int main (int argc, char * * argv) { |
|
|
|
select = syntax_select (& buffer [offset], & length); |
|
|
|
|
|
|
|
if (select >= syntax_count) { |
|
|
|
terminal_colour (COLOUR_WHITE, EFFECT_NORMAL); |
|
|
|
terminal_colour (colour_white, effect_normal); |
|
|
|
} else { |
|
|
|
terminal_colour (syntax_colour [select], syntax_effect [select]); |
|
|
|
} |
|
|
@@ -327,5 +319,5 @@ int main (int argc, char * * argv) { |
|
|
|
|
|
|
|
argument_delete (); |
|
|
|
|
|
|
|
return (EXIT_SUCCESS); |
|
|
|
return (0); |
|
|
|
} |