Implementation
final wren = Mode(
refs: {
'~contains~2~contains~0~contains~4': Mode(
relevance: 0,
match:
"(?:-|\\x7e|\\*|%|\\.\\.\\.|\\.\\.|\\+|<<|>>|>=|<=|<|>|\\^|!=|!|\\bis\\b|==|&&|&|\\|\\||\\||\\?:|=)",
className: "operator"),
'~contains~2~contains~0~contains~3':
Mode(relevance: 0, match: "\\b_[a-zA-Z]\\w*", scope: "variable"),
'~contains~2~contains~0~contains~2': Mode(
relevance: 0,
match: "\\b(?!(if|while|for|else|super)\\b)[a-zA-Z]\\w*(?=\\s*[({])",
className: "title.function"),
'~contains~2~contains~0~contains~1': Mode(
relevance: 0,
match: "\\b[A-Z]+[a-z]+([A-Z]+[a-z]+)*",
scope: "title.class",
keywords: {
"_": [
"Bool",
"Class",
"Fiber",
"Fn",
"List",
"Map",
"Null",
"Num",
"Object",
"Range",
"Sequence",
"String",
"System"
]
}),
'~contains~2': Mode(scope: "string", begin: "\"", end: "\"", contains: [
Mode(scope: "subst", begin: "%\\(", end: "\\)", contains: [
C_NUMBER_MODE,
Mode(ref: '~contains~2~contains~0~contains~1'),
Mode(ref: '~contains~2~contains~0~contains~2'),
Mode(ref: '~contains~2~contains~0~contains~3'),
Mode(ref: '~contains~2~contains~0~contains~4'),
Mode(ref: '~contains~2')
]),
Mode(scope: "char.escape", variants: [
Mode(match: "\\\\\\\\|\\\\[\"0%abefnrtv]"),
Mode(match: "\\\\x[0-9A-F]{2}"),
Mode(match: "\\\\u[0-9A-F]{4}"),
Mode(match: "\\\\U[0-9A-F]{8}")
])
]),
},
name: "Wren",
keywords: {
"keyword": [
"as",
"break",
"class",
"construct",
"continue",
"else",
"for",
"foreign",
"if",
"import",
"in",
"is",
"return",
"static",
"var",
"while"
],
"variable.language": ["this", "super"],
"literal": ["true", "false", "null"]
},
contains: [
Mode(scope: "comment", variants: [
Mode(begin: [
"#!?",
"[A-Za-z_]+(?=\\()"
], beginScope: {}, keywords: {
"literal": ["true", "false", "null"]
}, contains: [], end: "\\)"),
Mode(begin: ["#!?", "[A-Za-z_]+"], beginScope: {}, end: "\$")
]),
C_NUMBER_MODE,
Mode(ref: '~contains~2'),
Mode(className: "string", begin: "\"\"\"", end: "\"\"\""),
Mode(scope: "comment", begin: "\\/\\*\\*", end: "\\*\\/", contains: [
Mode(match: "@[a-z]+", scope: "doctag"),
Mode(self: true),
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}")
]),
C_LINE_COMMENT_MODE,
C_BLOCK_COMMENT_MODE,
Mode(ref: '~contains~2~contains~0~contains~1'),
Mode(variants: [
Mode(
match: ["class\\s+", "[a-zA-Z]\\w*", "\\s+is\\s+", "[a-zA-Z]\\w*"]),
Mode(match: ["class\\s+", "[a-zA-Z]\\w*"])
], scope: {
"2": "title.class",
"4": "title.class.inherited"
}, keywords: [
"as",
"break",
"class",
"construct",
"continue",
"else",
"for",
"foreign",
"if",
"import",
"in",
"is",
"return",
"static",
"var",
"while"
]),
Mode(match: [
"[a-zA-Z]\\w*",
"\\s*",
"=",
"\\s*",
"\\(",
"[a-zA-Z]\\w*",
"\\)\\s*\\{"
], scope: {
"1": "title.function",
"3": "operator",
"6": "params"
}),
Mode(
match:
"(?:\\b(?!(if|while|for|else|super)\\b)[a-zA-Z]\\w*|(?:-|\\x7e|\\*|%|\\.\\.\\.|\\.\\.|\\+|<<|>>|>=|<=|<|>|\\^|!=|!|\\bis\\b|==|&&|&|\\|\\||\\||\\?:|=))(?=\\s*\\([^)]+\\)\\s*\\{)",
className: "title.function",
starts: Mode(contains: [
Mode(begin: "\\(", end: "\\)", contains: [
Mode(relevance: 0, scope: "params", match: "[a-zA-Z]\\w*")
])
])),
Mode(ref: '~contains~2~contains~0~contains~2'),
Mode(ref: '~contains~2~contains~0~contains~4'),
Mode(ref: '~contains~2~contains~0~contains~3'),
Mode(
className: "property",
begin: "\\.(?=[a-zA-Z]\\w*)",
end: "[a-zA-Z]\\w*",
excludeBegin: true,
relevance: 0),
Mode(
relevance: 0,
match:
"\\b(?!as|break|class|construct|continue|else|for|foreign|if|import|in|is|return|static|var|while|this|super|true|false|null\\b)[a-zA-Z_]\\w*(?:[?!]|\\b)",
className: "variable")
]);