From 6b1a3f3d002a15681df7618c377a8fc3c824d60d Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 2 Jun 2015 19:26:07 +0400 Subject: [PATCH] update ace --- node_modules/ace/lib/ace/autocomplete.js | 15 ++-- .../ace/lib/ace/autocomplete/popup.js | 3 +- .../ace/lib/ace/background_tokenizer.js | 5 +- .../ace/lib/ace/background_tokenizer_test.js | 43 +++++++++++ .../ace/lib/ace/commands/default_commands.js | 4 +- node_modules/ace/lib/ace/config.js | 2 +- node_modules/ace/lib/ace/css/editor.css | 27 +++++++ node_modules/ace/lib/ace/edit_session.js | 4 +- .../ace/lib/ace/edit_session/bracket_match.js | 4 +- node_modules/ace/lib/ace/editor.js | 12 +-- .../ace/lib/ace/ext/language_tools.js | 1 - .../ace/lib/ace/ext/static_highlight.js | 10 +-- .../ace/lib/ace/keyboard/textinput.js | 2 +- node_modules/ace/lib/ace/keyboard/vim.js | 10 +-- .../ace/lib/ace/layer/font_metrics.js | 6 +- node_modules/ace/lib/ace/layer/marker.js | 51 ++++++------ node_modules/ace/lib/ace/layer/text_test.js | 2 +- node_modules/ace/lib/ace/lib/dom.js | 8 +- node_modules/ace/lib/ace/lib/event.js | 9 ++- .../lib/ace/mode/_test/tokens_gherkin.json | 40 +++++----- .../ace/lib/ace/mode/_test/tokens_rust.json | 17 ++-- .../ace/lib/ace/mode/c_cpp_highlight_rules.js | 6 +- .../ace/lib/ace/mode/css_highlight_rules.js | 2 +- .../lib/ace/mode/gherkin_highlight_rules.js | 62 ++++++++------- .../ace/lib/ace/mode/html_highlight_rules.js | 4 +- .../ace/lib/ace/mode/rust_highlight_rules.js | 5 +- node_modules/ace/lib/ace/mode/scheme.js | 77 +++++++++++++++++++ node_modules/ace/lib/ace/mode/sqlserver.js | 9 ++- .../lib/ace/mode/sqlserver_highlight_rules.js | 76 ++++++++++-------- .../ace/lib/ace/mode/toml_highlight_rules.js | 6 +- node_modules/ace/lib/ace/mode/xml.js | 2 +- .../ace/lib/ace/mode/xml_highlight_rules.js | 6 +- .../ace/lib/ace/mouse/multi_select_handler.js | 8 +- node_modules/ace/lib/ace/multi_select.js | 9 ++- node_modules/ace/lib/ace/multi_select_test.js | 12 +-- .../ace/lib/ace/snippets/sqlserver.snippets | 16 +++- node_modules/ace/lib/ace/theme/cloud9_day.css | 1 - node_modules/ace/lib/ace/theme/clouds.css | 1 - .../ace/lib/ace/theme/clouds_midnight.css | 1 - node_modules/ace/lib/ace/theme/cobalt.css | 1 - node_modules/ace/lib/ace/theme/dawn.css | 1 - node_modules/ace/lib/ace/theme/github.css | 1 - .../ace/lib/ace/theme/idle_fingers.css | 1 - .../ace/lib/ace/theme/katzenmilch.css | 1 - node_modules/ace/lib/ace/theme/kr_theme.css | 1 - node_modules/ace/lib/ace/theme/kuroir.css | 1 - node_modules/ace/lib/ace/theme/merbivore.css | 1 - .../ace/lib/ace/theme/merbivore_soft.css | 1 - .../ace/lib/ace/theme/mono_industrial.css | 1 - node_modules/ace/lib/ace/theme/monokai.css | 1 - .../ace/lib/ace/theme/pastel_on_dark.css | 1 - .../ace/lib/ace/theme/solarized_dark.css | 1 - .../ace/lib/ace/theme/solarized_light.css | 1 - node_modules/ace/lib/ace/theme/terminal.css | 1 - node_modules/ace/lib/ace/theme/textmate.css | 1 - node_modules/ace/lib/ace/theme/tomorrow.css | 1 - .../ace/lib/ace/theme/tomorrow_night.css | 1 - .../ace/lib/ace/theme/tomorrow_night_blue.css | 1 - .../lib/ace/theme/tomorrow_night_bright.css | 1 - .../lib/ace/theme/tomorrow_night_eighties.css | 1 - node_modules/ace/lib/ace/theme/twilight.css | 1 - .../ace/lib/ace/theme/vibrant_ink.css | 1 - node_modules/ace/lib/ace/theme/xcode.css | 1 - node_modules/ace/lib/ace/virtual_renderer.js | 27 ++++--- .../ace/lib/ace/virtual_renderer_test.js | 40 ++++++++-- 65 files changed, 438 insertions(+), 231 deletions(-) diff --git a/node_modules/ace/lib/ace/autocomplete.js b/node_modules/ace/lib/ace/autocomplete.js index 7e5674ae..8e121f35 100644 --- a/node_modules/ace/lib/ace/autocomplete.js +++ b/node_modules/ace/lib/ace/autocomplete.js @@ -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 || ""; diff --git a/node_modules/ace/lib/ace/autocomplete/popup.js b/node_modules/ace/lib/ace/autocomplete/popup.js index 8f9938df..d54a876a 100644 --- a/node_modules/ace/lib/ace/autocomplete/popup.js +++ b/node_modules/ace/lib/ace/autocomplete/popup.js @@ -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; -}); \ No newline at end of file +}); diff --git a/node_modules/ace/lib/ace/background_tokenizer.js b/node_modules/ace/lib/ace/background_tokenizer.js index 00273647..ea4ddd0f 100644 --- a/node_modules/ace/lib/ace/background_tokenizer.js +++ b/node_modules/ace/lib/ace/background_tokenizer.js @@ -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; diff --git a/node_modules/ace/lib/ace/background_tokenizer_test.js b/node_modules/ace/lib/ace/background_tokenizer_test.js index 7a4cc78c..fd738d06 100644 --- a/node_modules/ace/lib/ace/background_tokenizer_test.js +++ b/node_modules/ace/lib/ace/background_tokenizer_test.js @@ -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"]); } }; diff --git a/node_modules/ace/lib/ace/commands/default_commands.js b/node_modules/ace/lib/ace/commands/default_commands.js index dddce931..de14df85 100644 --- a/node_modules/ace/lib/ace/commands/default_commands.js +++ b/node_modules/ace/lib/ace/commands/default_commands.js @@ -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" }, { diff --git a/node_modules/ace/lib/ace/config.js b/node_modules/ace/lib/ace/config.js index 34bf50fd..fe9312fd 100644 --- a/node_modules/ace/lib/ace/config.js +++ b/node_modules/ace/lib/ace/config.js @@ -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 = { diff --git a/node_modules/ace/lib/ace/css/editor.css b/node_modules/ace/lib/ace/css/editor.css index 22f5399e..14457846 100644 --- a/node_modules/ace/lib/ace/css/editor.css +++ b/node_modules/ace/lib/ace/css/editor.css @@ -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< 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; diff --git a/node_modules/ace/lib/ace/layer/font_metrics.js b/node_modules/ace/lib/ace/layer/font_metrics.js index 18521489..7fea61e4 100644 --- a/node_modules/ace/lib/ace/layer/font_metrics.js +++ b/node_modules/ace/lib/ace/layer/font_metrics.js @@ -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; } }; diff --git a/node_modules/ace/lib/ace/layer/marker.js b/node_modules/ace/lib/ace/layer/marker.js index 26f38447..9818d225 100644 --- a/node_modules/ace/lib/ace/layer/marker.js +++ b/node_modules/ace/lib/ace/layer/marker.js @@ -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( - "
" + textLayer.EOL_CHAR + ""; 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 = []; diff --git a/node_modules/ace/lib/ace/lib/dom.js b/node_modules/ace/lib/ace/lib/dom.js index ef2f7caa..2cbfe23e 100644 --- a/node_modules/ace/lib/ace/lib/dom.js +++ b/node_modules/ace/lib/ace/lib/dom.js @@ -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 include @@ -173,9 +178,6 @@ exports.getInnerHeight = function(element) { }; -if (typeof document == "undefined") - return; - if (window.pageYOffset !== undefined) { exports.getPageScrollTop = function() { return window.pageYOffset; diff --git a/node_modules/ace/lib/ace/lib/event.js b/node_modules/ace/lib/ace/lib/event.js index 16805ce2..57924056 100644 --- a/node_modules/ace/lib/ace/lib/event.js +++ b/node_modules/ace/lib/ace/lib/event.js @@ -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; diff --git a/node_modules/ace/lib/ace/mode/_test/tokens_gherkin.json b/node_modules/ace/lib/ace/mode/_test/tokens_gherkin.json index d16ffc6c..173d9798 100644 --- a/node_modules/ace/lib/ace/mode/_test/tokens_gherkin.json +++ b/node_modules/ace/lib/ace/mode/_test/tokens_gherkin.json @@ -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" ],[ diff --git a/node_modules/ace/lib/ace/mode/_test/tokens_rust.json b/node_modules/ace/lib/ace/mode/_test/tokens_rust.json index 6592575b..8c59a3aa 100644 --- a/node_modules/ace/lib/ace/mode/_test/tokens_rust.json +++ b/node_modules/ace/lib/ace/mode/_test/tokens_rust.json @@ -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"], - ["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","->"], diff --git a/node_modules/ace/lib/ace/mode/c_cpp_highlight_rules.js b/node_modules/ace/lib/ace/mode/c_cpp_highlight_rules.js index b5a29799..9d2f33dc 100644 --- a/node_modules/ace/lib/ace/mode/c_cpp_highlight_rules.js +++ b/node_modules/ace/lib/ace/mode/c_cpp_highlight_rules.js @@ -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({ diff --git a/node_modules/ace/lib/ace/mode/css_highlight_rules.js b/node_modules/ace/lib/ace/mode/css_highlight_rules.js index b9c20423..d08a3a0b 100644 --- a/node_modules/ace/lib/ace/mode/css_highlight_rules.js +++ b/node_modules/ace/lib/ace/mode/css_highlight_rules.js @@ -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"; diff --git a/node_modules/ace/lib/ace/mode/gherkin_highlight_rules.js b/node_modules/ace/lib/ace/mode/gherkin_highlight_rules.js index d54db204..04ce877c 100644 --- a/node_modules/ace/lib/ace/mode/gherkin_highlight_rules.js +++ b/node_modules/ace/lib/ace/mode/gherkin_highlight_rules.js @@ -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); diff --git a/node_modules/ace/lib/ace/mode/html_highlight_rules.js b/node_modules/ace/lib/ace/mode/html_highlight_rules.js index 9c9cc36f..4effa2aa 100644 --- a/node_modules/ace/lib/ace/mode/html_highlight_rules.js +++ b/node_modules/ace/lib/ace/mode/html_highlight_rules.js @@ -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 : "(]*)(\\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' }, diff --git a/node_modules/ace/lib/ace/mode/scheme.js b/node_modules/ace/lib/ace/mode/scheme.js index aa462a10..2360b3da 100644 --- a/node_modules/ace/lib/ace/mode/scheme.js +++ b/node_modules/ace/lib/ace/mode/scheme.js @@ -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); diff --git a/node_modules/ace/lib/ace/mode/sqlserver.js b/node_modules/ace/lib/ace/mode/sqlserver.js index 0f66c1e5..5f24730c 100644 --- a/node_modules/ace/lib/ace/mode/sqlserver.js +++ b/node_modules/ace/lib/ace/mode/sqlserver.js @@ -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); diff --git a/node_modules/ace/lib/ace/mode/sqlserver_highlight_rules.js b/node_modules/ace/lib/ace/mode/sqlserver_highlight_rules.js index 42e193d7..c914c0ae 100644 --- a/node_modules/ace/lib/ace/mode/sqlserver_highlight_rules.js +++ b/node_modules/ace/lib/ace/mode/sqlserver_highlight_rules.js @@ -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); diff --git a/node_modules/ace/lib/ace/mode/toml_highlight_rules.js b/node_modules/ace/lib/ace/mode/toml_highlight_rules.js index 686ffae2..1a7871ab 100644 --- a/node_modules/ace/lib/ace/mode/toml_highlight_rules.js +++ b/node_modules/ace/lib/ace/mode/toml_highlight_rules.js @@ -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; -}); \ No newline at end of file +}); diff --git a/node_modules/ace/lib/ace/mode/xml.js b/node_modules/ace/lib/ace/mode/xml.js index 8c7033f1..38861eee 100644 --- a/node_modules/ace/lib/ace/mode/xml.js +++ b/node_modules/ace/lib/ace/mode/xml.js @@ -53,7 +53,7 @@ oop.inherits(Mode, TextMode); this.blockComment = {start: ""}; - this.createWorker = function(session) { + this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/xml_worker", "Worker"); worker.attachToDocument(session.getDocument()); diff --git a/node_modules/ace/lib/ace/mode/xml_highlight_rules.js b/node_modules/ace/lib/ace/mode/xml_highlight_rules.js index 91da0e70..9555d068 100644 --- a/node_modules/ace/lib/ace/mode/xml_highlight_rules.js +++ b/node_modules/ace/lib/ace/mode/xml_highlight_rules.js @@ -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 : [ diff --git a/node_modules/ace/lib/ace/mouse/multi_select_handler.js b/node_modules/ace/lib/ace/mouse/multi_select_handler.js index 52f91056..4adcafe4 100644 --- a/node_modules/ace/lib/ace/mouse/multi_select_handler.js +++ b/node_modules/ace/lib/ace/mouse/multi_select_handler.js @@ -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() { diff --git a/node_modules/ace/lib/ace/multi_select.js b/node_modules/ace/lib/ace/multi_select.js index a8273e7f..90214a50 100644 --- a/node_modules/ace/lib/ace/multi_select.js +++ b/node_modules/ace/lib/ace/multi_select.js @@ -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 } }); diff --git a/node_modules/ace/lib/ace/multi_select_test.js b/node_modules/ace/lib/ace/multi_select_test.js index f860cd79..7fd504fb 100644 --- a/node_modules/ace/lib/ace/multi_select_test.js +++ b/node_modules/ace/lib/ace/multi_select_test.js @@ -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() { diff --git a/node_modules/ace/lib/ace/snippets/sqlserver.snippets b/node_modules/ace/lib/ace/snippets/sqlserver.snippets index 51c00ae4..403bd6bc 100644 --- a/node_modules/ace/lib/ace/snippets/sqlserver.snippets +++ b/node_modules/ace/lib/ace/snippets/sqlserver.snippets @@ -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 \ No newline at end of file diff --git a/node_modules/ace/lib/ace/theme/cloud9_day.css b/node_modules/ace/lib/ace/theme/cloud9_day.css index 58fc40f5..ec1b56b1 100644 --- a/node_modules/ace/lib/ace/theme/cloud9_day.css +++ b/node_modules/ace/lib/ace/theme/cloud9_day.css @@ -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); diff --git a/node_modules/ace/lib/ace/theme/clouds.css b/node_modules/ace/lib/ace/theme/clouds.css index e3884e02..c11308d4 100644 --- a/node_modules/ace/lib/ace/theme/clouds.css +++ b/node_modules/ace/lib/ace/theme/clouds.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/clouds_midnight.css b/node_modules/ace/lib/ace/theme/clouds_midnight.css index 3b932996..08ee089d 100644 --- a/node_modules/ace/lib/ace/theme/clouds_midnight.css +++ b/node_modules/ace/lib/ace/theme/clouds_midnight.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/cobalt.css b/node_modules/ace/lib/ace/theme/cobalt.css index 73140082..b883ba97 100644 --- a/node_modules/ace/lib/ace/theme/cobalt.css +++ b/node_modules/ace/lib/ace/theme/cobalt.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/dawn.css b/node_modules/ace/lib/ace/theme/dawn.css index 719f4877..3c2884e1 100644 --- a/node_modules/ace/lib/ace/theme/dawn.css +++ b/node_modules/ace/lib/ace/theme/dawn.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/github.css b/node_modules/ace/lib/ace/theme/github.css index 213d3fd3..14799227 100644 --- a/node_modules/ace/lib/ace/theme/github.css +++ b/node_modules/ace/lib/ace/theme/github.css @@ -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 */ diff --git a/node_modules/ace/lib/ace/theme/idle_fingers.css b/node_modules/ace/lib/ace/theme/idle_fingers.css index f507ec10..b5e1bff2 100644 --- a/node_modules/ace/lib/ace/theme/idle_fingers.css +++ b/node_modules/ace/lib/ace/theme/idle_fingers.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/katzenmilch.css b/node_modules/ace/lib/ace/theme/katzenmilch.css index a4559a2a..659f7fa6 100644 --- a/node_modules/ace/lib/ace/theme/katzenmilch.css +++ b/node_modules/ace/lib/ace/theme/katzenmilch.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/kr_theme.css b/node_modules/ace/lib/ace/theme/kr_theme.css index 339786ad..e232de47 100644 --- a/node_modules/ace/lib/ace/theme/kr_theme.css +++ b/node_modules/ace/lib/ace/theme/kr_theme.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/kuroir.css b/node_modules/ace/lib/ace/theme/kuroir.css index 5e987abc..0ccc1dab 100644 --- a/node_modules/ace/lib/ace/theme/kuroir.css +++ b/node_modules/ace/lib/ace/theme/kuroir.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/merbivore.css b/node_modules/ace/lib/ace/theme/merbivore.css index a84ec3a6..9be25c66 100644 --- a/node_modules/ace/lib/ace/theme/merbivore.css +++ b/node_modules/ace/lib/ace/theme/merbivore.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/merbivore_soft.css b/node_modules/ace/lib/ace/theme/merbivore_soft.css index f0ad0bac..0d615376 100644 --- a/node_modules/ace/lib/ace/theme/merbivore_soft.css +++ b/node_modules/ace/lib/ace/theme/merbivore_soft.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/mono_industrial.css b/node_modules/ace/lib/ace/theme/mono_industrial.css index 7e40a3b9..6630e4a2 100644 --- a/node_modules/ace/lib/ace/theme/mono_industrial.css +++ b/node_modules/ace/lib/ace/theme/mono_industrial.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/monokai.css b/node_modules/ace/lib/ace/theme/monokai.css index a3a063df..bcc26ef4 100644 --- a/node_modules/ace/lib/ace/theme/monokai.css +++ b/node_modules/ace/lib/ace/theme/monokai.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/pastel_on_dark.css b/node_modules/ace/lib/ace/theme/pastel_on_dark.css index 8cab16a1..0b637174 100644 --- a/node_modules/ace/lib/ace/theme/pastel_on_dark.css +++ b/node_modules/ace/lib/ace/theme/pastel_on_dark.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/solarized_dark.css b/node_modules/ace/lib/ace/theme/solarized_dark.css index ea8ec8aa..09740e69 100644 --- a/node_modules/ace/lib/ace/theme/solarized_dark.css +++ b/node_modules/ace/lib/ace/theme/solarized_dark.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/solarized_light.css b/node_modules/ace/lib/ace/theme/solarized_light.css index 64c4bac9..65399fda 100644 --- a/node_modules/ace/lib/ace/theme/solarized_light.css +++ b/node_modules/ace/lib/ace/theme/solarized_light.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/terminal.css b/node_modules/ace/lib/ace/theme/terminal.css index 3636a03d..f23a9ad6 100644 --- a/node_modules/ace/lib/ace/theme/terminal.css +++ b/node_modules/ace/lib/ace/theme/terminal.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/textmate.css b/node_modules/ace/lib/ace/theme/textmate.css index 6cb159ba..18e2b4ee 100644 --- a/node_modules/ace/lib/ace/theme/textmate.css +++ b/node_modules/ace/lib/ace/theme/textmate.css @@ -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); diff --git a/node_modules/ace/lib/ace/theme/tomorrow.css b/node_modules/ace/lib/ace/theme/tomorrow.css index 20975004..77407e66 100644 --- a/node_modules/ace/lib/ace/theme/tomorrow.css +++ b/node_modules/ace/lib/ace/theme/tomorrow.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/tomorrow_night.css b/node_modules/ace/lib/ace/theme/tomorrow_night.css index aafceab6..e98a6580 100644 --- a/node_modules/ace/lib/ace/theme/tomorrow_night.css +++ b/node_modules/ace/lib/ace/theme/tomorrow_night.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/tomorrow_night_blue.css b/node_modules/ace/lib/ace/theme/tomorrow_night_blue.css index e717be0a..907eef35 100644 --- a/node_modules/ace/lib/ace/theme/tomorrow_night_blue.css +++ b/node_modules/ace/lib/ace/theme/tomorrow_night_blue.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/tomorrow_night_bright.css b/node_modules/ace/lib/ace/theme/tomorrow_night_bright.css index 5c896fb9..c0c33739 100644 --- a/node_modules/ace/lib/ace/theme/tomorrow_night_bright.css +++ b/node_modules/ace/lib/ace/theme/tomorrow_night_bright.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/tomorrow_night_eighties.css b/node_modules/ace/lib/ace/theme/tomorrow_night_eighties.css index 85d7b089..69277fb1 100644 --- a/node_modules/ace/lib/ace/theme/tomorrow_night_eighties.css +++ b/node_modules/ace/lib/ace/theme/tomorrow_night_eighties.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/twilight.css b/node_modules/ace/lib/ace/theme/twilight.css index 0ca694fb..ae353dae 100644 --- a/node_modules/ace/lib/ace/theme/twilight.css +++ b/node_modules/ace/lib/ace/theme/twilight.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/vibrant_ink.css b/node_modules/ace/lib/ace/theme/vibrant_ink.css index e2901156..a3a89402 100644 --- a/node_modules/ace/lib/ace/theme/vibrant_ink.css +++ b/node_modules/ace/lib/ace/theme/vibrant_ink.css @@ -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 { diff --git a/node_modules/ace/lib/ace/theme/xcode.css b/node_modules/ace/lib/ace/theme/xcode.css index 56eb9a89..a22bd169 100644 --- a/node_modules/ace/lib/ace/theme/xcode.css +++ b/node_modules/ace/lib/ace/theme/xcode.css @@ -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 { diff --git a/node_modules/ace/lib/ace/virtual_renderer.js b/node_modules/ace/lib/ace/virtual_renderer.js index c40e7b80..660e7d50 100644 --- a/node_modules/ace/lib/ace/virtual_renderer.js +++ b/node_modules/ace/lib/ace/virtual_renderer.js @@ -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; diff --git a/node_modules/ace/lib/ace/virtual_renderer_test.js b/node_modules/ace/lib/ace/virtual_renderer_test.js index e8a8fcbd..9b1ed866 100644 --- a/node_modules/ace/lib/ace/virtual_renderer_test.js +++ b/node_modules/ace/lib/ace/virtual_renderer_test.js @@ -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)