Merge branch 'master' into 479-nua-optional-fields
This commit is contained in:
@@ -37,6 +37,12 @@ function ANSIEscapeParser(options) {
|
||||
this.mciReplaceChar = miscUtil.valueWithDefault(options.mciReplaceChar, '');
|
||||
this.termHeight = miscUtil.valueWithDefault(options.termHeight, 25);
|
||||
this.termWidth = miscUtil.valueWithDefault(options.termWidth, 80);
|
||||
this.breakWidth = this.termWidth;
|
||||
// toNumber takes care of null, undefined etc as well.
|
||||
let artWidth = _.toNumber(options.artWidth);
|
||||
if(!(_.isNaN(artWidth)) && artWidth > 0 && artWidth < this.breakWidth) {
|
||||
this.breakWidth = options.artWidth;
|
||||
}
|
||||
this.trailingLF = miscUtil.valueWithDefault(options.trailingLF, 'default');
|
||||
|
||||
this.row = Math.min(options?.startRow ?? 1, this.termHeight);
|
||||
@@ -90,8 +96,8 @@ function ANSIEscapeParser(options) {
|
||||
|
||||
switch (charCode) {
|
||||
case CR:
|
||||
self.emit('literal', text.slice(start, pos));
|
||||
start = pos;
|
||||
self.emit('literal', text.slice(start, pos + 1));
|
||||
start = pos + 1;
|
||||
|
||||
self.column = 1;
|
||||
|
||||
@@ -105,8 +111,8 @@ function ANSIEscapeParser(options) {
|
||||
self.column = 1;
|
||||
}
|
||||
|
||||
self.emit('literal', text.slice(start, pos));
|
||||
start = pos;
|
||||
self.emit('literal', text.slice(start, pos + 1));
|
||||
start = pos + 1;
|
||||
|
||||
self.row += 1;
|
||||
|
||||
@@ -114,13 +120,16 @@ function ANSIEscapeParser(options) {
|
||||
break;
|
||||
|
||||
default:
|
||||
if (self.column === self.termWidth) {
|
||||
if (self.column === self.breakWidth) {
|
||||
self.emit('literal', text.slice(start, pos + 1));
|
||||
start = pos + 1;
|
||||
|
||||
// If we hit breakWidth before termWidth then we need to force the terminal to go to the next line.
|
||||
if(self.column < self.termWidth) {
|
||||
self.emit('literal', '\r\n');
|
||||
}
|
||||
self.column = 1;
|
||||
self.row += 1;
|
||||
|
||||
self.positionUpdated();
|
||||
} else {
|
||||
self.column += 1;
|
||||
@@ -135,7 +144,7 @@ function ANSIEscapeParser(options) {
|
||||
//
|
||||
// Finalize this chunk
|
||||
//
|
||||
if (self.column > self.termWidth) {
|
||||
if (self.column > self.breakWidth) {
|
||||
self.column = 1;
|
||||
self.row += 1;
|
||||
|
||||
|
||||
13
core/art.js
13
core/art.js
@@ -41,11 +41,21 @@ const SUPPORTED_ART_TYPES = {
|
||||
};
|
||||
|
||||
function getFontNameFromSAUCE(sauce) {
|
||||
if (sauce.Character) {
|
||||
if (sauce && sauce.Character) {
|
||||
return sauce.Character.fontName;
|
||||
}
|
||||
}
|
||||
|
||||
function getWidthFromSAUCE(sauce) {
|
||||
if (sauce && sauce.Character) {
|
||||
let sauceWidth = _.toNumber(sauce.Character.characterWidth);
|
||||
if(!(_.isNaN(sauceWidth)) && sauceWidth > 0) {
|
||||
return sauceWidth;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function sliceAtEOF(data, eofMarker) {
|
||||
let eof = data.length;
|
||||
const stopPos = Math.max(data.length - 256, 0); // 256 = 2 * sizeof(SAUCE)
|
||||
@@ -274,6 +284,7 @@ function display(client, art, options, cb) {
|
||||
mciReplaceChar: options.mciReplaceChar,
|
||||
termHeight: client.term.termHeight,
|
||||
termWidth: client.term.termWidth,
|
||||
artWidth: getWidthFromSAUCE(options.sauce),
|
||||
trailingLF: options.trailingLF,
|
||||
startRow: options.startRow,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user