diff --git a/README.md b/README.md index d9b3fd8..98d1c20 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,7 @@ $ cat my_program.ext | xighlight [extension] -- "You need to specify the languag $ xighlight [extension] < my_program.ext -- "Again, since it's reading from standard stream..." ``` +Currently supported programming and scripting languages are: +- C, Ada, C++, assembly, Flat assembly, Fortran, shell. + ![screenshot](screenshot.png) diff --git a/xighlight.c b/xighlight.c index 5dffb16..c02feb1 100644 --- a/xighlight.c +++ b/xighlight.c @@ -283,6 +283,45 @@ static void highlight_fortran (void) { syntax_define (true, true, "_", separators, '\0', colour_white, effect_italic); } +static void highlight_shell (void) { + char * separators = ".,:;<=>+-*/%!&~^?|()[]{}@#$`'\" \t\r\n"; + + char * keywords [] = { + "if", "then", "else", "elif", "fi", "do", "done", "case", + "esac", "while", "until", "for", "function", "declare", "let", "local", + "alias", "shopt", "export", "in", "return", "echo", "set", "alias", + "exit", "source", "shift", "cd" + }; + + 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, "${", ")", '\\', colour_yellow, effect_italic); + syntax_define (false, false, "$(", "}", '\\', colour_cyan, effect_italic); + syntax_define (false, false, "$((", "))", '\\', colour_blue, effect_italic); + + syntax_define (false, true, "&&", separators, '\0', colour_cyan, effect_bold); + syntax_define (false, true, "||", separators, '\0', colour_cyan, effect_bold); + syntax_define (false, true, ";;", separators, '\0', colour_cyan, effect_bold); + syntax_define (false, true, "<<", separators, '\0', colour_cyan, effect_bold); + syntax_define (false, true, ">>", separators, '\0', colour_cyan, effect_bold); + syntax_define (false, true, "<>", 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_bold); + } + + 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); +} + int main (int argc, char * * argv) { int offset = 0; int select = 0; @@ -312,7 +351,8 @@ int main (int argc, char * * argv) { echo ("\t -S --assembly -- General assembly syntax\n"); echo ("\t -T --flat -- Flat assembly syntax\n"); echo ("\t -F --fortran -- Fortran syntax\n"); - echo ("\t -H --shell -- Bourne shell syntax\n"); + echo ("\t -H --shell -- Shell syntax\n"); + exit (log_success); } else if (string_compare (argv [1], "-C") || string_compare (argv [1], "--c")) { highlight_c (); } else if (string_compare (argv [1], "-A") || string_compare (argv [1], "--ada")) { @@ -325,6 +365,8 @@ int main (int argc, char * * argv) { highlight_flat_assembly (); } else if (string_compare (argv [1], "-F") || string_compare (argv [1], "--fortran")) { highlight_fortran (); + } else if (string_compare (argv [1], "-H") || string_compare (argv [1], "--shell")) { + highlight_shell (); } else { select = file_type (argv [1]); buffer = file_import (argv [1]);