##// END OF EJS Templates
vcs: Minimal change to expose the shadow repository...
vcs: Minimal change to expose the shadow repository Based on my original research, this was the "minimal" starting point. It shows that three concepts are needed for the "repo_name": * From the security standpoint we think of the shadow repository having the same ACL as the target repository of the pull request. This is because the pull request itself is considered to be a part of the target repository. Out of this thought, the variable "acl_repo_name" is used whenever we want to check permissions or when we need the database configuration of the repository. An alternative name would have been "db_repo_name", but the usage for ACL checking is the most important one. * From the web interaction perspective, we need the URL which was originally used to get to the repository. This is because based on this base URL commands can be identified. Especially for Git this is important, so that the commands are correctly recognized. Since the URL is in the focus, this is called "url_repo_name". * Finally we have to deal with the repository on the file system. This is what the VCS layer deal with normally, so this name is called "vcs_repo_name". The original repository interaction is a special case where all three names are the same. When interacting with a pull request, these three names are typically all different. This change is minimal in a sense that it just makes the interaction with a shadow repository barely work, without checking any special constraints yet. This was the starting point for further work on this topic.

File last commit:

r346:1a48416d default
r887:175782be 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");
});