1 2palette_idx <- function(id) { 3 ifelse( 4 id < 38, 5 id - (30 - 1), 6 ifelse( 7 id < 48, 8 -(id - (40 - 1)), 9 ifelse( 10 id < 98, 11 id - (90 - 9), 12 -(id - (100 - 9)) 13 ))) 14} 15 16palette_color <- function(x) { 17 c(x, palette = palette_idx(x[[1]])) 18} 19 20## ---------------------------------------------------------------------- 21## Styles 22 23codes <- list( 24 reset = list(0, c(0, 22, 23, 24, 27, 28, 29, 39, 49)), 25 bold = list(1, 22), # 21 isn't widely supported and 22 does the same thing 26 blurred = list(2, 22), 27 italic = list(3, 23), 28 underline = list(4, 24), 29 inverse = list(7, 27), 30 hidden = list(8, 28), 31 strikethrough = list(9, 29), 32 33 black = palette_color(list(30, 39)), 34 red = palette_color(list(31, 39)), 35 green = palette_color(list(32, 39)), 36 yellow = palette_color(list(33, 39)), 37 blue = palette_color(list(34, 39)), 38 magenta = palette_color(list(35, 39)), 39 cyan = palette_color(list(36, 39)), 40 white = palette_color(list(37, 39)), 41 silver = palette_color(list(90, 39)), 42 43 bgBlack = palette_color(list(40, 49)), 44 bgRed = palette_color(list(41, 49)), 45 bgGreen = palette_color(list(42, 49)), 46 bgYellow = palette_color(list(43, 49)), 47 bgBlue = palette_color(list(44, 49)), 48 bgMagenta = palette_color(list(45, 49)), 49 bgCyan = palette_color(list(46, 49)), 50 bgWhite = palette_color(list(47, 49)) 51) 52 53## ANSI fg color -> R color 54 55ansi_fg_r <- c( 56 "black" = "black", 57 "red" = "red", 58 "green" = "green", 59 "yellow" = "yellow", 60 "blue" = "blue", 61 "magenta" = "magenta", 62 "cyan" = "cyan", 63 "white" = "white", 64 "silver" = "grey" 65) 66 67ansi_fg_rgb <- col2rgb(ansi_fg_r) 68 69ansi_bg_r <- c( 70 "bgBlack" = "black", 71 "bgRed" = "red", 72 "bgGreen" = "green", 73 "bgYellow" = "yellow", 74 "bgBlue" = "blue", 75 "bgMagenta" = "magenta", 76 "bgCyan" = "cyan", 77 "bgWhite" = "white" 78) 79 80ansi_bg_rgb <- col2rgb(ansi_bg_r) 81 82# code can have length > 1, used to generate the closing tags for reset 83 84make_chr_ansi_tag <- function(code) 85 paste0('\u001b[', chr(code), 'm', collapse="") 86 87make_chr_style <- function(code) { 88 list( 89 open = make_chr_ansi_tag(codes[[code]][[1]]), 90 close = make_chr_ansi_tag(codes[[code]][[2]]), 91 palette = if (length(codes[[code]]) >= 3) codes[[code]][[3]] 92 ) 93} 94 95builtin_styles <- lapply(names(codes), make_chr_style) 96names(builtin_styles) <- names(codes) 97