Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to determine which fonts contain a specific character?

Tags:

c#

.net

fonts

Given a specific Unicode character, let’s say 嗎, how do I iterate over all fonts installed in the system and list the ones that contain a glyph for this character?

like image 688
Timwi Avatar asked Apr 09 '11 11:04

Timwi


2 Answers

I've tested this on .NET 4.0, you need to add reference to PresentationCore to get the font & typeface types to work. Also check Fonts.GetFontFamilies overloads.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Markup;
using System.Windows.Media;

class Program
{
    public static void Main(String[] args)
    {
        PrintFamiliesSupportingChar('a');
        Console.ReadLine();
        PrintFamiliesSupportingChar('â');
        Console.ReadLine();
        PrintFamiliesSupportingChar('嗎');
        Console.ReadLine();
    }

    private static void PrintFamiliesSupportingChar(char characterToCheck)
    {
        int count = 0;
        ICollection<FontFamily> fontFamilies = Fonts.GetFontFamilies(@"C:\Windows\Fonts\");
        ushort glyphIndex;
        int unicodeValue = Convert.ToUInt16(characterToCheck);
        GlyphTypeface glyph;
        string familyName;

        foreach (FontFamily family in fontFamilies)
        {
            var typefaces = family.GetTypefaces();
            foreach (Typeface typeface in typefaces)
            {
                typeface.TryGetGlyphTypeface(out glyph);
                if (glyph != null && glyph.CharacterToGlyphMap.TryGetValue(unicodeValue, out glyphIndex))
                {
                    family.FamilyNames.TryGetValue(XmlLanguage.GetLanguage("en-us"), out familyName);
                    Console.WriteLine(familyName + " supports ");
                    count++;
                    break;
                }
            }
        }
        Console.WriteLine();
        Console.WriteLine("Total {0} fonts support {1}", count, characterToCheck);
    }
}
like image 50
Sanjeevakumar Hiremath Avatar answered Nov 19 '22 03:11

Sanjeevakumar Hiremath


You can use the albatross command line tool (https://gitlab.com/islandoftex/albatross/ ; also included in tex distributions like texlive or miktex).

If you run albatross 嗎, you'll get a list of all your fonts which contain the character:

        __ __           __
.---.-.|  |  |--.---.-.|  |_.----.-----.-----.-----.
|  _  ||  |  _  |  _  ||   _|   _|  _  |__ --|__ --|
|___._||__|_____|___._||____|__| |_____|_____|_____|

                    Unicode code point [55CE] mapping to 嗎                    
┌─────────────────────────────────────────────────────────────────────────────┐
│ Font name                                                                   │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Aqua Kana,.Aqua かな                                                       │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Aqua Kana,.Aqua かな,.Aqua Kana Bold,.Aqua かな ボールド                   │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Hiragino Kaku Gothic Interface                                             │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Hiragino Sans GB Interface                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ .LastResort                                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang HK,.蘋方\-港,.苹方\-港                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang SC,.蘋方\-簡,.苹方\-简                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang TC,.蘋方\-繁,.苹方\-繁                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Fangsong Std,Adobe 仿宋 Std,Adobe Fangsong Std R,Adobe 仿宋 Std R     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Heiti Std,Adobe 黑体 Std,Adobe Heiti Std R,Adobe 黑体 Std R           │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Kaiti Std,Adobe 楷体 Std,Adobe Kaiti Std R,Adobe 楷体 Std R           │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Ming Std,Adobe 明體 Std,Adobe 明體 Std L,Adobe Ming Std L             │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Song Std,Adobe 宋体 Std,Adobe Song Std L,Adobe 宋体 Std L             │
├─────────────────────────────────────────────────────────────────────────────┤
│ Arial Unicode MS                                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│ GB18030 Bitmap                                                              │
├─────────────────────────────────────────────────────────────────────────────┤
│ Heiti SC,黑體\-簡,黒体\-簡,Heiti\-간체,黑体\-简                             │
├─────────────────────────────────────────────────────────────────────────────┤
│ Heiti TC,黑體\-繁,黒体\-繁,Heiti\-번체,黑体\-繁                             │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro,Hiragino Kaku Gothic Pro          │
│ W3,ヒラギノ角ゴ Pro W3                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro,Hiragino Kaku Gothic Pro          │
│ W6,ヒラギノ角ゴ Pro W6                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic ProN,ヒラギノ角ゴ ProN,Hiragino Kaku Gothic ProN       │
│ W3,ヒラギノ角ゴ ProN W3                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic ProN,ヒラギノ角ゴ ProN,Hiragino Kaku Gothic ProN       │
│ W6,ヒラギノ角ゴ ProN W6                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Maru Gothic Pro,ヒラギノ丸ゴ Pro,Hiragino Maru Gothic Pro          │
│ W4,ヒラギノ丸ゴ Pro W4                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Maru Gothic ProN,ヒラギノ丸ゴ ProN,Hiragino Maru Gothic ProN       │
│ W4,ヒラギノ丸ゴ ProN W4                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho Pro,ヒラギノ明朝 Pro,Hiragino Mincho Pro W3,ヒラギノ明朝    │
│ Pro W3                                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho Pro,ヒラギノ明朝 Pro,Hiragino Mincho Pro W6,ヒラギノ明朝    │
│ Pro W6                                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho ProN,ヒラギノ明朝 ProN,Hiragino Mincho ProN W3,ヒラギノ明朝 │
│ ProN W3                                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho ProN,ヒラギノ明朝 ProN,Hiragino Mincho ProN W6,ヒラギノ明朝 │
│ ProN W6                                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans GB,冬青黑體簡體中文,冬青黑体简体中文,冬青黑體簡體中文         │
│ W3,Hiragino Sans GB W3,冬青黑体简体中文 W3                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans GB,冬青黑體簡體中文,冬青黑体简体中文,冬青黑體簡體中文         │
│ W6,Hiragino Sans GB W6,冬青黑体简体中文 W6                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W1,ヒラギノ角ゴシック W1     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W2,ヒラギノ角ゴシック W2     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W3,ヒラギノ角ゴシック W3     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W4,ヒラギノ角ゴシック W4     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W5,ヒラギノ角ゴシック W5     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W6,ヒラギノ角ゴシック W6     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Meiryo,メイリオ                                                             │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS Gothic,MS ゴシック                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS Mincho,MS 明朝                                                         │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS PGothic,MS Pゴシック                                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS PMincho,MS P明朝                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang HK,蘋方\-港,苹方\-港                                               │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang SC,蘋方\-簡,苹方\-简                                               │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang TC,蘋方\-繁,苹方\-繁                                               │
├─────────────────────────────────────────────────────────────────────────────┤
│ PMingLiU,新細明體                                                           │
├─────────────────────────────────────────────────────────────────────────────┤
│ SimSun,宋体                                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Songti SC,宋體\-簡,宋体\-简                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Songti TC,宋體\-繁,宋体\-繁                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ STSong                                                                      │
└─────────────────────────────────────────────────────────────────────────────┘
like image 44
samcarter_is_at_topanswers.xyz Avatar answered Nov 19 '22 04:11

samcarter_is_at_topanswers.xyz