1style_title <- style_bold 2 3#' Prepare a column title for formatting 4#' 5#' Call [format()] on the result to render column titles. 6#' 7#' @param x A character vector of column titles. 8#' @inheritParams ellipsis::dots_empty 9#' @export 10#' @examples 11#' format(new_pillar_title(names(iris))) 12new_pillar_title <- function(x, ...) { 13 "!!!!DEBUG new_pillar_title(`v(x)`)" 14 if (!missing(...)) { 15 check_dots_empty(action = warn) 16 } 17 18 if (is.null(x)) { 19 width <- 0L 20 } else if (all(is.na(x) | x == "")) { 21 width <- 0L 22 x <- NULL 23 } else { 24 width <- get_max_extent(format_title(x, width = Inf)) 25 stopifnot(!is.na(width)) 26 } 27 28 ret <- structure(list(x), class = "pillar_title") 29 30 ret <- set_width(ret, width) 31 ret <- set_min_width(ret, get_min_title_width(width)) 32 ret 33} 34 35get_min_title_width <- function(width) { 36 title_chars <- get_pillar_option_min_title_chars() 37 if (!is.numeric(title_chars) || length(title_chars) != 1 || title_chars < 0) { 38 stop("Option pillar.min_title_chars must be a nonnegative number", call. = FALSE) 39 } 40 41 if (is.infinite(title_chars)) { 42 return(width) 43 } 44 45 # We don't use the ellipsis if we don't truncate, a solution with min() 46 # is difficult to make work in all corner cases (and slower too) 47 if (width <= title_chars) { 48 return(width) 49 } 50 title_chars + get_extent(get_ellipsis()) 51} 52 53#' @export 54format.pillar_title <- function(x, width = NULL, ...) { 55 title <- x[[1]] 56 if (is.null(title)) { 57 return(character()) 58 } 59 60 if (is.null(width)) { 61 width <- get_width(x) 62 } 63 64 title <- format_title(title, width) 65 style_title(title) 66} 67 68format_full_pillar_title <- function(title) { 69 title <- format_title(title, Inf) 70 style_title(title) 71} 72