Make Fira Sans Condensed use more consistent in ggplot

Change-Id: Ifd3aa8544b0ef828dcfc51ad8d5ce15fa5b33cff
diff --git a/R/idsThemeR.R b/R/idsThemeR.R
index bbe510b..d370628 100644
--- a/R/idsThemeR.R
+++ b/R/idsThemeR.R
@@ -1,4 +1,34 @@
-idsBaseFontFamily <- 'Fira Sans Condensed'
+idsBaseFontFamily <- "Fira Sans Condensed"
+
+ids_font_available <- function(font_family) {
+  if (!requireNamespace("systemfonts", quietly = TRUE)) {
+    return(FALSE)
+  }
+  info <- tryCatch(systemfonts::font_info(font_family), error = function(e) NULL)
+  !is.null(info) && nrow(info) > 0
+}
+
+ids_resolve_font_family <- function(preferred = idsBaseFontFamily, fallback = "sans") {
+  candidates <- unique(stats::na.omit(c(preferred, idsBaseFontFamily, fallback)))
+  available <- vapply(candidates, ids_font_available, logical(1))
+  if (any(available)) {
+    return(candidates[which(available)[1]])
+  }
+
+  if (requireNamespace("sysfonts", quietly = TRUE)) {
+    try(sysfonts::font_add_google("Fira Sans Condensed", "Fira Sans Condensed"), silent = TRUE)
+    if (requireNamespace("showtext", quietly = TRUE)) {
+      try(showtext::showtext_auto(enable = TRUE), silent = TRUE)
+    }
+    candidates_after <- unique(c("Fira Sans Condensed", candidates))
+    available_after <- vapply(candidates_after, ids_font_available, logical(1))
+    if (any(available_after)) {
+      return(candidates_after[which(available_after)[1]])
+    }
+  }
+
+  fallback
+}
 
 
 #' Title
@@ -9,27 +39,27 @@
 #' @examples
 idsPaletteIDS <- function() {
   c(
-  '#F18700',
-  "#1E2662",
-  "#6A7702",
-  "#C10A25",
-  "#009EE3",
-  "#FAF3DE",
-  "#A7C2D2",
-  "#E2E8A4",
-  "#CFBCBD",
-  "#BCE3FA",
-  "#5C401C",
-  "#000000",
-  "#354C32",
-  "#5C131C",
-  "#273582",
-  "#FFE3BF",
-  "#8994E1",
-  "#A3B29E",
-  "#DF9599",
-  "#79B8DB"
-)
+    "#F18700",
+    "#1E2662",
+    "#6A7702",
+    "#C10A25",
+    "#009EE3",
+    "#FAF3DE",
+    "#A7C2D2",
+    "#E2E8A4",
+    "#CFBCBD",
+    "#BCE3FA",
+    "#5C401C",
+    "#000000",
+    "#354C32",
+    "#5C131C",
+    "#273582",
+    "#FFE3BF",
+    "#8994E1",
+    "#A3B29E",
+    "#DF9599",
+    "#79B8DB"
+  )
 }
 
 #' Title
@@ -40,27 +70,27 @@
 #' @examples
 idsPaletteD3 <- function() {
   c(
-  '#EB7C31',
-  "#1F77B4",
-  "#2CA02C",
-  "#D62728",
-  "#9467BD",
-  "#8C564B",
-  "#E377C2",
-  "#7F7F7F",
-  "#BCBD22",
-  "#17BECF",
-  "#AEC7E8",
-  "#FFBB78",
-  "#98DF8A",
-  "#FF9896",
-  "#C5B0D5",
-  "#C49C94",
-  "#F7B6D2",
-  "#C7C7C7",
-  "#DBDB8D",
-  "#9EDAE5"
-)
+    "#EB7C31",
+    "#1F77B4",
+    "#2CA02C",
+    "#D62728",
+    "#9467BD",
+    "#8C564B",
+    "#E377C2",
+    "#7F7F7F",
+    "#BCBD22",
+    "#17BECF",
+    "#AEC7E8",
+    "#FFBB78",
+    "#98DF8A",
+    "#FF9896",
+    "#C5B0D5",
+    "#C49C94",
+    "#F7B6D2",
+    "#C7C7C7",
+    "#DBDB8D",
+    "#9EDAE5"
+  )
 }
 
 #' Title
@@ -84,7 +114,7 @@
 #' @examples
 idsPaletteGreyscale <- function() {
   c(
-  "#000000", "#B2B0AD", "#737373", "#D8D7D6", "#B2B0AD", "#8C8984"
+    "#000000", "#B2B0AD", "#737373", "#D8D7D6", "#B2B0AD", "#8C8984"
   )
 }
 
@@ -125,13 +155,13 @@
 #'
 #' \url{https://github.com/d3/d3}
 #'
-ids_pal <- function(palette="default") {
+ids_pal <- function(palette = "default") {
   values <- switch(tolower(palette),
-                   ids = idsPaletteIDS(),
-                   gray = idsPaletteGreyscale(),
-                   grey = idsPaletteGreyscale(),
-                   poly20 = idsPalettePoly20(),
-                   idsPaletteD3()
+    ids = idsPaletteIDS(),
+    gray = idsPaletteGreyscale(),
+    grey = idsPaletteGreyscale(),
+    poly20 = idsPalettePoly20(),
+    idsPaletteD3()
   )
   f <- scales::manual_pal(values)
   attr(f, "max_n") <- length(values)