mirror of
https://github.com/mindoc-org/mindoc.git
synced 2026-02-27 17:03:57 +08:00
upgrade editor.md(many bug exists)
This commit is contained in:
@@ -6,10 +6,11 @@
|
||||
|
||||
<link rel="stylesheet" href="../../lib/codemirror.css">
|
||||
<script src="../../lib/codemirror.js"></script>
|
||||
<script src="../../addon/edit/matchbrackets.js"></script>
|
||||
<script src="julia.js"></script>
|
||||
<style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
|
||||
<style>.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
|
||||
<div id=nav>
|
||||
<a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
|
||||
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png" alt=""></a>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a>
|
||||
|
||||
437
static/editor.md/lib/codemirror/mode/julia/julia.js
vendored
437
static/editor.md/lib/codemirror/mode/julia/julia.js
vendored
@@ -1,5 +1,5 @@
|
||||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
||||
// Distributed under an MIT license: https://codemirror.net/LICENSE
|
||||
|
||||
(function(mod) {
|
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
@@ -11,65 +11,106 @@
|
||||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
|
||||
CodeMirror.defineMode("julia", function(_conf, parserConf) {
|
||||
var ERRORCLASS = 'error';
|
||||
|
||||
function wordRegexp(words) {
|
||||
return new RegExp("^((" + words.join(")|(") + "))\\b");
|
||||
CodeMirror.defineMode("julia", function(config, parserConf) {
|
||||
function wordRegexp(words, end, pre) {
|
||||
if (typeof pre === "undefined") { pre = ""; }
|
||||
if (typeof end === "undefined") { end = "\\b"; }
|
||||
return new RegExp("^" + pre + "((" + words.join(")|(") + "))" + end);
|
||||
}
|
||||
|
||||
var operators = parserConf.operators || /^\.?[|&^\\%*+\-<>!=\/]=?|\?|~|:|\$|\.[<>]|<<=?|>>>?=?|\.[<>=]=|->?|\/\/|\bin\b/;
|
||||
var octChar = "\\\\[0-7]{1,3}";
|
||||
var hexChar = "\\\\x[A-Fa-f0-9]{1,2}";
|
||||
var sChar = "\\\\[abefnrtv0%?'\"\\\\]";
|
||||
var uChar = "([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])";
|
||||
|
||||
var asciiOperatorsList = [
|
||||
"[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "--?>", "<--[->]?", "\\/\\/",
|
||||
"\\.{2,3}", "[\\.\\\\%*+\\-<>!\\/^|&]=?", "\\?", "\\$", "~", ":"
|
||||
];
|
||||
var operators = parserConf.operators || wordRegexp([
|
||||
"[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "--?>", "<--[->]?", "\\/\\/",
|
||||
"[\\\\%*+\\-<>!\\/^|&\\u00F7\\u22BB]=?", "\\?", "\\$", "~", ":",
|
||||
"\\u00D7", "\\u2208", "\\u2209", "\\u220B", "\\u220C", "\\u2218",
|
||||
"\\u221A", "\\u221B", "\\u2229", "\\u222A", "\\u2260", "\\u2264",
|
||||
"\\u2265", "\\u2286", "\\u2288", "\\u228A", "\\u22C5",
|
||||
"\\b(in|isa)\\b(?!\.?\\()"
|
||||
], "");
|
||||
var delimiters = parserConf.delimiters || /^[;,()[\]{}]/;
|
||||
var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*!*/;
|
||||
var blockOpeners = ["begin", "function", "type", "immutable", "let", "macro", "for", "while", "quote", "if", "else", "elseif", "try", "finally", "catch", "do"];
|
||||
var blockClosers = ["end", "else", "elseif", "catch", "finally"];
|
||||
var keywordList = ['if', 'else', 'elseif', 'while', 'for', 'begin', 'let', 'end', 'do', 'try', 'catch', 'finally', 'return', 'break', 'continue', 'global', 'local', 'const', 'export', 'import', 'importall', 'using', 'function', 'macro', 'module', 'baremodule', 'type', 'immutable', 'quote', 'typealias', 'abstract', 'bitstype', 'ccall'];
|
||||
var builtinList = ['true', 'false', 'enumerate', 'open', 'close', 'nothing', 'NaN', 'Inf', 'print', 'println', 'Int', 'Int8', 'Uint8', 'Int16', 'Uint16', 'Int32', 'Uint32', 'Int64', 'Uint64', 'Int128', 'Uint128', 'Bool', 'Char', 'Float16', 'Float32', 'Float64', 'Array', 'Vector', 'Matrix', 'String', 'UTF8String', 'ASCIIString', 'error', 'warn', 'info', '@printf'];
|
||||
var identifiers = parserConf.identifiers ||
|
||||
/^[_A-Za-z\u00A1-\u2217\u2219-\uFFFF][\w\u00A1-\u2217\u2219-\uFFFF]*!*/;
|
||||
|
||||
//var stringPrefixes = new RegExp("^[br]?('|\")")
|
||||
var stringPrefixes = /^(`|'|"{3}|([br]?"))/;
|
||||
var keywords = wordRegexp(keywordList);
|
||||
var builtins = wordRegexp(builtinList);
|
||||
var openers = wordRegexp(blockOpeners);
|
||||
var closers = wordRegexp(blockClosers);
|
||||
var macro = /^@[_A-Za-z][_A-Za-z0-9]*/;
|
||||
var symbol = /^:[_A-Za-z][_A-Za-z0-9]*/;
|
||||
var indentInfo = null;
|
||||
var chars = wordRegexp([octChar, hexChar, sChar, uChar], "'");
|
||||
|
||||
function in_array(state) {
|
||||
var ch = cur_scope(state);
|
||||
if(ch=="[" || ch=="{") {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
var openersList = ["begin", "function", "type", "struct", "immutable", "let",
|
||||
"macro", "for", "while", "quote", "if", "else", "elseif", "try",
|
||||
"finally", "catch", "do"];
|
||||
|
||||
var closersList = ["end", "else", "elseif", "catch", "finally"];
|
||||
|
||||
var keywordsList = ["if", "else", "elseif", "while", "for", "begin", "let",
|
||||
"end", "do", "try", "catch", "finally", "return", "break", "continue",
|
||||
"global", "local", "const", "export", "import", "importall", "using",
|
||||
"function", "where", "macro", "module", "baremodule", "struct", "type",
|
||||
"mutable", "immutable", "quote", "typealias", "abstract", "primitive",
|
||||
"bitstype"];
|
||||
|
||||
var builtinsList = ["true", "false", "nothing", "NaN", "Inf"];
|
||||
|
||||
CodeMirror.registerHelper("hintWords", "julia", keywordsList.concat(builtinsList));
|
||||
|
||||
var openers = wordRegexp(openersList);
|
||||
var closers = wordRegexp(closersList);
|
||||
var keywords = wordRegexp(keywordsList);
|
||||
var builtins = wordRegexp(builtinsList);
|
||||
|
||||
var macro = /^@[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/;
|
||||
var symbol = /^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/;
|
||||
var stringPrefixes = /^(`|([_A-Za-z\u00A1-\uFFFF]*"("")?))/;
|
||||
|
||||
var macroOperators = wordRegexp(asciiOperatorsList, "", "@");
|
||||
var symbolOperators = wordRegexp(asciiOperatorsList, "", ":");
|
||||
|
||||
function inArray(state) {
|
||||
return (state.nestedArrays > 0);
|
||||
}
|
||||
|
||||
function cur_scope(state) {
|
||||
if(state.scopes.length==0) {
|
||||
function inGenerator(state) {
|
||||
return (state.nestedGenerators > 0);
|
||||
}
|
||||
|
||||
function currentScope(state, n) {
|
||||
if (typeof(n) === "undefined") { n = 0; }
|
||||
if (state.scopes.length <= n) {
|
||||
return null;
|
||||
}
|
||||
return state.scopes[state.scopes.length - 1];
|
||||
return state.scopes[state.scopes.length - (n + 1)];
|
||||
}
|
||||
|
||||
// tokenizers
|
||||
function tokenBase(stream, state) {
|
||||
// Handle multiline comments
|
||||
if (stream.match('#=', false)) {
|
||||
state.tokenize = tokenComment;
|
||||
return state.tokenize(stream, state);
|
||||
}
|
||||
|
||||
// Handle scope changes
|
||||
var leaving_expr = state.leaving_expr;
|
||||
if(stream.sol()) {
|
||||
leaving_expr = false;
|
||||
var leavingExpr = state.leavingExpr;
|
||||
if (stream.sol()) {
|
||||
leavingExpr = false;
|
||||
}
|
||||
state.leaving_expr = false;
|
||||
if(leaving_expr) {
|
||||
if(stream.match(/^'+/)) {
|
||||
return 'operator';
|
||||
state.leavingExpr = false;
|
||||
|
||||
if (leavingExpr) {
|
||||
if (stream.match(/^'+/)) {
|
||||
return "operator";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(stream.match(/^\.{2,3}/)) {
|
||||
return 'operator';
|
||||
if (stream.match(/\.{4,}/)) {
|
||||
return "error";
|
||||
} else if (stream.match(/\.{1,3}/)) {
|
||||
return "operator";
|
||||
}
|
||||
|
||||
if (stream.eatSpace()) {
|
||||
@@ -77,106 +118,101 @@ CodeMirror.defineMode("julia", function(_conf, parserConf) {
|
||||
}
|
||||
|
||||
var ch = stream.peek();
|
||||
// Handle Comments
|
||||
|
||||
// Handle single line comments
|
||||
if (ch === '#') {
|
||||
stream.skipToEnd();
|
||||
return 'comment';
|
||||
}
|
||||
if(ch==='[') {
|
||||
state.scopes.push("[");
|
||||
stream.skipToEnd();
|
||||
return "comment";
|
||||
}
|
||||
|
||||
if(ch==='{') {
|
||||
state.scopes.push("{");
|
||||
if (ch === '[') {
|
||||
state.scopes.push('[');
|
||||
state.nestedArrays++;
|
||||
}
|
||||
|
||||
var scope=cur_scope(state);
|
||||
if (ch === '(') {
|
||||
state.scopes.push('(');
|
||||
state.nestedGenerators++;
|
||||
}
|
||||
|
||||
if(scope==='[' && ch===']') {
|
||||
if (inArray(state) && ch === ']') {
|
||||
while (state.scopes.length && currentScope(state) !== "[") { state.scopes.pop(); }
|
||||
state.scopes.pop();
|
||||
state.leaving_expr=true;
|
||||
state.nestedArrays--;
|
||||
state.leavingExpr = true;
|
||||
}
|
||||
|
||||
if(scope==='{' && ch==='}') {
|
||||
if (inGenerator(state) && ch === ')') {
|
||||
while (state.scopes.length && currentScope(state) !== "(") { state.scopes.pop(); }
|
||||
state.scopes.pop();
|
||||
state.leaving_expr=true;
|
||||
state.nestedGenerators--;
|
||||
state.leavingExpr = true;
|
||||
}
|
||||
|
||||
if(ch===')') {
|
||||
state.leaving_expr = true;
|
||||
if (inArray(state)) {
|
||||
if (state.lastToken == "end" && stream.match(':')) {
|
||||
return "operator";
|
||||
}
|
||||
if (stream.match('end')) {
|
||||
return "number";
|
||||
}
|
||||
}
|
||||
|
||||
var match;
|
||||
if(!in_array(state) && (match=stream.match(openers, false))) {
|
||||
state.scopes.push(match);
|
||||
if (match = stream.match(openers, false)) {
|
||||
state.scopes.push(match[0]);
|
||||
}
|
||||
|
||||
if(!in_array(state) && stream.match(closers, false)) {
|
||||
if (stream.match(closers, false)) {
|
||||
state.scopes.pop();
|
||||
}
|
||||
|
||||
if(in_array(state)) {
|
||||
if(stream.match(/^end/)) {
|
||||
return 'number';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(stream.match(/^=>/)) {
|
||||
return 'operator';
|
||||
}
|
||||
|
||||
|
||||
// Handle Number Literals
|
||||
if (stream.match(/^[0-9\.]/, false)) {
|
||||
var imMatcher = RegExp(/^im\b/);
|
||||
var floatLiteral = false;
|
||||
// Floats
|
||||
if (stream.match(/^\d*\.(?!\.)\d+([ef][\+\-]?\d+)?/i)) { floatLiteral = true; }
|
||||
if (stream.match(/^\d+\.(?!\.)\d*/)) { floatLiteral = true; }
|
||||
if (stream.match(/^\.\d+/)) { floatLiteral = true; }
|
||||
if (floatLiteral) {
|
||||
// Float literals may be "imaginary"
|
||||
stream.match(imMatcher);
|
||||
state.leaving_expr = true;
|
||||
return 'number';
|
||||
}
|
||||
// Integers
|
||||
var intLiteral = false;
|
||||
// Hex
|
||||
if (stream.match(/^0x[0-9a-f]+/i)) { intLiteral = true; }
|
||||
// Binary
|
||||
if (stream.match(/^0b[01]+/i)) { intLiteral = true; }
|
||||
// Octal
|
||||
if (stream.match(/^0o[0-7]+/i)) { intLiteral = true; }
|
||||
// Decimal
|
||||
if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) {
|
||||
intLiteral = true;
|
||||
}
|
||||
// Zero by itself with no other piece of number.
|
||||
if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; }
|
||||
if (intLiteral) {
|
||||
// Integer literals may be "long"
|
||||
stream.match(imMatcher);
|
||||
state.leaving_expr = true;
|
||||
return 'number';
|
||||
}
|
||||
}
|
||||
|
||||
if(stream.match(/^(::)|(<:)/)) {
|
||||
return 'operator';
|
||||
// Handle type annotations
|
||||
if (stream.match(/^::(?![:\$])/)) {
|
||||
state.tokenize = tokenAnnotation;
|
||||
return state.tokenize(stream, state);
|
||||
}
|
||||
|
||||
// Handle symbols
|
||||
if(!leaving_expr && stream.match(symbol)) {
|
||||
return 'string';
|
||||
if (!leavingExpr && (stream.match(symbol) || stream.match(symbolOperators))) {
|
||||
return "builtin";
|
||||
}
|
||||
|
||||
// Handle parametric types
|
||||
//if (stream.match(/^{[^}]*}(?=\()/)) {
|
||||
// return "builtin";
|
||||
//}
|
||||
|
||||
// Handle operators and Delimiters
|
||||
if (stream.match(operators)) {
|
||||
return 'operator';
|
||||
return "operator";
|
||||
}
|
||||
|
||||
// Handle Number Literals
|
||||
if (stream.match(/^\.?\d/, false)) {
|
||||
var imMatcher = RegExp(/^im\b/);
|
||||
var numberLiteral = false;
|
||||
if (stream.match(/^0x\.[0-9a-f_]+p[\+\-]?[_\d]+/i)) { numberLiteral = true; }
|
||||
// Integers
|
||||
if (stream.match(/^0x[0-9a-f_]+/i)) { numberLiteral = true; } // Hex
|
||||
if (stream.match(/^0b[01_]+/i)) { numberLiteral = true; } // Binary
|
||||
if (stream.match(/^0o[0-7_]+/i)) { numberLiteral = true; } // Octal
|
||||
// Floats
|
||||
if (stream.match(/^(?:(?:\d[_\d]*)?\.(?!\.)(?:\d[_\d]*)?|\d[_\d]*\.(?!\.)(?:\d[_\d]*))?([Eef][\+\-]?[_\d]+)?/i)) { numberLiteral = true; }
|
||||
if (stream.match(/^\d[_\d]*(e[\+\-]?\d+)?/i)) { numberLiteral = true; } // Decimal
|
||||
if (numberLiteral) {
|
||||
// Integer literals may be "long"
|
||||
stream.match(imMatcher);
|
||||
state.leavingExpr = true;
|
||||
return "number";
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Chars
|
||||
if (stream.match('\'')) {
|
||||
state.tokenize = tokenChar;
|
||||
return state.tokenize(stream, state);
|
||||
}
|
||||
|
||||
// Handle Strings
|
||||
if (stream.match(stringPrefixes)) {
|
||||
@@ -184,113 +220,166 @@ CodeMirror.defineMode("julia", function(_conf, parserConf) {
|
||||
return state.tokenize(stream, state);
|
||||
}
|
||||
|
||||
if (stream.match(macro)) {
|
||||
return 'meta';
|
||||
if (stream.match(macro) || stream.match(macroOperators)) {
|
||||
return "meta";
|
||||
}
|
||||
|
||||
|
||||
if (stream.match(delimiters)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (stream.match(keywords)) {
|
||||
return 'keyword';
|
||||
return "keyword";
|
||||
}
|
||||
|
||||
if (stream.match(builtins)) {
|
||||
return 'builtin';
|
||||
return "builtin";
|
||||
}
|
||||
|
||||
var isDefinition = state.isDefinition || state.lastToken == "function" ||
|
||||
state.lastToken == "macro" || state.lastToken == "type" ||
|
||||
state.lastToken == "struct" || state.lastToken == "immutable";
|
||||
|
||||
if (stream.match(identifiers)) {
|
||||
state.leaving_expr=true;
|
||||
return 'variable';
|
||||
if (isDefinition) {
|
||||
if (stream.peek() === '.') {
|
||||
state.isDefinition = true;
|
||||
return "variable";
|
||||
}
|
||||
state.isDefinition = false;
|
||||
return "def";
|
||||
}
|
||||
state.leavingExpr = true;
|
||||
return "variable";
|
||||
}
|
||||
|
||||
// Handle non-detected items
|
||||
stream.next();
|
||||
return ERRORCLASS;
|
||||
return "error";
|
||||
}
|
||||
|
||||
function tokenAnnotation(stream, state) {
|
||||
stream.match(/.*?(?=[,;{}()=\s]|$)/);
|
||||
if (stream.match('{')) {
|
||||
state.nestedParameters++;
|
||||
} else if (stream.match('}') && state.nestedParameters > 0) {
|
||||
state.nestedParameters--;
|
||||
}
|
||||
if (state.nestedParameters > 0) {
|
||||
stream.match(/.*?(?={|})/) || stream.next();
|
||||
} else if (state.nestedParameters == 0) {
|
||||
state.tokenize = tokenBase;
|
||||
}
|
||||
return "builtin";
|
||||
}
|
||||
|
||||
function tokenComment(stream, state) {
|
||||
if (stream.match('#=')) {
|
||||
state.nestedComments++;
|
||||
}
|
||||
if (!stream.match(/.*?(?=(#=|=#))/)) {
|
||||
stream.skipToEnd();
|
||||
}
|
||||
if (stream.match('=#')) {
|
||||
state.nestedComments--;
|
||||
if (state.nestedComments == 0)
|
||||
state.tokenize = tokenBase;
|
||||
}
|
||||
return "comment";
|
||||
}
|
||||
|
||||
function tokenChar(stream, state) {
|
||||
var isChar = false, match;
|
||||
if (stream.match(chars)) {
|
||||
isChar = true;
|
||||
} else if (match = stream.match(/\\u([a-f0-9]{1,4})(?=')/i)) {
|
||||
var value = parseInt(match[1], 16);
|
||||
if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF)
|
||||
isChar = true;
|
||||
stream.next();
|
||||
}
|
||||
} else if (match = stream.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)) {
|
||||
var value = parseInt(match[1], 16);
|
||||
if (value <= 1114111) { // U+10FFFF
|
||||
isChar = true;
|
||||
stream.next();
|
||||
}
|
||||
}
|
||||
if (isChar) {
|
||||
state.leavingExpr = true;
|
||||
state.tokenize = tokenBase;
|
||||
return "string";
|
||||
}
|
||||
if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); }
|
||||
if (stream.match('\'')) { state.tokenize = tokenBase; }
|
||||
return "error";
|
||||
}
|
||||
|
||||
function tokenStringFactory(delimiter) {
|
||||
while ('rub'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) {
|
||||
delimiter = delimiter.substr(1);
|
||||
if (delimiter.substr(-3) === '"""') {
|
||||
delimiter = '"""';
|
||||
} else if (delimiter.substr(-1) === '"') {
|
||||
delimiter = '"';
|
||||
}
|
||||
var singleline = delimiter.length == 1;
|
||||
var OUTCLASS = 'string';
|
||||
|
||||
function tokenString(stream, state) {
|
||||
while (!stream.eol()) {
|
||||
stream.eatWhile(/[^'"\\]/);
|
||||
if (stream.eat('\\')) {
|
||||
stream.next();
|
||||
if (singleline && stream.eol()) {
|
||||
return OUTCLASS;
|
||||
}
|
||||
} else if (stream.match(delimiter)) {
|
||||
state.tokenize = tokenBase;
|
||||
return OUTCLASS;
|
||||
} else {
|
||||
stream.eat(/['"]/);
|
||||
}
|
||||
if (stream.eat('\\')) {
|
||||
stream.next();
|
||||
} else if (stream.match(delimiter)) {
|
||||
state.tokenize = tokenBase;
|
||||
state.leavingExpr = true;
|
||||
return "string";
|
||||
} else {
|
||||
stream.eat(/[`"]/);
|
||||
}
|
||||
if (singleline) {
|
||||
if (parserConf.singleLineStringErrors) {
|
||||
return ERRORCLASS;
|
||||
} else {
|
||||
state.tokenize = tokenBase;
|
||||
}
|
||||
}
|
||||
return OUTCLASS;
|
||||
stream.eatWhile(/[^\\`"]/);
|
||||
return "string";
|
||||
}
|
||||
tokenString.isString = true;
|
||||
return tokenString;
|
||||
}
|
||||
|
||||
function tokenLexer(stream, state) {
|
||||
indentInfo = null;
|
||||
var style = state.tokenize(stream, state);
|
||||
var current = stream.current();
|
||||
|
||||
// Handle '.' connected identifiers
|
||||
if (current === '.') {
|
||||
style = stream.match(identifiers, false) ? null : ERRORCLASS;
|
||||
if (style === null && state.lastStyle === 'meta') {
|
||||
// Apply 'meta' style to '.' connected identifiers when
|
||||
// appropriate.
|
||||
style = 'meta';
|
||||
}
|
||||
return style;
|
||||
}
|
||||
|
||||
return style;
|
||||
}
|
||||
|
||||
var external = {
|
||||
startState: function() {
|
||||
return {
|
||||
tokenize: tokenBase,
|
||||
scopes: [],
|
||||
leaving_expr: false
|
||||
lastToken: null,
|
||||
leavingExpr: false,
|
||||
isDefinition: false,
|
||||
nestedArrays: 0,
|
||||
nestedComments: 0,
|
||||
nestedGenerators: 0,
|
||||
nestedParameters: 0,
|
||||
firstParenPos: -1
|
||||
};
|
||||
},
|
||||
|
||||
token: function(stream, state) {
|
||||
var style = tokenLexer(stream, state);
|
||||
state.lastStyle = style;
|
||||
var style = state.tokenize(stream, state);
|
||||
var current = stream.current();
|
||||
|
||||
if (current && style) {
|
||||
state.lastToken = current;
|
||||
}
|
||||
|
||||
return style;
|
||||
},
|
||||
|
||||
indent: function(state, textAfter) {
|
||||
var delta = 0;
|
||||
if(textAfter=="end" || textAfter=="]" || textAfter=="}" || textAfter=="else" || textAfter=="elseif" || textAfter=="catch" || textAfter=="finally") {
|
||||
if ( textAfter === ']' || textAfter === ')' || /^end\b/.test(textAfter) ||
|
||||
/^else/.test(textAfter) || /^catch\b/.test(textAfter) || /^elseif\b/.test(textAfter) ||
|
||||
/^finally/.test(textAfter) ) {
|
||||
delta = -1;
|
||||
}
|
||||
return (state.scopes.length + delta) * 4;
|
||||
return (state.scopes.length + delta) * config.indentUnit;
|
||||
},
|
||||
|
||||
electricInput: /\b(end|else|catch|finally)\b/,
|
||||
blockCommentStart: "#=",
|
||||
blockCommentEnd: "=#",
|
||||
lineComment: "#",
|
||||
fold: "indent",
|
||||
electricChars: "edlsifyh]}"
|
||||
closeBrackets: "()[]{}\"\"",
|
||||
fold: "indent"
|
||||
};
|
||||
return external;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user