using System.Collections.Generic;
using UnityEngine;
namespace TyphoonFontTool
{
///
/// 字体码点值数据
///
public class FontSourceData : ScriptableObject
{
//关联的字体文件
public Font Font;
//码点值
public List Codes = new List();
//字符字典
private CharacterMap _map = null;
//字符字典
private CharacterMap Map
{
get
{
if (_map != null)
{
var hashCode = Codes.GetHashCode();
if (_map.IsChanged(hashCode))
{
_map = null;
}
}
if (_map == null)
{
_map = new CharacterMap(Codes);
}
return _map;
}
}
private class CharacterMap
{
private int _hashCode;
private HashSet _codes;
private HashSet _characters;
public CharacterMap(List codes)
{
_hashCode = codes.GetHashCode();
_codes = new HashSet();
_characters = new HashSet();
foreach (var code in codes)
{
_codes.Add(code);
}
foreach (var code in codes)
{
_characters.Add(char.ConvertFromUtf32(code));
}
}
public bool IsChanged(int hashCode)
{
return hashCode != _hashCode;
}
public bool IsContain(string character)
{
return _characters.Contains(character);
}
public bool IsContain(int code)
{
return _codes.Contains(code);
}
}
//判断是否存在字符
public bool IsContains(string character)
{
return Map.IsContain(character);
}
//判断是否存在字符
public bool IsContains(int code)
{
return Map.IsContain(code);
}
}
}