From c4cb541414f58ebb180b944c43ee994b7777fbbe Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 24 May 2012 23:29:25 +0400 Subject: [PATCH 1/7] fix doc/wiki --- doc/wiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/wiki b/doc/wiki index 8bd16ba2..d93670b4 160000 --- a/doc/wiki +++ b/doc/wiki @@ -1 +1 @@ -Subproject commit 8bd16ba2eda6a1b0c6791f37d0803296ae37840f +Subproject commit d93670b47d776987b38bb2c31777c4e488338fac From 69c8f6615d2e00d53f17cab9dd14e8f019e8c1ed Mon Sep 17 00:00:00 2001 From: Garen Torikian Date: Thu, 10 May 2012 11:47:32 -0700 Subject: [PATCH 2/7] Updates for ace performance related to new searchinfiles work --- lib/ace/document.js | 7 ++++++- lib/ace/edit_session/folding.js | 9 ++++++++- lib/ace/worker/worker.js | 7 ++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/ace/document.js b/lib/ace/document.js index 99afe895..1c89fcf1 100644 --- a/lib/ace/document.js +++ b/lib/ace/document.js @@ -327,8 +327,13 @@ var Document = function(text) { return {row: row, column: 0}; var args = [row, 0]; - args.push.apply(args, lines); + var step = 100000; + var l = Math.ceil(lines.length / step); + for (var tlines, i = 0; i < l; i++) { + tlines = lines.slice(i * step, step); + args.push.apply(args, tlines); this.$lines.splice.apply(this.$lines, args); + } var range = new Range(row, 0, row + lines.length, 0); var delta = { diff --git a/lib/ace/edit_session/folding.js b/lib/ace/edit_session/folding.js index 3a113c84..46f9583c 100644 --- a/lib/ace/edit_session/folding.js +++ b/lib/ace/edit_session/folding.js @@ -748,7 +748,14 @@ function Folding() { } else { var args = Array(len + 1); args.unshift(firstRow, 1); - this.foldWidgets.splice.apply(this.foldWidgets, args); + + var step = 100000; + var l = Math.ceil(args.length / step); + for (var targs, i = 0; i < l; i++) { + targs = args.slice(i * step, step); + this.foldWidgets.splice.apply(this.foldWidgets, targs); + } + } }; diff --git a/lib/ace/worker/worker.js b/lib/ace/worker/worker.js index 295f90b3..04832b6a 100644 --- a/lib/ace/worker/worker.js +++ b/lib/ace/worker/worker.js @@ -123,7 +123,12 @@ var sender; onmessage = function(e) { var msg = e.data; if (msg.command) { - main[msg.command].apply(main, msg.args); + var step = 100000; + var l = Math.ceil(msg.args.length / step); + for (var targs, i = 0; i < l; i++) { + targs = msg.args.slice(i * step, step); + main[msg.command].apply(main, targs); + } } else if (msg.init) { initBaseUrls(msg.tlns); From 93a560885b8d2529a67f740316ec76efd0a8c41a Mon Sep 17 00:00:00 2001 From: Garen Torikian Date: Thu, 10 May 2012 15:25:31 -0700 Subject: [PATCH 3/7] Generalize chunking --- lib/ace/edit_session/folding.js | 10 ++-------- lib/ace/lib/lang.js | 15 +++++++++++++++ lib/ace/worker/worker.js | 9 ++------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/ace/edit_session/folding.js b/lib/ace/edit_session/folding.js index 46f9583c..1789ef1e 100644 --- a/lib/ace/edit_session/folding.js +++ b/lib/ace/edit_session/folding.js @@ -43,7 +43,7 @@ var Range = require("../range").Range; var FoldLine = require("./fold_line").FoldLine; var Fold = require("./fold").Fold; var TokenIterator = require("../token_iterator").TokenIterator; - +var lang = require("../lib/lang"); function Folding() { /* * Looks up a fold at a given row/column. Possible values for side: @@ -749,13 +749,7 @@ function Folding() { var args = Array(len + 1); args.unshift(firstRow, 1); - var step = 100000; - var l = Math.ceil(args.length / step); - for (var targs, i = 0; i < l; i++) { - targs = args.slice(i * step, step); - this.foldWidgets.splice.apply(this.foldWidgets, targs); - } - + this.foldWidgets = lang.chunkLines(args, this.foldWidgets); } }; diff --git a/lib/ace/lib/lang.js b/lib/ace/lib/lang.js index c8b7afa3..bc118b2c 100644 --- a/lib/ace/lib/lang.js +++ b/lib/ace/lib/lang.js @@ -147,4 +147,19 @@ exports.deferredCall = function(fcn) { return deferred; }; + +exports.chunkLines = function(args, thingToSplice, thingtoApply) { + if (thingtoApply === undefined) + thingtoApply = thingToSplice; + + var step = 100000; + var l = Math.ceil(args.length / step); + for (var targs, i = 0; i < l; i++) { + targs = args.slice(i * step, step); + thingToSplice.slice.apply(thingtoApply, targs); + } + + return thingToSplice; +}; + }); diff --git a/lib/ace/worker/worker.js b/lib/ace/worker/worker.js index 04832b6a..ed2f771d 100644 --- a/lib/ace/worker/worker.js +++ b/lib/ace/worker/worker.js @@ -1,5 +1,5 @@ "no use strict"; - +var lang = require("../lib/lang"); var console = { log: function(msg) { postMessage({type: "log", data: msg}); @@ -123,12 +123,7 @@ var sender; onmessage = function(e) { var msg = e.data; if (msg.command) { - var step = 100000; - var l = Math.ceil(msg.args.length / step); - for (var targs, i = 0; i < l; i++) { - targs = msg.args.slice(i * step, step); - main[msg.command].apply(main, targs); - } + main[msg.command] = lang.chunkLines(msg.args, main[msg.command], main); } else if (msg.init) { initBaseUrls(msg.tlns); From 84e3687e0133cbe0918aba86c02bea327ad9dd59 Mon Sep 17 00:00:00 2001 From: Garen Torikian Date: Thu, 10 May 2012 15:53:29 -0700 Subject: [PATCH 4/7] Generalize for document --- lib/ace/document.js | 11 ++--------- lib/ace/lib/lang.js | 13 +++++++++---- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/lib/ace/document.js b/lib/ace/document.js index 1c89fcf1..8f1a9f08 100644 --- a/lib/ace/document.js +++ b/lib/ace/document.js @@ -42,7 +42,7 @@ var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; - +var lang = require("./lib/lang"); /** * class Document * @@ -327,14 +327,7 @@ var Document = function(text) { return {row: row, column: 0}; var args = [row, 0]; - var step = 100000; - var l = Math.ceil(lines.length / step); - for (var tlines, i = 0; i < l; i++) { - tlines = lines.slice(i * step, step); - args.push.apply(args, tlines); - this.$lines.splice.apply(this.$lines, args); - } - + this.$lines = lang.chunkLines(lines, this.$lines, args, true); var range = new Range(row, 0, row + lines.length, 0); var delta = { action: "insertLines", diff --git a/lib/ace/lib/lang.js b/lib/ace/lib/lang.js index bc118b2c..8477b65c 100644 --- a/lib/ace/lib/lang.js +++ b/lib/ace/lib/lang.js @@ -147,16 +147,21 @@ exports.deferredCall = function(fcn) { return deferred; }; - -exports.chunkLines = function(args, thingToSplice, thingtoApply) { +// because of Document, this is confusing as shit +exports.chunkLines = function(args, thingToSplice, thingtoApply, isDocument) { if (thingtoApply === undefined) thingtoApply = thingToSplice; - + var step = 100000; var l = Math.ceil(args.length / step); for (var targs, i = 0; i < l; i++) { targs = args.slice(i * step, step); - thingToSplice.slice.apply(thingtoApply, targs); + if (isDocument) { + thingtoApply.push.apply(thingtoApply, targs); + thingToSplice.splice.apply(thingToSplice, thingtoApply); + } + else + thingToSplice.slice.apply(thingtoApply, targs); } return thingToSplice; From d2163a7016d06c27ec810bad208d40d5e44434ef Mon Sep 17 00:00:00 2001 From: Garen Torikian Date: Fri, 11 May 2012 15:47:03 -0700 Subject: [PATCH 5/7] Update highlighter --- lib/ace/mode/c9search_highlight_rules.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ace/mode/c9search_highlight_rules.js b/lib/ace/mode/c9search_highlight_rules.js index 0555963a..c16b48c0 100644 --- a/lib/ace/mode/c9search_highlight_rules.js +++ b/lib/ace/mode/c9search_highlight_rules.js @@ -47,13 +47,13 @@ var C9SearchHighlightRules = function() { // regexps are ordered -> the first match is used this.$rules = { "start" : [ + { + token : ["constant.numeric", "text", "text"], + regex : "(^\\s+[0-9]+)(:\\s*)(.+)" + }, { token : ["string", "text"], // single line regex : "(.+)(:$)" - }, - { - token : ["constant.numeric", "text"], - regex : "(^\\s*[0-9]+)(:\\s*)" } ] }; From 505b1fc3c63dee7e63fdadfe4f5143e61142d9a6 Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 22 May 2012 23:15:34 +0400 Subject: [PATCH 6/7] fix foldwidgets getting out of sync with document --- lib/ace/document.js | 13 ++++++++++--- lib/ace/edit_session/folding.js | 5 ++--- lib/ace/lib/lang.js | 20 -------------------- lib/ace/worker/worker.js | 4 ++-- 4 files changed, 14 insertions(+), 28 deletions(-) diff --git a/lib/ace/document.js b/lib/ace/document.js index 8f1a9f08..b8379854 100644 --- a/lib/ace/document.js +++ b/lib/ace/document.js @@ -42,7 +42,7 @@ var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; -var lang = require("./lib/lang"); + /** * class Document * @@ -326,8 +326,15 @@ var Document = function(text) { if (lines.length == 0) return {row: row, column: 0}; + if (lines.length > 0xFFFF) { + var end = this.insertLines(row, lines.slice(0xFFFF)); + lines = lines.slice(0, 0xFFFF); + } + var args = [row, 0]; - this.$lines = lang.chunkLines(lines, this.$lines, args, true); + args.push.apply(args, lines); + this.$lines.splice.apply(this.$lines, args); + var range = new Range(row, 0, row + lines.length, 0); var delta = { action: "insertLines", @@ -335,7 +342,7 @@ var Document = function(text) { lines: lines }; this._emit("change", { data: delta }); - return range.end; + return end || range.end; }; /** diff --git a/lib/ace/edit_session/folding.js b/lib/ace/edit_session/folding.js index 1789ef1e..3a113c84 100644 --- a/lib/ace/edit_session/folding.js +++ b/lib/ace/edit_session/folding.js @@ -43,7 +43,7 @@ var Range = require("../range").Range; var FoldLine = require("./fold_line").FoldLine; var Fold = require("./fold").Fold; var TokenIterator = require("../token_iterator").TokenIterator; -var lang = require("../lib/lang"); + function Folding() { /* * Looks up a fold at a given row/column. Possible values for side: @@ -748,8 +748,7 @@ function Folding() { } else { var args = Array(len + 1); args.unshift(firstRow, 1); - - this.foldWidgets = lang.chunkLines(args, this.foldWidgets); + this.foldWidgets.splice.apply(this.foldWidgets, args); } }; diff --git a/lib/ace/lib/lang.js b/lib/ace/lib/lang.js index 8477b65c..c8b7afa3 100644 --- a/lib/ace/lib/lang.js +++ b/lib/ace/lib/lang.js @@ -147,24 +147,4 @@ exports.deferredCall = function(fcn) { return deferred; }; -// because of Document, this is confusing as shit -exports.chunkLines = function(args, thingToSplice, thingtoApply, isDocument) { - if (thingtoApply === undefined) - thingtoApply = thingToSplice; - - var step = 100000; - var l = Math.ceil(args.length / step); - for (var targs, i = 0; i < l; i++) { - targs = args.slice(i * step, step); - if (isDocument) { - thingtoApply.push.apply(thingtoApply, targs); - thingToSplice.splice.apply(thingToSplice, thingtoApply); - } - else - thingToSplice.slice.apply(thingtoApply, targs); - } - - return thingToSplice; -}; - }); diff --git a/lib/ace/worker/worker.js b/lib/ace/worker/worker.js index ed2f771d..295f90b3 100644 --- a/lib/ace/worker/worker.js +++ b/lib/ace/worker/worker.js @@ -1,5 +1,5 @@ "no use strict"; -var lang = require("../lib/lang"); + var console = { log: function(msg) { postMessage({type: "log", data: msg}); @@ -123,7 +123,7 @@ var sender; onmessage = function(e) { var msg = e.data; if (msg.command) { - main[msg.command] = lang.chunkLines(msg.args, main[msg.command], main); + main[msg.command].apply(main, msg.args); } else if (msg.init) { initBaseUrls(msg.tlns); From ac5e033149b054a1b2cfb7eb4b5935ba4e3f7939 Mon Sep 17 00:00:00 2001 From: nightwing Date: Fri, 25 May 2012 10:33:02 +0400 Subject: [PATCH 7/7] add comment --- lib/ace/document.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/ace/document.js b/lib/ace/document.js index b8379854..3cae6399 100644 --- a/lib/ace/document.js +++ b/lib/ace/document.js @@ -326,6 +326,8 @@ var Document = function(text) { if (lines.length == 0) return {row: row, column: 0}; + // apply doesn't work for big arrays (smallest threshold is on safari 0xFFFF) + // to circumvent that we have to break huge inserts into smaller chunks here if (lines.length > 0xFFFF) { var end = this.insertLines(row, lines.slice(0xFFFF)); lines = lines.slice(0, 0xFFFF);