Refactored UnicodeInfo to a static class.
This commit is contained in:
@@ -12,7 +12,7 @@ namespace UnicodeCharacterInspector
|
||||
{
|
||||
private string character;
|
||||
private int codePoint;
|
||||
private UnicodeCharInfo characterInfo = UnicodeInfo.Default.GetCharInfo(0);
|
||||
private UnicodeCharInfo characterInfo = UnicodeInfo.GetCharInfo(0);
|
||||
|
||||
public CharacterInfoViewModel()
|
||||
{
|
||||
@@ -40,12 +40,12 @@ namespace UnicodeCharacterInspector
|
||||
if ((character = value) != null)
|
||||
{
|
||||
codePoint = char.ConvertToUtf32(character, 0);
|
||||
characterInfo = UnicodeInfo.Default.GetCharInfo(codePoint);
|
||||
characterInfo = UnicodeInfo.GetCharInfo(codePoint);
|
||||
}
|
||||
else
|
||||
{
|
||||
codePoint = 0;
|
||||
characterInfo = UnicodeInfo.Default.GetCharInfo(0);
|
||||
characterInfo = UnicodeInfo.GetCharInfo(0);
|
||||
}
|
||||
|
||||
NotifyPropertyChanged();
|
||||
|
||||
@@ -13,9 +13,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyCopyright("Copyright © 2014")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
#if DEBUG
|
||||
[assembly: InternalsVisibleTo("UnicodeInformation.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100711da5e71bb2208797ed36597e628c6bf6541b6c157ede943539d19de5104763bd2f42d8c0233ea8fbe7e782d4e2d29c3706a8e8dc1cfa78faabec946a167f7b2b1d396d17a85839ad96f2be930c0efaa893c8b9b6a665bf50ca569b56b9eabf3a69e8274723f85e9d4c3eea1e53dcbbb29a74c78c305e447917daaa6593f1c2")]
|
||||
#endif
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
|
||||
@@ -243,20 +243,20 @@ namespace System.Unicode.Builder
|
||||
blockEntries.Add(block);
|
||||
}
|
||||
|
||||
public UnicodeInfo ToUnicodeData()
|
||||
{
|
||||
var finalUnicodeData = new UnicodeCharacterData[ucdEntryCount];
|
||||
//public UnicodeInfo ToUnicodeData()
|
||||
//{
|
||||
// var finalUnicodeData = new UnicodeCharacterData[ucdEntryCount];
|
||||
|
||||
for (int i = 0; i < finalUnicodeData.Length; ++i)
|
||||
finalUnicodeData[i] = ucdEntries[i].ToCharacterData();
|
||||
// for (int i = 0; i < finalUnicodeData.Length; ++i)
|
||||
// finalUnicodeData[i] = ucdEntries[i].ToCharacterData();
|
||||
|
||||
var finalUnihanData = new UnihanCharacterData[unihanEntryCount];
|
||||
// var finalUnihanData = new UnihanCharacterData[unihanEntryCount];
|
||||
|
||||
for (int i = 0; i < finalUnihanData.Length; ++i)
|
||||
finalUnihanData[i] = unihanEntries[i].ToCharacterData();
|
||||
// for (int i = 0; i < finalUnihanData.Length; ++i)
|
||||
// finalUnihanData[i] = unihanEntries[i].ToCharacterData();
|
||||
|
||||
return new UnicodeInfo(unicodeVersion, finalUnicodeData, finalUnihanData, blockEntries.ToArray());
|
||||
}
|
||||
// return new UnicodeInfo(unicodeVersion, finalUnicodeData, finalUnihanData, blockEntries.ToArray());
|
||||
//}
|
||||
|
||||
private void WriteUnicodeBlockToFile(BinaryWriter writer, UnicodeBlock block)
|
||||
{
|
||||
|
||||
@@ -45,9 +45,9 @@ namespace System.Unicode.Tests
|
||||
{
|
||||
var source = new FileDataSource(UcdDirectoryName);
|
||||
|
||||
var data = (await UnicodeDataProcessor.BuildDataAsync(source, source)).ToUnicodeData();
|
||||
var data = (await UnicodeDataProcessor.BuildDataAsync(source, source));
|
||||
|
||||
Assert.AreEqual((int)'\t', data.GetCharInfo('\t').CodePoint);
|
||||
Assert.AreEqual((int)'\t', data.GetUcd('\t').CodePointRange.FirstCodePoint);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -61,13 +61,6 @@ namespace System.Unicode.Tests
|
||||
{
|
||||
data.WriteToStream(stream);
|
||||
}
|
||||
|
||||
using (var stream = new DeflateStream(File.OpenRead("ucd.dat"), CompressionMode.Decompress, false))
|
||||
{
|
||||
var readData = UnicodeInfo.FromStream(stream);
|
||||
|
||||
Assert.AreEqual((int)'\t', data.GetUcd('\t').CodePointRange.FirstCodePoint);
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
|
||||
@@ -10,20 +10,22 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace System.Unicode
|
||||
{
|
||||
public sealed class UnicodeInfo
|
||||
public static class UnicodeInfo
|
||||
{
|
||||
private static readonly UnicodeInfo @default = ReadEmbeddedUnicodeData();
|
||||
public static UnicodeInfo Default { get { return @default; } }
|
||||
private static readonly Version unicodeVersion;
|
||||
private static readonly UnicodeCharacterData[] unicodeCharacterData;
|
||||
private static readonly UnihanCharacterData[] unihanCharacterData;
|
||||
private static readonly UnicodeBlock[] blocks;
|
||||
|
||||
private static UnicodeInfo ReadEmbeddedUnicodeData()
|
||||
static UnicodeInfo()
|
||||
{
|
||||
using (var stream = new DeflateStream(typeof(UnicodeInfo).GetTypeInfo().Assembly.GetManifestResourceStream("ucd.dat"), CompressionMode.Decompress, false))
|
||||
{
|
||||
return FromStream(stream);
|
||||
ReadFromStream(stream, out unicodeVersion, out unicodeCharacterData, out unihanCharacterData, out blocks);
|
||||
}
|
||||
}
|
||||
|
||||
public static UnicodeInfo FromStream(Stream stream)
|
||||
internal static void ReadFromStream(Stream stream, out Version unicodeVersion, out UnicodeCharacterData[] unicodeCharacterData, out UnihanCharacterData[] unihanCharacterData, out UnicodeBlock[] blocks)
|
||||
{
|
||||
using (var reader = new BinaryReader(stream, Encoding.UTF8))
|
||||
{
|
||||
@@ -36,7 +38,7 @@ namespace System.Unicode
|
||||
|
||||
if (formatVersion != 1) throw new InvalidDataException();
|
||||
|
||||
var unicodeVersion = new Version(reader.ReadUInt16(), reader.ReadByte());
|
||||
var fileUnicodeVersion = new Version(reader.ReadUInt16(), reader.ReadByte());
|
||||
|
||||
var unicodeCharacterDataEntries = new UnicodeCharacterData[ReadCodePoint(reader)];
|
||||
|
||||
@@ -59,7 +61,10 @@ namespace System.Unicode
|
||||
unihanCharacterDataEntries[i] = ReadUnihanCharacterDataEntry(reader);
|
||||
}
|
||||
|
||||
return new UnicodeInfo(unicodeVersion, unicodeCharacterDataEntries, unihanCharacterDataEntries, blockEntries);
|
||||
unicodeVersion = fileUnicodeVersion;
|
||||
unicodeCharacterData = unicodeCharacterDataEntries;
|
||||
unihanCharacterData = unihanCharacterDataEntries;
|
||||
blocks = blockEntries;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,22 +186,9 @@ namespace System.Unicode
|
||||
}
|
||||
}
|
||||
|
||||
private readonly Version unicodeVersion;
|
||||
private readonly UnicodeCharacterData[] unicodeCharacterData;
|
||||
private readonly UnihanCharacterData[] unihanCharacterData;
|
||||
private readonly UnicodeBlock[] blockEntries;
|
||||
public static Version UnicodeVersion { get { return unicodeVersion; } }
|
||||
|
||||
internal UnicodeInfo(Version unicodeVersion, UnicodeCharacterData[] unicodeCharacterData, UnihanCharacterData[] unihanCharacterData, UnicodeBlock[] blockEntries)
|
||||
{
|
||||
this.unicodeVersion = unicodeVersion;
|
||||
this.unicodeCharacterData = unicodeCharacterData;
|
||||
this.unihanCharacterData = unihanCharacterData;
|
||||
this.blockEntries = blockEntries;
|
||||
}
|
||||
|
||||
public Version UnicodeVersion { get { return unicodeVersion; } }
|
||||
|
||||
private UnicodeCharacterData FindUnicodeCodePoint(int codePoint)
|
||||
private static UnicodeCharacterData FindUnicodeCodePoint(int codePoint)
|
||||
{
|
||||
int minIndex = 0;
|
||||
int maxIndex = unicodeCharacterData.Length - 1;
|
||||
@@ -215,7 +207,7 @@ namespace System.Unicode
|
||||
return null;
|
||||
}
|
||||
|
||||
private UnihanCharacterData FindUnihanCodePoint(int codePoint)
|
||||
private static UnihanCharacterData FindUnihanCodePoint(int codePoint)
|
||||
{
|
||||
int minIndex;
|
||||
int maxIndex;
|
||||
@@ -239,16 +231,16 @@ namespace System.Unicode
|
||||
return null;
|
||||
}
|
||||
|
||||
private int FindBlockIndex(int codePoint)
|
||||
private static int FindBlockIndex(int codePoint)
|
||||
{
|
||||
int minIndex = 0;
|
||||
int maxIndex = blockEntries.Length - 1;
|
||||
int maxIndex = blocks.Length - 1;
|
||||
|
||||
do
|
||||
{
|
||||
int index = (minIndex + maxIndex) >> 1;
|
||||
|
||||
int Δ = blockEntries[index].CodePointRange.CompareCodePoint(codePoint);
|
||||
int Δ = blocks[index].CodePointRange.CompareCodePoint(codePoint);
|
||||
|
||||
if (Δ == 0) return index;
|
||||
else if (Δ < 0) maxIndex = index - 1;
|
||||
@@ -258,21 +250,21 @@ namespace System.Unicode
|
||||
return -1;
|
||||
}
|
||||
|
||||
private string GetBlockName(int codePoint)
|
||||
private static string GetBlockName(int codePoint)
|
||||
{
|
||||
int i = FindBlockIndex(codePoint);
|
||||
|
||||
return i >= 0 ? blockEntries[i].Name : null;
|
||||
return i >= 0 ? blocks[i].Name : null;
|
||||
}
|
||||
|
||||
public UnicodeCharInfo GetCharInfo(int codePoint)
|
||||
public static UnicodeCharInfo GetCharInfo(int codePoint)
|
||||
{
|
||||
return new UnicodeCharInfo(codePoint, FindUnicodeCodePoint(codePoint), FindUnihanCodePoint(codePoint), GetBlockName(codePoint));
|
||||
}
|
||||
|
||||
public UnicodeBlock[] GetBlocks()
|
||||
public static UnicodeBlock[] GetBlocks()
|
||||
{
|
||||
return (UnicodeBlock[])blockEntries.Clone();
|
||||
return (UnicodeBlock[])blocks.Clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user