parseAnsiColour function
parse a color from params
starting from offset
.
Returns a list with 2 entries. Index 0 = color, Index 1 = number of params used
Implementation
List<int> parseAnsiColour(List<int> params, int offset, Terminal terminal) {
final length = params.length - offset;
if (length > 2) {
switch (params[offset + 1]) {
case 5:
// 8 bit colour
final colNum = params[offset + 2];
if (colNum >= 256 || colNum < 0) {
return [TerminalColor.empty(), 2];
}
return [parse8BitSgrColour(colNum, terminal), 2];
case 2:
if (length < 4) {
return [TerminalColor.empty(), 0];
}
// 24 bit colour
if (length == 5) {
final r = params[offset + 2];
final g = params[offset + 3];
final b = params[offset + 4];
return [TerminalColor.fromARGB(0xff, r, g, b), 4];
}
if (length > 5) {
// ISO/IEC International Standard 8613-6
final r = params[offset + 3];
final g = params[offset + 4];
final b = params[offset + 5];
return [TerminalColor.fromARGB(0xff, r, g, b), 5];
}
}
}
return [TerminalColor.empty(), 0];
}