diff --git a/vendor/ace/css/editor.css b/vendor/ace/css/editor.css
index ace961aee..483214205 100644
--- a/vendor/ace/css/editor.css
+++ b/vendor/ace/css/editor.css
@@ -1,4 +1,4 @@
-@import url(http://fonts.googleapis.com/css?family=Droid+Sans+Mono);
+@import url(//fonts.googleapis.com/css?family=Droid+Sans+Mono);
.ace_editor {
diff --git a/vendor/ace/editor.js b/vendor/ace/editor.js
index ee58111a0..483c44c51 100644
--- a/vendor/ace/editor.js
+++ b/vendor/ace/editor.js
@@ -382,7 +382,7 @@ var Editor =function(renderer, session) {
};
this.onChangeMode = function() {
- this.renderer.updateText()
+ this.renderer.updateText();
};
this.onChangeWrapLimit = function() {
@@ -418,7 +418,7 @@ var Editor =function(renderer, session) {
this._emit("cut", range);
if (!this.selection.isEmpty()) {
- this.session.remove(range)
+ this.session.remove(range);
this.clearSelection();
}
};
@@ -648,11 +648,11 @@ var Editor =function(renderer, session) {
this.$modeBehaviours = true;
this.setBehavioursEnabled = function (enabled) {
this.$modeBehaviours = enabled;
- }
+ };
this.getBehavioursEnabled = function () {
return this.$modeBehaviours;
- }
+ };
this.removeRight = function() {
if (this.$readOnly)
@@ -661,7 +661,7 @@ var Editor =function(renderer, session) {
if (this.selection.isEmpty()) {
this.selection.selectRight();
}
- this.session.remove(this.getSelectionRange())
+ this.session.remove(this.getSelectionRange());
this.clearSelection();
};
@@ -760,17 +760,18 @@ var Editor =function(renderer, session) {
var cursor = this.getCursorPosition();
var column = cursor.column;
- if (column == 0)
+ if (column === 0)
return;
var line = this.session.getLine(cursor.row);
+ var swap, range;
if (column < line.length) {
- var swap = line.charAt(column) + line.charAt(column-1);
- var range = new Range(cursor.row, column-1, cursor.row, column+1)
+ swap = line.charAt(column) + line.charAt(column-1);
+ range = new Range(cursor.row, column-1, cursor.row, column+1);
}
else {
- var swap = line.charAt(column-1) + line.charAt(column-2);
- var range = new Range(cursor.row, column-2, cursor.row, column)
+ swap = line.charAt(column-1) + line.charAt(column-2);
+ range = new Range(cursor.row, column-2, cursor.row, column);
}
this.session.replace(range, swap);
};
@@ -814,7 +815,7 @@ var Editor =function(renderer, session) {
return;
var state = this.session.getState(this.getCursorPosition().row);
- var rows = this.$getSelectedRows()
+ var rows = this.$getSelectedRows();
this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);
};
@@ -823,10 +824,11 @@ var Editor =function(renderer, session) {
return;
var rows = this.$getSelectedRows();
+ var range;
if (rows.last == 0 || rows.last+1 < this.session.getLength())
- var range = new Range(rows.first, 0, rows.last+1, 0)
+ range = new Range(rows.first, 0, rows.last+1, 0);
else
- var range = new Range(
+ range = new Range(
rows.first-1, this.session.getLine(rows.first-1).length,
rows.last, this.session.getLine(rows.last).length
);
@@ -912,7 +914,6 @@ var Editor =function(renderer, session) {
this.renderer.hideComposition();
};
-
this.getFirstVisibleRow = function() {
return this.renderer.getFirstVisibleRow();
};
@@ -1043,7 +1044,7 @@ var Editor =function(renderer, session) {
if (!this.isRowVisible(this.getCursorPosition().row)) {
this.scrollToLine(lineNumber, true);
}
- },
+ };
this.navigateTo = function(row, column) {
this.clearSelection();
@@ -1131,7 +1132,7 @@ var Editor =function(renderer, session) {
this.$tryReplace(range, replacement);
if (range !== null)
this.selection.setSelectionRange(range);
- },
+ };
this.replaceAll = function(replacement, options) {
if (options) {
@@ -1152,11 +1153,11 @@ var Editor =function(renderer, session) {
this.selection.setSelectionRange(selection);
this.$blockScrolling -= 1;
- },
+ };
this.$tryReplace = function(range, replacement) {
var input = this.session.getTextRange(range);
- var replacement = this.$search.replace(input, replacement);
+ replacement = this.$search.replace(input, replacement);
if (replacement !== null) {
range.end = this.session.replace(range, replacement);
return range;
@@ -1175,7 +1176,7 @@ var Editor =function(renderer, session) {
options.needle = needle;
this.$search.set(options);
this.$find();
- },
+ };
this.findNext = function(options) {
options = options || {};
@@ -1218,7 +1219,7 @@ var Editor =function(renderer, session) {
this.destroy = function() {
this.renderer.destroy();
- }
+ };
}).call(Editor.prototype);
diff --git a/vendor/ace/layer/gutter.js b/vendor/ace/layer/gutter.js
index 190fa6f1b..d7f43caba 100644
--- a/vendor/ace/layer/gutter.js
+++ b/vendor/ace/layer/gutter.js
@@ -125,7 +125,7 @@ var Gutter = function(parentEl) {
var wrappedRowLength = this.session.getRowLength(i) - 1;
while (wrappedRowLength--) {
- html.push("
¦
");
+ html.push("\xA6");
}
html.push("
");
diff --git a/vendor/ace/layer/text.js b/vendor/ace/layer/text.js
index b251d9bba..89b684bf2 100644
--- a/vendor/ace/layer/text.js
+++ b/vendor/ace/layer/text.js
@@ -60,10 +60,10 @@ var Text = function(parentEl) {
oop.implement(this, EventEmitter);
- this.EOF_CHAR = "¶";
- this.EOL_CHAR = "¬";
- this.TAB_CHAR = "→";
- this.SPACE_CHAR = "·";
+ this.EOF_CHAR = "\xB6"; //"¶";
+ this.EOL_CHAR = "\xAC"; //"¬";
+ this.TAB_CHAR = "\u2192"; //"→";
+ this.SPACE_CHAR = "\xB7"; //"·";
this.$padding = 0;
this.setPadding = function(padding) {
diff --git a/vendor/ace/mode/coffee_highlight_rules.js b/vendor/ace/mode/coffee_highlight_rules.js
index 56a6ee455..7ab53559c 100644
--- a/vendor/ace/mode/coffee_highlight_rules.js
+++ b/vendor/ace/mode/coffee_highlight_rules.js
@@ -48,7 +48,7 @@ define(function(require, exports, module) {
merge : true,
regex : ".+"
};
-
+
this.$rules = {
start : [
{
@@ -58,8 +58,8 @@ define(function(require, exports, module) {
token : "variable",
regex : "@" + identifier
}, {
- token : "label",
- regex : identifier + ":"
+ token : "entity.name.function",
+ regex : identifier + "(?=\\s*:\\s*(?:\\(.*?\\)\\s*)?->)"
}, {
token : "keyword",
regex : "(?:t(?:h(?:is|row|en)|ry|ypeof)|s(?:uper|witch)|return|b(?:reak|y)|c(?:ontinue|atch|lass)|i(?:n(?:stanceof)?|s(?:nt)?|f)|e(?:lse|xtends)|f(?:or (?:own)?|inally|unction)|wh(?:ile|en)|n(?:ew|ot?)|d(?:e(?:lete|bugger)|o)|loop|o(?:ff?|[rn])|un(?:less|til)|and|yes)"
diff --git a/vendor/ace/mode/javascript_highlight_rules.js b/vendor/ace/mode/javascript_highlight_rules.js
index eeb8479f6..61903b054 100644
--- a/vendor/ace/mode/javascript_highlight_rules.js
+++ b/vendor/ace/mode/javascript_highlight_rules.js
@@ -51,6 +51,9 @@ var JavaScriptHighlightRules = function() {
"if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
"const|yield|import|get|set").split("|")
);
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
var buildinConstants = lang.arrayToMap(
("null|Infinity|NaN|undefined").split("|")
@@ -105,9 +108,16 @@ var JavaScriptHighlightRules = function() {
}, {
token : "constant.numeric", // float
regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
}, {
token : "constant.language.boolean",
regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
}, {
token : function(value) {
if (value == "this")
@@ -151,6 +161,9 @@ var JavaScriptHighlightRules = function() {
// makes sure we don't mix up regexps with the divison operator
"regex_allowed": [
{
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
token: "string.regexp",
regex: "\\/(?:(?:\\[(?:\\\\]|[^\\]])+\\])"
+ "|(?:\\\\/|[^\\]/]))*"
diff --git a/vendor/ace/mode/javascript_tokenizer_test.js b/vendor/ace/mode/javascript_tokenizer_test.js
index 3aa4aaa95..cc3bca64c 100644
--- a/vendor/ace/mode/javascript_tokenizer_test.js
+++ b/vendor/ace/mode/javascript_tokenizer_test.js
@@ -136,12 +136,24 @@ module.exports = {
assert.equal(7, tokens.length);
assert.equal("string.regexp", tokens[2].type);
assert.equal("string.regexp", tokens[6].type);
+
+ var tokens = this.tokenizer.getLineTokens("case /a/.test(c)", "start").tokens;
+ assert.equal(8, tokens.length);
+ assert.equal("string.regexp", tokens[2].type);
},
"test tokenize identifier with umlauts": function() {
var tokens = this.tokenizer.getLineTokens("füße", "start").tokens;
assert.equal(1, tokens.length);
+ },
+
+ "test // is not a regexp": function() {
+ var tokens = this.tokenizer.getLineTokens("{ // 123", "start").tokens;
+ assert.equal(3, tokens.length);
+ assert.equal("lparen", tokens[0].type);
+ assert.equal("text", tokens[1].type);
+ assert.equal("comment", tokens[2].type);
}
};
diff --git a/vendor/ace/mode/latex.js b/vendor/ace/mode/latex.js
new file mode 100644
index 000000000..0b6032362
--- /dev/null
+++ b/vendor/ace/mode/latex.js
@@ -0,0 +1,58 @@
+define(function(require, exports, module) {
+
+var oop = require("pilot/oop");
+var TextMode = require("ace/mode/text").Mode;
+var Tokenizer = require("ace/tokenizer").Tokenizer;
+var LatexHighlightRules = require("ace/mode/latex_highlight_rules").LatexHighlightRules;
+var Range = require("ace/range").Range;
+
+var Mode = function()
+{
+ this.$tokenizer = new Tokenizer(new LatexHighlightRules().getRules());
+};
+oop.inherits(Mode, TextMode);
+
+(function()
+{
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ // This code is adapted from ruby.js
+ var outdent = true;
+ var outentedRows = [];
+
+ // LaTeX comments begin with % and go to the end of the line
+ var commentRegEx = /^(\s*)\%/;
+
+ for (var i = startRow; i <= endRow; i++) {
+ if (!commentRegEx.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i = startRow; i <= endRow; i++) {
+ var line = doc.getLine(i);
+ var m = line.match(commentRegEx);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "%");
+ }
+ };
+
+ // There is no universally accepted way of indenting a tex document
+ // so just maintain the indentation of the previous line
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
diff --git a/vendor/ace/mode/latex_highlight_rules.js b/vendor/ace/mode/latex_highlight_rules.js
new file mode 100644
index 000000000..ad1cdef46
--- /dev/null
+++ b/vendor/ace/mode/latex_highlight_rules.js
@@ -0,0 +1,38 @@
+define(function(require, exports, module) {
+
+var oop = require("pilot/oop");
+var TextHighlightRules = require("ace/mode/text_highlight_rules").TextHighlightRules;
+
+var LatexHighlightRules = function()
+{
+ this.$rules = {
+ "start" : [{
+ // A tex command e.g. \foo
+ token : "keyword",
+ regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)",
+ }, {
+ // Curly and square braces
+ token : "lparen",
+ regex : "[[({]"
+ }, {
+ // Curly and square braces
+ token : "rparen",
+ regex : "[\\])}]"
+ }, {
+ // Inline math between two $ symbols
+ token : "string",
+ regex : "\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"
+ }, {
+ // A comment. Tex comments start with % and go to
+ // the end of the line
+ token : "comment",
+ regex : "%.*$"
+ }]
+ };
+};
+
+oop.inherits(LatexHighlightRules, TextHighlightRules);
+
+exports.LatexHighlightRules = LatexHighlightRules;
+
+});
diff --git a/vendor/ace/theme/clouds.js b/vendor/ace/theme/clouds.js
index a1a7fda9e..9db45260b 100644
--- a/vendor/ace/theme/clouds.js
+++ b/vendor/ace/theme/clouds.js
@@ -204,6 +204,14 @@ define(function(require, exports, module) {
color:#606060;\
}\
\
+.ace-clouds .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-clouds .ace_entity.ace_name.ace_function {\
+ \
+}\
+\
.ace-clouds .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/clouds_midnight.js b/vendor/ace/theme/clouds_midnight.js
index 9b7408d72..adc8663fa 100644
--- a/vendor/ace/theme/clouds_midnight.js
+++ b/vendor/ace/theme/clouds_midnight.js
@@ -205,6 +205,14 @@ background-color:#E92E2E;\
color:#606060;\
}\
\
+.ace-clouds-midnight .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-clouds-midnight .ace_entity.ace_name.ace_function {\
+ \
+}\
+\
.ace-clouds-midnight .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/cobalt.js b/vendor/ace/theme/cobalt.js
index 2dddbd46b..c80091061 100644
--- a/vendor/ace/theme/cobalt.js
+++ b/vendor/ace/theme/cobalt.js
@@ -206,6 +206,14 @@ color:#0088FF;\
\
}\
\
+.ace-cobalt .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-cobalt .ace_entity.ace_name.ace_function {\
+ \
+}\
+\
.ace-cobalt .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/dawn.js b/vendor/ace/theme/dawn.js
index 654ac3b7c..d2fce4da1 100644
--- a/vendor/ace/theme/dawn.js
+++ b/vendor/ace/theme/dawn.js
@@ -210,6 +210,14 @@ color:#5A525F;\
\
}\
\
+.ace-dawn .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-dawn .ace_entity.ace_name.ace_function {\
+ \
+}\
+\
.ace-dawn .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/eclipse.js b/vendor/ace/theme/eclipse.js
index 0f2017e91..82836e32b 100644
--- a/vendor/ace/theme/eclipse.js
+++ b/vendor/ace/theme/eclipse.js
@@ -63,6 +63,10 @@ define(function(require, exports, module) {
padding-right: 6px;\
}\
\
+.ace-eclipse .ace_print_margin {\
+ width: 1px;\
+ background: #b1b4ba;\
+}\
.ace-eclipse .ace_text-layer {\
cursor: text;\
}\
diff --git a/vendor/ace/theme/idle_fingers.js b/vendor/ace/theme/idle_fingers.js
index 3ecc3be32..8702f16b6 100644
--- a/vendor/ace/theme/idle_fingers.js
+++ b/vendor/ace/theme/idle_fingers.js
@@ -206,6 +206,14 @@ color:#BC9458;\
\
}\
\
+.ace-idle-fingers .ace_entity.ace_name {\
+ color:#FFC66D;\
+}\
+\
+.ace-idle-fingers .ace_entity.ace_name.ace_function {\
+ \
+}\
+\
.ace-idle-fingers .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/kr_theme.js b/vendor/ace/theme/kr_theme.js
index 8a2f919de..176941ab6 100644
--- a/vendor/ace/theme/kr_theme.js
+++ b/vendor/ace/theme/kr_theme.js
@@ -206,6 +206,14 @@ color:#706D5B;\
\
}\
\
+.ace-kr-theme .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-kr-theme .ace_entity.ace_name.ace_function {\
+ \
+}\
+\
.ace-kr-theme .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/mono_industrial.js b/vendor/ace/theme/mono_industrial.js
index ca3476709..ecc5b59cb 100644
--- a/vendor/ace/theme/mono_industrial.js
+++ b/vendor/ace/theme/mono_industrial.js
@@ -206,6 +206,14 @@ background-color:#151C19;\
color:#909993;\
}\
\
+.ace-mono-industrial .ace_entity.ace_name {\
+ color:#5778B6;\
+}\
+\
+.ace-mono-industrial .ace_entity.ace_name.ace_function {\
+ color:#A8B3AB;\
+}\
+\
.ace-mono-industrial .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/monokai.js b/vendor/ace/theme/monokai.js
index 49885bce8..12ae43bdb 100644
--- a/vendor/ace/theme/monokai.js
+++ b/vendor/ace/theme/monokai.js
@@ -206,6 +206,14 @@ background-color:#AE81FF;\
color:#A6E22E;\
}\
\
+.ace-monokai .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-monokai .ace_entity.ace_name.ace_function {\
+ color:#A6E22E;\
+}\
+\
.ace-monokai .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/solarized_dark.js b/vendor/ace/theme/solarized_dark.js
index a696f1792..63b957a43 100644
--- a/vendor/ace/theme/solarized_dark.js
+++ b/vendor/ace/theme/solarized_dark.js
@@ -205,6 +205,14 @@ color:#657B83;\
color:#93A1A1;\
}\
\
+.ace-solarized-dark .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-solarized-dark .ace_entity.ace_name.ace_function {\
+ color:#268BD2;\
+}\
+\
.ace-solarized-dark .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/solarized_light.js b/vendor/ace/theme/solarized_light.js
index edc5eff13..3362d4a93 100644
--- a/vendor/ace/theme/solarized_light.js
+++ b/vendor/ace/theme/solarized_light.js
@@ -204,6 +204,14 @@ define(function(require, exports, module) {
color:#93A1A1;\
}\
\
+.ace-solarized-light .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-solarized-light .ace_entity.ace_name.ace_function {\
+ color:#268BD2;\
+}\
+\
.ace-solarized-light .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/textmate.js b/vendor/ace/theme/textmate.js
index 009e05a87..71f6f109e 100644
--- a/vendor/ace/theme/textmate.js
+++ b/vendor/ace/theme/textmate.js
@@ -156,7 +156,11 @@ define(function(require, exports, module) {
color: rgb(104, 104, 91);\
}\
\
-.ace-tm .ace_markup.ace_underline {\
+.ace-tm .ace_entity.ace_name.ace_function {\
+ color: #0000A2;\
+}\
+\
+.ace-tm .ace_markup.ace_markupine {\
text-decoration:underline;\
}\
\
diff --git a/vendor/ace/theme/twilight.js b/vendor/ace/theme/twilight.js
index 23af59bb9..9f535311b 100644
--- a/vendor/ace/theme/twilight.js
+++ b/vendor/ace/theme/twilight.js
@@ -183,9 +183,6 @@ color:#5F5A60;\
.ace-twilight .ace_variable {\
color:#7587A6;\
}\
-.ace-twilight .ace_label {\
- color:#AC885B;\
-}\
\
.ace-twilight .ace_variable.ace_language {\
\
@@ -211,6 +208,14 @@ color:#5F5A60;\
\
}\
\
+.ace-twilight .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-twilight .ace_entity.ace_name.ace_function {\
+ color:#AC885B;\
+}\
+\
.ace-twilight .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/theme/vibrant_ink.js b/vendor/ace/theme/vibrant_ink.js
index e6c7c48ad..4045dff19 100644
--- a/vendor/ace/theme/vibrant_ink.js
+++ b/vendor/ace/theme/vibrant_ink.js
@@ -207,6 +207,14 @@ define(function(require, exports, module) {
color:#99CC99;\
}\
\
+.ace-vibrant-ink .ace_entity.ace_name {\
+ \
+}\
+\
+.ace-vibrant-ink .ace_entity.ace_name.ace_function {\
+ color:#FFCC00;\
+}\
+\
.ace-vibrant-ink .ace_markup.ace_underline {\
text-decoration:underline;\
}\
diff --git a/vendor/ace/virtual_renderer.js b/vendor/ace/virtual_renderer.js
index 257d039d7..dfa0fb567 100644
--- a/vendor/ace/virtual_renderer.js
+++ b/vendor/ace/virtual_renderer.js
@@ -633,7 +633,7 @@ var VirtualRenderer = function(container, theme) {
var pos = this.$cursorLayer.getPixelPosition();
- var left = pos.left + this.$padding;
+ var left = pos.left;
var top = pos.top;
if (this.scrollTop > top) {