kopia lustrzana https://github.com/c9/core
update ace
rodzic
c9eb5b58c1
commit
6b1a3f3d00
|
@ -100,7 +100,7 @@ var Autocomplete = function() {
|
|||
var rect = editor.container.getBoundingClientRect();
|
||||
pos.top += rect.top - renderer.layerConfig.offset;
|
||||
pos.left += rect.left - editor.renderer.scrollLeft;
|
||||
pos.left += renderer.$gutterLayer.gutterWidth;
|
||||
pos.left += renderer.gutterWidth;
|
||||
|
||||
this.popup.show(pos, lineHeight);
|
||||
} else if (keepPopupPosition && !prefix) {
|
||||
|
@ -142,10 +142,11 @@ var Autocomplete = function() {
|
|||
// we have to check if activeElement is a child of popup because
|
||||
// on IE preventDefault doesn't stop scrollbar from being focussed
|
||||
var el = document.activeElement;
|
||||
var text = this.editor.textInput.getElement()
|
||||
if (el != text && ( !this.popup || el.parentNode != this.popup.container )
|
||||
&& el != this.tooltipNode && e.relatedTarget != this.tooltipNode
|
||||
&& e.relatedTarget != text
|
||||
var text = this.editor.textInput.getElement();
|
||||
var fromTooltip = e.relatedTarget && e.relatedTarget == this.tooltipNode;
|
||||
var container = this.popup && this.popup.container;
|
||||
if (el != text && el.parentNode != container && !fromTooltip
|
||||
&& el != this.tooltipNode && e.relatedTarget != text
|
||||
) {
|
||||
this.detach();
|
||||
}
|
||||
|
@ -349,7 +350,7 @@ var Autocomplete = function() {
|
|||
doc = selected;
|
||||
|
||||
if (typeof doc == "string")
|
||||
doc = {docText: doc}
|
||||
doc = {docText: doc};
|
||||
if (!doc || !(doc.docHTML || doc.docText))
|
||||
return this.hideDocTooltip();
|
||||
this.showDocTooltip(doc);
|
||||
|
@ -416,7 +417,7 @@ Autocomplete.startCommand = {
|
|||
bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space"
|
||||
};
|
||||
|
||||
var FilteredList = function(array, filterText, mutateData) {
|
||||
var FilteredList = function(array, filterText) {
|
||||
this.all = array;
|
||||
this.filtered = array;
|
||||
this.filterText = filterText || "";
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var EditSession = require("../edit_session").EditSession;
|
||||
var Renderer = require("../virtual_renderer").VirtualRenderer;
|
||||
var Editor = require("../editor").Editor;
|
||||
var Range = require("../range").Range;
|
||||
|
@ -340,4 +339,4 @@ dom.importCssString("\
|
|||
|
||||
exports.AcePopup = AcePopup;
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -68,11 +68,10 @@ var BackgroundTokenizer = function(tokenizer, editor) {
|
|||
var endLine = -1;
|
||||
var doc = self.doc;
|
||||
|
||||
var startLine = currentLine;
|
||||
while (self.lines[currentLine])
|
||||
currentLine++;
|
||||
|
||||
var startLine = currentLine;
|
||||
|
||||
|
||||
var len = doc.getLength();
|
||||
var processedLines = 0;
|
||||
self.running = false;
|
||||
|
|
|
@ -75,6 +75,49 @@ module.exports = {
|
|||
|
||||
forceTokenize(doc)
|
||||
testStates(doc, ["comment_regex_allowed", "start", "no_regex"])
|
||||
},
|
||||
"test background tokenizer sends update event" : function() {
|
||||
var doc = new EditSession([
|
||||
"/*",
|
||||
"var",
|
||||
"juhu",
|
||||
"*/"
|
||||
]);
|
||||
doc.setMode("./mode/javascript");
|
||||
|
||||
var updateEvent = null;
|
||||
doc.bgTokenizer.on("update", function(e) {
|
||||
updateEvent = e.data;
|
||||
});
|
||||
function checkEvent(first, last) {
|
||||
assert.ok(!updateEvent, "unneccessary update event");
|
||||
doc.bgTokenizer.running = 1;
|
||||
doc.bgTokenizer.$worker();
|
||||
assert.ok(updateEvent);
|
||||
assert.equal([first, last] + "",
|
||||
[updateEvent.first, updateEvent.last] + "")
|
||||
updateEvent = null;
|
||||
}
|
||||
|
||||
forceTokenize(doc);
|
||||
var comment = "comment_regex_allowed";
|
||||
testStates(doc, [comment, comment, comment, "start"]);
|
||||
|
||||
doc.remove(new Range(0,0,0,2));
|
||||
testStates(doc, [comment, comment, comment, "start"]);
|
||||
|
||||
checkEvent(0, 3);
|
||||
testStates(doc, ["start", "no_regex", "no_regex", "regex"]);
|
||||
|
||||
// insert /* and and press down several times quickly
|
||||
doc.insert({row:0, column:0}, "/*");
|
||||
doc.getTokens(0);
|
||||
doc.getTokens(1);
|
||||
doc.getTokens(2);
|
||||
checkEvent(0, 3);
|
||||
|
||||
forceTokenize(doc);
|
||||
testStates(doc, [comment, comment, comment, "start"]);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -447,8 +447,8 @@ exports.commands = [{
|
|||
multiSelectAction: "forEach"
|
||||
}, {
|
||||
name: "paste",
|
||||
exec: function(editor, text) {
|
||||
editor.$handlePaste(text);
|
||||
exec: function(editor, args) {
|
||||
editor.$handlePaste(args);
|
||||
},
|
||||
scrollIntoView: "cursor"
|
||||
}, {
|
||||
|
|
|
@ -39,7 +39,7 @@ var AppConfig = require("./lib/app_config").AppConfig;
|
|||
module.exports = exports = new AppConfig();
|
||||
|
||||
var global = (function() {
|
||||
return this;
|
||||
return this || typeof window != "undefined" && window;
|
||||
})();
|
||||
|
||||
var options = {
|
||||
|
|
|
@ -428,3 +428,30 @@
|
|||
z-index: 5;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
/*
|
||||
styles = []
|
||||
for (var i = 1; i < 16; i++) {
|
||||
styles.push(".ace_br" + i + "{" + (
|
||||
["top-left", "top-right", "bottom-right", "bottom-left"]
|
||||
).map(function(x, j) {
|
||||
return i & (1<<j) ? "border-" + x + "-radius: 3px;" : ""
|
||||
}).filter(Boolean).join(" ") + "}")
|
||||
}
|
||||
styles.join("\n")
|
||||
*/
|
||||
.ace_br1 {border-top-left-radius : 3px;}
|
||||
.ace_br2 {border-top-right-radius : 3px;}
|
||||
.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}
|
||||
.ace_br4 {border-bottom-right-radius: 3px;}
|
||||
.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}
|
||||
.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}
|
||||
.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}
|
||||
.ace_br8 {border-bottom-left-radius : 3px;}
|
||||
.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}
|
||||
.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}
|
||||
.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}
|
||||
.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}
|
||||
.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}
|
||||
.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}
|
||||
.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}
|
||||
|
|
|
@ -657,10 +657,10 @@ EditSession.$uid = 0;
|
|||
};
|
||||
|
||||
/**
|
||||
* Returns an array containing the IDs of all the markers, either front or back.
|
||||
* Returns an object containing all of the markers, either front or back.
|
||||
* @param {Boolean} inFront If `true`, indicates you only want front markers; `false` indicates only back markers
|
||||
*
|
||||
* @returns {Array}
|
||||
* @returns {Object}
|
||||
**/
|
||||
this.getMarkers = function(inFront) {
|
||||
return inFront ? this.$frontMarkers : this.$backMarkers;
|
||||
|
|
|
@ -117,7 +117,7 @@ function BracketMatch() {
|
|||
typeRe = new RegExp(
|
||||
"(\\.?" +
|
||||
token.type.replace(".", "\\.").replace("rparen", ".paren")
|
||||
.replace(/\b(?:end|start|begin)\b/, "")
|
||||
.replace(/\b(?:end)\b/, "(?:start|begin|end)")
|
||||
+ ")+"
|
||||
);
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ function BracketMatch() {
|
|||
typeRe = new RegExp(
|
||||
"(\\.?" +
|
||||
token.type.replace(".", "\\.").replace("lparen", ".paren")
|
||||
.replace(/\b(?:end|start|begin)\b/, "")
|
||||
.replace(/\b(?:start|begin)\b/, "(?:start|begin|end)")
|
||||
+ ")+"
|
||||
);
|
||||
}
|
||||
|
|
|
@ -910,14 +910,16 @@ var Editor = function(renderer, session) {
|
|||
*
|
||||
*
|
||||
**/
|
||||
this.onPaste = function(text) {
|
||||
this.commands.exec("paste", this, text);
|
||||
this.onPaste = function(text, event) {
|
||||
var e = {text: text, event: event};
|
||||
this.commands.exec("paste", this, e);
|
||||
};
|
||||
|
||||
this.$handlePaste = function(text) {
|
||||
var e = {text: text};
|
||||
this.$handlePaste = function(e) {
|
||||
if (typeof e == "string")
|
||||
e = {text: e};
|
||||
this._signal("paste", e);
|
||||
text = e.text;
|
||||
var text = e.text;
|
||||
if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {
|
||||
this.insert(text);
|
||||
} else {
|
||||
|
|
|
@ -155,7 +155,6 @@ function getCompletionPrefix(editor) {
|
|||
|
||||
var doLiveAutocomplete = function(e) {
|
||||
var editor = e.editor;
|
||||
var text = e.args || "";
|
||||
var hasCompleter = editor.completer && editor.completer.activated;
|
||||
|
||||
// We don't want to autocomplete with no prefix
|
||||
|
|
|
@ -37,6 +37,10 @@ var baseStyles = require("../requirejs/text!./static.css");
|
|||
var config = require("../config");
|
||||
var dom = require("../lib/dom");
|
||||
|
||||
var SimpleTextLayer = function() {
|
||||
this.config = {};
|
||||
};
|
||||
SimpleTextLayer.prototype = TextLayer.prototype;
|
||||
|
||||
var highlight = function(el, opts, callback) {
|
||||
var m = el.className.match(/lang-(\w+)/);
|
||||
|
@ -149,12 +153,8 @@ highlight.renderSync = function(input, mode, theme, lineStart, disableGutter) {
|
|||
session.setUseWorker(false);
|
||||
session.setMode(mode);
|
||||
|
||||
var textLayer = new TextLayer(document.createElement("div"));
|
||||
var textLayer = new SimpleTextLayer();
|
||||
textLayer.setSession(session);
|
||||
textLayer.config = {
|
||||
characterWidth: 10,
|
||||
lineHeight: 20
|
||||
};
|
||||
|
||||
session.setValue(input);
|
||||
|
||||
|
|
|
@ -308,7 +308,7 @@ var TextInput = function(parentNode, host) {
|
|||
var data = handleClipboardData(e);
|
||||
if (typeof data == "string") {
|
||||
if (data)
|
||||
host.onPaste(data);
|
||||
host.onPaste(data, e);
|
||||
if (useragent.isIE)
|
||||
setTimeout(resetSelection);
|
||||
event.preventDefault(e);
|
||||
|
|
|
@ -5916,7 +5916,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|||
}, true);
|
||||
}
|
||||
return isHandled;
|
||||
};
|
||||
}
|
||||
exports.CodeMirror = CodeMirror;
|
||||
var getVim = Vim.maybeInitVimState_;
|
||||
exports.handler = {
|
||||
|
@ -5930,9 +5930,9 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|||
if (!vim.insertMode) {
|
||||
var isbackwards = !sel.cursor
|
||||
? session.selection.isBackwards() || session.selection.isEmpty()
|
||||
: Range.comparePoints(sel.cursor, sel.start) <= 0
|
||||
: Range.comparePoints(sel.cursor, sel.start) <= 0;
|
||||
if (!isbackwards && left > w)
|
||||
left -= w
|
||||
left -= w;
|
||||
}
|
||||
if (!vim.insertMode && vim.status) {
|
||||
h = h / 2;
|
||||
|
@ -6096,13 +6096,13 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|||
};
|
||||
var renderVirtualNumbers = {
|
||||
getText: function(session, row) {
|
||||
return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9? "\xb7" : "" ))) + ""
|
||||
return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9? "\xb7" : "" ))) + "";
|
||||
},
|
||||
getWidth: function(session, lastLineNumber, config) {
|
||||
return session.getLength().toString().length * config.characterWidth;
|
||||
},
|
||||
update: function(e, editor) {
|
||||
editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER)
|
||||
editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);
|
||||
},
|
||||
attach: function(editor) {
|
||||
editor.renderer.$gutterLayer.$renderer = this;
|
||||
|
|
|
@ -132,9 +132,9 @@ var FontMetrics = exports.FontMetrics = function(parentEl, interval) {
|
|||
this.setPolling = function(val) {
|
||||
if (val) {
|
||||
this.$pollSizeChanges();
|
||||
} else {
|
||||
if (this.$pollSizeChangesTimer)
|
||||
this.$pollSizeChangesTimer;
|
||||
} else if (this.$pollSizeChangesTimer) {
|
||||
clearInterval(this.$pollSizeChangesTimer);
|
||||
this.$pollSizeChangesTimer = 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ var Marker = function(parentEl) {
|
|||
else
|
||||
this.drawMultiLineMarker(html, range, marker.clazz, config);
|
||||
} else {
|
||||
this.drawSingleLineMarker(html, range, marker.clazz + " ace_start", config);
|
||||
this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config);
|
||||
}
|
||||
}
|
||||
this.element.innerHTML = html.join("");
|
||||
|
@ -100,29 +100,30 @@ var Marker = function(parentEl) {
|
|||
return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;
|
||||
};
|
||||
|
||||
function getBorderClass(tl, tr, br, bl) {
|
||||
return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);
|
||||
}
|
||||
// Draws a marker, which spans a range of text on multiple lines
|
||||
this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {
|
||||
// selection start
|
||||
var row = range.start.row;
|
||||
var session = this.session;
|
||||
|
||||
var lineRange = new Range(
|
||||
row, range.start.column,
|
||||
row, session.getScreenLastRowColumn(row)
|
||||
);
|
||||
this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " ace_start", layerConfig, 1, extraStyle);
|
||||
|
||||
// selection end
|
||||
row = range.end.row;
|
||||
lineRange = new Range(row, session.getRowWrapIndent(row), row, range.end.column);
|
||||
this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 0, extraStyle);
|
||||
|
||||
for (row = range.start.row + 1; row < range.end.row; row++) {
|
||||
lineRange.start.row = row;
|
||||
lineRange.start.column = session.getRowWrapIndent(row);
|
||||
lineRange.end.row = row;
|
||||
lineRange.end.column = session.getScreenLastRowColumn(row);
|
||||
this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1, extraStyle);
|
||||
var start = range.start.row;
|
||||
var end = range.end.row;
|
||||
var row = start;
|
||||
var prev = 0;
|
||||
var curr = 0;
|
||||
var next = session.getScreenLastRowColumn(row);
|
||||
var lineRange = new Range(row, range.start.column, row, curr);
|
||||
for (; row <= end; row++) {
|
||||
lineRange.start.row = lineRange.end.row = row;
|
||||
lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);
|
||||
lineRange.end.column = next;
|
||||
prev = curr;
|
||||
curr = next;
|
||||
next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;
|
||||
this.drawSingleLineMarker(stringBuilder, lineRange,
|
||||
clazz + (row == start ? " ace_start" : "") + " ace_br"
|
||||
+ getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),
|
||||
layerConfig, row == end ? 0 : 1, extraStyle);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -136,7 +137,7 @@ var Marker = function(parentEl) {
|
|||
extraStyle = extraStyle || "";
|
||||
|
||||
stringBuilder.push(
|
||||
"<div class='", clazz, " ace_start' style='",
|
||||
"<div class='", clazz, " ace_br1 ace_start' style='",
|
||||
"height:", height, "px;",
|
||||
"right:0;",
|
||||
"top:", top, "px;",
|
||||
|
@ -148,7 +149,7 @@ var Marker = function(parentEl) {
|
|||
var width = range.end.column * config.characterWidth;
|
||||
|
||||
stringBuilder.push(
|
||||
"<div class='", clazz, "' style='",
|
||||
"<div class='", clazz, " ace_br12' style='",
|
||||
"height:", height, "px;",
|
||||
"width:", width, "px;",
|
||||
"top:", top, "px;",
|
||||
|
@ -160,9 +161,11 @@ var Marker = function(parentEl) {
|
|||
if (height <= 0)
|
||||
return;
|
||||
top = this.$getTop(range.start.row + 1, config);
|
||||
|
||||
var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);
|
||||
|
||||
stringBuilder.push(
|
||||
"<div class='", clazz, "' style='",
|
||||
"<div class='", clazz, (radiusClass ? " ace_br" + radiusClass : ""), "' style='",
|
||||
"height:", height, "px;",
|
||||
"right:0;",
|
||||
"top:", top, "px;",
|
||||
|
|
|
@ -91,7 +91,7 @@ module.exports = {
|
|||
var EOL = "<span class='ace_invisible ace_invisible_eol'>" + textLayer.EOL_CHAR + "</span>";
|
||||
var SPACE = function(i) {return Array(i+1).join(" ")}
|
||||
var DOT = function(i) {return Array(i+1).join(textLayer.SPACE_CHAR)}
|
||||
var TAB = function(i) {return textLayer.TAB_CHAR + SPACE(i-1)}
|
||||
var TAB = function(i) {return Array(i+1).join(textLayer.TAB_CHAR)}
|
||||
function testRender(results) {
|
||||
for (var i = results.length; i--; ) {
|
||||
var stringBuilder = [];
|
||||
|
|
|
@ -91,6 +91,11 @@ exports.toggleCssClass = function(el, name) {
|
|||
return add;
|
||||
};
|
||||
|
||||
if (typeof document == "undefined") {
|
||||
exports.importCssString = function() {};
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add or remove a CSS class from the list of classes on the given node
|
||||
* depending on the value of <tt>include</tt>
|
||||
|
@ -173,9 +178,6 @@ exports.getInnerHeight = function(element) {
|
|||
};
|
||||
|
||||
|
||||
if (typeof document == "undefined")
|
||||
return;
|
||||
|
||||
if (window.pageYOffset !== undefined) {
|
||||
exports.getPageScrollTop = function() {
|
||||
return window.pageYOffset;
|
||||
|
|
|
@ -326,13 +326,14 @@ exports.addCommandKeyListener = function(el, callback) {
|
|||
});
|
||||
|
||||
if (!pressedKeys) {
|
||||
pressedKeys = Object.create(null);
|
||||
addListener(window, "focus", function(e) {
|
||||
pressedKeys = Object.create(null);
|
||||
});
|
||||
resetPressedKeys();
|
||||
addListener(window, "focus", resetPressedKeys);
|
||||
}
|
||||
}
|
||||
};
|
||||
function resetPressedKeys(e) {
|
||||
pressedKeys = Object.create(null);
|
||||
}
|
||||
|
||||
if (window.postMessage && !useragent.isOldIE) {
|
||||
var postMessageId = 1;
|
||||
|
|
|
@ -56,34 +56,34 @@
|
|||
],[
|
||||
"start",
|
||||
["text"," "],
|
||||
["comment","| "],
|
||||
["string","start "],
|
||||
["comment","| "],
|
||||
["string","eat "],
|
||||
["comment","| "],
|
||||
["string","left "],
|
||||
["comment","|"],
|
||||
["string"," start "],
|
||||
["comment","|"],
|
||||
["string"," eat "],
|
||||
["comment","|"],
|
||||
["string"," left "],
|
||||
["comment","|"]
|
||||
],[
|
||||
"start",
|
||||
["text"," "],
|
||||
["comment","| "],
|
||||
["string"," 12 "],
|
||||
["comment","| "],
|
||||
["string"," 5 "],
|
||||
["comment","| "],
|
||||
["string"," 7 "],
|
||||
["comment","|"],
|
||||
["string"," 12 "],
|
||||
["comment","|"],
|
||||
["string"," 5 "],
|
||||
["comment","|"],
|
||||
["string"," 7 "],
|
||||
["comment","|"]
|
||||
],[
|
||||
"start",
|
||||
["text"," "],
|
||||
["comment","| "],
|
||||
["string"," 20 "],
|
||||
["comment","| "],
|
||||
["string"," 5 "],
|
||||
["comment","| "],
|
||||
["string"," 15 "],
|
||||
["comment","| "],
|
||||
["string"," "]
|
||||
["comment","|"],
|
||||
["string"," 20 "],
|
||||
["comment","|"],
|
||||
["string"," 5 "],
|
||||
["comment","|"],
|
||||
["string"," 15 "],
|
||||
["comment","|"],
|
||||
["string"," "]
|
||||
],[
|
||||
"start"
|
||||
],[
|
||||
|
|
|
@ -10,10 +10,9 @@
|
|||
],[
|
||||
"start",
|
||||
["keyword.source.rust","fn"],
|
||||
["meta.function.source.rust"," "],
|
||||
["text"," "],
|
||||
["entity.name.function.source.rust","main"],
|
||||
["meta.function.source.rust","("],
|
||||
["text",") {"]
|
||||
["text","() {"]
|
||||
],[
|
||||
"start",
|
||||
["text"," "],
|
||||
|
@ -88,10 +87,14 @@
|
|||
],[
|
||||
"start",
|
||||
["keyword.source.rust","fn"],
|
||||
["meta.function.source.rust"," "],
|
||||
["entity.name.function.source.rust","map<T, U>"],
|
||||
["meta.function.source.rust","("],
|
||||
["text","vector: &[T]"],
|
||||
["text"," "],
|
||||
["entity.name.function.source.rust","map"],
|
||||
["keyword.operator","<"],
|
||||
["text","T"],
|
||||
["keyword.operator",","],
|
||||
["text"," U"],
|
||||
["keyword.operator",">"],
|
||||
["text","(vector: &[T]"],
|
||||
["keyword.operator",","],
|
||||
["text"," function: &fn(v: &T) "],
|
||||
["keyword.operator","->"],
|
||||
|
|
|
@ -18,13 +18,13 @@ var c_cppHighlightRules = function() {
|
|||
var storageType = (
|
||||
"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" +
|
||||
"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" +
|
||||
"class|wchar_t|template"
|
||||
"class|wchar_t|template|char16_t|char32_t"
|
||||
);
|
||||
|
||||
var storageModifiers = (
|
||||
"const|extern|register|restrict|static|volatile|inline|private|" +
|
||||
"protected|public|friend|explicit|virtual|export|mutable|typename|" +
|
||||
"constexpr|new|delete"
|
||||
"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local"
|
||||
);
|
||||
|
||||
var keywordOperators = (
|
||||
|
@ -33,7 +33,7 @@ var c_cppHighlightRules = function() {
|
|||
);
|
||||
|
||||
var builtinConstants = (
|
||||
"NULL|true|false|TRUE|FALSE"
|
||||
"NULL|true|false|TRUE|FALSE|nullptr"
|
||||
);
|
||||
|
||||
var keywordMapper = this.$keywords = this.createKeywordMapper({
|
||||
|
|
|
@ -41,7 +41,7 @@ var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|al
|
|||
var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
|
||||
var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";
|
||||
var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow";
|
||||
var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
|
||||
var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
|
||||
|
||||
var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
|
||||
var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
|
||||
|
|
|
@ -36,18 +36,18 @@ var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]
|
|||
|
||||
var GherkinHighlightRules = function() {
|
||||
|
||||
// need to include constant ints
|
||||
// need to include constant ints
|
||||
this.$rules = {
|
||||
start : [{
|
||||
start : [{
|
||||
token: 'constant.numeric',
|
||||
regex: "(?:(?:[1-9]\\d*)|(?:0))"
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : "#.*$"
|
||||
}, {
|
||||
token : "keyword",
|
||||
regex : "Feature:|Background:|Scenario:|Scenario\ Outline:|Examples:|Given|When|Then|And|But|\\*",
|
||||
}, {
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : "#.*$"
|
||||
}, {
|
||||
token : "keyword",
|
||||
regex : "Feature:|Background:|Scenario:|Scenario\ Outline:|Examples:|Given|When|Then|And|But|\\*",
|
||||
}, {
|
||||
token : "string", // multi line """ string start
|
||||
regex : '"{3}',
|
||||
next : "qqstring3"
|
||||
|
@ -56,22 +56,22 @@ var GherkinHighlightRules = function() {
|
|||
regex : '"',
|
||||
next : "qqstring"
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : "@[A-Za-z0-9]+",
|
||||
next : "start"
|
||||
token : "comment",
|
||||
regex : "@[A-Za-z0-9]+",
|
||||
next : "start"
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : "<.+>"
|
||||
token : "comment",
|
||||
regex : "<.+>"
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : "\\| ",
|
||||
next : "table-item"
|
||||
token : "comment",
|
||||
regex : "\\|(?=.)",
|
||||
next : "table-item"
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : "\\|$",
|
||||
next : "start"
|
||||
token : "comment",
|
||||
regex : "\\|$",
|
||||
next : "start"
|
||||
}],
|
||||
"qqstring3" : [ {
|
||||
"qqstring3" : [ {
|
||||
token : "constant.language.escape",
|
||||
regex : stringEscape
|
||||
}, {
|
||||
|
@ -81,7 +81,7 @@ var GherkinHighlightRules = function() {
|
|||
}, {
|
||||
defaultToken : "string"
|
||||
}],
|
||||
"qqstring" : [{
|
||||
"qqstring" : [{
|
||||
token : "constant.language.escape",
|
||||
regex : stringEscape
|
||||
}, {
|
||||
|
@ -96,15 +96,19 @@ var GherkinHighlightRules = function() {
|
|||
defaultToken: "string"
|
||||
}],
|
||||
"table-item" : [{
|
||||
token : "comment",
|
||||
regex : /$/,
|
||||
next : "start"
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : /\|/
|
||||
}, {
|
||||
token : "string",
|
||||
regex : "[A-Za-z0-9 ]*",
|
||||
next : "start"
|
||||
}],
|
||||
regex : /\\./
|
||||
}, {
|
||||
defaultToken : "string"
|
||||
}]
|
||||
};
|
||||
|
||||
|
||||
//new TextHighlightRules().getRules();
|
||||
|
||||
}
|
||||
|
||||
oop.inherits(GherkinHighlightRules, TextHighlightRules);
|
||||
|
|
|
@ -65,7 +65,7 @@ var HtmlHighlightRules = function() {
|
|||
include : "tag_whitespace"
|
||||
}, {
|
||||
token : "entity.other.attribute-name.xml",
|
||||
regex : "[-_a-zA-Z0-9:]+"
|
||||
regex : "[-_a-zA-Z0-9:.]+"
|
||||
}, {
|
||||
token : "keyword.operator.attribute-equals.xml",
|
||||
regex : "=",
|
||||
|
@ -89,7 +89,7 @@ var HtmlHighlightRules = function() {
|
|||
return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
|
||||
"meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
|
||||
},
|
||||
regex : "(</?)([-_a-zA-Z0-9:]+)",
|
||||
regex : "(</?)([-_a-zA-Z0-9:.]+)",
|
||||
next: "tag_stuff"
|
||||
}],
|
||||
tag_stuff: [
|
||||
|
|
|
@ -84,9 +84,8 @@ var RustHighlightRules = function() {
|
|||
{ token: 'constant.character.escape.source.rust',
|
||||
regex: stringEscape },
|
||||
{ defaultToken: 'string.quoted.double.source.rust' } ] },
|
||||
{ token: [ 'keyword.source.rust', 'meta.function.source.rust',
|
||||
'entity.name.function.source.rust', 'meta.function.source.rust' ],
|
||||
regex: '\\b(fn)(\\s+)([a-zA-Z_][a-zA-Z0-9_][\\w\\:,+ \\\'<>]*)(\\s*\\()' },
|
||||
{ token: [ 'keyword.source.rust', 'text', 'entity.name.function.source.rust' ],
|
||||
regex: '\\b(fn)(\\s+)([a-zA-Z_][a-zA-Z0-9_]*)' },
|
||||
{ token: 'support.constant', regex: '\\b[a-zA-Z_][\\w\\d]*::' },
|
||||
{ token: 'keyword.source.rust',
|
||||
regex: '\\b(?:as|assert|break|claim|const|do|drop|else|extern|fail|for|if|impl|in|let|log|loop|match|mod|module|move|mut|Owned|priv|pub|pure|ref|return|unchecked|unsafe|use|while|mod|Send|static|trait|class|struct|enum|type)\\b' },
|
||||
|
|
|
@ -39,15 +39,92 @@ define(function(require, exports, module) {
|
|||
var oop = require("../lib/oop");
|
||||
var TextMode = require("./text").Mode;
|
||||
var SchemeHighlightRules = require("./scheme_highlight_rules").SchemeHighlightRules;
|
||||
var MatchingParensOutdent = require("./matching_parens_outdent").MatchingParensOutdent;
|
||||
|
||||
var Mode = function() {
|
||||
this.HighlightRules = SchemeHighlightRules;
|
||||
this.$outdent = new MatchingParensOutdent();
|
||||
};
|
||||
oop.inherits(Mode, TextMode);
|
||||
|
||||
(function() {
|
||||
|
||||
this.lineCommentStart = ";";
|
||||
this.minorIndentFunctions = ["define", "lambda", "define-macro", "define-syntax", "syntax-rules", "define-record-type", "define-structure"];
|
||||
|
||||
this.$toIndent = function(str) {
|
||||
return str.split('').map(function(ch) {
|
||||
if (/\s/.exec(ch)) {
|
||||
return ch;
|
||||
} else {
|
||||
return ' ';
|
||||
}
|
||||
}).join('');
|
||||
};
|
||||
|
||||
this.$calculateIndent = function(line, tab) {
|
||||
var baseIndent = this.$getIndent(line);
|
||||
var delta = 0;
|
||||
var isParen, ch;
|
||||
// Walk back from end of line, find matching braces
|
||||
for (var i = line.length - 1; i >= 0; i--) {
|
||||
ch = line[i];
|
||||
if (ch === '(') {
|
||||
delta--;
|
||||
isParen = true;
|
||||
} else if (ch === '(' || ch === '[' || ch === '{') {
|
||||
delta--;
|
||||
isParen = false;
|
||||
} else if (ch === ')' || ch === ']' || ch === '}') {
|
||||
delta++;
|
||||
}
|
||||
if (delta < 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (delta < 0 && isParen) {
|
||||
// Were more brackets opened than closed and was a ( left open?
|
||||
i += 1;
|
||||
var iBefore = i;
|
||||
var fn = '';
|
||||
while (true) {
|
||||
ch = line[i];
|
||||
if (ch === ' ' || ch === '\t') {
|
||||
if(this.minorIndentFunctions.indexOf(fn) !== -1) {
|
||||
return this.$toIndent(line.substring(0, iBefore - 1) + tab);
|
||||
} else {
|
||||
return this.$toIndent(line.substring(0, i + 1));
|
||||
}
|
||||
} else if (ch === undefined) {
|
||||
return this.$toIndent(line.substring(0, iBefore - 1) + tab);
|
||||
}
|
||||
fn += line[i];
|
||||
i++;
|
||||
}
|
||||
} else if(delta < 0 && !isParen) {
|
||||
// Were more brackets openend than closed and was it not a (?
|
||||
return this.$toIndent(line.substring(0, i+1));
|
||||
} else if(delta > 0) {
|
||||
// Mere more brackets closed than opened? Outdent.
|
||||
baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);
|
||||
return baseIndent;
|
||||
} else {
|
||||
// Were they nicely matched? Just indent like line before.
|
||||
return baseIndent;
|
||||
}
|
||||
};
|
||||
|
||||
this.getNextLineIndent = function(state, line, tab) {
|
||||
return this.$calculateIndent(line, tab);
|
||||
};
|
||||
|
||||
this.checkOutdent = function(state, line, input) {
|
||||
return this.$outdent.checkOutdent(line, input);
|
||||
};
|
||||
|
||||
this.autoOutdent = function(state, doc, row) {
|
||||
this.$outdent.autoOutdent(doc, row);
|
||||
};
|
||||
|
||||
this.$id = "ace/mode/scheme";
|
||||
}).call(Mode.prototype);
|
||||
|
|
|
@ -46,7 +46,14 @@ oop.inherits(Mode, TextMode);
|
|||
(function() {
|
||||
this.lineCommentStart = "--";
|
||||
this.blockComment = {start: "/*", end: "*/"};
|
||||
|
||||
|
||||
/**
|
||||
* Override keyword completions using list created in highlight rules
|
||||
*/
|
||||
this.getCompletions = function(state, session, pos, prefix) {
|
||||
return session.$mode.$highlightRules.completions;
|
||||
};
|
||||
|
||||
this.$id = "ace/mode/sql";
|
||||
}).call(Mode.prototype);
|
||||
|
||||
|
|
|
@ -77,22 +77,24 @@ var SqlServerHighlightRules = function() {
|
|||
/* https://msdn.microsoft.com/en-us/library/ms177520.aspx */
|
||||
"@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|" +
|
||||
/* https://msdn.microsoft.com/en-us/library/ms188353.aspx */
|
||||
"PATINDEX|TEXTPTR|TEXTVALID"
|
||||
"PATINDEX|TEXTPTR|TEXTVALID|" +
|
||||
/* other */
|
||||
"COALESCE|NULLIF"
|
||||
);
|
||||
|
||||
|
||||
// https://msdn.microsoft.com/en-us/library/ms187752.aspx
|
||||
var dataTypes = ("BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML");
|
||||
|
||||
|
||||
|
||||
//https://msdn.microsoft.com/en-us/library/ms176007.aspx (these are lower case!)
|
||||
var builtInStoredProcedures = "sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool";
|
||||
|
||||
|
||||
|
||||
// https://msdn.microsoft.com/en-us/library/ms189822.aspx
|
||||
var keywords = "ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE";
|
||||
|
||||
|
||||
|
||||
// Microsoft's keyword list is missing a lot of things that are located on various other pages
|
||||
// https://msdn.microsoft.com/en-us/library/ms187373.aspx, https://msdn.microsoft.com/en-us/library/ms181714.aspx
|
||||
keywords += "|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT";
|
||||
|
@ -103,13 +105,15 @@ var SqlServerHighlightRules = function() {
|
|||
// highlighted words in SSMS that I'm not even sure where they come from
|
||||
keywords += "|TYPE";
|
||||
|
||||
|
||||
//remove any other built in things from key word list
|
||||
|
||||
//remove specific built in types from keyword list
|
||||
keywords = keywords.split('|');
|
||||
keywords = keywords.filter(function(value, index, self) {
|
||||
return logicalOperators.split('|').indexOf(value) === -1 && builtinFunctions.split('|').indexOf(value) === -1 && dataTypes.split('|').indexOf(value) === -1;
|
||||
});
|
||||
keywords = keywords.sort().join('|');
|
||||
|
||||
|
||||
var keywordMapper = this.createKeywordMapper({
|
||||
"constant.language": logicalOperators,
|
||||
"storage.type": dataTypes,
|
||||
|
@ -117,37 +121,23 @@ var SqlServerHighlightRules = function() {
|
|||
"support.storedprocedure": builtInStoredProcedures,
|
||||
"keyword": keywords,
|
||||
}, "identifier", true);
|
||||
|
||||
|
||||
// createKeywordMapper ignores case which we want because SqlServer keywords are not case sensitive which causes our keywords to get changed to lowercase.
|
||||
// However, the preferred standard for keywords is uppercase, so this transforms them back to uppercase for code completion
|
||||
// EXCEPTION: build in stored procedures are lower case
|
||||
for (var i = 0; i < this.$keywordList.length; i++) {
|
||||
var keyword = this.$keywordList[i];
|
||||
if (builtInStoredProcedures.indexOf(keyword) !== -1) continue;
|
||||
this.$keywordList[i] = keyword.toUpperCase();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//https://msdn.microsoft.com/en-us/library/ms190356.aspx
|
||||
var setStatements = "SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT".split('|');
|
||||
var isolationLevels = "READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE".split('|');
|
||||
for (var i = 0; i < isolationLevels.length; i++) {
|
||||
setStatements.push('SET TRANSACTION ISOLATION LEVEL ' + isolationLevels[i]);
|
||||
}
|
||||
//add set statements to keywordList for completions
|
||||
for (var i = 0; i < setStatements.length; i++) {
|
||||
this.$keywordList.push(setStatements[i]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.$rules = {
|
||||
start: [{
|
||||
token: "string.start",
|
||||
regex: "'",
|
||||
next: [{
|
||||
token: "constant.language.escape",
|
||||
regex: /\\'/
|
||||
regex: /''/
|
||||
}, {
|
||||
token: "string.end",
|
||||
next: "start",
|
||||
|
@ -163,15 +153,12 @@ var SqlServerHighlightRules = function() {
|
|||
token: "comment",
|
||||
start: "/\\*",
|
||||
end: "\\*/"
|
||||
}, {
|
||||
token: "string", // ' string
|
||||
regex: "'.*?'"
|
||||
}, {
|
||||
token: "constant.numeric", // float
|
||||
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||
}, {
|
||||
token: keywordMapper,
|
||||
regex: "@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\b" //up to 2 @symbols for some build in functions
|
||||
regex: "@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\b(?!])" //up to 2 @symbols for some built in functions
|
||||
}, {
|
||||
token: "constant.class",
|
||||
regex: "@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||
|
@ -202,20 +189,41 @@ var SqlServerHighlightRules = function() {
|
|||
caseInsensitive: true
|
||||
}],
|
||||
};
|
||||
|
||||
|
||||
//add each set statment as regex at top of rules so that they are processed first because they require multiple words
|
||||
//note, this makes the statements not match if they are not upper case.. which is not ideal but I don't know of an easy way to fix this
|
||||
//note: this makes the statements not match if they are not upper case.. which is not ideal but I don't know of an easy way to fix this
|
||||
for (var i = 0; i < setStatements.length; i++) {
|
||||
var statement = setStatements[i];
|
||||
this.$rules.start.unshift({
|
||||
token: "set.statement",
|
||||
regex: statement
|
||||
regex: setStatements[i]
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||
|
||||
this.normalizeRules();
|
||||
|
||||
|
||||
//prepare custom keyword completions used by mode to override default completor
|
||||
//this allows for custom 'meta' and proper case of completions
|
||||
var completions = [];
|
||||
var addCompletions = function(arr, meta) {
|
||||
arr.forEach(function(v) {
|
||||
completions.push({
|
||||
name: v,
|
||||
value: v,
|
||||
score: 0,
|
||||
meta: meta,
|
||||
});
|
||||
});
|
||||
};
|
||||
addCompletions(builtInStoredProcedures.split('|'), 'procedure');
|
||||
addCompletions(logicalOperators.split('|'), 'operator');
|
||||
addCompletions(builtinFunctions.split('|'), 'function');
|
||||
addCompletions(dataTypes.split('|'), 'type');
|
||||
addCompletions(setStatements, 'statement');
|
||||
addCompletions(keywords.split('|'), 'keyword');
|
||||
|
||||
this.completions = completions;
|
||||
};
|
||||
|
||||
oop.inherits(SqlServerHighlightRules, TextHighlightRules);
|
||||
|
|
|
@ -57,6 +57,10 @@ var TomlHighlightRules = function() {
|
|||
regex : '"(?=.)',
|
||||
next : "qqstring"
|
||||
},
|
||||
{
|
||||
token: ["variable.keygroup.toml"],
|
||||
regex: "(?:^\\s*)(\\[\\[([^\\]]+)\\]\\])"
|
||||
},
|
||||
{
|
||||
token: ["variable.keygroup.toml"],
|
||||
regex: "(?:^\\s*)(\\[([^\\]]+)\\])"
|
||||
|
@ -100,4 +104,4 @@ var TomlHighlightRules = function() {
|
|||
oop.inherits(TomlHighlightRules, TextHighlightRules);
|
||||
|
||||
exports.TomlHighlightRules = TomlHighlightRules;
|
||||
});
|
||||
});
|
||||
|
|
|
@ -53,7 +53,7 @@ oop.inherits(Mode, TextMode);
|
|||
|
||||
this.blockComment = {start: "<!--", end: "-->"};
|
||||
|
||||
this.createWorker = function(session) {
|
||||
this.createWorker = function(session) {
|
||||
var worker = new WorkerClient(["ace"], "ace/mode/xml_worker", "Worker");
|
||||
worker.attachToDocument(session.getDocument());
|
||||
|
||||
|
|
|
@ -35,8 +35,10 @@ var oop = require("../lib/oop");
|
|||
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||
|
||||
var XmlHighlightRules = function(normalize) {
|
||||
|
||||
var tagRegex = "[a-zA-Z][-_a-zA-Z0-9]*";
|
||||
// http://www.w3.org/TR/REC-xml/#NT-NameChar
|
||||
// NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
|
||||
// NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
|
||||
var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
|
||||
|
||||
this.$rules = {
|
||||
start : [
|
||||
|
|
|
@ -83,15 +83,15 @@ function onMouseDown(e) {
|
|||
var selectionMode;
|
||||
if (editor.$mouseHandler.$enableJumpToDef) {
|
||||
if (ctrl && alt || accel && alt)
|
||||
selectionMode = "add";
|
||||
else if (alt)
|
||||
selectionMode = shift ? "block" : "add";
|
||||
else if (alt && editor.$blockSelectEnabled)
|
||||
selectionMode = "block";
|
||||
} else {
|
||||
if (accel && !alt) {
|
||||
selectionMode = "add";
|
||||
if (!isMultiSelect && shift)
|
||||
return;
|
||||
} else if (alt) {
|
||||
} else if (alt && editor.$blockSelectEnabled) {
|
||||
selectionMode = "block";
|
||||
}
|
||||
}
|
||||
|
@ -116,7 +116,7 @@ function onMouseDown(e) {
|
|||
|
||||
if (shift) {
|
||||
oldRange = null;
|
||||
range = selection.ranges[0];
|
||||
range = selection.ranges[0] || range;
|
||||
editor.removeSelectionMarker(range);
|
||||
}
|
||||
editor.once("mouseup", function() {
|
||||
|
|
|
@ -919,7 +919,8 @@ function addAltCursorListeners(editor){
|
|||
var el = editor.textInput.getElement();
|
||||
var altCursor = false;
|
||||
event.addListener(el, "keydown", function(e) {
|
||||
if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) {
|
||||
var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);
|
||||
if (editor.$blockSelectEnabled && altDown) {
|
||||
if (!altCursor) {
|
||||
editor.renderer.setMouseCursor("crosshair");
|
||||
altCursor = true;
|
||||
|
@ -957,6 +958,12 @@ require("./config").defineOptions(Editor.prototype, "editor", {
|
|||
}
|
||||
},
|
||||
value: true
|
||||
},
|
||||
enableBlockSelect: {
|
||||
set: function(val) {
|
||||
this.$blockSelectEnabled = val;
|
||||
},
|
||||
value: true
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -84,11 +84,11 @@ function setSelection(editor, data) {
|
|||
return isBackwards ? {
|
||||
start: end,
|
||||
end: start,
|
||||
isBackwards: true
|
||||
isBackwards: isBackwards
|
||||
} : {
|
||||
start: start,
|
||||
end: end,
|
||||
isBackwards: true
|
||||
isBackwards: isBackwards
|
||||
};
|
||||
}));
|
||||
}
|
||||
|
@ -225,19 +225,19 @@ module.exports = {
|
|||
assert.equal(editor.getValue(),"l1\nl1\nl2\nl2\nl3\nl3\nl4\nl4");
|
||||
testSelection(editor, [[1,0],[3,0],[5,0],[7,0]]);
|
||||
|
||||
setSelection(editor, [[1,2],[1,0,1,1],[3,0,3,1],[5,0,5,1],[7,0,7,1]]);
|
||||
setSelection(editor, [[1,2],[1,1,1,0],[3,0,3,1],[5,0,5,1],[7,0,7,1]]);
|
||||
exec("copylinesdown");
|
||||
exec("copylinesup");
|
||||
assert.equal(editor.getValue(),"l1\nl1\nl1\nl1\nl2\nl2\nl2\nl2\nl3\nl3\nl3\nl3\nl4\nl4\nl4\nl4");
|
||||
testSelection(editor, [[2,2],[2,0,2,1],[6,0,6,1],[10,0,10,1],[14,0,14,1]]);
|
||||
testSelection(editor, [[2,2],[2,1,2,0],[6,0,6,1],[10,0,10,1],[14,0,14,1]]);
|
||||
|
||||
exec("movelinesdown", 12);
|
||||
assert.equal(editor.getValue(),"l1\nl1\nl1\nl2\nl2\nl2\nl3\nl3\nl3\nl4\nl4\nl4\nl1\nl2\nl3\nl4");
|
||||
testSelection(editor, [[12,2],[12,0,12,1],[13,0,13,1],[14,0,14,1],[15,0,15,1]]);
|
||||
testSelection(editor, [[12,2],[12,1,12,0],[13,0,13,1],[14,0,14,1],[15,0,15,1]]);
|
||||
|
||||
exec("movelinesup", 12);
|
||||
assert.equal(editor.getValue(),"l1\nl2\nl3\nl4\nl1\nl1\nl1\nl2\nl2\nl2\nl3\nl3\nl3\nl4\nl4\nl4");
|
||||
testSelection(editor, [[0,2],[0,0,0,1],[1,0,1,1],[2,0,2,1],[3,0,3,1]]);
|
||||
testSelection(editor, [[0,2],[0,1,0,0],[1,0,1,1],[2,0,2,1],[3,0,3,1]]);
|
||||
},
|
||||
|
||||
"test multiselect fromJSON/toJSON": function() {
|
||||
|
|
|
@ -22,6 +22,16 @@ snippet dateadd
|
|||
# DATEFROMPARTS
|
||||
snippet datefromparts
|
||||
DATEFROMPARTS(${1:year}, ${2:month}, ${3:day})
|
||||
# OBJECT_DEFINITION
|
||||
snippet objectdef
|
||||
SELECT OBJECT_DEFINITION(OBJECT_ID('${1:sys.server_permissions /*object name*/}'))
|
||||
# STUFF XML
|
||||
snippet stuffxml
|
||||
STUFF((SELECT ', ' + ${1:ColumnName}
|
||||
FROM ${2:TableName}
|
||||
WHERE ${3:WhereClause}
|
||||
FOR XML PATH('')), 1, 1, '') AS ${4:Alias}
|
||||
${5:/*https://msdn.microsoft.com/en-us/library/ms188043.aspx*/}
|
||||
# Create Procedure
|
||||
snippet createproc
|
||||
-- =============================================
|
||||
|
@ -30,12 +40,14 @@ snippet createproc
|
|||
-- Description: ${3:Description}
|
||||
-- =============================================
|
||||
CREATE PROCEDURE ${4:Procedure_Name}
|
||||
-- Add the parameters for the stored procedure here
|
||||
${5:/*Add the parameters for the stored procedure here*/}
|
||||
AS
|
||||
BEGIN
|
||||
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
|
||||
SET NOCOUNT ON;
|
||||
|
||||
${6:/*Add the T-SQL statements to compute the return value here*/}
|
||||
|
||||
END
|
||||
GO
|
||||
# Create Scalar Function
|
||||
|
@ -52,5 +64,7 @@ snippet createfn
|
|||
BEGIN
|
||||
DECLARE @Result ${5:Function_Data_Type}
|
||||
|
||||
${6:/*Add the T-SQL statements to compute the return value here*/}
|
||||
|
||||
END
|
||||
GO
|
|
@ -122,7 +122,6 @@
|
|||
}
|
||||
.ace-cloud9-day.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px white;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.ace-cloud9-day .ace_marker-layer .ace_step {
|
||||
background: rgb(247, 237, 137);
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-clouds.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #FFFFFF;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-clouds .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #191919;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-clouds-midnight .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-cobalt.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #002240;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-cobalt .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-dawn.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #F9F9F9;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-dawn .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -81,7 +81,6 @@
|
|||
|
||||
.ace-github.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px white;
|
||||
border-radius: 2px;
|
||||
}
|
||||
/* bold keywords cause cursor issues for some fonts */
|
||||
/* this disables bold style for editor and keeps for static highlighter */
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #323232;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-idle-fingers .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #f3f2f3;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-katzenmilch .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-kr-theme.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #0B0A09;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-kr-theme .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
.ace-kuroir.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #E8E9E8;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.ace-kuroir .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-merbivore.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #161616;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-merbivore .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #1C1C1C;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-merbivore-soft .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #222C28;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-mono-industrial .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-monokai.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #272822;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-monokai .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #2C2828;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-pastel-on-dark .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
|
||||
.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #002B36;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-solarized-dark .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-solarized-light.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #FDF6E3;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-solarized-light .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px black;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-terminal-theme .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -122,7 +122,6 @@
|
|||
}
|
||||
.ace-tm.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px white;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.ace-tm .ace_marker-layer .ace_step {
|
||||
background: rgb(252, 255, 0);
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-tomorrow.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #FFFFFF;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-tomorrow .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #1D1F21;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-tomorrow-night .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
|
||||
.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #002451;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-tomorrow-night-blue .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #000000;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-tomorrow-night-bright .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
|
||||
.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #2D2D2D;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-twilight.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #141414;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-twilight .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #0F0F0F;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-vibrant-ink .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
.ace-xcode.ace_multiselect .ace_selection.ace_start {
|
||||
box-shadow: 0 0 3px 0px #FFFFFF;
|
||||
border-radius: 2px
|
||||
}
|
||||
|
||||
.ace-xcode .ace_marker-layer .ace_step {
|
||||
|
|
|
@ -615,7 +615,7 @@ var VirtualRenderer = function(container, theme) {
|
|||
* @returns {DOMElement}
|
||||
**/
|
||||
this.getMouseEventTarget = function() {
|
||||
return this.content;
|
||||
return this.scroller;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -919,6 +919,8 @@ var VirtualRenderer = function(container, theme) {
|
|||
(this.$minLines||1) * this.lineHeight,
|
||||
Math.min(maxHeight, height)
|
||||
) + this.scrollMargin.v + (this.$extraHeight || 0);
|
||||
if (this.$horizScroll)
|
||||
desiredHeight += this.scrollBarH.getHeight();
|
||||
var vScroll = height > maxHeight;
|
||||
|
||||
if (desiredHeight != this.desiredHeight ||
|
||||
|
@ -939,9 +941,6 @@ var VirtualRenderer = function(container, theme) {
|
|||
};
|
||||
|
||||
this.$computeLayerConfig = function() {
|
||||
if (this.$maxLines && this.lineHeight > 1)
|
||||
this.$autosize();
|
||||
|
||||
var session = this.session;
|
||||
var size = this.$size;
|
||||
|
||||
|
@ -949,9 +948,6 @@ var VirtualRenderer = function(container, theme) {
|
|||
var screenLines = this.session.getScreenLength();
|
||||
var maxHeight = screenLines * this.lineHeight;
|
||||
|
||||
var offset = this.scrollTop % this.lineHeight;
|
||||
var minHeight = size.scrollerHeight + this.lineHeight;
|
||||
|
||||
var longestLine = this.$getLongestLine();
|
||||
|
||||
var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||
|
||||
|
@ -962,20 +958,27 @@ var VirtualRenderer = function(container, theme) {
|
|||
this.$horizScroll = horizScroll;
|
||||
this.scrollBarH.setVisible(horizScroll);
|
||||
}
|
||||
// autoresize only after updating hscroll to include scrollbar height in desired height
|
||||
if (this.$maxLines && this.lineHeight > 1)
|
||||
this.$autosize();
|
||||
|
||||
var offset = this.scrollTop % this.lineHeight;
|
||||
var minHeight = size.scrollerHeight + this.lineHeight;
|
||||
|
||||
var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd
|
||||
? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd
|
||||
: 0;
|
||||
maxHeight += scrollPastEnd;
|
||||
|
||||
this.session.setScrollTop(Math.max(-this.scrollMargin.top,
|
||||
Math.min(this.scrollTop, maxHeight - size.scrollerHeight + this.scrollMargin.bottom)));
|
||||
var sm = this.scrollMargin;
|
||||
this.session.setScrollTop(Math.max(-sm.top,
|
||||
Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));
|
||||
|
||||
this.session.setScrollLeft(Math.max(-this.scrollMargin.left, Math.min(this.scrollLeft,
|
||||
longestLine + 2 * this.$padding - size.scrollerWidth + this.scrollMargin.right)));
|
||||
this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft,
|
||||
longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));
|
||||
|
||||
var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||
|
||||
size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop);
|
||||
size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);
|
||||
var vScrollChanged = this.$vScroll !== vScroll;
|
||||
if (vScrollChanged) {
|
||||
this.$vScroll = vScroll;
|
||||
|
|
|
@ -36,26 +36,40 @@ if (typeof process !== "undefined") {
|
|||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var Editor = require("./edit_session").Editor;
|
||||
var EditSession = require("./edit_session").EditSession;
|
||||
var VirtualRenderer = require("./virtual_renderer").VirtualRenderer;
|
||||
var assert = require("./test/assertions");
|
||||
|
||||
var editor = null;
|
||||
module.exports = {
|
||||
"test: screen2text the column should be rounded to the next character edge" : function() {
|
||||
setUp: function() {
|
||||
if (editor)
|
||||
editor.destroy()
|
||||
var el = document.createElement("div");
|
||||
|
||||
if (!el.getBoundingClientRect) {
|
||||
console.log("Skipping test: This test only runs in the browser");
|
||||
return;
|
||||
}
|
||||
|
||||
el.style.left = "20px";
|
||||
el.style.top = "30px";
|
||||
el.style.width = "300px";
|
||||
el.style.height = "100px";
|
||||
document.body.appendChild(el);
|
||||
|
||||
var renderer = new VirtualRenderer(el);
|
||||
var editor = new Editor(renderer);
|
||||
editor.on("destroy", function() {
|
||||
document.body.removeChild(el);
|
||||
});
|
||||
},
|
||||
tearDown: function() {
|
||||
editor && editor.destroy();
|
||||
editor = null;
|
||||
},
|
||||
"test: screen2text the column should be rounded to the next character edge" : function(done) {
|
||||
if (!editor) return done();
|
||||
var renderer = editor.renderer;
|
||||
|
||||
renderer.setPadding(0);
|
||||
renderer.setSession(new EditSession("1234"));
|
||||
|
||||
|
@ -73,7 +87,23 @@ module.exports = {
|
|||
testPixelToText(10, 0, 0, 1);
|
||||
testPixelToText(14, 0, 0, 1);
|
||||
testPixelToText(15, 0, 0, 2);
|
||||
document.body.removeChild(el);
|
||||
done();
|
||||
},
|
||||
|
||||
"test scrollmargin + autosize": function(done) {
|
||||
if (!editor) return done();
|
||||
editor.setOptions({
|
||||
maxLines: 100,
|
||||
useWrapMode: true
|
||||
});
|
||||
editor.renderer.setScrollMargin(10, 10);
|
||||
editor.setValue("\n\n");
|
||||
editor.setValue("\n\n\n\n");
|
||||
editor.renderer.once("afterRender", function() {
|
||||
setTimeout(function() {
|
||||
done();
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
|
||||
// change tab size after setDocument (for text layer)
|
||||
|
|
Ładowanie…
Reference in New Issue