diff --git a/UnicodeCharacterInspector/CharacterInfoViewModel.cs b/UnicodeCharacterInspector/CharacterInfoViewModel.cs index 7b9e67a..0b06f45 100644 --- a/UnicodeCharacterInspector/CharacterInfoViewModel.cs +++ b/UnicodeCharacterInspector/CharacterInfoViewModel.cs @@ -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(); diff --git a/UnicodeInformation.Builder/Properties/AssemblyInfo.cs b/UnicodeInformation.Builder/Properties/AssemblyInfo.cs index 685b1f8..2b340c5 100644 --- a/UnicodeInformation.Builder/Properties/AssemblyInfo.cs +++ b/UnicodeInformation.Builder/Properties/AssemblyInfo.cs @@ -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 diff --git a/UnicodeInformation.Builder/UnicodeInfoBuilder.cs b/UnicodeInformation.Builder/UnicodeInfoBuilder.cs index f169dad..efac96b 100644 --- a/UnicodeInformation.Builder/UnicodeInfoBuilder.cs +++ b/UnicodeInformation.Builder/UnicodeInfoBuilder.cs @@ -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) { diff --git a/UnicodeInformation.Tests/UnicodeDataManagerTests.cs b/UnicodeInformation.Tests/UnicodeDataManagerTests.cs index 1a79250..587a862 100644 --- a/UnicodeInformation.Tests/UnicodeDataManagerTests.cs +++ b/UnicodeInformation.Tests/UnicodeDataManagerTests.cs @@ -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 diff --git a/UnicodeInformation/UnicodeInfo.cs b/UnicodeInformation/UnicodeInfo.cs index cf0d9f0..49f727a 100644 --- a/UnicodeInformation/UnicodeInfo.cs +++ b/UnicodeInformation/UnicodeInfo.cs @@ -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(); } } }