From 11429be6fa15212dbeee49dd183df468ccdb4768 Mon Sep 17 00:00:00 2001 From: GoldenCrystal Date: Fri, 7 Nov 2014 23:40:00 +0100 Subject: [PATCH] Refactored the code a bit: renamed UnicodeData to UnicodeInfo, and exposed an intermediate UnicodeCharInfo type instead of UnicodeCharacterData. --- .../CharacterInfoViewModel.cs | 26 +++++----- .../UnicodeCharacterDataBuilder.cs | 2 +- .../UnicodeDataBuilder.cs | 4 +- .../UnicodeDataManagerTests.cs | 6 +-- UnicodeInformation/UnicodeCharInfo.cs | 47 +++++++++++++++++++ UnicodeInformation/UnicodeCharacterData.cs | 2 +- .../{UnicodeData.cs => UnicodeInfo.cs} | 20 ++++---- UnicodeInformation/UnicodeInformation.csproj | 3 +- 8 files changed, 79 insertions(+), 31 deletions(-) create mode 100644 UnicodeInformation/UnicodeCharInfo.cs rename UnicodeInformation/{UnicodeData.cs => UnicodeInfo.cs} (89%) diff --git a/UnicodeCharacterInspector/CharacterInfoViewModel.cs b/UnicodeCharacterInspector/CharacterInfoViewModel.cs index b71a70f..27d23d7 100644 --- a/UnicodeCharacterInspector/CharacterInfoViewModel.cs +++ b/UnicodeCharacterInspector/CharacterInfoViewModel.cs @@ -12,7 +12,7 @@ namespace UnicodeCharacterInspector { private string character; private int codePoint; - private UnicodeCharacterData characterData = UnicodeData.Default.Get(0); + private UnicodeCharInfo characterInfo = UnicodeInfo.Default.Get(0); public CharacterInfoViewModel() { @@ -40,12 +40,12 @@ namespace UnicodeCharacterInspector if ((character = value) != null) { codePoint = char.ConvertToUtf32(character, 0); - characterData = UnicodeData.Default.Get(codePoint); + characterInfo = UnicodeInfo.Default.Get(codePoint); } else { codePoint = 0; - characterData = UnicodeData.Default.Get(0); + characterInfo = UnicodeInfo.Default.Get(0); } NotifyPropertyChanged(); @@ -71,52 +71,52 @@ namespace UnicodeCharacterInspector public string Name { - get { return character != null && characterData != null ? characterData.Name : null; } + get { return character != null ? characterInfo.Name : null; } } public string OldName { - get { return character != null && characterData != null ? characterData.OldName : null; } + get { return character != null ? characterInfo.OldName : null; } } public UnicodeCategory? Category { - get { return character != null ? characterData != null ? characterData.Category : UnicodeCategory.OtherNotAssigned : null as UnicodeCategory?; } + get { return character != null ? characterInfo.Category : null as UnicodeCategory?; } } public CanonicalCombiningClass? CanonicalCombiningClass { - get { return character != null ? characterData != null ? characterData.CanonicalCombiningClass : 0 : null as CanonicalCombiningClass?; } + get { return character != null ? characterInfo.CanonicalCombiningClass : null as CanonicalCombiningClass?; } } public BidirectionalClass? BidirectionalClass { - get { return character != null && characterData != null ? characterData.BidirectionalClass : null as BidirectionalClass?; } + get { return character != null ? characterInfo.BidirectionalClass : null as BidirectionalClass?; } } public CompatibilityFormattingTag? DecompositionType { - get { return character != null && characterData != null && characterData.DecompositionMapping != null ? characterData.DecompositionType : null as CompatibilityFormattingTag?; } + get { return character != null && characterInfo.DecompositionMapping != null ? characterInfo.DecompositionType : null as CompatibilityFormattingTag?; } } public string DecompositionMapping { - get { return character != null && characterData != null ? characterData.DecompositionMapping : null; } + get { return character != null ? characterInfo.DecompositionMapping : null; } } public UnicodeNumericType? NumericType { - get { return character != null ? characterData != null ? characterData.NumericType : UnicodeNumericType.None : null as UnicodeNumericType?; } + get { return character != null ? characterInfo.NumericType : null as UnicodeNumericType?; } } public UnicodeRationalNumber? NumericValue { - get { return character != null && characterData != null && characterData.NumericType != UnicodeNumericType.None ? characterData.NumericValue : null as UnicodeRationalNumber?; } + get { return character != null && characterInfo.NumericType != UnicodeNumericType.None ? characterInfo.NumericValue : null as UnicodeRationalNumber?; } } public ContributoryProperties? ContributoryProperties { - get { return character != null ? characterData != null ? characterData.ContributoryProperties : 0 : null as ContributoryProperties?; } + get { return character != null ? characterInfo.ContributoryProperties : null as ContributoryProperties?; } } } } diff --git a/UnicodeInformation.Builder/UnicodeCharacterDataBuilder.cs b/UnicodeInformation.Builder/UnicodeCharacterDataBuilder.cs index 3f300f1..2ecd93d 100644 --- a/UnicodeInformation.Builder/UnicodeCharacterDataBuilder.cs +++ b/UnicodeInformation.Builder/UnicodeCharacterDataBuilder.cs @@ -127,7 +127,7 @@ namespace System.Unicode.Builder this.category = UnicodeCategory.OtherNotAssigned; } - public UnicodeCharacterData ToCharacterData() + internal UnicodeCharacterData ToCharacterData() { return new UnicodeCharacterData ( diff --git a/UnicodeInformation.Builder/UnicodeDataBuilder.cs b/UnicodeInformation.Builder/UnicodeDataBuilder.cs index 69d94c2..53138bc 100644 --- a/UnicodeInformation.Builder/UnicodeDataBuilder.cs +++ b/UnicodeInformation.Builder/UnicodeDataBuilder.cs @@ -121,14 +121,14 @@ namespace System.Unicode.Builder } } - public UnicodeData ToUnicodeData() + public UnicodeInfo ToUnicodeData() { var finalData = new UnicodeCharacterData[entryCount]; for (int i = 0; i < finalData.Length; ++i) finalData[i] = entries[i].ToCharacterData(); - return new UnicodeData(unicodeVersion, finalData); + return new UnicodeInfo(unicodeVersion, finalData); } public void WriteToStream(Stream stream) diff --git a/UnicodeInformation.Tests/UnicodeDataManagerTests.cs b/UnicodeInformation.Tests/UnicodeDataManagerTests.cs index 578527f..4f4f20e 100644 --- a/UnicodeInformation.Tests/UnicodeDataManagerTests.cs +++ b/UnicodeInformation.Tests/UnicodeDataManagerTests.cs @@ -40,7 +40,7 @@ namespace System.Unicode.Tests var data = (await UnicodeDataManager.BuildDataAsync(source)).ToUnicodeData(); - Assert.AreEqual((int)'\t', data.Get('\t').CodePointRange.FirstCodePoint); + Assert.AreEqual((int)'\t', data.Get('\t').CodePoint); } [TestMethod] @@ -57,7 +57,7 @@ namespace System.Unicode.Tests using (var stream = new DeflateStream(File.OpenRead("ucd.dat"), CompressionMode.Decompress, false)) { - var readData = UnicodeData.FromStream(stream); + var readData = UnicodeInfo.FromStream(stream); Assert.AreEqual((int)'\t', data.Get('\t').CodePointRange.FirstCodePoint); } @@ -76,7 +76,7 @@ namespace System.Unicode.Tests writer.WriteCodePoint(i); writer.Flush(); stream.Position = 0; - Assert.AreEqual(i, UnicodeData.ReadCodePoint(reader)); + Assert.AreEqual(i, UnicodeInfo.ReadCodePoint(reader)); stream.Position = 0; } } diff --git a/UnicodeInformation/UnicodeCharInfo.cs b/UnicodeInformation/UnicodeCharInfo.cs new file mode 100644 index 0000000..c06e323 --- /dev/null +++ b/UnicodeInformation/UnicodeCharInfo.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace System.Unicode +{ + public struct UnicodeCharInfo + { + private readonly int codePoint; + private readonly UnicodeCharacterData characterData; + + public int CodePoint { get { return codePoint; } } + + public string Name + { + get + { + return characterData.Name == null || characterData.CodePointRange.IsSingleCodePoint ? + characterData.Name : + characterData.Name + "-" + codePoint.ToString("X4"); + } + } + + public UnicodeCategory Category { get { return characterData.Category; } } + public CanonicalCombiningClass CanonicalCombiningClass { get { return characterData.CanonicalCombiningClass; } } + public BidirectionalClass BidirectionalClass { get { return characterData.BidirectionalClass; } } + public CompatibilityFormattingTag DecompositionType { get { return characterData.DecompositionType; } } + public string DecompositionMapping { get { return characterData.DecompositionMapping; } } + public UnicodeNumericType NumericType { get { return characterData.NumericType; } } + public UnicodeRationalNumber? NumericValue { get { return characterData.NumericValue; } } + public bool BidirectionalMirrored { get { return characterData.BidirectionalMirrored; } } + public string OldName { get { return characterData.OldName; } } + public string SimpleUpperCaseMapping { get { return characterData.SimpleUpperCaseMapping; } } + public string SimpleLowerCaseMapping { get { return characterData.SimpleLowerCaseMapping; } } + public string SimpleTitleCaseMapping { get { return characterData.SimpleTitleCaseMapping; } } + public ContributoryProperties ContributoryProperties { get { return characterData.ContributoryProperties; } } + + internal UnicodeCharInfo(int codePoint, UnicodeCharacterData characterData) + { + this.codePoint = codePoint; + this.characterData = characterData; + } + } +} diff --git a/UnicodeInformation/UnicodeCharacterData.cs b/UnicodeInformation/UnicodeCharacterData.cs index c99f7e9..3579f06 100644 --- a/UnicodeInformation/UnicodeCharacterData.cs +++ b/UnicodeInformation/UnicodeCharacterData.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace System.Unicode { - public sealed class UnicodeCharacterData + internal sealed class UnicodeCharacterData { public readonly UnicodeCharacterRange CodePointRange; public readonly string Name; diff --git a/UnicodeInformation/UnicodeData.cs b/UnicodeInformation/UnicodeInfo.cs similarity index 89% rename from UnicodeInformation/UnicodeData.cs rename to UnicodeInformation/UnicodeInfo.cs index 147b165..7a2cdd5 100644 --- a/UnicodeInformation/UnicodeData.cs +++ b/UnicodeInformation/UnicodeInfo.cs @@ -10,14 +10,14 @@ using System.Threading.Tasks; namespace System.Unicode { - public sealed class UnicodeData + public sealed class UnicodeInfo { - private static readonly UnicodeData @default = ReadEmbeddedUnicodeData(); - public static UnicodeData Default { get { return @default; } } + private static readonly UnicodeInfo @default = ReadEmbeddedUnicodeData(); + public static UnicodeInfo Default { get { return @default; } } - private static UnicodeData ReadEmbeddedUnicodeData() + private static UnicodeInfo ReadEmbeddedUnicodeData() { - using (var stream = new DeflateStream(typeof(UnicodeData).GetTypeInfo().Assembly.GetManifestResourceStream("System.Unicode.ucd.dat"), CompressionMode.Decompress, false)) + using (var stream = new DeflateStream(typeof(UnicodeInfo).GetTypeInfo().Assembly.GetManifestResourceStream("System.Unicode.ucd.dat"), CompressionMode.Decompress, false)) { return FromStream(stream); } @@ -26,7 +26,7 @@ namespace System.Unicode private readonly Version unicodeVersion; private readonly UnicodeCharacterData[] characterData; - public static UnicodeData FromStream(Stream stream) + public static UnicodeInfo FromStream(Stream stream) { using (var reader = new BinaryReader(stream, Encoding.UTF8)) { @@ -50,7 +50,7 @@ namespace System.Unicode entries[i] = ReadEntry(reader); } - return new UnicodeData(unicodeVersion, entries); + return new UnicodeInfo(unicodeVersion, entries); } } @@ -120,7 +120,7 @@ namespace System.Unicode } } - internal UnicodeData(Version unicodeVersion, UnicodeCharacterData[] characterData) + internal UnicodeInfo(Version unicodeVersion, UnicodeCharacterData[] characterData) { this.unicodeVersion = unicodeVersion; this.characterData = characterData; @@ -147,9 +147,9 @@ namespace System.Unicode return null; } - public UnicodeCharacterData Get(int codePoint) + public UnicodeCharInfo Get(int codePoint) { - return FindCodePoint(codePoint); + return new UnicodeCharInfo(codePoint, FindCodePoint(codePoint)); } } } diff --git a/UnicodeInformation/UnicodeInformation.csproj b/UnicodeInformation/UnicodeInformation.csproj index fbc463b..014632a 100644 --- a/UnicodeInformation/UnicodeInformation.csproj +++ b/UnicodeInformation/UnicodeInformation.csproj @@ -70,7 +70,8 @@ - + +