Refactored the code a bit: renamed UnicodeData to UnicodeInfo, and exposed an intermediate UnicodeCharInfo type instead of UnicodeCharacterData.

This commit is contained in:
GoldenCrystal
2014-11-07 23:40:00 +01:00
parent 6af111f799
commit 11429be6fa
8 changed files with 79 additions and 31 deletions
@@ -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?; }
}
}
}
@@ -127,7 +127,7 @@ namespace System.Unicode.Builder
this.category = UnicodeCategory.OtherNotAssigned;
}
public UnicodeCharacterData ToCharacterData()
internal UnicodeCharacterData ToCharacterData()
{
return new UnicodeCharacterData
(
@@ -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)
@@ -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;
}
}
+47
View File
@@ -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;
}
}
}
+1 -1
View File
@@ -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;
@@ -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));
}
}
}
+2 -1
View File
@@ -70,7 +70,8 @@
<Compile Include="UnicodeCategoryInfo.cs" />
<Compile Include="UnicodeCharacterData.cs" />
<Compile Include="UnicodeCharacterRange.cs" />
<Compile Include="UnicodeData.cs" />
<Compile Include="UnicodeCharInfo.cs" />
<Compile Include="UnicodeInfo.cs" />
<Compile Include="UnicodeNumericType.cs" />
<Compile Include="ValueNameAttribute.cs" />
<Compile Include="UnicodeRationalNumber.cs" />