{
  "_id": "6a4e2b06b3c7a243658e3782",
  "Package": "AddFonts",
  "Title": "Download and Register Fonts from GDPR-Compliant Providers for\nUse in R Graphics",
  "Version": "1.0.0",
  "Authors@R": "person(\"Guillaume\", \"Noblet\", , \"gnoblet@zaclys.net\", role = c(\"aut\", \"cre\", \"cph\"))",
  "Description": "Download and register fonts from GDPR-compliant providers\nfor use in R graphics. Supports weight-based providers (e.g.\nBunny Fonts, <https://fonts.bunny.net/>) and file-based\nproviders (e.g. Bye Bye Binary,\n<https://gitlab.com/bye-bye-binary>). Architecture allows for\neasy additions of font providers.",
  "License": "GPL (>= 3)",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE, packages = \"roxytypes\")",
  "Config/Needs/documentation": "roxytypes",
  "SystemRequirements": "woff2 (>= 1.0.2, optional): needed only for\nweight-based providers that serve woff2 (e.g. Bunny Fonts).\nwoff2-tools (rpm) or woff2 (deb) or woff2 (arch).",
  "Config/testthat/edition": "3",
  "URL": "https://codeberg.org/gnoblet/AddFonts,\nhttps://gnoblet.r-universe.dev/AddFonts",
  "BugReports": "https://codeberg.org/gnoblet/AddFonts/issues",
  "Collate": "'CacheMeta.R' 'CacheEntry.R' 'CacheEntryList.R'\n'FontProvider.R' 'FontProviderFile.R' 'FontProviderWeight.R'\n'add_font.R' 'as_CacheEntryList.R' 'as_FontProvider.R'\n'as_list.R' 'assert.R' 'cache.R' 'cache_ttf_path.R'\n'cache_variant_paths.R' 'conv_fun.R' 'download_and_cache.R'\n'download_and_cache_file.R' 'download_variant_file.R'\n'download_variant_generic.R' 'download_weights.R'\n'first_use_message.R' 'helpers.R' 'preview_font.R'\n'provider_registry.R' 'register_from_cache.R'\n'update_download_and_cache.R' 'utils.R' 'woff2_to_ttf.R'\n'zzz.R'",
  "Config/roxygen2/version": "8.0.0",
  "Config/pak/sysreqs": "cmake libfreetype6-dev make libpng-dev libuv1-dev\nlibssl-dev zlib1g-dev",
  "Repository": "https://gnoblet.r-universe.dev",
  "Date/Publication": "2026-07-08 09:17:34 UTC",
  "RemoteUrl": "https://codeberg.org/gnoblet/AddFonts",
  "RemoteRef": "HEAD",
  "RemoteSha": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-07-08 10:44:24 UTC",
    "User": "root"
  },
  "Author": "Guillaume Noblet [aut, cre, cph]",
  "Maintainer": "Guillaume Noblet <gnoblet@zaclys.net>",
  "_user": "gnoblet",
  "_type": "src",
  "_file": "AddFonts_1.0.0.tar.gz",
  "_fileid": "https://r2.ropensci.org/d8c66afc960b95c8025dab9eb0c87def2312c8f485694db87e98f977b2e0339c",
  "_filesize": 768811,
  "_sha256": "d8c66afc960b95c8025dab9eb0c87def2312c8f485694db87e98f977b2e0339c",
  "_expires": "2026-10-16T10:48:35.000Z",
  "_created": "2026-07-08T10:44:24.000Z",
  "_published": "2026-07-08T10:48:38.188Z",
  "_jobs": [
    {
      "job": 85848636793,
      "time": 135,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "ERROR",
      "artifact": "8165789227"
    },
    {
      "job": 85848636828,
      "time": 183,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "ERROR",
      "artifact": "8165808809"
    },
    {
      "job": 85848636762,
      "time": 95,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "ERROR",
      "artifact": "8165773863"
    },
    {
      "job": 85848636798,
      "time": 106,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "ERROR",
      "artifact": "8165777597"
    },
    {
      "job": 85848070305,
      "time": 181,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "8165736133"
    },
    {
      "job": 85848636776,
      "time": 112,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "8165780569"
    },
    {
      "job": 85848636782,
      "time": 134,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "ERROR",
      "artifact": "8165788547"
    },
    {
      "job": 85848636786,
      "time": 81,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "ERROR",
      "artifact": "8165769251"
    },
    {
      "job": 85848636789,
      "time": 93,
      "config": "windows-release",
      "r": "4.6.1",
      "check": "ERROR",
      "artifact": "8165773209"
    }
  ],
  "_host": "GitHub-Actions",
  "_buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767",
  "_status": "success",
  "_upstream": "https://codeberg.org/gnoblet/AddFonts",
  "_commit": {
    "id": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
    "author": "gnoblet <gnoblet@zaclys.net>",
    "committer": "gnoblet <gnoblet@zaclys.net>",
    "message": "docs: initial site build\n",
    "time": 1783502254
  },
  "_maintainer": {
    "name": "Guillaume Noblet",
    "email": "gnoblet@zaclys.net",
    "login": "gnoblet",
    "description": "",
    "uuid": 19927541
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "sysfonts",
      "role": "Imports"
    },
    {
      "package": "httr2",
      "role": "Imports"
    },
    {
      "package": "fs",
      "role": "Imports"
    },
    {
      "package": "rappdirs",
      "role": "Imports"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "S7",
      "role": "Imports"
    },
    {
      "package": "glue",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "role": "Imports"
    },
    {
      "package": "showtext",
      "role": "Imports"
    },
    {
      "package": "testthat",
      "version": ">= 3.3.0",
      "role": "Suggests"
    },
    {
      "package": "usethis",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    }
  ],
  "_owner": "codeberg-gnoblet",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-07",
      "n": 2
    },
    {
      "week": "2026-15",
      "n": 21
    },
    {
      "week": "2026-28",
      "n": 5
    }
  ],
  "_tags": [
    {
      "name": "v0.1.0",
      "date": "2026-02-07"
    },
    {
      "name": "v0.2.0",
      "date": "2026-02-12"
    },
    {
      "name": "1.0.0",
      "date": "2026-07-08"
    }
  ],
  "_userbio": {
    "uuid": 19927541,
    "type": "user",
    "name": "Guillaume NOBLET",
    "followers": 33
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/AddFonts"
  },
  "_devurl": "https://codeberg.org/gnoblet/addfonts",
  "_searchresults": 7,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/AddFonts.html",
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_cranurl": false,
  "_exports": [
    "add_font",
    "cache_clean",
    "FontProviderFile",
    "FontProviderWeight",
    "list_providers",
    "preview_font",
    "register_provider",
    "unregister_provider"
  ],
  "_help": [
    {
      "page": "dot-add_font_direct_url",
      "title": "Route add_font() for provider = \"url\" (direct download)",
      "topics": [
        ".add_font_direct_url"
      ]
    },
    {
      "page": "dot-add_font_file",
      "title": "Route add_font() for a file-based provider",
      "topics": [
        ".add_font_file"
      ]
    },
    {
      "page": "dot-add_font_local",
      "title": "Route add_font() for provider = \"file\" (local copies)",
      "topics": [
        ".add_font_local"
      ]
    },
    {
      "page": "dot-add_font_weight",
      "title": "Route add_font() for a weight-based provider",
      "topics": [
        ".add_font_weight"
      ]
    },
    {
      "page": "dot-fetch_url_to_cache",
      "title": "Download a URL to a local file via httr2",
      "topics": [
        ".fetch_url_to_cache"
      ]
    },
    {
      "page": "dot-persist_cache_entry",
      "title": "Build a CacheEntry, persist the cache index, and return the entry",
      "topics": [
        ".persist_cache_entry"
      ]
    },
    {
      "page": "dot-validate_variants",
      "title": "Validate a variants list",
      "topics": [
        ".validate_variants"
      ]
    },
    {
      "page": "add_font",
      "title": "Add a font to the local cache and register it for use",
      "topics": [
        "add_font"
      ]
    },
    {
      "page": "as_CacheEntryList",
      "title": "Read from list",
      "topics": [
        "as_CacheEntryList"
      ]
    },
    {
      "page": "as_FontProvider",
      "title": "Construct a FontProvider subclass from a named list",
      "topics": [
        "as_FontProvider"
      ]
    },
    {
      "page": "as_list",
      "title": "As list",
      "topics": [
        "as_list"
      ]
    },
    {
      "page": "cache_clean",
      "title": "Clean cache entries",
      "concept": [
        "cache"
      ],
      "topics": [
        "cache_clean"
      ]
    },
    {
      "page": "cache_file_path",
      "title": "Compute canonical cache path for a file-based (symbolic-variant) font file",
      "topics": [
        "cache_file_path"
      ]
    },
    {
      "page": "cache_get",
      "title": "Get certain families from CacheEntryList",
      "concept": [
        "cache"
      ],
      "topics": [
        "cache_get"
      ]
    },
    {
      "page": "cache_get_variants",
      "title": "Check which symbolic variant keys are present in a CacheEntry",
      "concept": [
        "cache"
      ],
      "topics": [
        "cache_get_variants"
      ]
    },
    {
      "page": "cache_get_weights",
      "title": "Check which weights are available in a cache entry",
      "concept": [
        "cache"
      ],
      "topics": [
        "cache_get_weights"
      ]
    },
    {
      "page": "cache_read",
      "title": "Read cache entry from disk",
      "concept": [
        "cache"
      ],
      "topics": [
        "cache_read"
      ]
    },
    {
      "page": "cache_remove",
      "title": "Delete entry from cache",
      "concept": [
        "cache"
      ],
      "topics": [
        "cache_remove"
      ]
    },
    {
      "page": "cache_set",
      "title": "Set cache entries",
      "topics": [
        "cache_set"
      ]
    },
    {
      "page": "cache_ttf_filename",
      "title": "Compose canonical filename for a cached TTF",
      "topics": [
        "cache_ttf_filename"
      ]
    },
    {
      "page": "cache_ttf_path",
      "title": "Compute canonical cache path for a TTF file",
      "topics": [
        "cache_ttf_path"
      ]
    },
    {
      "page": "cache_variant_paths",
      "title": "Compute paths used for caching provider artifacts and any conversion intermediate files.",
      "topics": [
        "cache_variant_paths"
      ]
    },
    {
      "page": "cache_write",
      "title": "Write CacheEntryList to disk as JSON",
      "concept": [
        "cache"
      ],
      "topics": [
        "cache_write"
      ]
    },
    {
      "page": "CacheEntry",
      "title": "S7-backed cache entry (CacheEntry)",
      "topics": [
        "CacheEntry"
      ]
    },
    {
      "page": "CacheEntryList",
      "title": "S7 list of cache entries (CacheEntryList)",
      "topics": [
        "CacheEntryList"
      ]
    },
    {
      "page": "CacheMeta",
      "title": "S7-backed cache metadata (CacheMeta)",
      "topics": [
        "CacheMeta"
      ]
    },
    {
      "page": "conv_fun",
      "title": "Resolve a conversion name to the converter function used by the package (currently only 'woff2_to_ttf').",
      "topics": [
        "conv_fun"
      ]
    },
    {
      "page": "copy_and_cache_local",
      "title": "Copy local font files to cache and create a cache entry",
      "topics": [
        "copy_and_cache_local"
      ]
    },
    {
      "page": "copy_variant_to_cache",
      "title": "Copy one local font file into the cache",
      "topics": [
        "copy_variant_to_cache"
      ]
    },
    {
      "page": "delete_files",
      "title": "Delete files",
      "topics": [
        "delete_files"
      ]
    },
    {
      "page": "download_and_cache",
      "title": "Download font variants and add to cache",
      "topics": [
        "download_and_cache"
      ]
    },
    {
      "page": "download_and_cache_file",
      "title": "Download all variants of a file-based font and add to cache",
      "topics": [
        "download_and_cache_file"
      ]
    },
    {
      "page": "download_and_cache_url",
      "title": "Download direct-URL font variants and add to cache",
      "topics": [
        "download_and_cache_url"
      ]
    },
    {
      "page": "download_variant_file",
      "title": "Download one font file from a file-based provider",
      "topics": [
        "download_variant_file"
      ]
    },
    {
      "page": "download_variant_generic",
      "title": "Download and (if needed) convert a provider artifact to a local TTF file for a given family/weight/style and return the local path.",
      "topics": [
        "download_variant_generic"
      ]
    },
    {
      "page": "download_weights",
      "title": "Download font files for specified weights",
      "topics": [
        "download_weights"
      ]
    },
    {
      "page": "FontProvider",
      "title": "Base font provider class (FontProvider)",
      "topics": [
        "FontProvider"
      ]
    },
    {
      "page": "FontProviderDirectURL",
      "title": "Sentinel provider for direct-URL font downloads (provider = \"url\")",
      "topics": [
        "FontProviderDirectURL"
      ]
    },
    {
      "page": "FontProviderFile",
      "title": "File-based font provider (FontProviderFile)",
      "topics": [
        "FontProviderFile"
      ]
    },
    {
      "page": "FontProviderLocal",
      "title": "Sentinel provider for local font files (provider = \"file\")",
      "topics": [
        "FontProviderLocal"
      ]
    },
    {
      "page": "FontProviderWeight",
      "title": "Weight-based font provider (FontProviderWeight)",
      "topics": [
        "FontProviderWeight"
      ]
    },
    {
      "page": "get_cache_dir",
      "title": "Get the package cache directory for fonts",
      "topics": [
        "get_cache_dir"
      ]
    },
    {
      "page": "get_provider_details",
      "title": "Get provider details from internal data",
      "topics": [
        "get_provider_details"
      ]
    },
    {
      "page": "list_providers",
      "title": "List all available font providers",
      "topics": [
        "list_providers"
      ]
    },
    {
      "page": "maybe_show_first_use",
      "title": "Show a provider's first-use message, at most once per session",
      "topics": [
        "maybe_show_first_use"
      ]
    },
    {
      "page": "preview_font",
      "title": "Preview a font by ensuring it's installed and drawing a sample string",
      "topics": [
        "preview_font"
      ]
    },
    {
      "page": "register_from_cache",
      "title": "Validate a cache entry and register the font with sysfonts if the required files exist. Returns the prepared 'files' list or 'NULL' when registration cannot proceed.",
      "topics": [
        "register_from_cache"
      ]
    },
    {
      "page": "register_provider",
      "title": "Register a font provider for the current session",
      "topics": [
        "register_provider"
      ]
    },
    {
      "page": "safe_id",
      "title": "Create a filesystem-safe id from a name",
      "topics": [
        "safe_id"
      ]
    },
    {
      "page": "unregister_provider",
      "title": "Remove a font provider from the session registry",
      "topics": [
        "unregister_provider"
      ]
    },
    {
      "page": "update_download_and_cache",
      "title": "Download missing weights and update an existing cache entry",
      "topics": [
        "update_download_and_cache"
      ]
    },
    {
      "page": "woff2_to_ttf",
      "title": "Convert a .woff2 font to .ttf using the system 'woff2_decompress' tool",
      "topics": [
        "woff2_to_ttf"
      ]
    }
  ],
  "_pkglogo": "https://codeberg.org/gnoblet/AddFonts/raw/HEAD/man/figures/logo.png",
  "_readme": "https://codeberg.org/gnoblet/AddFonts/raw/HEAD/README.md",
  "_rundeps": [
    "askpass",
    "cli",
    "curl",
    "fs",
    "glue",
    "httr2",
    "jsonlite",
    "lifecycle",
    "magrittr",
    "openssl",
    "R6",
    "rappdirs",
    "rlang",
    "S7",
    "showtext",
    "showtextdb",
    "sys",
    "sysfonts",
    "vctrs",
    "withr"
  ],
  "_score": 2.1760912590556813,
  "_indexed": true,
  "_nocasepkg": "addfonts",
  "_universes": [
    "gnoblet",
    "codeberg-gnoblet"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "1.0.0",
      "date": "2026-07-08T10:46:36.000Z",
      "distro": "resolute",
      "commit": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
      "fileid": "https://r2.ropensci.org/cc449d0d3f76f099f0723b577643f7d9303b128c1e6c03c890acf7c8ccbb0650",
      "status": "failure",
      "check": "ERROR",
      "buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "1.0.0",
      "date": "2026-07-08T10:47:23.000Z",
      "distro": "resolute",
      "commit": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
      "fileid": "https://r2.ropensci.org/672aeb8ff2ef754ea865c219c5af73f0922c60027d41e69462636e3c14aee0f6",
      "status": "failure",
      "check": "ERROR",
      "buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "1.0.0",
      "date": "2026-07-08T10:46:05.000Z",
      "commit": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
      "fileid": "https://r2.ropensci.org/951b17c43e9b85fe28627993e7f868a4200997afc192ef4fe5db764639ead8b1",
      "status": "failure",
      "check": "ERROR",
      "buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "1.0.0",
      "date": "2026-07-08T10:46:06.000Z",
      "commit": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
      "fileid": "https://r2.ropensci.org/bfcbf62c5cd41363c3b4e29353c25bd220b4291a1fe7fd464c93a1d323c5065c",
      "status": "failure",
      "check": "ERROR",
      "buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "1.0.0",
      "date": "2026-07-08T10:46:35.000Z",
      "commit": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
      "fileid": "https://r2.ropensci.org/27a78889516988a2e4c8c6e98fcba5acfbe915636b8c125bcaaff90c123caccf",
      "status": "success",
      "buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "1.0.0",
      "date": "2026-07-08T10:46:24.000Z",
      "commit": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
      "fileid": "https://r2.ropensci.org/79e803852dedeba25f218339bef4222dd1d09d216bd26d61cd5b2de041f60c77",
      "status": "failure",
      "check": "ERROR",
      "buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "1.0.0",
      "date": "2026-07-08T10:45:37.000Z",
      "commit": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
      "fileid": "https://r2.ropensci.org/01584d86d3f175d51e6387e2dcb11925e63ec0cc29d7e4fa302cb31c0342d674",
      "status": "failure",
      "check": "ERROR",
      "buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "1.0.0",
      "date": "2026-07-08T10:45:45.000Z",
      "commit": "e781ad02db13bd274ca7e4d6cd421e3dec8ab3c6",
      "fileid": "https://r2.ropensci.org/591381dc24f79ef04d4c3b4af30f193b6c03fbf225566311af66ac20435641c5",
      "status": "failure",
      "check": "ERROR",
      "buildurl": "https://github.com/r-universe/gnoblet/actions/runs/28936489767"
    }
  ]
}