setAnsi() method, various cleanup and optimizations
This commit is contained in:
parent
70a53e9613
commit
278eb8e7cf
|
@ -509,7 +509,70 @@ function MultiLineEditTextView(options) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// :TODO: rename to insertRawText()
|
this.splitText = function(text) {
|
||||||
|
return text.replace(/\b/g, '').split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/g);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.setTextLines = function(lines, index, termWithEol) {
|
||||||
|
if(0 === index && (0 === self.textLines.length || (self.textLines.length === 1 && '' === self.textLines[0].text) )) {
|
||||||
|
// quick path: just set the things
|
||||||
|
self.textLines = lines.slice(0, -1).map(l => {
|
||||||
|
return { text : l };
|
||||||
|
}).concat( { text : lines[lines.length - 1], eol : termWithEol } );
|
||||||
|
} else {
|
||||||
|
// insert somewhere in textLines...
|
||||||
|
if(index > self.textLines.length) {
|
||||||
|
// fill with empty
|
||||||
|
self.textLines.splice(
|
||||||
|
self.textLines.length,
|
||||||
|
0,
|
||||||
|
...Array.from( { length : index - self.textLines.length } ).map( () => { return { text : '' }; } )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const newLines = lines.slice(0, -1).map(l => {
|
||||||
|
return { text : l };
|
||||||
|
}).concat( { text : lines[lines.length - 1], eol : termWithEol } );
|
||||||
|
|
||||||
|
self.textLines.splice(
|
||||||
|
index,
|
||||||
|
0,
|
||||||
|
...newLines
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.setAnsiWithOptions = function(ansi, options, cb) {
|
||||||
|
|
||||||
|
function setLines(text) {
|
||||||
|
self.setTextLines( self.splitText(text), 0 );
|
||||||
|
self.cursorStartOfDocument();
|
||||||
|
|
||||||
|
if(cb) {
|
||||||
|
return cb(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(options.prepped) {
|
||||||
|
return setLines(ansi);
|
||||||
|
}
|
||||||
|
|
||||||
|
strUtil.prepAnsi(
|
||||||
|
ansi,
|
||||||
|
{
|
||||||
|
termWidth : this.client.termWidth,
|
||||||
|
termHeight : this.client.termHeight,
|
||||||
|
cols : this.dimens.width,
|
||||||
|
height : 5000, // :TODO: 'auto' needed here!
|
||||||
|
startCol : this.position.col,
|
||||||
|
forceLineTerm : options.forceLineTerm,
|
||||||
|
},
|
||||||
|
(err, preppedAnsi) => {
|
||||||
|
return setLines(err ? ansi : preppedAnsi);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
this.insertRawText = function(text, index, col) {
|
this.insertRawText = function(text, index, col) {
|
||||||
//
|
//
|
||||||
// Perform the following on |text|:
|
// Perform the following on |text|:
|
||||||
|
@ -542,23 +605,34 @@ function MultiLineEditTextView(options) {
|
||||||
index = self.textLines.length;
|
index = self.textLines.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
text = text
|
text = self.splitText(text);
|
||||||
.replace(/\b/g, '')
|
|
||||||
.split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/g);
|
|
||||||
|
|
||||||
let wrapped;
|
let wrapped;
|
||||||
|
text.forEach(line => {
|
||||||
|
wrapped = self.wordWrapSingleLine(
|
||||||
|
line, // line to wrap
|
||||||
|
'expand', // tabHandling
|
||||||
|
self.dimens.width
|
||||||
|
).wrapped;
|
||||||
|
|
||||||
|
self.setTextLines(wrapped, index, true); // true=termWithEol
|
||||||
|
index += wrapped.length;
|
||||||
|
});
|
||||||
|
/*
|
||||||
for(let i = 0; i < text.length; ++i) {
|
for(let i = 0; i < text.length; ++i) {
|
||||||
wrapped = self.wordWrapSingleLine(
|
wrapped = self.wordWrapSingleLine(
|
||||||
text[i], // input
|
text[i], // input
|
||||||
'expand', // tabHandling
|
'expand', // tabHandling
|
||||||
self.dimens.width).wrapped;
|
self.dimens.width
|
||||||
|
).wrapped;
|
||||||
|
|
||||||
for(let j = 0; j < wrapped.length - 1; ++j) {
|
for(let j = 0; j < wrapped.length - 1; ++j) {
|
||||||
self.textLines.splice(index++, 0, { text : wrapped[j] } );
|
self.textLines.splice(index++, 0, { text : wrapped[j] } );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.textLines.splice(index++, 0, { text : wrapped[wrapped.length - 1], eol : true } );
|
self.textLines.splice(index++, 0, { text : wrapped[wrapped.length - 1], eol : true } );
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
this.getAbsolutePosition = function(row, col) {
|
this.getAbsolutePosition = function(row, col) {
|
||||||
|
@ -996,8 +1070,6 @@ MultiLineEditTextView.prototype.setFocus = function(focused) {
|
||||||
};
|
};
|
||||||
|
|
||||||
MultiLineEditTextView.prototype.setText = function(text) {
|
MultiLineEditTextView.prototype.setText = function(text) {
|
||||||
//text = require('graceful-fs').readFileSync('/home/nuskooler/Downloads/test_text.txt', { encoding : 'utf-8'});
|
|
||||||
|
|
||||||
this.textLines = [ ];
|
this.textLines = [ ];
|
||||||
this.addText(text);
|
this.addText(text);
|
||||||
/*this.insertRawText(text);
|
/*this.insertRawText(text);
|
||||||
|
@ -1009,6 +1081,11 @@ MultiLineEditTextView.prototype.setText = function(text) {
|
||||||
}*/
|
}*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
MultiLineEditTextView.prototype.setAnsi = function(ansi, options = { prepped : false }, cb) {
|
||||||
|
this.textLines = [ ];
|
||||||
|
return this.setAnsiWithOptions(ansi, options, cb);
|
||||||
|
};
|
||||||
|
|
||||||
MultiLineEditTextView.prototype.addText = function(text) {
|
MultiLineEditTextView.prototype.addText = function(text) {
|
||||||
this.insertRawText(text);
|
this.insertRawText(text);
|
||||||
|
|
||||||
|
@ -1032,7 +1109,9 @@ MultiLineEditTextView.prototype.setPropertyValue = function(propName, value) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'autoScroll' : this.autoScroll = value; break;
|
case 'autoScroll' :
|
||||||
|
this.autoScroll = value;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'tabSwitchesView' :
|
case 'tabSwitchesView' :
|
||||||
this.tabSwitchesView = value;
|
this.tabSwitchesView = value;
|
||||||
|
|
Loading…
Reference in New Issue