mirror of
https://github.com/embarklabs/neo-blessed.git
synced 2025-01-24 09:49:04 +00:00
acs work. potential wide char support.
This commit is contained in:
parent
7f23ade08b
commit
2ba6dcc2b8
@ -1061,7 +1061,8 @@ Screen.prototype.draw = function(start, end) {
|
||||
// this seems to be the way ncurses does it.
|
||||
if (this.tput) {
|
||||
if (this.tput.strings.enter_alt_charset_mode) {
|
||||
if (!this.tput.brokenACS || !this.tput.unicode) {
|
||||
//if (!this.tput.brokenACS || !this.tput.unicode) {
|
||||
if (!this.tput.brokenACS) {
|
||||
if (this.tput.acscr[ch]) {
|
||||
if (acs) {
|
||||
ch = this.tput.acscr[ch];
|
||||
@ -1083,14 +1084,60 @@ Screen.prototype.draw = function(start, end) {
|
||||
// are it does not support UTF8. This is probably
|
||||
// the "safest" way to do this. Should fix things
|
||||
// like sun-color.
|
||||
// if (this.program.term('sun') && ch > '~') {
|
||||
// if (this.tput.numbers.U8 !== 1 && ch > '~') {
|
||||
// if ((!this.unicode || this.tput.numbers.U8 !== 1) && this.tput.utoa[ch]) {
|
||||
if (this.tput.numbers.U8 !== 1 && this.tput.utoa[ch]) {
|
||||
ch = this.tput.utoa[ch] || '?';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Attempt to use ACS for supported characters.
|
||||
// This is not ideal, but it's how ncurses works.
|
||||
// There are a lot of terminals that support ACS
|
||||
// *and UTF8, but do not declare U8. So ACS ends
|
||||
// up being used (slower than utf8). Terminals
|
||||
// that do not support ACS and do not explicitly
|
||||
// support UTF8 get their unicode characters
|
||||
// replaced with really ugly ascii characters.
|
||||
// It is possible there is a terminal out there
|
||||
// somewhere that does not support ACS, but
|
||||
// supports UTF8, but I imagine it's unlikely.
|
||||
// Maybe remove !this.tput.unicode check, however,
|
||||
// this seems to be the way ncurses does it.
|
||||
if (0 && this.tput) {
|
||||
if (this.tput.strings.enter_alt_charset_mode && !this.tput.brokenACS) {
|
||||
if (this.tput.acscr[ch]) {
|
||||
if (acs) {
|
||||
ch = this.tput.acscr[ch];
|
||||
} else {
|
||||
ch = this.tput.smacs()
|
||||
+ this.tput.acscr[ch];
|
||||
acs = true;
|
||||
}
|
||||
} else if (acs) {
|
||||
ch = this.tput.rmacs() + ch;
|
||||
acs = false;
|
||||
}
|
||||
} else {
|
||||
// U8 is not consistently correct. Some terminfo's
|
||||
// terminals that do not declare it may actually
|
||||
// support utf8 (e.g. urxvt), but if the terminal
|
||||
// does not declare support for ACS (and U8), chances
|
||||
// are it does not support UTF8. This is probably
|
||||
// the "safest" way to do this. Should fix things
|
||||
// like sun-color.
|
||||
if ((!this.unicode
|
||||
|| (!this.tput.strings.enter_alt_charset_mode
|
||||
&& this.tput.numbers.U8 !== 1))
|
||||
&& ch > '~') {
|
||||
ch = this.tput.utoa[ch] || '?';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if (wideChars.test(ch)) x++;
|
||||
|
||||
out += ch;
|
||||
attr = data;
|
||||
}
|
||||
@ -1978,7 +2025,7 @@ Element.prototype.parseContent = function(noTags) {
|
||||
.replace(/\x1b(?!\[[\d;]*m)/g, '')
|
||||
.replace(/\r\n|\r/g, '\n')
|
||||
.replace(/\t/g, this.screen.tabc)
|
||||
.replace(dwidthChars, '?');
|
||||
.replace(wideChars, '?');
|
||||
|
||||
if (!noTags) {
|
||||
content = this._parseTags(content);
|
||||
@ -3089,6 +3136,12 @@ Element.prototype.render = function() {
|
||||
lines[y][x][1] = ch;
|
||||
lines[y].dirty = true;
|
||||
}
|
||||
|
||||
// if (wideChars.test(ch)) {
|
||||
// x++;
|
||||
// lines[y][x][0] = attr;
|
||||
// lines[y][x][1] = ' ';
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@ -5811,7 +5864,7 @@ function hsort(obj) {
|
||||
});
|
||||
}
|
||||
|
||||
var dwidthChars = new RegExp('(['
|
||||
var wideChars = new RegExp('(['
|
||||
+ '\\uff01-\\uffbe'
|
||||
+ '\\uffc2-\\uffc7'
|
||||
+ '\\uffca-\\uffcf'
|
||||
|
Loading…
x
Reference in New Issue
Block a user