## 
## ## Integrating with other classes
## 
## ### gt
## 
## - Consumption via new `fmt_auto()`?
## 
## FIXME
## 
## ### units
## 
## xxx{r numbers-17}
## library(units)
## 
## set_units.pillar_num <- function(x, ...) {
##   unclassed <- x
##   class(unclassed) <- NULL
##   set_units(unclassed, ...)
## }
## 
## m <- set_units(1:3, m)
## km <- set_units(1:3, km)
## 
## tibble(
##   sci_int = set_num_opts(m + km, notation = "sci"),
##   digits_int = set_num_opts(km + m, digits = 4),
##   sci_ext = set_units(num(1:3 + 0.001, notation = "sci"), km)
## )
## 
## tibble(
##   sci_int = set_num_opts(m, notation = "sci") + km,
##   digits_int = set_num_opts(km, digits = 4) + m,
##   sci_ext = set_units(num(1:3, notation = "sci"), m) + km
## )
## xxx
## 
## ### formattable
## 
## xxx{r numbers-18, error = TRUE}
## library(formattable)
## 
## pillar_shaft.formattable <- function(x, ...) {
##   pillar::new_pillar_shaft_simple(format(x), align = "right")
## }
## 
## pillar_shaft.formattable_currency <- function(x, ...) {
##   formattable <- attr(x, "formattable", exact = TRUE)
## 
##   pillar_shaft(num(unclass(x), digits = formattable$digits))
## }
## 
## pillar_shaft.formattable_percent <- function(x, ...) {
##   formattable <- attr(x, "formattable", exact = TRUE)
## 
##   pillar_shaft(num(unclass(x), digits = formattable$digits, label = "%", scale = 100))
## }
## 
## pillar_shaft.formattable_scientific <- function(x, ...) {
##   pillar_shaft(num(unclass(x), notation = "sci"))
## }
## 
## type_sum.formattable <- function(x) {
##   formattable <- attr(x, "formattable", exact = TRUE)
## 
##   if (inherits(x, "formattable_currency")) {
##     I(sub("^formattable_", "", class(x)[[1]]))
##   } else if (inherits(x, "formattable_percent")) {
##     I("%")
##   } else {
##     abbreviate(sub("^formattable_", "", class(x)[[1]]), 4)
##   }
## }
## 
## num_currency(1:3 * 100 + 0.1)
## num_percent(1:3 * 0.1 + 0.001)
## num_scientific(1:3 * 0.1 + 0.001)
## 
## tibble(
##   currency = num_currency(1:3 * 100 + 0.1),
##   percent = num_percent(1:3 * 0.1 + 0.001),
##   scientific = num_scientific(1:3 * 0.1 + 0.001)
## )
## xxx
## 
## ### scales
## 
## xxx{r numbers-scales, error = TRUE}
## library(scales)
## 
## x <- num(1:10 / 100, label = "%", scale = 100)
## 
## scales::squish(x)
## 
## x < 0
## x < 0L
## 
## scales::cscale(x, scales::rescale_pal())
## xxx
## 
## ### ggplot2
## 
## xxx{r numbers-19}
## library(ggplot2)
## 
## scale_type.pillar_num <- function(x, ...) {
##   "continuous"
## }
## 
## data.frame(x = x, y = 1:10) %>%
##   ggplot(aes(x = x, y = y)) %>%
##   + geom_point()
## xxx
## 
## ## Rule-based decoration
## 
## 
## 
## xxx{r}
## library(dplyr)
## 
## data_units <-
##   palmerpenguins::penguins %>%
##   mutate(across(ends_with("_mm"), set_units, "mm")) %>%
##   mutate(across(ends_with("_g"), set_units, "g"))
## 
## data_units %>%
##   mutate(bill_area = bill_length_mm * bill_depth_mm, .after = island)
## xxx
## 
## xxx{r eval = FALSE}
## data_decor <-
##   data_units %>%
##   decorate(year, digits = 0) %>%
##   decorate(where(is.numeric), digits = 3)
## xxx
## 
## xxx{r eval = FALSE}
## data_decor %>%
##   mutate(bill_area = bill_length_mm * bill_depth_mm, .after = island)
## xxx
## 
## xxx{r echo = FALSE}
## data_units %>%
##   mutate(bill_area = bill_length_mm * bill_depth_mm, .after = island) %>%
##   mutate(across(year, set_num_opts, digits = 0)) %>%
##   mutate(across(where(is.numeric), set_num_opts, digits = 3))
## xxx
##