Проверка, поддерживаются ли определенные символы шрифтом - PullRequest
5 голосов
/ 11 марта 2011

Я обнаружил это в StackOverflow: Есть ли способ программно определить, имеет ли файл шрифта определенный глиф Unicode?

Однако мне нужно также проверить символы UTF-32. Я пытаюсь проанализировать данные Unihan на unicode.org и игнорировать все символы, которые не поддерживаются «Arial Unicode MS». Я начал работу над методом CheckIfCharInFont (), изменив arg так, чтобы он брал строку (для utf-32), и проверял, является ли она суррогатной парой. Затем я получаю Int32, выполняя char.ConvertToUtf32 (surrogate1, surrogate2), но проблема в том, что текущий метод CheckIfCharInFont () поддерживает только Uint16 ... вы можете увидеть, где я разместил "Debugger.Break", что это немного проблемы. Есть какие-нибудь эксперты, которые могут помочь мне разобраться в этом?

Спасибо

public static bool CheckIfCharInFont(string character, Font font)
        {
            UInt16 value = 0;
            int temp = 0;
            if (character.Length > 1) //UTF-32
            {
                temp = char.ConvertToUtf32(character[0], character[1]);
            }
            else
            {
                temp = (int)character[0];
            }

            if (temp > UInt16.MaxValue)
            {
                Debugger.Break();
                return false;
            }
            value = (UInt16)temp;

            //UInt16 value = Convert.ToUInt16(character);
            List<FontRange> ranges = GetUnicodeRangesForFont(font);
            bool isCharacterPresent = false;
            foreach (FontRange range in ranges)
            {
                if (value >= range.Low && value <= range.High)
                {
                    isCharacterPresent = true;
                    break;
                }
            }
            return isCharacterPresent;
        }

1 Ответ

1 голос
/ 07 октября 2011

Тебе придется заниматься своим делом. Возможно, начиная со спецификаций (http://www.microsoft.com/typography/otspec/cmap.htm)

Это то, что делает этот инструмент: http://mihai -nita.net / 2007/09/08 / charmapex-some-своего рода символьная карта /

...