You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#if NET40 || NET461
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Media;
namespace Apewer.Surface {
/// <summary></summary>
internal class FontInstance {
private FontFamily _fontfamily = null; private Dictionary<string, string> _names = null;
private FontInstance(FontFamily fontFamily) { _fontfamily = fontFamily; }
/// <summary></summary>
public Dictionary<string, string> FontFamiliy { get { if (_names == null) { _names = new Dictionary<string, string>(); if (_fontfamily.FamilyNames.Keys.Count > 0) { foreach (var name in _fontfamily.FamilyNames) { var key = name.Key.IetfLanguageTag; var value = name.Value; if (!_names.ContainsKey(key)) _names.Add(key, value); } } } var result = new Dictionary<string, string>(); foreach (var item in _names) result.Add(item.Key, item.Value); return result; } }
/// <summary></summary>
public List<string> EnemerateChars() { var list = new List<string>(); if (_fontfamily == null) return list; var typefaces = _fontfamily.GetTypefaces(); foreach (var typeface in typefaces) { GlyphTypeface glyph; var tried = typeface.TryGetGlyphTypeface(out glyph); if (glyph != null) { list.Clear(); var map = glyph.CharacterToGlyphMap; for (int i = 0; i < map.Count; i++) { long index = map.Keys.ElementAt(i); try { var c = Convert.ToChar(index); list.Add(c.ToString()); } catch { } } } } return list; }
/// <summary></summary>
public List<string> EnemerateChars(string fontFamily) { var list = new List<string>(); if (string.IsNullOrEmpty(fontFamily)) return list;
var fontfamily = new FontFamily(fontFamily); var typefaces = fontfamily.GetTypefaces(); foreach (var typeface in typefaces) { GlyphTypeface glyph; var tried = typeface.TryGetGlyphTypeface(out glyph); if (glyph != null) { var map = glyph.CharacterToGlyphMap; for (int i = 0; i < map.Count; i++) { long index = map.Keys.ElementAt(i); try { var c = Convert.ToChar(index); list.Add(c.ToString()); } catch { } } } } return list; }
/// <summary></summary>
public static List<FontInstance> EnumerateSystemFontFamilies() { var list = new List<FontInstance>(); var fontfamilies = Fonts.SystemFontFamilies; foreach (var fontfamily in fontfamilies) { list.Add(new FontInstance(fontfamily)); } return list; }
/// <summary></summary>
public static List<FontInstance> FromFile(string path) { var list = new List<FontInstance>(); var fontfamilies = Fonts.GetFontFamilies(path); foreach (var fontfamily in fontfamilies) { list.Add(new FontInstance(fontfamily)); } return list; }
}
}
#endif
|