Fixes to ANSI escape parser @ end of row
This commit is contained in:
parent
9720258303
commit
254b5712be
|
@ -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) {
|
||||||
self.emit('literal', text.slice(start, pos));
|
charCode = text.charCodeAt(pos) & 0xff; // 8bit clean
|
||||||
start = pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(pos = 0; pos < len; ++pos) {
|
|
||||||
charCode = text.charCodeAt(pos) & 0xff; // ensure 8bit clean
|
|
||||||
|
|
||||||
switch(charCode) {
|
switch(charCode) {
|
||||||
case CR :
|
case CR :
|
||||||
emitLiteral();
|
self.emit('literal', text.slice(start, pos));
|
||||||
|
start = pos;
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.emit('literal', text.slice(start));
|
|
||||||
|
|
||||||
if(self.column > self.termWidth) {
|
if(self.column > self.termWidth) {
|
||||||
|
self.emit('literal', text.slice(start, pos - 1));
|
||||||
|
start = pos - 1;
|
||||||
|
|
||||||
self.column = 1;
|
self.column = 1;
|
||||||
self.row += 1;
|
self.row += 1;
|
||||||
self.positionUpdated();
|
self.positionUpdated();
|
||||||
|
|
||||||
|
self.emit('literal', text.slice(start, pos));
|
||||||
|
} else {
|
||||||
|
self.emit('literal', text.slice(start));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue