codemirror-mode-zenscript
Version:
A CodeMirror mode for the ZenScript language
102 lines (100 loc) • 5.19 kB
JavaScript
import CodeMirror from 'codemirror';
import 'codemirror/addon/mode/simple';
CodeMirror.defineSimpleMode("zenscript", {
start: [{
regex: /"(?:(?:(?!\\)[\s\S])|\.)*?(?:"|$)/,
token: "string"
}, {
regex: /'(?:(?:(?!\\)[\s\S])|\\(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]))*?(?:'|$)/,
token: "string"
}, {
regex: /(zenClass)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+)([0-9A-Z_a-z]*)/,
token: ["keyword", null, "def"]
}, {
regex: /\b(zenConstructor)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?=\()/,
token: ["keyword"]
}, {
regex: /(function)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+)([\$A-Z_a-z][\$0-9A-Z_a-z]*)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?=\()/,
token: ["keyword", null, "def"]
}, {
regex: /([\$A-Z_a-z][\$0-9A-Z_a-z]*)(?=[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*\()/,
token: ["def"]
}, {
regex: /\b([0-9A-Z_a-z]+)(\.)([0-9A-Z_a-z]+)(?:(\.)([0-9A-Z_a-z]+))/,
token: ["variable-2", "operator", "variable-3", "operator", "builtin"]
}, {
regex: /(<)\b((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?)(:)((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?)(:)?(\*|[0-9]+)?(>)/,
token: ["keyword", "variable-3", "keyword", "variable-2", "keyword", "number", "keyword"]
}, {
regex: /^([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*)(#)(debug|ignoreBracketErrors|norun|loader|priority|ikwid|profile|zslint|modloaded)\b/,
token: [null, "tag", "attribute"]
}, {
regex: /\b(var|val|static|global)\b/,
token: ["def"]
}, {
regex: /\b(as)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF])+([A-Za-z]+)\b/,
token: ["builtin", null, "variable-3"]
}, {
regex: /\b(instanceof|get|implements|set|function|override|const|if|else|do|while|for|throw|panic|lock|try|catch|finally|return|break|continue|switch|case|default|in|is|as|match|throws|super|new)\b/,
token: "keyword"
}, {
regex: /\b(variant|abstract|final|private|public|export|internal|static|protected|implicit|virtual|extern|immutable)\b/,
token: "keyword"
}, {
regex: /\b(zenClass|zenConstructor|alias|class|interface|enum|struct|expand|variant|set|void|bool|byte|sbyte|short|ushort|int|uint|long|ulong|usize|float|double|char|string)\b/,
token: "builtin"
}, {
regex: /\b(import)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF])((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+\.)((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*;)/,
token: ["keyword", null, "variable-3", "variable-2", "keyword"]
}, {
regex: /([0-9A-Z_a-z]+(?=;))(;)/,
token: ["variable-2", "atom"]
}, {
regex: /\b((0([Xx])[0-9A-Fa-f]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))(([Ee])([\+\x2D])?[0-9]+)?)([DFLUdflu]|UL|ul)?\b/i,
token: "number"
}, {
regex: /\b((?:[a-z][0-9A-Z_a-z]*\.)*[A-Z]+[0-9A-Z_a-z]*)(?=\[)/,
token: "variable-2"
}, {
regex: /[\(\[\{]/,
indent: true
}, {
regex: /[\)\]\}]/,
dedent: true
}, {
regex: /true|false|null/,
token: "atom"
}, {
regex: /\b(function)\b/,
token: "keyword"
}, {
regex: /\b(if|else)\b/,
token: "keyword"
}, {
regex: /\/\/(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*/,
token: "comment"
}, {
regex: /#(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*/,
token: "comment"
}, {
regex: /\/\*/,
token: "comment",
next: "comment"
}, {
regex: /(\.|\.\.|\.\.\.|,|\+|\+=|\+\+|\x2D|\x2D=|\x2D\x2D|~|~=|\*|\*=|\/|\/=|%|%=|\||\|=|\|\||&|&=|&&|\^|\^=|\?|\?\.|\?\?|<|<=|<<|<<=|>|>=|>>|>>=|>>>|>>>=|=>|=|==|===|!|!=|!==|\$|`)/,
token: "keyword"
}],
comment: [{
regex: /(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?\*\//,
token: "comment",
next: "start"
}, {
regex: /(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*/,
token: "comment"
}],
meta: {
dontIndentStates: ["comment"],
lineComment: "//"
}
});
//# sourceMappingURL=codemirror-mode-zenscript.modern.js.map