xterm-addon-unicode-graphemes - fix 'yarn test'

This commit is contained in:
Per Bothner
2023-05-18 08:55:52 -07:00
parent 67e968926c
commit 41760dfb09
3 changed files with 34 additions and 20 deletions
+16 -4
View File
@@ -517,6 +517,8 @@ export class InputHandler extends Disposable implements IInputHandler {
bufferRow.setCellFromCodePoint(this._activeBuffer.x - 1, 0, 1, curAttr.fg, curAttr.bg, curAttr.extended);
}
let precedingInfo = this._parser.precedingCodepoint === 0 ? 0
: this._parser.precedingJoinState;
for (let pos = start; pos < end; ++pos) {
code = data[pos];
@@ -530,14 +532,11 @@ export class InputHandler extends Disposable implements IInputHandler {
}
}
const precedingInfo = this._parser.precedingCodepoint === 0 ? 0
: this._parser.precedingJoinState;
const currentInfo = this._unicodeService.charProperties(code, precedingInfo);
chWidth = UnicodeService.extractWidth(currentInfo);
const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);
const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingInfo) : 0;
this._parser.precedingCodepoint = code;
this._parser.precedingJoinState = currentInfo;
precedingInfo = currentInfo;
if (screenReaderMode) {
this._onA11yChar.fire(stringFromCodePoint(code));
@@ -631,6 +630,19 @@ export class InputHandler extends Disposable implements IInputHandler {
}
}
this._parser.precedingJoinState = precedingInfo;
// store last char in Parser.precedingCodepoint for REP to work correctly
// This needs to check whether:
// - combining: only base char gets carried on (bug in xterm?)
if (end - start > 0) {
bufferRow.loadCell(this._activeBuffer.x - 1, this._workCell);
if (this._workCell.isCombined()) {
this._parser.precedingCodepoint = this._workCell.getChars().charCodeAt(0);
} else {
this._parser.precedingCodepoint = this._workCell.content;
}
}
// handle wide chars: reset cell to the right if it is second cell of a wide char
if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {
bufferRow.setCellFromCodePoint(this._activeBuffer.x, 0, 1, curAttr.fg, curAttr.bg, curAttr.extended);