#ifndef DYN_ANSI_CODES_H
#define DYN_ANSI_CODES_H

#include <string>

	#define ANSI_BLACK   "\033[30m"
	#define ANSI_RED     "\033[31m"
	#define ANSI_GREEN   "\033[32m"
	#define ANSI_YELLOW  "\033[33m"
	#define ANSI_BLUE    "\033[34m"
	#define ANSI_MAGENTA "\033[35m"
	#define ANSI_CYAN    "\033[36m"
	#define ANSI_WHITE   "\033[37m"

	#define ANSI_RESET   "\033[0m"
	#define ANSI_BOLD    "\033[1m"
	
	#define ANSI_LIGHT_BLACK   "\033[90m"
	#define ANSI_LIGHT_RED     "\033[91m"
	#define ANSI_LIGHT_GREEN   "\033[92m"
	#define ANSI_LIGHT_YELLOW  "\033[93m"
	#define ANSI_LIGHT_BLUE    "\033[94m"
	#define ANSI_LIGHT_MAGENTA "\033[95m"
	#define ANSI_LIGHT_CYAN    "\033[96m"
	#define ANSI_LIGHT_WHITE   "\033[97m"

#define ANSI_CLEAN_BLUE_1_256    "\033[38;5;17m"
#define ANSI_CLEAN_BLUE_2_256    "\033[38;5;18m"
#define ANSI_CLEAN_BLUE_3_256    "\033[38;5;19m"
#define ANSI_CLEAN_BLUE_4_256    "\033[38;5;20m"
#define ANSI_CLEAN_BLUE_5_256    "\033[38;5;21m"

#define ANSI_SKY_BLUE_1_256    "\033[38;5;27m"
#define ANSI_SKY_BLUE_2_256    "\033[38;5;33m"
#define ANSI_SKY_BLUE_3_256    "\033[38;5;39m"
#define ANSI_SKY_BLUE_4_256    "\033[38;5;45m"
#define ANSI_SKY_BLUE_5_256    "\033[38;5;51m"

#define ANSI_ORANGE_1_256    "\033[38;5;202m"
#define ANSI_ORANGE_2_256    "\033[38;5;208m"
#define ANSI_ORANGE_3_256    "\033[38;5;214m"
#define ANSI_ORANGE_4_256    "\033[38;5;220m"
#define ANSI_YELLOW_256    "\033[38;5;226m"

#define ANSI_DEEPEST_PURPLE_256    "\033[38;5;89m"
#define ANSI_DEEPER_PURPLE_256    "\033[38;5;125m"
#define ANSI_DEEP_PURPLE_256    "\033[38;5;161m"
#define ANSI_PURPLE_256    "\033[38;5;197m"

#define ANSI_DARK_GREEN_256    "\033[38;5;22m"
#define ANSI_BRIGHT_GREEN_256    "\033[38;5;46m"

#define ANSI_FULL_RED_256    "\033[38;5;196m"

#define ANSI_PALE_GREEN_256    "\033[38;5;29m"
#define ANSI_AQUA_256    "\033[38;5;73m"

#define ANSI_PALE_YELLOW_1_256   "\033[38;5;226m"
#define ANSI_PALE_YELLOW_2_256   "\033[38;5;227m"
#define ANSI_PALE_YELLOW_3_256   "\033[38;5;228m"
#define ANSI_PALE_YELLOW_4_256   "\033[38;5;229m"
#define ANSI_PALE_YELLOW_5_256   "\033[38;5;230m"

#define ANSI_GREY_1_256   "\033[38;5;232m"
#define ANSI_GREY_2_256   "\033[38;5;233m"
#define ANSI_GREY_3_256   "\033[38;5;234m"
#define ANSI_GREY_4_256   "\033[38;5;235m"
#define ANSI_GREY_5_256   "\033[38;5;236m"
#define ANSI_GREY_6_256   "\033[38;5;237m"
#define ANSI_GREY_7_256   "\033[38;5;238m"
#define ANSI_GREY_8_256   "\033[38;5;239m"
#define ANSI_GREY_9_256   "\033[38;5;240m"
#define ANSI_GREY_10_256   "\033[38;5;241m"
#define ANSI_GREY_11_256   "\033[38;5;242m"
#define ANSI_GREY_12_256   "\033[38;5;243m"
#define ANSI_GREY_13_256   "\033[38;5;244m"
#define ANSI_GREY_14_256   "\033[38;5;245m"
#define ANSI_GREY_15_256   "\033[38;5;246m"
#define ANSI_GREY_16_256   "\033[38;5;247m"
#define ANSI_GREY_17_256   "\033[38;5;248m"
#define ANSI_GREY_18_256   "\033[38;5;249m"
#define ANSI_GREY_19_256   "\033[38;5;250m"
#define ANSI_GREY_20_256   "\033[38;5;251m"
#define ANSI_GREY_21_256   "\033[38;5;252m"
#define ANSI_GREY_22_256   "\033[38;5;253m"
#define ANSI_GREY_23_256   "\033[38;5;254m"
#define ANSI_GREY_24_256   "\033[38;5;255m"

#endif
