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

	character * keywords [] = {
		"and",          "break",        "do",           "else",         "elseif",       "end",          "false",        "for",
		"function",     "if",           "in",           "local",        "nil",          "not",          "or",           "until",
		"repeat",       "return",       "then",         "true",         "while"
	};

	character * types [] = {
		"booleanean",      "number",       "string",       "userdata",     "function",     "thread",       "table"
	};

	character * commons [] = {
		"require",      "print",        "seek",         "dofile",       "loadfile",     "assert",       "rawset",       "rawget",
		"setfenv",      "pairs",        "ipairs",       "tonumber",     "tostring",     "foreach",      "setn",         "getn",
		"insert",       "concat",       "sort",         "remove",       "abs",          "ceil",         "floor",        "log10",
		"rad",          "sqrt",         "acos",         "cos",          "fmod",         "max",          "random",       "tan",
		"asin",         "cosh",         "frexp",        "min",          "randomseed",   "tanh",         "atan",         "deg",
		"ldexp",        "modf",         "sin",          "atan2",        "sinh",         "exp",          "log",          "pow",
		"open",         "close",        "read",         "write",        "input",        "output",       "format",       "lines",
		"upper",        "lower",        "find",         "gfind",        "match",        "gmatch",       "sub",          "gsub",
		"len",          "rep",          "char",         "dump",         "reverse",      "byte"
	};

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

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