fix #1808 show different different indicators for LF and CRLF

This commit is contained in:
nightwing 2014-02-21 22:30:47 +04:00
commit 45311cda45
3 changed files with 34 additions and 5 deletions

View file

@ -120,6 +120,7 @@ var Document = function(text) {
this.$detectNewLine = function(text) { this.$detectNewLine = function(text) {
var match = text.match(/^.*?(\r\n|\r|\n)/m); var match = text.match(/^.*?(\r\n|\r|\n)/m);
this.$autoNewLine = match ? match[1] : "\n"; this.$autoNewLine = match ? match[1] : "\n";
this._signal("changeNewLineMode");
}; };
/** /**
@ -152,6 +153,7 @@ var Document = function(text) {
return; return;
this.$newLineMode = newLineMode; this.$newLineMode = newLineMode;
this._signal("changeNewLineMode");
}; };
/** /**

View file

@ -41,18 +41,31 @@ var Text = function(parentEl) {
this.element = dom.createElement("div"); this.element = dom.createElement("div");
this.element.className = "ace_layer ace_text-layer"; this.element.className = "ace_layer ace_text-layer";
parentEl.appendChild(this.element); parentEl.appendChild(this.element);
this.$updateEolChar = this.$updateEolChar.bind(this);
}; };
(function() { (function() {
oop.implement(this, EventEmitter); oop.implement(this, EventEmitter);
this.EOF_CHAR = "\xB6"; //"¶"; this.EOF_CHAR = "\xB6";
this.EOL_CHAR = "\xAC"; //"¬"; this.EOL_CHAR_LF = "\xAC";
this.TAB_CHAR = "\u2192"; //"→" "\u21E5"; this.EOL_CHAR_CRLF = "\xa4";
this.SPACE_CHAR = "\xB7"; //"·"; this.EOL_CHAR = this.EOL_CHAR_LF;
this.TAB_CHAR = "\u2192"; //"\u21E5";
this.SPACE_CHAR = "\xB7";
this.$padding = 0; this.$padding = 0;
this.$updateEolChar = function() {
var EOL_CHAR = this.session.doc.getNewLineCharacter() == "\n"
? this.EOL_CHAR_LF
: this.EOL_CHAR_CRLF;
if (this.EOL_CHAR != EOL_CHAR) {
this.EOL_CHAR = EOL_CHAR;
return true;
}
}
this.setPadding = function(padding) { this.setPadding = function(padding) {
this.$padding = padding; this.$padding = padding;
this.element.style.padding = "0 " + padding + "px"; this.element.style.padding = "0 " + padding + "px";

View file

@ -227,8 +227,13 @@ var VirtualRenderer = function(container, theme) {
* Associates the renderer with an [[EditSession `EditSession`]]. * Associates the renderer with an [[EditSession `EditSession`]].
**/ **/
this.setSession = function(session) { this.setSession = function(session) {
if (this.session)
this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode);
this.session = session; this.session = session;
if (!session)
return;
if (this.scrollMargin.top && session.getScrollTop() <= 0) if (this.scrollMargin.top && session.getScrollTop() <= 0)
session.setScrollTop(-this.scrollMargin.top); session.setScrollTop(-this.scrollMargin.top);
@ -239,6 +244,10 @@ var VirtualRenderer = function(container, theme) {
this.$textLayer.setSession(session); this.$textLayer.setSession(session);
this.$loop.schedule(this.CHANGE_FULL); this.$loop.schedule(this.CHANGE_FULL);
this.session.$setFontMetrics(this.$fontMetrics); this.session.$setFontMetrics(this.$fontMetrics);
this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);
this.onChangeNewLineMode()
this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode);
}; };
/** /**
@ -272,6 +281,11 @@ var VirtualRenderer = function(container, theme) {
this.$loop.schedule(this.CHANGE_LINES); this.$loop.schedule(this.CHANGE_LINES);
}; };
this.onChangeNewLineMode = function() {
this.$loop.schedule(this.CHANGE_TEXT);
this.$textLayer.$updateEolChar();
};
this.onChangeTabSize = function() { this.onChangeTabSize = function() {
this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);
this.$textLayer.onChangeTabSize(); this.$textLayer.onChangeTabSize();