diff --git a/lib/ansi.js b/lib/ansi.js index 108af27..86cbbb7 100644 --- a/lib/ansi.js +++ b/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;