parseAnsiColour function

List<int> parseAnsiColour(
  1. List<int> params,
  2. int offset,
  3. Terminal terminal
)

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];
}