##// END OF EJS Templates
user-groups: fix potential problem with group sync of external plugins....
user-groups: fix potential problem with group sync of external plugins. - when using external plugin we used to check for a parameter that set the sync mode. The problem is we only checked if the flag was there. So toggling sync on and off set the value and then left the key still set but with None. This confused the sync and thought the group should be synced !

File last commit:

r346:1a48416d default
r2143:4314e88b default
Show More
julia.js
364 lines | 10.1 KiB | application/javascript | JavascriptLexer
project: added all source files and assets
r1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineMode("julia", function(_conf, parserConf) {
var ERRORCLASS = 'error';
function wordRegexp(words) {
return new RegExp("^((" + words.join(")|(") + "))\\b");
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var operators = parserConf.operators || /^\.?[|&^\\%*+\-<>!=\/]=?|\?|~|:|\$|\.[<>]|<<=?|>>>?=?|\.[<>=]=|->?|\/\/|\bin\b(?!\()|[\u2208\u2209](?!\()/;
project: added all source files and assets
r1 var delimiters = parserConf.delimiters || /^[;,()[\]{}]/;
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var identifiers = parserConf.identifiers || /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*!*/;
project: added all source files and assets
r1 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"];
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 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'];
var builtinList = ['true', 'false', 'nothing', 'NaN', 'Inf'];
project: added all source files and assets
r1
//var stringPrefixes = new RegExp("^[br]?('|\")")
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var stringPrefixes = /^(`|'|"{3}|([brv]?"))/;
project: added all source files and assets
r1 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]*/;
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var symbol = /^:[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*!*/;
var typeAnnotation = /^::[^.,;"{()=$\s]+({[^}]*}+)*/;
project: added all source files and assets
r1
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 function inArray(state) {
var ch = currentScope(state);
if (ch == '[') {
project: added all source files and assets
r1 return true;
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 return false;
project: added all source files and assets
r1 }
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 function currentScope(state) {
if (state.scopes.length == 0) {
project: added all source files and assets
r1 return null;
}
return state.scopes[state.scopes.length - 1];
}
// tokenizers
function tokenBase(stream, state) {
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 //Handle multiline comments
if (stream.match(/^#=\s*/)) {
state.scopes.push('#=');
}
if (currentScope(state) == '#=' && stream.match(/^=#/)) {
state.scopes.pop();
return 'comment';
}
if (state.scopes.indexOf('#=') >= 0) {
if (!stream.match(/.*?(?=(#=|=#))/)) {
stream.skipToEnd();
}
return 'comment';
}
project: added all source files and assets
r1 // Handle scope changes
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var leavingExpr = state.leavingExpr;
if (stream.sol()) {
leavingExpr = false;
project: added all source files and assets
r1 }
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 state.leavingExpr = false;
if (leavingExpr) {
if (stream.match(/^'+/)) {
project: added all source files and assets
r1 return 'operator';
}
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (stream.match(/^\.{2,3}/)) {
project: added all source files and assets
r1 return 'operator';
}
if (stream.eatSpace()) {
return null;
}
var ch = stream.peek();
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346
// Handle single line comments
project: added all source files and assets
r1 if (ch === '#') {
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 stream.skipToEnd();
return 'comment';
project: added all source files and assets
r1 }
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (ch === '[') {
state.scopes.push('[');
project: added all source files and assets
r1 }
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var scope = currentScope(state);
project: added all source files and assets
r1
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (scope == '[' && ch === ']') {
project: added all source files and assets
r1 state.scopes.pop();
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 state.leavingExpr = true;
project: added all source files and assets
r1 }
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (scope == '(' && ch === ')') {
project: added all source files and assets
r1 state.scopes.pop();
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 state.leavingExpr = true;
project: added all source files and assets
r1 }
var match;
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (!inArray(state) && (match=stream.match(openers, false))) {
project: added all source files and assets
r1 state.scopes.push(match);
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (!inArray(state) && stream.match(closers, false)) {
project: added all source files and assets
r1 state.scopes.pop();
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (inArray(state)) {
if (state.lastToken == 'end' && stream.match(/^:/)) {
return 'operator';
}
if (stream.match(/^end/)) {
project: added all source files and assets
r1 return 'number';
}
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (stream.match(/^=>/)) {
project: added all source files and assets
r1 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; }
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (stream.match(/^0x\.[0-9a-f]+p[\+\-]?\d+/i)) { floatLiteral = true; }
project: added all source files and assets
r1 if (floatLiteral) {
// Float literals may be "imaginary"
stream.match(imMatcher);
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 state.leavingExpr = true;
project: added all source files and assets
r1 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);
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 state.leavingExpr = true;
project: added all source files and assets
r1 return 'number';
}
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (stream.match(/^<:/)) {
project: added all source files and assets
r1 return 'operator';
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (stream.match(typeAnnotation)) {
return 'builtin';
}
project: added all source files and assets
r1 // Handle symbols
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (!leavingExpr && stream.match(symbol) || stream.match(/:\./)) {
return 'builtin';
}
// Handle parametric types
if (stream.match(/^{[^}]*}(?=\()/)) {
return 'builtin';
project: added all source files and assets
r1 }
// Handle operators and Delimiters
if (stream.match(operators)) {
return 'operator';
}
// Handle Strings
if (stream.match(stringPrefixes)) {
state.tokenize = tokenStringFactory(stream.current());
return state.tokenize(stream, state);
}
if (stream.match(macro)) {
return 'meta';
}
if (stream.match(delimiters)) {
return null;
}
if (stream.match(keywords)) {
return 'keyword';
}
if (stream.match(builtins)) {
return 'builtin';
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var isDefinition = state.isDefinition ||
state.lastToken == 'function' ||
state.lastToken == 'macro' ||
state.lastToken == 'type' ||
state.lastToken == 'immutable';
project: added all source files and assets
r1
if (stream.match(identifiers)) {
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (isDefinition) {
if (stream.peek() === '.') {
state.isDefinition = true;
return 'variable';
}
state.isDefinition = false;
return 'def';
}
if (stream.match(/^({[^}]*})*\(/, false)) {
return callOrDef(stream, state);
}
state.leavingExpr = true;
project: added all source files and assets
r1 return 'variable';
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346
project: added all source files and assets
r1 // Handle non-detected items
stream.next();
return ERRORCLASS;
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 function callOrDef(stream, state) {
var match = stream.match(/^(\(\s*)/);
if (match) {
if (state.firstParenPos < 0)
state.firstParenPos = state.scopes.length;
state.scopes.push('(');
state.charsAdvanced += match[1].length;
}
if (currentScope(state) == '(' && stream.match(/^\)/)) {
state.scopes.pop();
state.charsAdvanced += 1;
if (state.scopes.length <= state.firstParenPos) {
var isDefinition = stream.match(/^\s*?=(?!=)/, false);
stream.backUp(state.charsAdvanced);
state.firstParenPos = -1;
state.charsAdvanced = 0;
if (isDefinition)
return 'def';
return 'builtin';
}
}
// Unfortunately javascript does not support multiline strings, so we have
// to undo anything done upto here if a function call or definition splits
// over two or more lines.
if (stream.match(/^$/g, false)) {
stream.backUp(state.charsAdvanced);
while (state.scopes.length > state.firstParenPos + 1)
state.scopes.pop();
state.firstParenPos = -1;
state.charsAdvanced = 0;
return 'builtin';
}
state.charsAdvanced += stream.match(/^([^()]*)/)[1].length;
return callOrDef(stream, state);
}
project: added all source files and assets
r1 function tokenStringFactory(delimiter) {
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 while ('bruv'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) {
project: added all source files and assets
r1 delimiter = delimiter.substr(1);
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var singleline = delimiter == "'";
project: added all source files and assets
r1 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 (singleline) {
if (parserConf.singleLineStringErrors) {
return ERRORCLASS;
} else {
state.tokenize = tokenBase;
}
}
return OUTCLASS;
}
tokenString.isString = true;
return tokenString;
}
var external = {
startState: function() {
return {
tokenize: tokenBase,
scopes: [],
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 lastToken: null,
leavingExpr: false,
isDefinition: false,
charsAdvanced: 0,
firstParenPos: -1
project: added all source files and assets
r1 };
},
token: function(stream, state) {
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 var style = state.tokenize(stream, state);
var current = stream.current();
if (current && style) {
state.lastToken = current;
}
// Handle '.' connected identifiers
if (current === '.') {
style = stream.match(identifiers, false) || stream.match(macro, false) ||
stream.match(/\(/, false) ? 'operator' : ERRORCLASS;
}
project: added all source files and assets
r1 return style;
},
indent: function(state, textAfter) {
var delta = 0;
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 if (textAfter == "end" || textAfter == "]" || textAfter == "}" || textAfter == "else" || textAfter == "elseif" || textAfter == "catch" || textAfter == "finally") {
project: added all source files and assets
r1 delta = -1;
}
codemirror: update from 5.4.0 to 5.11.0, fixes #3154
r346 return (state.scopes.length + delta) * _conf.indentUnit;
project: added all source files and assets
r1 },
lineComment: "#",
fold: "indent",
electricChars: "edlsifyh]}"
};
return external;
});
CodeMirror.defineMIME("text/x-julia", "julia");
});