commit
ebbe67a01b
8 changed files with 54 additions and 31 deletions
|
|
@ -234,6 +234,8 @@
|
||||||
background-image: url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82");
|
background-image: url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center 5px;
|
background-position: center 5px;
|
||||||
|
|
||||||
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ace_fold-widget.end {
|
.ace_fold-widget.end {
|
||||||
|
|
@ -247,7 +249,6 @@
|
||||||
.ace_fold-widget:hover {
|
.ace_fold-widget:hover {
|
||||||
border: 1px solid rgba(0, 0, 0, 0.3);
|
border: 1px solid rgba(0, 0, 0, 0.3);
|
||||||
background-color: rgba(255, 255, 255, 0.2);
|
background-color: rgba(255, 255, 255, 0.2);
|
||||||
border-radius: 3px;
|
|
||||||
-moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);
|
-moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);
|
||||||
-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);
|
-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);
|
||||||
-webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);
|
-webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);
|
||||||
|
|
@ -267,3 +268,8 @@
|
||||||
box-shadow:inset 0 1px 1px rgba(255, 255, 255);
|
box-shadow:inset 0 1px 1px rgba(255, 255, 255);
|
||||||
box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
|
box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ace_fold-widget.invalid {
|
||||||
|
background-color: #FFB4B4;
|
||||||
|
border-color: #DE5555;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -715,6 +715,8 @@ function Folding() {
|
||||||
|
|
||||||
if (addSubfolds)
|
if (addSubfolds)
|
||||||
this.foldAll(range.start.row + 1, range.end.row);
|
this.foldAll(range.start.row + 1, range.end.row);
|
||||||
|
} else {
|
||||||
|
e.target.className += " invalid"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ define(function(require, exports, module) {
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var Rules = require("./coffee_highlight_rules").CoffeeHighlightRules;
|
var Rules = require("./coffee_highlight_rules").CoffeeHighlightRules;
|
||||||
var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var PythonFoldMode = require("./folding/pythonic").FoldMode;
|
||||||
var Range = require("../range").Range;
|
var Range = require("../range").Range;
|
||||||
var TextMode = require("./text").Mode;
|
var TextMode = require("./text").Mode;
|
||||||
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||||
|
|
@ -48,6 +49,7 @@ var oop = require("../lib/oop");
|
||||||
function Mode() {
|
function Mode() {
|
||||||
this.$tokenizer = new Tokenizer(new Rules().getRules());
|
this.$tokenizer = new Tokenizer(new Rules().getRules());
|
||||||
this.$outdent = new Outdent();
|
this.$outdent = new Outdent();
|
||||||
|
this.foldingRules = new PythonFoldMode("\\[|=|(=>)|(->)");
|
||||||
}
|
}
|
||||||
|
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
|
||||||
|
|
@ -55,26 +55,12 @@ oop.inherits(FoldMode, BaseFoldMode);
|
||||||
if (match) {
|
if (match) {
|
||||||
var i = match.index;
|
var i = match.index;
|
||||||
|
|
||||||
if (match[2]) {
|
if (match[1])
|
||||||
var range = session.getCommentFoldRange(row, i + match[0].length);
|
return this.openingBracketBlock(session, match[1], row, i);
|
||||||
range.end.column -= 2;
|
|
||||||
return range;
|
|
||||||
}
|
|
||||||
|
|
||||||
var start = {row: row, column: i+1};
|
var range = session.getCommentFoldRange(row, i + match[0].length);
|
||||||
var end = session.$findClosingBracket(match[1], start);
|
range.end.column -= 2;
|
||||||
if (!end)
|
return range;
|
||||||
return;
|
|
||||||
|
|
||||||
var fw = session.foldWidgets[end.row];
|
|
||||||
if (fw == null)
|
|
||||||
fw = this.getFoldWidget(session, end.row);
|
|
||||||
|
|
||||||
if (fw == "start") {
|
|
||||||
end.row --;
|
|
||||||
end.column = session.getLine(end.row).length;
|
|
||||||
}
|
|
||||||
return Range.fromPoints(start, end);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (foldStyle !== "markbeginend")
|
if (foldStyle !== "markbeginend")
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,6 @@ var FoldMode = exports.FoldMode = function() {};
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.FOO = 12;
|
|
||||||
|
|
||||||
this.foldingStartMarker = null;
|
this.foldingStartMarker = null;
|
||||||
this.foldingStopMarker = null;
|
this.foldingStopMarker = null;
|
||||||
|
|
||||||
|
|
@ -70,15 +68,17 @@ var FoldMode = exports.FoldMode = function() {};
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.indentationBlock = function(session, foldStyle, row) {
|
this.indentationBlock = function(session, row) {
|
||||||
var re = /^\s*/;
|
var re = /^\s*/;
|
||||||
var startRow = row;
|
var startRow = row;
|
||||||
var endRow = row;
|
var endRow = row;
|
||||||
var line = session.getLine(row);
|
var line = session.getLine(row);
|
||||||
var startColumn = line.length - 1;
|
var startColumn = line.length - 1;
|
||||||
var startLevel = line.match(re)[0].length;
|
var startLevel = line.match(re)[0].length;
|
||||||
|
var maxRow = session.getLength()
|
||||||
|
|
||||||
while (line = session.getLine(++row)) {
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
var level = line.match(re)[0].length;
|
var level = line.match(re)[0].length;
|
||||||
|
|
||||||
if (level == line.length)
|
if (level == line.length)
|
||||||
|
|
@ -96,6 +96,23 @@ var FoldMode = exports.FoldMode = function() {};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.openingBracketBlock = function(session, bracket, row, column) {
|
||||||
|
var start = {row: row, column: column + 1};
|
||||||
|
var end = session.$findClosingBracket(bracket, start);
|
||||||
|
if (!end)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var fw = session.foldWidgets[end.row];
|
||||||
|
if (fw == null)
|
||||||
|
fw = this.getFoldWidget(session, end.row);
|
||||||
|
|
||||||
|
if (fw == "start") {
|
||||||
|
end.row --;
|
||||||
|
end.column = session.getLine(end.row).length;
|
||||||
|
}
|
||||||
|
return Range.fromPoints(start, end);
|
||||||
|
};
|
||||||
|
|
||||||
this.$testStart = function(session, foldStyle, row) {
|
this.$testStart = function(session, foldStyle, row) {
|
||||||
if (this.foldingStartMarker.test(session.getLine(row)))
|
if (this.foldingStartMarker.test(session.getLine(row)))
|
||||||
return "start";
|
return "start";
|
||||||
|
|
|
||||||
|
|
@ -40,13 +40,23 @@ define(function(require, exports, module) {
|
||||||
var oop = require("../../lib/oop");
|
var oop = require("../../lib/oop");
|
||||||
var BaseFoldMode = require("./fold_mode").FoldMode;
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
|
||||||
var FoldMode = exports.FoldMode = function() {};
|
var FoldMode = exports.FoldMode = function(markers) {
|
||||||
|
this.foldingStartMarker = new RegExp("(?:(\\[)|" + markers + ")(?:\\s*)(?:#.*)?$");
|
||||||
|
};
|
||||||
oop.inherits(FoldMode, BaseFoldMode);
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingStartMarker = /\:(:?\s*)?(:?#.*)?$/;
|
this.getFoldWidgetRange = function(session, foldStyle, row) {
|
||||||
this.getFoldWidgetRange = BaseFoldMode.prototype.indentationBlock;
|
var line = session.getLine(row);
|
||||||
|
var match = line.match(this.foldingStartMarker);
|
||||||
|
if (match) {
|
||||||
|
if (match[1])
|
||||||
|
return this.openingBracketBlock(session, match[1], row, match.index);
|
||||||
|
|
||||||
|
return this.indentationBlock(session, row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}).call(FoldMode.prototype);
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
|
@ -42,12 +42,12 @@ var oop = require("../lib/oop");
|
||||||
var TextMode = require("./text").Mode;
|
var TextMode = require("./text").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules;
|
var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules;
|
||||||
var PythonFoldMode = require("./folding/python").FoldMode;
|
var PythonFoldMode = require("./folding/pythonic").FoldMode;
|
||||||
var Range = require("../range").Range;
|
var Range = require("../range").Range;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new PythonHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new PythonHighlightRules().getRules());
|
||||||
this.foldingRules = new PythonFoldMode();
|
this.foldingRules = new PythonFoldMode("\\:");
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,7 @@ var VirtualRenderer = function(container, theme) {
|
||||||
var pageY = event.getDocumentY(e);
|
var pageY = event.getDocumentY(e);
|
||||||
var row = this.screenToTextCoordinates(0, pageY).row;
|
var row = this.screenToTextCoordinates(0, pageY).row;
|
||||||
|
|
||||||
if (e.target.className.indexOf('ace_fold-widget') != -1)
|
if (e.type == "click" && e.target.className.indexOf('ace_fold-widget') != -1)
|
||||||
return this.session.onFoldWidgetClick(row, e);
|
return this.session.onFoldWidgetClick(row, e);
|
||||||
|
|
||||||
this._dispatchEvent("gutter" + e.type, {
|
this._dispatchEvent("gutter" + e.type, {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue