2

I am looking at a PDF which is using the `European Pi 3' font. As you can see here, this font doesn't render the characters like actualy characters, but like different icons. The 'P' is a big circle, 'S' is a telephone, 'V' is a pointing finger etc.

Wingdings is a similar example that comes to mind.

Is there a name for fonts like this, i.e. which do not render characters, but random symbols?

Also, is there a way to programatically/systematically know if a font belongs to this category?

1

The most common name I know for these are dingbat fonts. For example, this is what the respective category is called on Font Squirrel, for example. You may also find them being called symbol fonts.

In times of Unicode, such fonts should ideally use dedicated Unicode areas, such as Dingbats, Emoticons, or the private-use areas for this, but realistically many dingbat fonts won’t adhere to this. Thus you have to rely on some heuristics to identify them. What is best for you really depends on your application and is a compromise between false positives, false negatives, and effort.

For example, the following is a low-effort way to identify most non-dingbat fonts without false positives (i.e., no dingbat fonts should be identified as non-dingbat):

  • Does the font feature all basic Latin characters (a–z, A–Z)?

    • If no, it’s very likely a dingbat or non-Latin font.

    • If yes, do all basic Latin characters have the expected number of paths?
      Paths are how outlines of fonts are stored (the most notable exception being bitmap fonts) and you have one path for each part of a glyph plus one for each hole. For example, the Latin characters c, f, and h should consist of a single path; a, b, and i should consist of two paths; B should consist of three paths; g should consist of two or three paths.

      • If yes, you almost certainly have a non-dingbat font. The reason for this is that it is very unlikely for a dingbat font to get all 52 characters right by coincidence.
      • If no, you have a dingbat font or some blackletter, script, novelty, or similar font. In most applications, the most feasible thing is to have a human decide these edge cases, as they should be few.
0

In a typical latin character map setup, lowercase 'a' is pretty much always code 97, uppercase 'A' is code 65, '0' is 48 and so on. Add a few more of these checks and if something doesn't match, you're likely dealing with a symbols/icons font.

enter image description here

  • 2
    A symbol font can map all the typable characters. Its a medicore strategy, that wont catch windings. – joojaa Jun 15 at 10:06
  • 1
    Also, doing this programmatically requires an OCR-like process on the font definition. – Andrew Leach Jun 16 at 22:32
  • There are more robust ways to programmatically find the glyph used to render the letter a in a font. After all, your operating system manages to do this as well. The difficult thing is to process the result. – Wrzlprmft Jun 17 at 20:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.