mirror of
https://github.com/Eugeny/tabby
synced 2024-12-14 23:32:41 +00:00
33 lines
896 B
TypeScript
33 lines
896 B
TypeScript
|
const partials = [
|
||
|
[0b110, 5, 0],
|
||
|
[0b1110, 4, 1],
|
||
|
[0b11110, 3, 2],
|
||
|
]
|
||
|
|
||
|
export class UTF8Splitter {
|
||
|
private internal = Buffer.alloc(0)
|
||
|
|
||
|
write (data: Buffer): Buffer {
|
||
|
this.internal = Buffer.concat([this.internal, data])
|
||
|
|
||
|
let keep = 0
|
||
|
for (const [pattern, shift, maxOffset] of partials) {
|
||
|
for (let offset = 0; offset < maxOffset + 1; offset++) {
|
||
|
if (this.internal[this.internal.length - offset - 1] >> shift === pattern) {
|
||
|
keep = Math.max(keep, offset + 1)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const result = this.internal.slice(0, this.internal.length - keep)
|
||
|
this.internal = this.internal.slice(this.internal.length - keep)
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
flush (): Buffer {
|
||
|
const result = this.internal
|
||
|
this.internal = Buffer.alloc(0)
|
||
|
return result
|
||
|
}
|
||
|
}
|