/* * 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 #include int main (void) { int offset = 0; int word = 0; int select = 0; int length = 0; char * buffer = NULL; char * separator = ".,:;<=>+-*/%!&~^?|()[]{}'\" \t\r\n"; char * c_keywords [32] = { "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" }; (void) syntax_define (1, 0, " \t\r\n", "", '\0', COLOUR_WHITE, EFFECT_NORMAL); (void) syntax_define (0, 0, "#", "\n", '\\', COLOUR_PINK, EFFECT_BOLD); (void) syntax_define (0, 0, "//", "\n", '\0', COLOUR_GREY, EFFECT_BOLD); (void) syntax_define (0, 0, "/*", "*/", '\0', COLOUR_GREY, EFFECT_BOLD); (void) syntax_define (0, 0, "'", "'", '\\', COLOUR_RED, EFFECT_NORMAL); (void) syntax_define (0, 0, "\"", "\"", '\\', COLOUR_RED, EFFECT_BOLD); (void) syntax_define (1, 0, ".,:;<=>+-*/%!&~^?|()[]{}", "", '\0', COLOUR_CYAN, EFFECT_NORMAL); for (word = 0; word != 32; ++word) { (void) syntax_define (0, 1, c_keywords [word], separator, '\0', COLOUR_BLUE, EFFECT_BOLD); } (void) syntax_define (1, 1, "0123456789", separator, '\0', COLOUR_CYAN, EFFECT_BOLD); (void) syntax_define (1, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", separator, '\0', COLOUR_PINK, EFFECT_ITALIC); (void) syntax_define (1, 1, "abcdefghijklmnopqrstuvwxyz", separator, '\0', COLOUR_WHITE, EFFECT_ITALIC); (void) syntax_define (0, 1, "_", separator, '\0', COLOUR_PINK, EFFECT_BOLD); buffer = record (); for (offset = 0; buffer [offset] != '\0'; offset += length) { select = syntax_select (& buffer [offset], & length); if (select >= syntax_count) { terminal_style (EFFECT_NORMAL, COLOUR_WHITE); } else { terminal_style (syntax_effect [select], syntax_colour [select]); } out (& buffer [offset], length); terminal_style (-1, -1); } buffer = deallocate (buffer); syntax_delete (); return (EXIT_SUCCESS); }