mirror of
https://codeberg.org/emersion/gamja.git
synced 2024-11-14 19:05:01 -05:00
Fix stripping hex color formatting
Hex colors can be set with the same formats as the regular colors: <CODE>, <CODE><COLOR>, or <CODE><COLOR>,<COLOR>. Previously we only supporteed <CODE><COLOR>. This patch enables stripping colors for all valid color formats. Co-authored-by: Simon Ser <contact@emersion.fr>
This commit is contained in:
parent
3f059567c5
commit
081f5743be
1 changed files with 23 additions and 1 deletions
24
lib/ansi.js
24
lib/ansi.js
|
@ -10,10 +10,26 @@ const COLOR_HEX = "\x04";
|
|||
const REVERSE_COLOR = "\x16";
|
||||
const RESET = "\x0F";
|
||||
|
||||
const HEX_COLOR_LENGTH = 6;
|
||||
|
||||
function isDigit(ch) {
|
||||
return ch >= "0" && ch <= "9";
|
||||
}
|
||||
|
||||
function isHexColor(text) {
|
||||
if (text.length < HEX_COLOR_LENGTH) {
|
||||
return false;
|
||||
}
|
||||
for (let i = 0; i < HEX_COLOR_LENGTH; i++) {
|
||||
let ch = text[i].toUpperCase();
|
||||
let ok = (ch >= "0" && ch <= "9") || (ch >= "A" && ch <= "F");
|
||||
if (!ok) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export function strip(text) {
|
||||
let out = "";
|
||||
for (let i = 0; i < text.length; i++) {
|
||||
|
@ -43,7 +59,13 @@ export function strip(text) {
|
|||
}
|
||||
break;
|
||||
case COLOR_HEX:
|
||||
i += 6;
|
||||
if (!isHexColor(text.slice(i + 1))) {
|
||||
break;
|
||||
}
|
||||
i += HEX_COLOR_LENGTH;
|
||||
if (text[i + 1] == "," && isHexColor(text.slice(i + 2))) {
|
||||
i += 1 + HEX_COLOR_LENGTH;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
out += ch;
|
||||
|
|
Loading…
Reference in a new issue