forked from Botanical/BotanJS
		
	Handle the tabwidth
This commit is contained in:
		| @@ -54,7 +54,7 @@ | |||||||
| 				} | 				} | ||||||
| 				else | 				else | ||||||
| 				{ | 				{ | ||||||
| 					offset += line.cols + 1; | 					offset += line.toString().length + 1; | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
| 				line = line.next; | 				line = line.next; | ||||||
| @@ -180,6 +180,8 @@ | |||||||
| 			this.moveX(); | 			this.moveX(); | ||||||
| 			this.updatePosition(); | 			this.updatePosition(); | ||||||
|  |  | ||||||
|  | 			feeder.softReset(); | ||||||
|  |  | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ | |||||||
| 		this.br = false; | 		this.br = false; | ||||||
| 		this.placeholder = true; | 		this.placeholder = true; | ||||||
| 		this.lineNum = 0; | 		this.lineNum = 0; | ||||||
|  | 		this.tabWidth = 8; | ||||||
|  |  | ||||||
| 		if( nextLineBuffer ) | 		if( nextLineBuffer ) | ||||||
| 		{ | 		{ | ||||||
| @@ -45,9 +46,10 @@ | |||||||
| 		var br = false; | 		var br = false; | ||||||
|  |  | ||||||
| 		var i = 0; | 		var i = 0; | ||||||
|  | 		var numTabs = 0; | ||||||
| 		if( wrap ) | 		if( wrap ) | ||||||
| 		{ | 		{ | ||||||
| 			for( ; i < this.cols; i ++ ) | 			for( ; i < this.cols - numTabs * this.tabWidth; i ++ ) | ||||||
| 			{ | 			{ | ||||||
| 				var c = content[i]; | 				var c = content[i]; | ||||||
| 				if( c === undefined ) break; | 				if( c === undefined ) break; | ||||||
| @@ -58,6 +60,10 @@ | |||||||
| 					i ++; | 					i ++; | ||||||
| 					break; | 					break; | ||||||
| 				} | 				} | ||||||
|  | 				else if( c == "\t" ) | ||||||
|  | 				{ | ||||||
|  | 					numTabs ++; | ||||||
|  | 				} | ||||||
|  |  | ||||||
| 				line += c; | 				line += c; | ||||||
| 			} | 			} | ||||||
| @@ -75,8 +81,12 @@ | |||||||
| 					i ++; | 					i ++; | ||||||
| 					break; | 					break; | ||||||
| 				} | 				} | ||||||
|  | 				else if( c == "\t" ) | ||||||
|  | 				{ | ||||||
|  | 					numTabs ++; | ||||||
|  | 				} | ||||||
|  |  | ||||||
| 				if( i < this.cols ) | 				if( i < this.cols - numTabs * this.tabWidth ) | ||||||
| 				{ | 				{ | ||||||
| 					line += c; | 					line += c; | ||||||
| 				} | 				} | ||||||
|   | |||||||
| @@ -75,7 +75,8 @@ | |||||||
| 		{ | 		{ | ||||||
| 			var display = ( line == undefined ? "" : line ) + ""; | 			var display = ( line == undefined ? "" : line ) + ""; | ||||||
|  |  | ||||||
| 			var atSpace = false | 			var atSpace = false; | ||||||
|  |  | ||||||
| 			for( var i = 0; | 			for( var i = 0; | ||||||
| 				line && i < steps && ( line = line.next ) && placeholdCond( line ); | 				line && i < steps && ( line = line.next ) && placeholdCond( line ); | ||||||
| 				i ++ ) | 				i ++ ) | ||||||
| @@ -93,6 +94,23 @@ | |||||||
|  |  | ||||||
| 			return display; | 			return display; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | 		this.__softRender = function() | ||||||
|  | 		{ | ||||||
|  | 			var line = _self.lineBuffers[ _self.__rStart ]; | ||||||
|  | 			var steps = _self.__rLength; | ||||||
|  |  | ||||||
|  | 			for( var i = 0; | ||||||
|  | 				line && i < steps && ( line = line.next ) && placeholdCond( line ); | ||||||
|  | 				i ++ ) | ||||||
|  | 			{ | ||||||
|  | 				if( line.br && steps < ( i + line.visualLines.length ) ) | ||||||
|  | 				{ | ||||||
|  | 					_self.__clseLine = line; | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	Feeder.prototype.render = function( start, length ) | 	Feeder.prototype.render = function( start, length ) | ||||||
| @@ -107,7 +125,9 @@ | |||||||
|  |  | ||||||
| 		if( length == 0 ) return ""; | 		if( length == 0 ) return ""; | ||||||
|  |  | ||||||
| 		return this.__render( buffs[ start ], length - 1 ); | 		this.__rStart = start; | ||||||
|  | 		this.__rLength = length - 1; | ||||||
|  | 		return this.__render( buffs[ start ], this.__rLength ); | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	Feeder.prototype.pan = function( dX, dY ) | 	Feeder.prototype.pan = function( dX, dY ) | ||||||
| @@ -137,6 +157,13 @@ | |||||||
| 		this.panY = Y; | 		this.panY = Y; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  | 	Feeder.prototype.softReset = function() | ||||||
|  | 	{ | ||||||
|  | 		this.__moreAt = -1; | ||||||
|  | 		this.__clseLine = null; | ||||||
|  | 		this.__softRender(); | ||||||
|  | 	}; | ||||||
|  |  | ||||||
| 	__readOnly( Feeder.prototype, "firstBuffer", function() { | 	__readOnly( Feeder.prototype, "firstBuffer", function() { | ||||||
| 		return this.lineBuffers[ 0 ]; | 		return this.lineBuffers[ 0 ]; | ||||||
| 	} ); | 	} ); | ||||||
| @@ -145,6 +172,10 @@ | |||||||
| 		return this.lineBuffers[ this.__rows - 1 ]; | 		return this.lineBuffers[ this.__rows - 1 ]; | ||||||
| 	} ); | 	} ); | ||||||
|  |  | ||||||
|  | 	__readOnly( Feeder.prototype, "EOF", function() { | ||||||
|  | 		return this.lineBuffers[ this.__rows ].placeholder; | ||||||
|  | 	} ); | ||||||
|  |  | ||||||
| 	__readOnly( Feeder.prototype, "moreAt", function() { | 	__readOnly( Feeder.prototype, "moreAt", function() { | ||||||
| 		if( 0 < this.__moreAt ) return this.__moreAt; | 		if( 0 < this.__moreAt ) return this.__moreAt; | ||||||
|  |  | ||||||
| @@ -159,18 +190,35 @@ | |||||||
| 		} | 		} | ||||||
| 		while( line = line.next ); | 		while( line = line.next ); | ||||||
|  |  | ||||||
|  | 		if( line == undefined ) i --; | ||||||
|  |  | ||||||
| 		return ( this.__moreAt = i ); | 		return ( this.__moreAt = i ); | ||||||
| 	} ); | 	} ); | ||||||
|  |  | ||||||
| 	__readOnly( Feeder.prototype, "lineStat", function() { | 	__readOnly( Feeder.prototype, "lineStat", function() { | ||||||
| 		var X = this.cursor.X; | 		var X = this.cursor.X; | ||||||
| 		return ( this.cursor.getLine().lineNum + 1 ) + "," + X + "-" + ( X ); |  | ||||||
|  | 		var line = this.cursor.getLine(); | ||||||
|  | 		var tabStat = ""; | ||||||
|  |  | ||||||
|  | 		var tabs = line.content.match( /\t/g ); | ||||||
|  |  | ||||||
|  | 		if( tabs ) | ||||||
|  | 		{ | ||||||
|  | 			tabStat = "-" + ( X + tabs.length * line.tabWidth ); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return ( line.lineNum + 1 ) + "," + X + tabStat; | ||||||
| 	} ); | 	} ); | ||||||
|  |  | ||||||
| 	__readOnly( Feeder.prototype, "docPos", function() { | 	__readOnly( Feeder.prototype, "docPos", function() { | ||||||
| 		var pos = "ALL"; | 		var pos = "ALL"; | ||||||
|  |  | ||||||
| 		if( this.panY == 0 ) | 		if( 0 < this.panY &&  this.EOF ) | ||||||
|  | 		{ | ||||||
|  | 			pos = "BOTTOM"; | ||||||
|  | 		} | ||||||
|  | 		else | ||||||
| 		{ | 		{ | ||||||
| 			if( this.__clseLine || !this.EOF ) | 			if( this.__clseLine || !this.EOF ) | ||||||
| 			{ | 			{ | ||||||
| @@ -178,6 +226,7 @@ | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  |  | ||||||
| 		return pos; | 		return pos; | ||||||
| 	} ); | 	} ); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user