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

	character * keywords [] = {
		"abstract",     "alias",        "align",        "asm",          "assert",       "auto",         "body",         "boolean",
		"break",        "byte",         "case",         "cast",         "catch",        "cdouble",      "cent",         "cfloat",
		"char",         "class",        "const",        "continue",     "creal",        "dchar",        "debug",        "default",
		"delegate",     "delete",       "deprecated",   "do",           "double",       "else",         "enum",         "export",
		"extern",       "false",        "final",        "finally",      "float",        "for",          "foreach",      "with",
		"function",     "goto",         "idouble",      "if",           "ifloat",       "immutable",    "import",       "in",
		"inout",        "int",          "interface",    "invariant",    "ireal",        "is",           "lazy",         "long",
		"macro",        "mixin",        "module",       "new",          "nothrow",      "null",         "out",          "override",
		"package",      "pragma",       "private",      "protected",    "public",       "pure",         "real",         "ref",
		"return",       "scope",        "shared",       "short",        "static",       "struct",       "super",        "switch",
		"synchronized", "template",     "this",         "throw",        "true",         "try",          "typeid",       "typeof",
		"ubyte",        "ucent",        "uint",         "ulong",        "union",        "unittest",     "ushort",       "version",
		"v0",         "wchar",        "while",        "foreach_reverse"
	};

	character * types [] = {
		"byte",         "ubyte",        "short",        "ushort",       "int",          "uint",         "long",         "ulong",
		"cent",         "ucent",        "char",         "wchar",        "dchar",        "float",        "double",       "real",
		"ifloat",       "idouble",      "ireal",        "cfloat",       "cdouble",      "creal",        "v0",         "boolean",
		"string"
	};

	syntax_define (syntax, false, false, "/+",  "+/", '\0', language->comment_colour,   language->comment_effect);
	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, "'",   "'",  '\\', language->character_colour, language->character_effect);
	syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
	syntax_define (syntax, false, false, "`",   "`",  '\0', 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);
	}

	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);
}