Fixes to ANSI escape parser @ end of row

This commit is contained in:
Bryan Ashby 2017-08-06 11:21:27 -06:00
parent 9720258303
commit 254b5712be
1 changed files with 33 additions and 74 deletions

View File

@ -85,106 +85,65 @@ function ANSIEscapeParser(options) {
}; };
function literal(text) { function literal(text) {
let charCode;
let pos;
let start = 0;
const len = text.length; const len = text.length;
let pos = 0;
let start = 0;
let charCode;
function emitLiteral() { while(pos < len) {
charCode = text.charCodeAt(pos) & 0xff; // 8bit clean
switch(charCode) {
case CR :
self.emit('literal', text.slice(start, pos)); self.emit('literal', text.slice(start, pos));
start = pos; start = pos;
}
for(pos = 0; pos < len; ++pos) {
charCode = text.charCodeAt(pos) & 0xff; // ensure 8bit clean
switch(charCode) {
case CR :
emitLiteral();
self.column = 1; self.column = 1;
self.positionUpdated(); self.positionUpdated();
break; break;
case LF : case LF :
emitLiteral(); self.emit('literal', text.slice(start, pos));
start = pos;
self.row += 1; self.row += 1;
self.positionUpdated(); self.positionUpdated();
break; break;
default : default :
if(self.column > self.termWidth) { if(self.column > self.termWidth) {
// self.emit('literal', text.slice(start, pos));
// Emit data up to this point so it can be drawn before the postion update start = pos;
//
emitLiteral();
self.column = 1; self.column = 1;
self.row += 1; self.row += 1;
self.positionUpdated(); self.positionUpdated();
//self.emit('literal', text.slice(pos - 1, pos));
//start = pos;
} else { } else {
self.column += 1; self.column += 1;
} }
break; break;
} }
++pos;
} }
if(self.column > self.termWidth) {
self.emit('literal', text.slice(start, pos - 1));
start = pos - 1;
self.column = 1;
self.row += 1;
self.positionUpdated();
self.emit('literal', text.slice(start, pos));
} else {
self.emit('literal', text.slice(start)); self.emit('literal', text.slice(start));
if(self.column > self.termWidth) {
self.column = 1;
self.row += 1;
self.positionUpdated();
} }
} }
function literal2(text) {
var charCode;
var len = text.length;
for(var i = 0; i < len; i++) {
charCode = text.charCodeAt(i) & 0xff; // ensure 8 bit
switch(charCode) {
case CR :
self.column = 1;
break;
case LF :
self.row++;
self.positionUpdated();
//self.rowUpdated();
break;
default :
// wrap
if(self.column > self.termWidth) {
self.column = 1;
self.row++;
//self.rowUpdated();
self.positionUpdated();
} else {
self.column += 1;
}
break;
}
if(self.row === self.termHeight) {
self.scrollBack += 1;
self.row -= 1;
self.positionUpdated();
}
}
self.emit('literal', text);
}
function getProcessedMCI(mci) { function getProcessedMCI(mci) {
if(self.mciReplaceChar.length > 0) { if(self.mciReplaceChar.length > 0) {
return ansi.getSGRFromGraphicRendition(self.graphicRendition, true) + new Array(mci.length + 1).join(self.mciReplaceChar); return ansi.getSGRFromGraphicRendition(self.graphicRendition, true) + new Array(mci.length + 1).join(self.mciReplaceChar);