wren function
Highlight.js language definition for wren.
Implementation
Mode wren(Highlight hljs) {
final Mode mode0 = Mode();
final Mode mode1 = Mode();
final Mode mode2 = Mode();
final Mode mode3 = Mode();
final Mode mode4 = Mode();
final Mode mode5 = Mode();
mode0.scope = r'number';
mode0.begin =
r'(-?)(\b0[xX][a-fA-F0-9]+|(\b\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?)';
mode0.relevance = 0;
mode1.scope = r'string';
mode1.begin = r'"';
mode1.end = r'"';
mode1.contains = [
Mode(
scope: r'subst',
begin: r'%\(',
end: r'\)',
contains: [mode0, mode2, mode3, mode4, mode5, mode1],
),
Mode(
scope: r'char.escape',
variants: [
Mode(match: r'\\\\|\\["0%abefnrtv]'),
Mode(match: r'\\x[0-9A-F]{2}'),
Mode(match: r'\\u[0-9A-F]{4}'),
Mode(match: r'\\U[0-9A-F]{8}'),
],
),
];
mode2.relevance = 0;
mode2.match = r'\b[A-Z]+[a-z]+([A-Z]+[a-z]+)*';
mode2.scope = r'title.class';
mode2.keywords = {
r'_': [
r'Bool',
r'Class',
r'Fiber',
r'Fn',
r'List',
r'Map',
r'Null',
r'Num',
r'Object',
r'Range',
r'Sequence',
r'String',
r'System',
],
};
mode3.relevance = 0;
mode3.match = r'\b(?!(if|while|for|else|super)\b)[a-zA-Z]\w*(?=\s*[({])';
mode3.scope = r'title.function';
mode4.relevance = 0;
mode4.match = r'\b_[a-zA-Z]\w*';
mode4.scope = r'variable';
mode5.relevance = 0;
mode5.match =
r'(?:-|~|\*|%|\.\.\.|\.\.|\+|<<|>>|>=|<=|<|>|\^|!=|!|\bis\b|==|&&|&|\|\||\||\?:|=)';
mode5.scope = r'operator';
return Mode(
name: r'Wren',
keywords: {
r'keyword': [
r'as',
r'break',
r'class',
r'construct',
r'continue',
r'else',
r'for',
r'foreign',
r'if',
r'import',
r'in',
r'is',
r'return',
r'static',
r'var',
r'while',
],
r'variable.language': [r'this', r'super'],
r'literal': [r'true', r'false', r'null'],
},
contains: [
Mode(
scope: r'comment',
variants: [
Mode(
begin: [r'#!?', r'[A-Za-z_]+(?=\()'],
beginScope: {},
keywords: {
r'literal': [r'true', r'false', r'null'],
},
contains: [],
end: r'\)',
),
Mode(begin: [r'#!?', r'[A-Za-z_]+'], beginScope: {}, end: r'$'),
],
),
mode0,
mode1,
Mode(scope: r'string', begin: r'"""', end: r'"""'),
Mode(
scope: r'comment',
begin: r'\/\*\*',
end: r'\*\/',
contains: [
Mode(match: r'@[a-z]+', scope: r'doctag'),
r'self',
Mode(
scope: r'doctag',
begin: r'[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',
end: r'(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',
excludeBegin: true,
relevance: 0,
),
Mode(
begin:
r"[ ]+((?: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: r'comment',
begin: r'//',
end: r'$',
contains: [
Mode(
scope: r'doctag',
begin: r'[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',
end: r'(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',
excludeBegin: true,
relevance: 0,
),
Mode(
begin:
r"[ ]+((?: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: r'comment',
begin: r'/\*',
end: r'\*/',
contains: [
Mode(
scope: r'doctag',
begin: r'[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',
end: r'(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',
excludeBegin: true,
relevance: 0,
),
Mode(
begin:
r"[ ]+((?: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}",
),
],
),
mode2,
Mode(
variants: [
Mode(
match: [r'class\s+', r'[a-zA-Z]\w*', r'\s+is\s+', r'[a-zA-Z]\w*'],
),
Mode(match: [r'class\s+', r'[a-zA-Z]\w*']),
],
scope: {2: r'title.class', 4: r'title.class.inherited'},
keywords: [
r'as',
r'break',
r'class',
r'construct',
r'continue',
r'else',
r'for',
r'foreign',
r'if',
r'import',
r'in',
r'is',
r'return',
r'static',
r'var',
r'while',
],
),
Mode(
match: [
r'[a-zA-Z]\w*',
r'\s*',
r'=',
r'\s*',
r'\(',
r'[a-zA-Z]\w*',
r'\)\s*\{',
],
scope: {1: r'title.function', 3: r'operator', 6: r'params'},
),
Mode(
match:
r'(?:\b(?!(if|while|for|else|super)\b)[a-zA-Z]\w*|(?:-|~|\*|%|\.\.\.|\.\.|\+|<<|>>|>=|<=|<|>|\^|!=|!|\bis\b|==|&&|&|\|\||\||\?:|=))(?=\s*\([^)]+\)\s*\{)',
scope: r'title.function',
starts: Mode(
contains: [
Mode(
begin: r'\(',
end: r'\)',
contains: [
Mode(relevance: 0, scope: r'params', match: r'[a-zA-Z]\w*'),
],
),
],
),
),
mode3,
mode5,
mode4,
Mode(
scope: r'property',
begin: r'\.(?=[a-zA-Z]\w*)',
end: r'[a-zA-Z]\w*',
excludeBegin: true,
relevance: 0,
),
Mode(
relevance: 0,
match:
r'\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)',
scope: r'variable',
),
],
);
}