fontawesome icon indicating copy to clipboard operation
fontawesome copied to clipboard

{fontawesome} doesn't recognize aliases (though they render just fine)

Open mmuurr opened this issue 1 year ago • 3 comments

icon("times")
# This Font Awesome icon ('times') does not exist:
# * if providing a custom `html_dependency` these `name` checks can
#   be deactivated with `verify_fa = FALSE`

Possibly related to #76?

This seems to be happening (to me, at least) specifically with FA's icon aliases*. Some icons have accumulated lots of aliases over the years, e.g. the x-multiplication symbol: officially "xmark", but acceptable aliases are "close", "multiply", "times", and "remove".

In any case, the newer {fontawesome} package doesn't seem to extract aliases when building fa_tbl (nor maintains a separate alias table). The icons.json file is parsed, however, and here's an example entry (for "xmark"), note the aliases property:

  "xmark": {
    "changes": [
      "1.0.0",
      "5.0.0",
      "5.0.13",
      "5.11.0",
      "5.11.1",
      "6.0.0-beta1"
    ],
    "ligatures": [],
    "search": {
      "terms": []
    },
    "styles": [
      "solid"
    ],
    "unicode": "f00d",
    "aliases": {
      "names": [
        "close",
        "multiply",
        "remove",
        "times"
      ],
      "unicodes": {
        "composite": [
          "1f5d9",
          "2715",
          "2716",
          "274c",
          "d7"
        ],
        "secondary": [
          "10f00d"
        ]
      }
    },
    "label": "X Mark",
    "voted": false,
    "svg": {
      "solid": {
        "last_modified": 1641078268587,
        "raw": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"><path d=\"M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z\"/></svg>",
        "viewBox": [
          0,
          0,
          320,
          512
        ],
        "width": 320,
        "height": 512,
        "path": "M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"
      }
    },
    "free": [
      "solid"
    ]
  },

So I think this can be solved pretty easily, and I'm happy to submit a PR, though I don't know if you'd prefer to have an ancillary table (like fa_tbl_shims), or add (partially redundant, apart from the icon name) rows to fa_tbl itself. Unlike with the fa_tbl_shims, the aliases represent a one-to-many relationship, so the left-join here doesn't work so well, and instead it might make sense to build a master inverted index (with all names: v6, v4, and aliases) to find the fa_tbl row (if it exists).

(* something something about naming and cache invalidation being the two hardest problems in computing)

mmuurr avatar Aug 15 '22 03:08 mmuurr

@mmuurr regarding the table including v4 and v6 names you mentioned: this might be of interest.

ismirsehregal avatar Aug 16 '22 08:08 ismirsehregal

Do we need a lookup for icons renamed in v5?

The PR linked to by @ismirsehregal contains pointers:

  • v4 -> v5 table: https://fontawesome.com/docs/web/setup/upgrade/upgrade-from-v4#icons-renamed-since-version-4
  • v5 -> v6 table: https://fontawesome.com/docs/web/setup/upgrade/whats-changed#icons-renamed-in-version-6
fontawesome::fa("times")
#> Error: This Font Awesome icon ('times') does not exist
fontawesome::fa("xmark")
#> Warning: fontawesome does not support this output. Icon(s) will not show.

Created on 2022-08-25 by the reprex package (v2.0.1)

krlmlr avatar Aug 25 '22 09:08 krlmlr

@krlmlr this is v4 -> v6:

  • v4 -> v5 table: https://fontawesome.com/docs/web/setup/upgrade/upgrade-from-v4#icons-renamed-since-version-4

v4 -> v5 (if needed) can be found here:

https://fontawesome.com/v5/docs/web/setup/upgrade-from-v4#icon-name-changes-between-version-4-and-5

ismirsehregal avatar Aug 25 '22 10:08 ismirsehregal

Thanks for posting this issue. I'm addressing this as part of https://github.com/rstudio/fontawesome/pull/96. With that, all past known aliases for icons available in the v6.2 set (taken from Font Awesome's metadata) should now work when used as short names (e.g., fa("times")).

rich-iannone avatar Oct 18 '22 17:10 rich-iannone