# Inspired by GNU Guix’ guix-install.sh, thank you!
chk_ANSIterm()
{
  local ansi_term=1   # failure

  if [ -t 2 ]; then
    if [ "${TERM+set}" == 'set' ]; then
      case "$TERM" in
        xterm*|rxvt*|urxvt*|linux*|vt*|eterm*|screen*)
          ansi_term=0   # success
          ;;
        *)
          ;;
      esac
    fi
  fi
  return $ansi_term
}

declare_ANSIescapes()
{
  # bash specific way to get escape characters: normal=$'\033[0m'
  # portable way to get escape characters: normal="$(printf '\033[0m')"
  # Remarks edited according to: https://en.wikipedia.org/wiki/ANSI_escape_code

  # SET
  declare -g -r SET_NORMAL="$(printf '\033[0m')"          # reset / normal
  declare -g -r SET_BOLD="$(printf '\033[1m')"
  declare -g -r SET_DIM="$(printf '\033[2m')"
  declare -g -r SET_ITALIC="$(printf '\033[3m')"          # not widely supported
  declare -g -r SET_UNDERLINE="$(printf '\033[4m')"
  declare -g -r SET_BLINK="$(printf '\033[5m')"
  declare -g -r SET_RAPIDBLINK="$(printf '\033[6m')"      # not widely supported
  declare -g -r SET_REVERSE="$(printf '\033[7m')"
  declare -g -r SET_HIDDEN="$(printf '\033[8m')"          # not widely supported
  declare -g -r SET_STRIKE="$(printf '\033[9m')"
  declare -g -r SET_OVERLINE="$(printf '\033[53m')"

  # RESET
  declare -g -r CLR_BOLD="$(printf '\033[21m')"           # not bold / doubly underlined
  declare -g -r CLR_INTENSITY="$(printf '\033[22m')"      # normal intensity, neither bold nor dim/faint
  declare -g -r CLR_ITALIC="$(printf '\033[23m')"         # not widely supported
  declare -g -r CLR_UNDERLINE="$(printf '\033[24m')"
  declare -g -r CLR_BLINK="$(printf '\033[25m')"
  declare -g -r CLR_REVERSE="$(printf '\033[27m')"
  declare -g -r CLR_HIDDEN="$(printf '\033[28m')"         # not widely supported
  declare -g -r CLR_STRIKE="$(printf '\033[29m')"
  declare -g -r CLR_OVERLINE="$(printf '\033[55m')"

  # FOREGROUND
  declare -g -r FG_BLACK="$(printf '\033[30m')"
  declare -g -r FG_RED="$(printf '\033[31m')"
  declare -g -r FG_GREEN="$(printf '\033[32m')"
  declare -g -r FG_YELLOW="$(printf '\033[33m')"
  declare -g -r FG_BLUE="$(printf '\033[34m')"
  declare -g -r FG_MAGENTA="$(printf '\033[35m')"
  declare -g -r FG_CYAN="$(printf '\033[36m')"
  declare -g -r FG_LIGHTGRAY="$(printf '\033[37m')"
  declare -g -r FG_DEFAULT="$(printf '\033[39m')"
  declare -g -r FG_DARKGRAY="$(printf '\033[90m')"
  declare -g -r FG_LIGHTRED="$(printf '\033[91m')"
  declare -g -r FG_LIGHTGREEN="$(printf '\033[92m')"
  declare -g -r FG_LIGHYELLOW="$(printf '\033[93m')"
  declare -g -r FG_LIGHTBLUE="$(printf '\033[94m')"
  declare -g -r FG_LIGHTMAGENTA="$(printf '\033[95m')"
  declare -g -r FG_LIGHTCYAN="$(printf '\033[96m')"
  declare -g -r FG_WHITE="$(printf '\033[97m')"

  # BACKGROUND
  declare -g -r BG_DEFAULT="$(printf '\033[49m')"
  declare -g -r BG_BLACK="$(printf '\033[40m')"
  declare -g -r BG_RED="$(printf '\033[41m')"
  declare -g -r BG_GREEN="$(printf '\033[42m')"
  declare -g -r BG_YELLOW="$(printf '\033[43m')"
  declare -g -r BG_BLUE="$(printf '\033[44m')"
  declare -g -r BG_MAGENTA="$(printf '\033[45m')"
  declare -g -r BG_CYAN="$(printf '\033[46m')"
  declare -g -r BG_LIGHTGRAY="$(printf '\033[47m')"
  declare -g -r BG_DARKGRAY="$(printf '\033[100m')"
  declare -g -r BG_LIGHTRED="$(printf '\033[101m')"
  declare -g -r BG_LIGHTGREEN="$(printf '\033[102m')"
  declare -g -r BG_LIGHTYELLOW="$(printf '\033[103m')"
  declare -g -r BG_LIGHTBLUE="$(printf '\033[104m')"
  declare -g -r BG_LIGHTMAGENTA="$(printf '\033[105m')"
  declare -g -r BG_LIGHTCYAN="$(printf '\033[106m')"
  declare -g -r BG_WHITE="$(printf '\033[107m')"
}

chk_ANSIterm && declare_ANSIescapes
