aboutsummaryrefslogtreecommitdiff
path: root/xanguage/holy_c.h
blob: b9cdb1d1988147a2c73954ce40f8cdc13e724cb3 (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
static procedure language_highlight_holy_c (language_structure * language, syntax_structure * syntax) {
	character * separators = ".,:;<=>+-*/%!&~^|()[]{}'\" \t\r\n";

	character * keywords [] = {
		"static",       "extern",       "import",       "auto",         "public",       "sizeof",       "asm",          "no_warn",
		"do",           "while",        "for",          "switch",       "case",         "default",      "start",        "end",
		"if",           "else",         "goto",         "return",       "break",        "try",          "catch",        "throw",
		"enum",         "union",        "class"
	};

	character * types [] = {
		"U8",           "U16",          "U32",          "U64",          "I8",           "I16",          "I32",          "I64",
		"U0",           "I0",           "F64",          "Bool"
	};

	character * commons [] = {
		"_extern",      "_intern",      "_import",      "lastclass",    "offset",       "defined",      "lock",         "interrupt",
		"reg",          "noreg",        "argpop",       "noargpop",     "haserrcode",   "NULL",         "TRUE",         "FALSE"
	};

	syntax_define (syntax, false, false, "/*",  "*/", '\0', language->comment_colour,   language->comment_effect);
	syntax_define (syntax, false, false, "//",  "\n", '\0', language->comment_colour,   language->comment_effect);
	syntax_define (syntax, false, false, "#",   "\n", '\\', language->processor_colour, language->processor_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 (types); ++word) {
		syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
	}

	for (natural_64 word = 0; word < array_length (commons); ++word) {
		syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_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);
}