aboutsummaryrefslogtreecommitdiff
path: root/xanguage/fortran.h
blob: 2de4e68cf2acc2046a2ddf1ed914cc6bf1230a89 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
static procedure language_highlight_fortran (language_structure * language, syntax_structure * syntax) {
	character * separators = ",:<=>+-*/&()[]\"\' \t\r\n";

	character * keywords [] = {
		"allocatable",  "allocate",     "associate",    "backspace",    "block",        "call",         "case",         "common",
		"contains",     "cycle",        "data",         "deallocate",   "d0",           "do",           "else",         "elseif",
		"end",          "enddo",        "endfile",      "endif",        "entry",        "equivalence",  "exit",         "external",
		"forall",       "format",       "function",     "goto",         "if",           "implicit",     "inquire",      "intent",
		"intrinsic",    "module",       "namelist",     "none",         "nullify",      "only",         "open",         "optional",
		"parameter",    "pointer",      "print",        "private",      "program",      "public",       "read",         "recursive",
		"return",       "rewind",       "save",         "select",       "sequence",     "stop",         "subroutine",   "target",
		"then",         "to",           "type",         "use",          "where",        "write"
	};

	character * types [] = {
		"character",    "integer",      "boolean",      "real",         "complex"
	};

	character * commons [] = {
		".and.",        ".or.",         ".not.",        ".true.",       ".false.",      "in",           "out",          "len",
		"dimension",    "modulo",       "advance"
	};

	syntax_define (syntax, false, false, "!",  "\n", '\0', language->comment_colour,   language->comment_effect);
	syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
	syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);

	for (natural_64 word = 0; word < array_length (keywords); ++word) {
		syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
	}

	for (natural_64 word = 0; word < array_length (commons); ++word) {
		syntax_define (syntax, false, true, commons [word], separators, '\0', language->processor_colour, language->processor_effect);
	}

	for (natural_64 word = 0; word < array_length (types); ++word) {
		syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
	}

	syntax_define (syntax, true, false, "()[]",       "", '\0', language->bracket_colour,  language->bracket_effect);
	syntax_define (syntax, true, false, ",:<=>+-*/&", "", '\0', language->operator_colour, language->operator_effect);

	syntax_define (syntax, true, true, language_digits,    separators, '\0', language->number_colour,     language->number_effect);
	syntax_define (syntax, true, true, language_lowercase, separators, '\0', language->lowercase_colour,  language->lowercase_effect);
	syntax_define (syntax, true, true, language_uppercase, separators, '\0', language->uppercase_colour,  language->uppercase_effect);
	syntax_define (syntax, true, true, "_",                separators, '\0', language->underscore_colour, language->underscore_effect);
}