Implementation
final monkey = Mode(
refs: {},
name: "Monkey",
case_insensitive: true,
keywords: {
"keyword": [
"public",
"private",
"property",
"continue",
"exit",
"extern",
"new",
"try",
"catch",
"eachin",
"not",
"abstract",
"final",
"select",
"case",
"default",
"const",
"local",
"global",
"field",
"end",
"if",
"then",
"else",
"elseif",
"endif",
"while",
"wend",
"repeat",
"until",
"forever",
"for",
"to",
"step",
"next",
"return",
"module",
"inline",
"throw",
"import",
"and",
"or",
"shl",
"shr",
"mod"
],
"built_in": [
"DebugLog",
"DebugStop",
"Error",
"Print",
"ACos",
"ACosr",
"ASin",
"ASinr",
"ATan",
"ATan2",
"ATan2r",
"ATanr",
"Abs",
"Abs",
"Ceil",
"Clamp",
"Clamp",
"Cos",
"Cosr",
"Exp",
"Floor",
"Log",
"Max",
"Max",
"Min",
"Min",
"Pow",
"Sgn",
"Sgn",
"Sin",
"Sinr",
"Sqrt",
"Tan",
"Tanr",
"Seed",
"PI",
"HALFPI",
"TWOPI"
],
"literal": ["true", "false", "null"]
},
illegal: "\\/\\*",
contains: [
Mode(scope: "comment", begin: "#rem", end: "#end", contains: [
Mode(
scope: "doctag",
begin: "[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
end: "(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",
excludeBegin: true,
relevance: 0),
Mode(
begin:
"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}")
]),
Mode(
scope: "comment",
begin: "'",
end: "\$",
contains: [
Mode(
scope: "doctag",
begin: "[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
end: "(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",
excludeBegin: true,
relevance: 0),
Mode(
begin:
"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}")
],
relevance: 0),
Mode(variants: [
Mode(match: ["(function|method)", "\\s+", "[a-zA-Z_]\\w*"])
], scope: {
"1": "keyword",
"3": "title.function"
}),
Mode(variants: [
Mode(match: [
"(class|interface|extends|implements)",
"\\s+",
"[a-zA-Z_]\\w*"
])
], scope: {
"1": "keyword",
"3": "title.class"
}),
Mode(className: "variable.language", begin: "\\b(self|super)\\b"),
Mode(
className: "meta",
begin: "\\s*#",
end: "\$",
keywords: {"keyword": "if else elseif endif end then"}),
Mode(match: ["^\\s*", "strict\\b"], scope: {"2": "meta"}),
Mode(beginKeywords: "alias", end: "=", contains: [UNDERSCORE_TITLE_MODE]),
QUOTE_STRING_MODE,
Mode(
className: "number",
relevance: 0,
variants: [Mode(begin: "[\$][a-fA-F0-9]+"), NUMBER_MODE])
]);