split mode specific code for structured folding
into separate files
This commit is contained in:
parent
d2eeb44016
commit
bbcb00acc4
27 changed files with 567 additions and 452 deletions
|
|
@ -515,7 +515,8 @@ var EditSession = function(text, mode) {
|
||||||
this.tokenRe = mode.tokenRe;
|
this.tokenRe = mode.tokenRe;
|
||||||
this.nonTokenRe = mode.nonTokenRe;
|
this.nonTokenRe = mode.nonTokenRe;
|
||||||
|
|
||||||
this.$setFolding(mode);
|
if (mode.foldingRules)
|
||||||
|
this.$setFolding(mode.foldingRules);
|
||||||
|
|
||||||
this._dispatchEvent("changeMode");
|
this._dispatchEvent("changeMode");
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ function Folding() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return foundFolds;
|
return foundFolds;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the string between folds at the given position.
|
* Returns the string between folds at the given position.
|
||||||
|
|
@ -132,7 +132,7 @@ function Folding() {
|
||||||
* fo|o<fold>bar<fold>wolrd -trim=00> "foo"
|
* fo|o<fold>bar<fold>wolrd -trim=00> "foo"
|
||||||
*/
|
*/
|
||||||
this.getFoldStringAt = function(row, column, trim, foldLine) {
|
this.getFoldStringAt = function(row, column, trim, foldLine) {
|
||||||
var foldLine = foldLine || this.getFoldLine(row);
|
foldLine = foldLine || this.getFoldLine(row);
|
||||||
if (!foldLine)
|
if (!foldLine)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
|
@ -140,16 +140,17 @@ function Folding() {
|
||||||
end: { column: 0 }
|
end: { column: 0 }
|
||||||
};
|
};
|
||||||
// TODO: Refactor to use getNextFoldTo function.
|
// TODO: Refactor to use getNextFoldTo function.
|
||||||
|
var str, fold;
|
||||||
for (var i = 0; i < foldLine.folds.length; i++) {
|
for (var i = 0; i < foldLine.folds.length; i++) {
|
||||||
var fold = foldLine.folds[i];
|
fold = foldLine.folds[i];
|
||||||
var cmp = fold.range.compareEnd(row, column);
|
var cmp = fold.range.compareEnd(row, column);
|
||||||
if (cmp == -1) {
|
if (cmp == -1) {
|
||||||
var str = this
|
str = this
|
||||||
.getLine(fold.start.row)
|
.getLine(fold.start.row)
|
||||||
.substring(lastFold.end.column, fold.start.column);
|
.substring(lastFold.end.column, fold.start.column);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (cmp == 0) {
|
else if (cmp === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
lastFold = fold;
|
lastFold = fold;
|
||||||
|
|
@ -160,10 +161,10 @@ function Folding() {
|
||||||
if (trim == -1)
|
if (trim == -1)
|
||||||
return str.substring(0, column - lastFold.end.column);
|
return str.substring(0, column - lastFold.end.column);
|
||||||
else if (trim == 1)
|
else if (trim == 1)
|
||||||
return str.substring(column - lastFold.end.column)
|
return str.substring(column - lastFold.end.column);
|
||||||
else
|
else
|
||||||
return str;
|
return str;
|
||||||
}
|
};
|
||||||
|
|
||||||
this.getFoldLine = function(docRow, startFoldLine) {
|
this.getFoldLine = function(docRow, startFoldLine) {
|
||||||
var foldData = this.$foldData;
|
var foldData = this.$foldData;
|
||||||
|
|
@ -181,11 +182,11 @@ function Folding() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
};
|
||||||
|
|
||||||
// returns the fold which starts after or contains docRow
|
// returns the fold which starts after or contains docRow
|
||||||
this.getNextFoldLine = function(docRow, startFoldLine) {
|
this.getNextFoldLine = function(docRow, startFoldLine) {
|
||||||
var foldData = this.$foldData, ans;
|
var foldData = this.$foldData;
|
||||||
var i = 0;
|
var i = 0;
|
||||||
if (startFoldLine)
|
if (startFoldLine)
|
||||||
i = foldData.indexOf(startFoldLine);
|
i = foldData.indexOf(startFoldLine);
|
||||||
|
|
@ -198,7 +199,7 @@ function Folding() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
};
|
||||||
|
|
||||||
this.getFoldedRowCount = function(first, last) {
|
this.getFoldedRowCount = function(first, last) {
|
||||||
var foldData = this.$foldData, rowCount = last-first+1;
|
var foldData = this.$foldData, rowCount = last-first+1;
|
||||||
|
|
@ -222,7 +223,7 @@ function Folding() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rowCount;
|
return rowCount;
|
||||||
}
|
};
|
||||||
|
|
||||||
this.$addFoldLine = function(foldLine) {
|
this.$addFoldLine = function(foldLine) {
|
||||||
this.$foldData.push(foldLine);
|
this.$foldData.push(foldLine);
|
||||||
|
|
@ -230,7 +231,7 @@ function Folding() {
|
||||||
return a.start.row - b.start.row;
|
return a.start.row - b.start.row;
|
||||||
});
|
});
|
||||||
return foldLine;
|
return foldLine;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a new fold.
|
* Adds a new fold.
|
||||||
|
|
@ -242,9 +243,10 @@ function Folding() {
|
||||||
this.addFold = function(placeholder, range) {
|
this.addFold = function(placeholder, range) {
|
||||||
var foldData = this.$foldData;
|
var foldData = this.$foldData;
|
||||||
var added = false;
|
var added = false;
|
||||||
|
var fold;
|
||||||
|
|
||||||
if (placeholder instanceof Fold)
|
if (placeholder instanceof Fold)
|
||||||
var fold = placeholder;
|
fold = placeholder;
|
||||||
else
|
else
|
||||||
fold = new Fold(range, placeholder);
|
fold = new Fold(range, placeholder);
|
||||||
|
|
||||||
|
|
@ -295,7 +297,7 @@ function Folding() {
|
||||||
added = true;
|
added = true;
|
||||||
if (!fold.sameRow) {
|
if (!fold.sameRow) {
|
||||||
// Check if we might have to merge two FoldLines.
|
// Check if we might have to merge two FoldLines.
|
||||||
foldLineNext = foldData[i + 1];
|
var foldLineNext = foldData[i + 1];
|
||||||
if (foldLineNext && foldLineNext.start.row == endRow) {
|
if (foldLineNext && foldLineNext.start.row == endRow) {
|
||||||
// We need to merge!
|
// We need to merge!
|
||||||
foldLine.merge(foldLineNext);
|
foldLine.merge(foldLineNext);
|
||||||
|
|
@ -376,7 +378,7 @@ function Folding() {
|
||||||
// Notify that fold data has changed.
|
// Notify that fold data has changed.
|
||||||
this.$modified = true;
|
this.$modified = true;
|
||||||
this._dispatchEvent("changeFold", { data: fold });
|
this._dispatchEvent("changeFold", { data: fold });
|
||||||
}
|
};
|
||||||
|
|
||||||
this.removeFolds = function(folds) {
|
this.removeFolds = function(folds) {
|
||||||
// We need to clone the folds array passed in as it might be the folds
|
// We need to clone the folds array passed in as it might be the folds
|
||||||
|
|
@ -549,7 +551,7 @@ function Folding() {
|
||||||
|
|
||||||
if (fold && fold.range.toString() == range.toString()){
|
if (fold && fold.range.toString() == range.toString()){
|
||||||
this.expandFold(fold);
|
this.expandFold(fold);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var placeholder = "...";
|
var placeholder = "...";
|
||||||
|
|
@ -557,7 +559,7 @@ function Folding() {
|
||||||
placeholder = this.getTextRange(range);
|
placeholder = this.getTextRange(range);
|
||||||
if(placeholder.length < 4)
|
if(placeholder.length < 4)
|
||||||
return;
|
return;
|
||||||
placeholder = placeholder.trim().substring(0, 2) + ".."
|
placeholder = placeholder.trim().substring(0, 2) + "..";
|
||||||
}
|
}
|
||||||
|
|
||||||
this.addFold(placeholder, range);
|
this.addFold(placeholder, range);
|
||||||
|
|
@ -571,7 +573,7 @@ function Folding() {
|
||||||
var t;
|
var t;
|
||||||
do {
|
do {
|
||||||
t = iterator.stepBackward();
|
t = iterator.stepBackward();
|
||||||
} while(t && t.type == token.type)
|
} while(t && t.type == token.type);
|
||||||
|
|
||||||
iterator.stepForward();
|
iterator.stepForward();
|
||||||
range.start.row = iterator.getCurrentTokenRow();
|
range.start.row = iterator.getCurrentTokenRow();
|
||||||
|
|
@ -581,73 +583,60 @@ function Folding() {
|
||||||
|
|
||||||
do {
|
do {
|
||||||
t = iterator.stepForward();
|
t = iterator.stepForward();
|
||||||
} while(t && t.type == token.type)
|
} while(t && t.type == token.type);
|
||||||
t = iterator.stepBackward();
|
t = iterator.stepBackward();
|
||||||
|
|
||||||
range.end.row = iterator.getCurrentTokenRow();
|
range.end.row = iterator.getCurrentTokenRow();
|
||||||
range.end.column = iterator.getCurrentTokenColumn() + t.value.length - 1;
|
range.end.column = iterator.getCurrentTokenColumn() + t.value.length - 1;
|
||||||
return range
|
return range;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.foldAll = function() {
|
this.foldAll = function() {
|
||||||
var foldWidgets = this.foldWidgets
|
var foldWidgets = this.foldWidgets;
|
||||||
for (var row = foldWidgets.length; row--; ) {
|
for (var row = foldWidgets.length; row--; ) {
|
||||||
if (foldWidgets[row] == null)
|
if (foldWidgets[row] == null)
|
||||||
foldWidgets[row] = this.getFoldWidget(row)
|
foldWidgets[row] = this.getFoldWidget(row);
|
||||||
if (foldWidgets[row] != "start")
|
if (foldWidgets[row] != "start")
|
||||||
continue
|
continue;
|
||||||
|
|
||||||
var range = this.getFoldWidgetRange(row);
|
var range = this.getFoldWidgetRange(row);
|
||||||
if (range)
|
if (range)
|
||||||
this.addFold("...", range)
|
this.addFold("...", range);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// structured folding
|
// structured folding
|
||||||
this.$setFolding = function(mode) {
|
this.$setFolding = function(foldMode) {
|
||||||
mode = mode && mode.foldingRules;
|
|
||||||
var foldRules = Folding.commonFoldingRules
|
if (this.$foldMode == foldMode)
|
||||||
if (typeof mode == "string")
|
return;
|
||||||
mode = foldRules[mode];
|
this.$foldMode = foldMode;
|
||||||
|
|
||||||
if (mode) {
|
this.removeListener('change', this.$updateFoldWidgets);
|
||||||
this.foldWidgets = [];
|
|
||||||
this.removeListener('change', this.$updateFoldWidgets);
|
if (!foldMode) {
|
||||||
|
|
||||||
if (mode.getFoldWidget)
|
|
||||||
this.getFoldWidget = mode.getFoldWidget;
|
|
||||||
else if (mode.foldingStopMarker)
|
|
||||||
this.getFoldWidget = foldRules.$testBoth;
|
|
||||||
else
|
|
||||||
this.getFoldWidget = foldRules.$testStart;
|
|
||||||
|
|
||||||
this.foldingStopMarker = mode.foldingStopMarker;
|
|
||||||
this.foldingStartMarker = mode.foldingStartMarker;
|
|
||||||
|
|
||||||
if (typeof mode.getFoldWidgetRange == "string")
|
|
||||||
this.getFoldWidgetRange = foldRules[mode.getFoldWidgetRange];
|
|
||||||
else
|
|
||||||
this.getFoldWidgetRange = mode.getFoldWidgetRange;
|
|
||||||
|
|
||||||
|
|
||||||
this.$updateFoldWidgets = (mode.onChange || foldRules.onChange).bind(this);
|
|
||||||
|
|
||||||
this.on('change', this.$updateFoldWidgets);
|
|
||||||
} else {
|
|
||||||
this.foldWidgets = null;
|
this.foldWidgets = null;
|
||||||
this.removeListener('change', this.$updateFoldWidgets);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.foldWidgets = [];
|
||||||
|
this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this);
|
||||||
|
this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this);
|
||||||
|
|
||||||
|
this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);
|
||||||
|
this.on('change', this.$updateFoldWidgets);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.onFoldWidgetClick = function(row, htmlEvent) {
|
this.onFoldWidgetClick = function(row, htmlEvent) {
|
||||||
var type = this.getFoldWidget(row);
|
var type = this.getFoldWidget(row);
|
||||||
var line = this.getLine(row);
|
var line = this.getLine(row);
|
||||||
|
var fold;
|
||||||
|
|
||||||
if (type == "end")
|
if (type == "end")
|
||||||
var fold = this.getFoldAt(row, 0, -1);
|
fold = this.getFoldAt(row, 0, -1);
|
||||||
else
|
else
|
||||||
var fold = this.getFoldAt(row, line.length, 1);
|
fold = this.getFoldAt(row, line.length, 1);
|
||||||
|
|
||||||
if (fold) {
|
if (fold) {
|
||||||
this.expandFold(fold);
|
this.expandFold(fold);
|
||||||
|
|
@ -657,260 +646,25 @@ function Folding() {
|
||||||
var range = this.getFoldWidgetRange(row);
|
var range = this.getFoldWidgetRange(row);
|
||||||
if (range)
|
if (range)
|
||||||
this.addFold("...", range);
|
this.addFold("...", range);
|
||||||
}
|
};
|
||||||
}
|
|
||||||
|
this.updateFoldWidgets = function(e) {
|
||||||
Folding.commonFoldingRules = {
|
|
||||||
$testStart: function(row) {
|
|
||||||
if(this.foldingStartMarker.test(this.getLine(row)))
|
|
||||||
return "start";
|
|
||||||
return "";
|
|
||||||
},
|
|
||||||
$testBoth: function(row) {
|
|
||||||
var line = this.getLine(row);
|
|
||||||
if(this.foldingStartMarker.test(line))
|
|
||||||
return "start";
|
|
||||||
if(this.foldingStopMarker.test(line))
|
|
||||||
return "end";
|
|
||||||
return "";
|
|
||||||
},
|
|
||||||
onChange: function(e) {
|
|
||||||
var delta = e.data;
|
var delta = e.data;
|
||||||
var range = delta.range;
|
var range = delta.range;
|
||||||
var firstRow = range.start.row;
|
var firstRow = range.start.row;
|
||||||
var len = range.end.row - firstRow;
|
var len = range.end.row - firstRow;
|
||||||
|
|
||||||
if (len == 0) {
|
if (len === 0) {
|
||||||
this.foldWidgets[firstRow] = null;
|
this.foldWidgets[firstRow] = null;
|
||||||
} else if (delta.action == "removeText" || delta.action == "removeLines") {
|
} else if (delta.action == "removeText" || delta.action == "removeLines") {
|
||||||
this.foldWidgets.splice(firstRow, len + 1, null);
|
this.foldWidgets.splice(firstRow, len + 1, null);
|
||||||
} else {
|
} else {
|
||||||
var args = Array(len + 1);
|
var args = Array(len + 1);
|
||||||
args.unshift(firstRow, 1)
|
args.unshift(firstRow, 1);
|
||||||
this.foldWidgets.splice.apply(this.foldWidgets, args);
|
this.foldWidgets.splice.apply(this.foldWidgets, args);
|
||||||
}
|
}
|
||||||
},
|
};
|
||||||
|
|
||||||
indentationBlock: function(row) {
|
|
||||||
var re = /^\s*/;
|
|
||||||
var startRow = row, endRow = row;
|
|
||||||
var line = this.getLine(row);
|
|
||||||
var startColumn = line.length - 1;
|
|
||||||
var startLevel = line.match(re)[0].length;
|
|
||||||
|
|
||||||
while (line = this.getLine(++row)) {
|
|
||||||
var level = line.match(re)[0].length;
|
|
||||||
|
|
||||||
if (level == line.length)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (level <= startLevel)
|
|
||||||
break;
|
|
||||||
|
|
||||||
endRow = row;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (endRow > startRow) {
|
|
||||||
var endColumn = this.getLine(endRow).length;
|
|
||||||
return new Range(startRow, startColumn, endRow, endColumn);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"cStyle": {
|
|
||||||
foldingStartMarker : /(\{|\[)[^\}\]]*$|^\s*(\/\*)/,
|
|
||||||
foldingStopMarker : /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,
|
|
||||||
getFoldWidgetRange: function(row) {
|
|
||||||
var line = this.getLine(row);
|
|
||||||
var match = line.match(this.foldingStartMarker);
|
|
||||||
if (match) {
|
|
||||||
var i = match.index;
|
|
||||||
|
|
||||||
if (match[2])
|
|
||||||
return this.getCommentFoldRange(row, i + match[0].length);
|
|
||||||
|
|
||||||
var start = {row: row, column: i+1};
|
|
||||||
var end = this.$findClosingBracket(match[1], start);
|
|
||||||
if (end) {
|
|
||||||
var fw = this.foldWidgets[end.row];
|
|
||||||
if (fw == null)
|
|
||||||
fw = this.getFoldWidget(end.row);
|
|
||||||
|
|
||||||
if (fw == "start"){
|
|
||||||
end.row --;
|
|
||||||
end.column = this.getLine(end.row).length;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
end = {row: this.getLength(), column: 0};
|
|
||||||
}
|
|
||||||
|
|
||||||
return Range.fromPoints(start, end);
|
|
||||||
}
|
|
||||||
|
|
||||||
var match = line.match(this.foldingStopMarker);
|
|
||||||
if (match) {
|
|
||||||
var i = match.index + match[0].length;
|
|
||||||
|
|
||||||
if (match[2])
|
|
||||||
return this.getCommentFoldRange(row, i);
|
|
||||||
|
|
||||||
var end = {row: row, column: i};
|
|
||||||
var start = this.$findOpeningBracket(match[1], end)
|
|
||||||
if (start){
|
|
||||||
start.column++;
|
|
||||||
end.column--;
|
|
||||||
} else {
|
|
||||||
start = {row: 0, column: this.getLine(0).length}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Range.fromPoints(start, end);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// TODO: folding based only on indentation
|
|
||||||
"indentation": null,
|
|
||||||
|
|
||||||
"xml": {
|
|
||||||
|
|
||||||
voidElements: {
|
|
||||||
"area": 1,
|
|
||||||
"base": 1,
|
|
||||||
"br": 1,
|
|
||||||
"col": 1,
|
|
||||||
"command": 1,
|
|
||||||
"embed": 1,
|
|
||||||
"hr": 1,
|
|
||||||
"img": 1,
|
|
||||||
"input": 1,
|
|
||||||
"keygen": 1,
|
|
||||||
"link": 1,
|
|
||||||
"meta": 1,
|
|
||||||
"param": 1,
|
|
||||||
"source": 1,
|
|
||||||
"track": 1,
|
|
||||||
"wbr": 1
|
|
||||||
},
|
|
||||||
|
|
||||||
getFoldWidget: function(row) {
|
|
||||||
var tags = this.getTokens(row, row)[0].tokens
|
|
||||||
.filter(function(token) {
|
|
||||||
return token.type === "meta.tag"
|
|
||||||
})
|
|
||||||
.map(function(token) {
|
|
||||||
return token.value;
|
|
||||||
}).
|
|
||||||
join("")
|
|
||||||
.trim()
|
|
||||||
.replace(/^<|>$|\s+/g, "")
|
|
||||||
.split("><")
|
|
||||||
|
|
||||||
var fold = tags[0];
|
|
||||||
|
|
||||||
if (!fold || Folding.commonFoldingRules.xml.voidElements[fold])
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (fold.charAt(0) == "/")
|
|
||||||
return "end";
|
|
||||||
|
|
||||||
if (tags.indexOf("/" + fold) !== -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
return "start";
|
|
||||||
},
|
|
||||||
|
|
||||||
getFoldWidgetRange: function(row) {
|
|
||||||
var start, end;
|
|
||||||
var stack = [];
|
|
||||||
|
|
||||||
var iterator = new TokenIterator(this, row, 0);
|
|
||||||
var step = "stepForward";
|
|
||||||
var isBack = false;
|
|
||||||
|
|
||||||
// http://dev.w3.org/html5/spec/syntax.html#optional-tags
|
|
||||||
// TODO
|
|
||||||
// var optionalTags = {
|
|
||||||
// "html": 1,
|
|
||||||
// "head": 1,
|
|
||||||
// "body": 1,
|
|
||||||
// "li": 1,
|
|
||||||
// "dt": 1,
|
|
||||||
// "dd": 1,
|
|
||||||
// "p": 1,
|
|
||||||
// "rt": 1,
|
|
||||||
// "rp": 1,
|
|
||||||
// "optgroup": 1,
|
|
||||||
// "option": 1,
|
|
||||||
// "colgroup": 1,
|
|
||||||
// "thead": 1,
|
|
||||||
// "tbody": 1,
|
|
||||||
// "tfoot": 1,
|
|
||||||
// "tr": 1,
|
|
||||||
// "td": 1,
|
|
||||||
// "th": 1
|
|
||||||
// };
|
|
||||||
|
|
||||||
// limited XML parsing to find matching tag
|
|
||||||
do {
|
|
||||||
var token = iterator.getCurrentToken();
|
|
||||||
|
|
||||||
var value = token.value.trim();
|
|
||||||
if (token && token.type == "meta.tag" && token.value !== ">") {
|
|
||||||
var tagName = value.replace(/^[<\s]*|[\s*>]$/g, "");
|
|
||||||
if (Folding.commonFoldingRules.xml.voidElements[tagName])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!start) {
|
|
||||||
if (tagName.charAt(0) == "/") {
|
|
||||||
tagName = tagName.slice(1);
|
|
||||||
step = "stepBackward";
|
|
||||||
isBack = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
start = {
|
|
||||||
row: row,
|
|
||||||
column: iterator.getCurrentTokenColumn() + (isBack ? 0 : value.length + 1)
|
|
||||||
};
|
|
||||||
|
|
||||||
// console.log("push", tagName)
|
|
||||||
stack.push(tagName);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (tagName.charAt(0) == "/") {
|
|
||||||
tagName = tagName.slice(1);
|
|
||||||
var close = !isBack;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
close = isBack;
|
|
||||||
|
|
||||||
if (close) {
|
|
||||||
if (stack[stack.length-1] == tagName) {
|
|
||||||
// console.log("pop", tagName)
|
|
||||||
stack.pop();
|
|
||||||
if (stack.length == 0) {
|
|
||||||
end = {
|
|
||||||
row: iterator.getCurrentTokenRow(),
|
|
||||||
column: iterator.getCurrentTokenColumn() + (isBack ? value.length : 0)
|
|
||||||
};
|
|
||||||
if (isBack)
|
|
||||||
return Range.fromPoints(end, start);
|
|
||||||
else
|
|
||||||
return Range.fromPoints(start, end);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// console.error("unmatched tags!", tagName, stack)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// console.log("push", tagName)
|
|
||||||
stack.push(tagName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} while(token = iterator[step]());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.Folding = Folding;
|
exports.Folding = Folding;
|
||||||
|
|
|
||||||
|
|
@ -45,21 +45,20 @@ var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var Range = require("../range").Range;
|
var Range = require("../range").Range;
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new c_cppHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new c_cppHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
this.$behaviour = new CstyleBehaviour();
|
this.$behaviour = new CstyleBehaviour();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||||
var outdent = true;
|
var outdent = true;
|
||||||
var outentedRows = [];
|
|
||||||
var re = /^(\s*)\/\//;
|
var re = /^(\s*)\/\//;
|
||||||
|
|
||||||
for (var i=startRow; i<= endRow; i++) {
|
for (var i=startRow; i<= endRow; i++) {
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,6 @@ oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||||
var outdent = true;
|
var outdent = true;
|
||||||
var outentedRows = [];
|
|
||||||
var re = /^(\s*)#/;
|
var re = /^(\s*)#/;
|
||||||
|
|
||||||
for (var i=startRow; i<= endRow; i++) {
|
for (var i=startRow; i<= endRow; i++) {
|
||||||
|
|
@ -85,11 +84,9 @@ oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
var indent = this.$getIndent(line);
|
var indent = this.$getIndent(line);
|
||||||
var startingIndent = indent;
|
|
||||||
|
|
||||||
var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
|
var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
|
||||||
var tokens = tokenizedLine.tokens;
|
var tokens = tokenizedLine.tokens;
|
||||||
var endState = tokenizedLine.state;
|
|
||||||
|
|
||||||
if (tokens.length && tokens[tokens.length-1].type == "comment") {
|
if (tokens.length && tokens[tokens.length-1].type == "comment") {
|
||||||
return indent;
|
return indent;
|
||||||
|
|
|
||||||
|
|
@ -38,17 +38,17 @@
|
||||||
define(function(require, exports, module) {
|
define(function(require, exports, module) {
|
||||||
|
|
||||||
var oop = require("../lib/oop");
|
var oop = require("../lib/oop");
|
||||||
var TextMode = require("./text").Mode;
|
var XmlMode = require("./xml").Mode;
|
||||||
var JavaScriptMode = require("./javascript").Mode;
|
var JavaScriptMode = require("./javascript").Mode;
|
||||||
var CssMode = require("./css").Mode;
|
var CssMode = require("./css").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var ColdfusionHighlightRules = require("./coldfusion_highlight_rules").ColdfusionHighlightRules;
|
var ColdfusionHighlightRules = require("./coldfusion_highlight_rules").ColdfusionHighlightRules;
|
||||||
var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
|
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
|
XmlMode.call(this);
|
||||||
|
|
||||||
var highlighter = new ColdfusionHighlightRules();
|
var highlighter = new ColdfusionHighlightRules();
|
||||||
this.$tokenizer = new Tokenizer(highlighter.getRules());
|
this.$tokenizer = new Tokenizer(highlighter.getRules());
|
||||||
this.$behaviour = new XmlBehaviour();
|
|
||||||
|
|
||||||
this.$embeds = highlighter.getEmbeds();
|
this.$embeds = highlighter.getEmbeds();
|
||||||
this.createModeDelegates({
|
this.createModeDelegates({
|
||||||
|
|
@ -56,24 +56,14 @@ var Mode = function() {
|
||||||
"css-": CssMode
|
"css-": CssMode
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, XmlMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "xml";
|
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
return this.$getIndent(line);
|
return this.$getIndent(line);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.checkOutdent = function(state, line, input) {
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
}).call(Mode.prototype);
|
}).call(Mode.prototype);
|
||||||
|
|
||||||
exports.Mode = Mode;
|
exports.Mode = Mode;
|
||||||
|
|
|
||||||
|
|
@ -41,76 +41,12 @@ var oop = require("../lib/oop");
|
||||||
var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
|
var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
|
||||||
var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
|
var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
|
||||||
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var xml_util = require("./xml_util");
|
||||||
|
|
||||||
var ColdfusionHighlightRules = function() {
|
var ColdfusionHighlightRules = function() {
|
||||||
|
|
||||||
// regexp must not have capturing parentheses
|
// regexp must not have capturing parentheses
|
||||||
// regexps are ordered -> the first match is used
|
// regexps are ordered -> the first match is used
|
||||||
function string(state) {
|
|
||||||
return [{
|
|
||||||
token : "string",
|
|
||||||
regex : '".*?"'
|
|
||||||
}, {
|
|
||||||
token : "string", // multi line string start
|
|
||||||
merge : true,
|
|
||||||
regex : '["].*$',
|
|
||||||
next : state + "-qqstring"
|
|
||||||
}, {
|
|
||||||
token : "string",
|
|
||||||
regex : "'.*?'"
|
|
||||||
}, {
|
|
||||||
token : "string", // multi line string start
|
|
||||||
merge : true,
|
|
||||||
regex : "['].*$",
|
|
||||||
next : state + "-qstring"
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
|
|
||||||
function multiLineString(quote, state) {
|
|
||||||
return [{
|
|
||||||
token : "string",
|
|
||||||
merge : true,
|
|
||||||
regex : ".*" + quote,
|
|
||||||
next : state
|
|
||||||
}, {
|
|
||||||
token : "string",
|
|
||||||
merge : true,
|
|
||||||
regex : '.+'
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
|
|
||||||
function tag(states, name, nextState) {
|
|
||||||
states[name] = [{
|
|
||||||
token : "text",
|
|
||||||
regex : "\\s+"
|
|
||||||
}, {
|
|
||||||
token : "meta.tag",
|
|
||||||
regex : "[-_a-zA-Z0-9:]+",
|
|
||||||
next : name + "-attribute-list"
|
|
||||||
}, {
|
|
||||||
token: "empty",
|
|
||||||
regex: "",
|
|
||||||
next : name + "-attribute-list"
|
|
||||||
}];
|
|
||||||
|
|
||||||
states[name + "-qstring"] = multiLineString("'", name);
|
|
||||||
states[name + "-qqstring"] = multiLineString("\"", name);
|
|
||||||
|
|
||||||
states[name + "-attribute-list"] = [{
|
|
||||||
token : "text",
|
|
||||||
regex : ">",
|
|
||||||
next : nextState
|
|
||||||
}, {
|
|
||||||
token : "entity.other.attribute-name",
|
|
||||||
regex : "[-_a-zA-Z0-9:]+"
|
|
||||||
}, {
|
|
||||||
token : "constant.numeric", // float
|
|
||||||
regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
|
||||||
}, {
|
|
||||||
token : "text",
|
|
||||||
regex : "\\s+"
|
|
||||||
}].concat(string(name));
|
|
||||||
};
|
|
||||||
|
|
||||||
this.$rules = {
|
this.$rules = {
|
||||||
start : [ {
|
start : [ {
|
||||||
|
|
@ -127,15 +63,15 @@ var ColdfusionHighlightRules = function() {
|
||||||
regex : "<\\!--",
|
regex : "<\\!--",
|
||||||
next : "comment"
|
next : "comment"
|
||||||
}, {
|
}, {
|
||||||
token : "text",
|
token : "meta.tag",
|
||||||
regex : "<(?=\s*script)",
|
regex : "<(?=\s*script)",
|
||||||
next : "script"
|
next : "script"
|
||||||
}, {
|
}, {
|
||||||
token : "text",
|
token : "meta.tag",
|
||||||
regex : "<(?=\s*style)",
|
regex : "<(?=\s*style)",
|
||||||
next : "css"
|
next : "css"
|
||||||
}, {
|
}, {
|
||||||
token : "text", // opening tag
|
token : "meta.tag", // opening tag
|
||||||
regex : "<\\/?",
|
regex : "<\\/?",
|
||||||
next : "tag"
|
next : "tag"
|
||||||
}, {
|
}, {
|
||||||
|
|
@ -171,22 +107,22 @@ var ColdfusionHighlightRules = function() {
|
||||||
} ]
|
} ]
|
||||||
};
|
};
|
||||||
|
|
||||||
tag(this.$rules, "tag", "start");
|
xml_util.tag(this.$rules, "tag", "start");
|
||||||
tag(this.$rules, "css", "css-start");
|
xml_util.tag(this.$rules, "css", "css-start");
|
||||||
tag(this.$rules, "script", "js-start");
|
xml_util.tag(this.$rules, "script", "js-start");
|
||||||
|
|
||||||
this.embedRules(JavaScriptHighlightRules, "js-", [{
|
this.embedRules(JavaScriptHighlightRules, "js-", [{
|
||||||
token: "comment",
|
token: "comment",
|
||||||
regex: "\\/\\/.*(?=<\\/script>)",
|
regex: "\\/\\/.*(?=<\\/script>)",
|
||||||
next: "tag"
|
next: "tag"
|
||||||
}, {
|
}, {
|
||||||
token: "text",
|
token: "meta.tag",
|
||||||
regex: "<\\/(?=script)",
|
regex: "<\\/(?=script)",
|
||||||
next: "tag"
|
next: "tag"
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
this.embedRules(CssHighlightRules, "css-", [{
|
this.embedRules(CssHighlightRules, "css-", [{
|
||||||
token: "text",
|
token: "meta.tag",
|
||||||
regex: "<\\/(?=style)",
|
regex: "<\\/(?=style)",
|
||||||
next: "tag"
|
next: "tag"
|
||||||
}]);
|
}]);
|
||||||
|
|
|
||||||
|
|
@ -6,24 +6,23 @@ var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var CSharpHighlightRules = require("./csharp_highlight_rules").CSharpHighlightRules;
|
var CSharpHighlightRules = require("./csharp_highlight_rules").CSharpHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new CSharpHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new CSharpHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
this.$behaviour = new CstyleBehaviour();
|
this.$behaviour = new CstyleBehaviour();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
var indent = this.$getIndent(line);
|
var indent = this.$getIndent(line);
|
||||||
|
|
||||||
var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
|
var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
|
||||||
var tokens = tokenizedLine.tokens;
|
var tokens = tokenizedLine.tokens;
|
||||||
var endState = tokenizedLine.state;
|
|
||||||
|
|
||||||
if (tokens.length && tokens[tokens.length-1].type == "comment") {
|
if (tokens.length && tokens[tokens.length-1].type == "comment") {
|
||||||
return indent;
|
return indent;
|
||||||
|
|
|
||||||
|
|
@ -43,10 +43,12 @@ var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
|
var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
|
|
|
||||||
106
lib/ace/mode/folding/cstyle.js
Normal file
106
lib/ace/mode/folding/cstyle.js
Normal file
|
|
@ -0,0 +1,106 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Ajax.org Code Editor (ACE).
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Ajax.org B.V.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Fabian Jakobs <fabian AT ajax DOT org>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
define(function(require, exports, module) {
|
||||||
|
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
|
||||||
|
var FoldMode = exports.FoldMode = function() {};
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
|
||||||
|
this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
|
||||||
|
|
||||||
|
this.getFoldWidgetRange = function(session, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var match = line.match(this.foldingStartMarker);
|
||||||
|
if (match) {
|
||||||
|
var i = match.index;
|
||||||
|
|
||||||
|
if (match[2])
|
||||||
|
return session.getCommentFoldRange(row, i + match[0].length);
|
||||||
|
|
||||||
|
var start = {row: row, column: i+1};
|
||||||
|
var end = session.$findClosingBracket(match[1], start);
|
||||||
|
if (end) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
end = {row: session.getLength(), column: 0};
|
||||||
|
}
|
||||||
|
|
||||||
|
return Range.fromPoints(start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
var match = line.match(this.foldingStopMarker);
|
||||||
|
if (match) {
|
||||||
|
var i = match.index + match[0].length;
|
||||||
|
|
||||||
|
if (match[2])
|
||||||
|
return session.getCommentFoldRange(row, i);
|
||||||
|
|
||||||
|
var end = {row: row, column: i};
|
||||||
|
var start = session.$findOpeningBracket(match[1], end);
|
||||||
|
|
||||||
|
if (start) {
|
||||||
|
start.column++;
|
||||||
|
end.column--;
|
||||||
|
} else {
|
||||||
|
start = {
|
||||||
|
row: 0,
|
||||||
|
column: session.getLine(0).length
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return Range.fromPoints(start, end);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
108
lib/ace/mode/folding/fold_mode.js
Normal file
108
lib/ace/mode/folding/fold_mode.js
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Ajax.org Code Editor (ACE).
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Ajax.org B.V.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Fabian Jakobs <fabian AT ajax DOT org>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
define(function(require, exports, module) {
|
||||||
|
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
|
||||||
|
var FoldMode = exports.FoldMode = function() {};
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
this.FOO = 12;
|
||||||
|
|
||||||
|
this.foldingStartMarker = null;
|
||||||
|
this.foldingStopMarker = null;
|
||||||
|
|
||||||
|
this.getFoldWidget = function(session, row) {
|
||||||
|
if (this.foldingStartMarker) {
|
||||||
|
if (this.foldingStopMarker)
|
||||||
|
return this.$testBoth(session, row);
|
||||||
|
else
|
||||||
|
return this.$testStart(session, row);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
this.getFoldWidgetRange = function(session, row) {
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.indentationBlock = function(session, row) {
|
||||||
|
var re = /^\s*/;
|
||||||
|
var startRow = row, endRow = row;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startColumn = line.length - 1;
|
||||||
|
var startLevel = line.match(re)[0].length;
|
||||||
|
|
||||||
|
while (line = session.getLine(++row)) {
|
||||||
|
var level = line.match(re)[0].length;
|
||||||
|
|
||||||
|
if (level == line.length)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (level <= startLevel)
|
||||||
|
break;
|
||||||
|
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.$testStart = function(session, row) {
|
||||||
|
if(this.foldingStartMarker.test(session.getLine(row)))
|
||||||
|
return "start";
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
this.$testBoth = function(session, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
if(this.foldingStartMarker.test(line))
|
||||||
|
return "start";
|
||||||
|
if(this.foldingStopMarker.test(line))
|
||||||
|
return "end";
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
53
lib/ace/mode/folding/python.js
Normal file
53
lib/ace/mode/folding/python.js
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Ajax.org Code Editor (ACE).
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Ajax.org B.V.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Fabian Jakobs <fabian AT ajax DOT org>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
define(function(require, exports, module) {
|
||||||
|
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
|
||||||
|
var FoldMode = exports.FoldMode = function() {};
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
this.foldingStartMarker = /\:(:?\s*)?(:?#.*)?$/;
|
||||||
|
this.getFoldWidgetRange = BaseFoldMode.prototype.indentationBlock;
|
||||||
|
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
176
lib/ace/mode/folding/xml.js
Normal file
176
lib/ace/mode/folding/xml.js
Normal file
|
|
@ -0,0 +1,176 @@
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Ajax.org Code Editor (ACE).
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Ajax.org B.V.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Fabian Jakobs <fabian AT ajax DOT org>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
define(function(require, exports, module) {
|
||||||
|
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var TokenIterator = require("../../token_iterator").TokenIterator;
|
||||||
|
|
||||||
|
var FoldMode = exports.FoldMode = function(voidElements) {
|
||||||
|
BaseFoldMode.call(this);
|
||||||
|
this.voidElements = voidElements || {};
|
||||||
|
};
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
this.getFoldWidget = function(session, row) {
|
||||||
|
var tags = session.getTokens(row, row)[0].tokens
|
||||||
|
.filter(function(token) {
|
||||||
|
return token.type === "meta.tag";
|
||||||
|
})
|
||||||
|
.map(function(token) {
|
||||||
|
return token.value;
|
||||||
|
}).
|
||||||
|
join("")
|
||||||
|
.trim()
|
||||||
|
.replace(/^<|>$|\s+/g, "")
|
||||||
|
.split("><");
|
||||||
|
|
||||||
|
var fold = tags[0];
|
||||||
|
|
||||||
|
if (!fold || this.voidElements[fold])
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (fold.charAt(0) == "/")
|
||||||
|
return "end";
|
||||||
|
|
||||||
|
if (tags.indexOf("/" + fold) !== -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
return "start";
|
||||||
|
};
|
||||||
|
|
||||||
|
this.getFoldWidgetRange = function(session, row) {
|
||||||
|
var start, end;
|
||||||
|
var stack = [];
|
||||||
|
|
||||||
|
var iterator = new TokenIterator(session, row, 0);
|
||||||
|
var step = "stepForward";
|
||||||
|
var isBack = false;
|
||||||
|
|
||||||
|
// http://dev.w3.org/html5/spec/syntax.html#optional-tags
|
||||||
|
// TODO
|
||||||
|
// var optionalTags = {
|
||||||
|
// "html": 1,
|
||||||
|
// "head": 1,
|
||||||
|
// "body": 1,
|
||||||
|
// "li": 1,
|
||||||
|
// "dt": 1,
|
||||||
|
// "dd": 1,
|
||||||
|
// "p": 1,
|
||||||
|
// "rt": 1,
|
||||||
|
// "rp": 1,
|
||||||
|
// "optgroup": 1,
|
||||||
|
// "option": 1,
|
||||||
|
// "colgroup": 1,
|
||||||
|
// "thead": 1,
|
||||||
|
// "tbody": 1,
|
||||||
|
// "tfoot": 1,
|
||||||
|
// "tr": 1,
|
||||||
|
// "td": 1,
|
||||||
|
// "th": 1
|
||||||
|
// };
|
||||||
|
|
||||||
|
// limited XML parsing to find matching tag
|
||||||
|
do {
|
||||||
|
var token = iterator.getCurrentToken();
|
||||||
|
|
||||||
|
var value = token.value.trim();
|
||||||
|
if (token && token.type == "meta.tag" && token.value !== ">") {
|
||||||
|
var tagName = value.replace(/^[<\s]*|[\s*>]$/g, "");
|
||||||
|
if (this.voidElements[tagName])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!start) {
|
||||||
|
if (tagName.charAt(0) == "/") {
|
||||||
|
tagName = tagName.slice(1);
|
||||||
|
step = "stepBackward";
|
||||||
|
isBack = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
start = {
|
||||||
|
row: row,
|
||||||
|
column: iterator.getCurrentTokenColumn() + (isBack ? 0 : value.length + 1)
|
||||||
|
};
|
||||||
|
|
||||||
|
// console.log("push", tagName)
|
||||||
|
stack.push(tagName);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var close;
|
||||||
|
if (tagName.charAt(0) == "/") {
|
||||||
|
tagName = tagName.slice(1);
|
||||||
|
close = !isBack;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
close = isBack;
|
||||||
|
|
||||||
|
if (close) {
|
||||||
|
if (stack[stack.length-1] == tagName) {
|
||||||
|
// console.log("pop", tagName)
|
||||||
|
stack.pop();
|
||||||
|
if (stack.length === 0) {
|
||||||
|
end = {
|
||||||
|
row: iterator.getCurrentTokenRow(),
|
||||||
|
column: iterator.getCurrentTokenColumn() + (isBack ? value.length : 0)
|
||||||
|
};
|
||||||
|
if (isBack)
|
||||||
|
return Range.fromPoints(end, start);
|
||||||
|
else
|
||||||
|
return Range.fromPoints(start, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.error("unmatched tags!", tagName, stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// console.log("push", tagName)
|
||||||
|
stack.push(tagName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} while(token = iterator[step]());
|
||||||
|
};
|
||||||
|
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
@ -4,20 +4,15 @@ var oop = require("../lib/oop");
|
||||||
var JavaScriptMode = require("./javascript").Mode;
|
var JavaScriptMode = require("./javascript").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var GroovyHighlightRules = require("./groovy_highlight_rules").GroovyHighlightRules;
|
var GroovyHighlightRules = require("./groovy_highlight_rules").GroovyHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
|
JavaScriptMode.call(this);
|
||||||
this.$tokenizer = new Tokenizer(new GroovyHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new GroovyHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
|
||||||
this.$behaviour = new CstyleBehaviour();
|
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, JavaScriptMode);
|
oop.inherits(Mode, JavaScriptMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.createWorker = function(session) {
|
this.createWorker = function(session) {
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,18 +6,18 @@ var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var HaxeHighlightRules = require("./haxe_highlight_rules").HaxeHighlightRules;
|
var HaxeHighlightRules = require("./haxe_highlight_rules").HaxeHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new HaxeHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new HaxeHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
this.$behaviour = new CstyleBehaviour();
|
this.$behaviour = new CstyleBehaviour();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
var indent = this.$getIndent(line);
|
var indent = this.$getIndent(line);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ var CssMode = require("./css").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
|
var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
|
||||||
var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
|
var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
|
||||||
|
var XmlFoldMode = require("./folding/xml").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
var highlighter = new HtmlHighlightRules();
|
var highlighter = new HtmlHighlightRules();
|
||||||
|
|
@ -55,12 +56,30 @@ var Mode = function() {
|
||||||
"js-": JavaScriptMode,
|
"js-": JavaScriptMode,
|
||||||
"css-": CssMode
|
"css-": CssMode
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.foldingRules = new XmlFoldMode({
|
||||||
|
"area": 1,
|
||||||
|
"base": 1,
|
||||||
|
"br": 1,
|
||||||
|
"col": 1,
|
||||||
|
"command": 1,
|
||||||
|
"embed": 1,
|
||||||
|
"hr": 1,
|
||||||
|
"img": 1,
|
||||||
|
"input": 1,
|
||||||
|
"keygen": 1,
|
||||||
|
"link": 1,
|
||||||
|
"meta": 1,
|
||||||
|
"param": 1,
|
||||||
|
"source": 1,
|
||||||
|
"track": 1,
|
||||||
|
"wbr": 1
|
||||||
|
});
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "xml";
|
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,16 @@ var oop = require("../lib/oop");
|
||||||
var JavaScriptMode = require("./javascript").Mode;
|
var JavaScriptMode = require("./javascript").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules;
|
var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
|
JavaScriptMode.call(this);
|
||||||
|
|
||||||
this.$tokenizer = new Tokenizer(new JavaHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new JavaHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
|
||||||
this.$behaviour = new CstyleBehaviour();
|
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, JavaScriptMode);
|
oop.inherits(Mode, JavaScriptMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.createWorker = function(session) {
|
this.createWorker = function(session) {
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -45,17 +45,18 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd
|
||||||
var Range = require("../range").Range;
|
var Range = require("../range").Range;
|
||||||
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
this.$behaviour = new CstyleBehaviour();
|
this.$behaviour = new CstyleBehaviour();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||||
var outdent = true;
|
var outdent = true;
|
||||||
|
|
|
||||||
|
|
@ -43,18 +43,18 @@ var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var HighlightRules = require("./json_highlight_rules").JsonHighlightRules;
|
var HighlightRules = require("./json_highlight_rules").JsonHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new HighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new HighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
this.$behaviour = new CstyleBehaviour();
|
this.$behaviour = new CstyleBehaviour();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
var indent = this.$getIndent(line);
|
var indent = this.$getIndent(line);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,17 +43,17 @@ var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules;
|
var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var Range = require("../range").Range;
|
var Range = require("../range").Range;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new PerlHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new PerlHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||||
var outdent = true;
|
var outdent = true;
|
||||||
var re = /^(\s*)#/;
|
var re = /^(\s*)#/;
|
||||||
|
|
|
||||||
|
|
@ -44,18 +44,18 @@ var PhpHighlightRules = require("./php_highlight_rules").PhpHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var Range = require("../range").Range;
|
var Range = require("../range").Range;
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new PhpHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new PhpHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
this.$behaviour = new CstyleBehaviour();
|
this.$behaviour = new CstyleBehaviour();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||||
var outdent = true;
|
var outdent = true;
|
||||||
var re = /^(\s*)#/;
|
var re = /^(\s*)#/;
|
||||||
|
|
|
||||||
|
|
@ -6,18 +6,18 @@ var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var PowershellHighlightRules = require("./powershell_highlight_rules").PowershellHighlightRules;
|
var PowershellHighlightRules = require("./powershell_highlight_rules").PowershellHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new PowershellHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new PowershellHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
this.$behaviour = new CstyleBehaviour();
|
this.$behaviour = new CstyleBehaviour();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
var indent = this.$getIndent(line);
|
var indent = this.$getIndent(line);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,24 +42,19 @@ 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 MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var PythonFoldMode = require("./folding/python").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();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = {
|
|
||||||
foldingStartMarker: /\:(:?\s*)?(:?#.*)?$/,
|
|
||||||
getFoldWidgetRange: "indentationBlock"
|
|
||||||
};
|
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||||
var outdent = true;
|
var outdent = true;
|
||||||
var outentedRows = [];
|
|
||||||
var re = /^(\s*)#/;
|
var re = /^(\s*)#/;
|
||||||
|
|
||||||
for (var i=startRow; i<= endRow; i++) {
|
for (var i=startRow; i<= endRow; i++) {
|
||||||
|
|
@ -91,7 +86,6 @@ oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
|
var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
|
||||||
var tokens = tokenizedLine.tokens;
|
var tokens = tokenizedLine.tokens;
|
||||||
var endState = tokenizedLine.state;
|
|
||||||
|
|
||||||
if (tokens.length && tokens[tokens.length-1].type == "comment") {
|
if (tokens.length && tokens[tokens.length-1].type == "comment") {
|
||||||
return indent;
|
return indent;
|
||||||
|
|
|
||||||
|
|
@ -45,11 +45,13 @@ var scadHighlightRules = require("./scad_highlight_rules").scadHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
var Range = require("../range").Range;
|
var Range = require("../range").Range;
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new scadHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new scadHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
this.$behaviour = new CstyleBehaviour();
|
this.$behaviour = new CstyleBehaviour();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
|
|
@ -57,7 +59,6 @@ oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||||
var outdent = true;
|
var outdent = true;
|
||||||
var outentedRows = [];
|
|
||||||
var re = /^(\s*)\/\//;
|
var re = /^(\s*)\/\//;
|
||||||
|
|
||||||
for (var i=startRow; i<= endRow; i++) {
|
for (var i=startRow; i<= endRow; i++) {
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,16 @@ var oop = require("../lib/oop");
|
||||||
var JavaScriptMode = require("./javascript").Mode;
|
var JavaScriptMode = require("./javascript").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var ScalaHighlightRules = require("./scala_highlight_rules").ScalaHighlightRules;
|
var ScalaHighlightRules = require("./scala_highlight_rules").ScalaHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
|
||||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
|
JavaScriptMode.call(this);
|
||||||
|
|
||||||
this.$tokenizer = new Tokenizer(new ScalaHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new ScalaHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
|
||||||
this.$behaviour = new CstyleBehaviour();
|
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, JavaScriptMode);
|
oop.inherits(Mode, JavaScriptMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.createWorker = function(session) {
|
this.createWorker = function(session) {
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -42,17 +42,17 @@ var TextMode = require("./text").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules;
|
var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules;
|
||||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new ScssHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new ScssHighlightRules().getRules());
|
||||||
this.$outdent = new MatchingBraceOutdent();
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
};
|
};
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "cStyle";
|
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
var indent = this.$getIndent(line);
|
var indent = this.$getIndent(line);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,16 +38,16 @@
|
||||||
define(function(require, exports, module) {
|
define(function(require, exports, module) {
|
||||||
|
|
||||||
var oop = require("../lib/oop");
|
var oop = require("../lib/oop");
|
||||||
var XmlMode = require("./text").Mode;
|
var XmlMode = require("./xml").Mode;
|
||||||
var JavaScriptMode = require("./javascript").Mode;
|
var JavaScriptMode = require("./javascript").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var SvgHighlightRules = require("./svg_highlight_rules").SvgHighlightRules;
|
var SvgHighlightRules = require("./svg_highlight_rules").SvgHighlightRules;
|
||||||
var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
|
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
|
XmlMode.call(this);
|
||||||
|
|
||||||
this.highlighter = new SvgHighlightRules();
|
this.highlighter = new SvgHighlightRules();
|
||||||
this.$tokenizer = new Tokenizer(this.highlighter.getRules());
|
this.$tokenizer = new Tokenizer(this.highlighter.getRules());
|
||||||
this.$behaviour = new XmlBehaviour();
|
|
||||||
|
|
||||||
this.$embeds = this.highlighter.getEmbeds();
|
this.$embeds = this.highlighter.getEmbeds();
|
||||||
this.createModeDelegates({
|
this.createModeDelegates({
|
||||||
|
|
@ -58,20 +58,11 @@ var Mode = function() {
|
||||||
oop.inherits(Mode, XmlMode);
|
oop.inherits(Mode, XmlMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "xml";
|
|
||||||
|
|
||||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
return this.$getIndent(line);
|
return this.$getIndent(line);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.checkOutdent = function(state, line, input) {
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
}).call(Mode.prototype);
|
}).call(Mode.prototype);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,17 +42,18 @@ var TextMode = require("./text").Mode;
|
||||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
|
var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
|
||||||
var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
|
var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
|
||||||
|
var XmlFoldMode = require("./folding/xml").FoldMode;
|
||||||
|
|
||||||
var Mode = function() {
|
var Mode = function() {
|
||||||
this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
|
this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
|
||||||
this.$behaviour = new XmlBehaviour();
|
this.$behaviour = new XmlBehaviour();
|
||||||
|
this.foldingRules = new XmlFoldMode();
|
||||||
};
|
};
|
||||||
|
|
||||||
oop.inherits(Mode, TextMode);
|
oop.inherits(Mode, TextMode);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
this.foldingRules = "xml";
|
|
||||||
|
|
||||||
this.getNextLineIndent = function(state, line, tab) {
|
this.getNextLineIndent = function(state, line, tab) {
|
||||||
return this.$getIndent(line);
|
return this.$getIndent(line);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue