parse8BitSgrColour function

int parse8BitSgrColour(
  1. int colNum,
  2. Terminal terminal
)

Implementation

int parse8BitSgrColour(int colNum, Terminal terminal) {
  // https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit

  switch (colNum) {
    case 0:
      return terminal.theme.black;
    case 1:
      return terminal.theme.red;
    case 2:
      return terminal.theme.green;
    case 3:
      return terminal.theme.yellow;
    case 4:
      return terminal.theme.blue;
    case 5:
      return terminal.theme.magenta;
    case 6:
      return terminal.theme.cyan;
    case 7:
      return terminal.theme.white;
    case 8:
      return terminal.theme.brightBlack;
    case 9:
      return terminal.theme.brightRed;
    case 10:
      return terminal.theme.brightGreen;
    case 11:
      return terminal.theme.brightYellow;
    case 12:
      return terminal.theme.brightBlue;
    case 13:
      return terminal.theme.brightMagenta;
    case 14:
      return terminal.theme.brightCyan;
    case 15:
      return terminal.theme.white;
  }

  if (colNum < 232) {
    var r = 0;
    var g = 0;
    var b = 0;

    final index = colNum - 16;

    for (var i = 0; i < index; i++) {
      if (b == 0) {
        b = 95;
      } else if (b < 255) {
        b += 40;
      } else {
        b = 0;
        if (g == 0) {
          g = 95;
        } else if (g < 255) {
          g += 40;
        } else {
          g = 0;
          if (r == 0) {
            r = 95;
          } else if (r < 255) {
            r += 40;
          } else {
            break;
          }
        }
      }
    }

    return TerminalColor.fromARGB(0xff, r, g, b);
  }

  return grayscaleColors[colNum.clamp(232, 255)]!;
}