aboutsummaryrefslogtreecommitdiff
path: root/xanguage/pascal.h
blob: 16cec4bf325b5455475c52e39d9ab403770cac12 (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
static procedure language_highlight_pascal (language_structure * language, syntax_structure * syntax) {
	character * separators = ".,:;<=>+-*/&@#$%^()[] \t\r\n";

	character * keywords [] = {
		"absolute",     "and",          "array",        "asm",          "begin",        "case",         "const",        "constructor",
		"destructor",   "div",          "do",           "downto",       "else",         "end",          "file",         "for",
		"function",     "goto",         "if",           "in",           "inherited",    "inline",       "interface",    "xor",
		"label",        "mod",          "nil",          "not",          "object",       "of",           "operator",     "or",
		"packed",       "procedure",    "program",      "record",       "reintroduce",  "repeat",       "self",         "set",
		"shl",          "shr",          "string",       "then",         "to",           "type",         "unit",         "until",
		"uses",         "var",          "while",        "with"
	};

	syntax_define (syntax, false, false, "//", "\n", '\0', language->comment_colour, language->comment_effect);
	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, "'",  "'",  '#',  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);
	}

	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_letters, separators, '\0', language->lowercase_colour, language->lowercase_effect);
}