Files
NetUnicodeInfo/UnicodeCharacterInspector/CharacterInfoViewModel.cs
T

134 lines
5.9 KiB
C#
Raw Normal View History

2014-10-23 01:54:48 +02:00
using System;
using System.Globalization;
using System.Unicode;
2014-10-23 01:54:48 +02:00
namespace UnicodeCharacterInspector
{
internal sealed class CharacterInfoViewModel : BindableObject
{
private string character;
private string displayText;
2014-10-23 01:54:48 +02:00
private int codePoint;
2014-11-15 13:36:19 +01:00
private UnicodeCharInfo characterInfo = UnicodeInfo.GetCharInfo(0);
2014-10-23 01:54:48 +02:00
public CharacterInfoViewModel()
{
}
public string Character
{
get { return character; }
set
{
if (value != null)
{
if (value.Length == 0)
{
value = null;
}
else if (value.Length > 2 || value.Length == 2 && !char.IsSurrogatePair(value, 0))
{
throw new ArgumentException();
}
}
if (value != character)
{
if ((character = value) != null)
{
codePoint = char.ConvertToUtf32(character, 0);
2014-11-15 13:36:19 +01:00
characterInfo = UnicodeInfo.GetCharInfo(codePoint);
2014-10-23 01:54:48 +02:00
}
else
{
codePoint = 0;
2014-11-15 13:36:19 +01:00
characterInfo = UnicodeInfo.GetCharInfo(0);
}
2014-10-23 01:54:48 +02:00
NotifyPropertyChanged();
UpdateDisplayText();
2014-11-15 11:50:43 +01:00
NotifyPropertyChanged(nameof(CodePoint));
NotifyPropertyChanged(nameof(Name));
NotifyPropertyChanged(nameof(NameAliases));
2014-11-15 11:50:43 +01:00
NotifyPropertyChanged(nameof(OldName));
NotifyPropertyChanged(nameof(Definition));
NotifyPropertyChanged(nameof(Category));
NotifyPropertyChanged(nameof(Block));
NotifyPropertyChanged(nameof(CanonicalCombiningClass));
NotifyPropertyChanged(nameof(BidirectionalClass));
NotifyPropertyChanged(nameof(DecompositionType));
NotifyPropertyChanged(nameof(DecompositionMapping));
NotifyPropertyChanged(nameof(NumericType));
NotifyPropertyChanged(nameof(UnihanNumericType));
NotifyPropertyChanged(nameof(NumericValue));
NotifyPropertyChanged(nameof(ContributoryProperties));
NotifyPropertyChanged(nameof(CoreProperties));
2017-06-25 17:14:03 +02:00
NotifyPropertyChanged(nameof(EmojiProperties));
2014-11-24 20:09:59 +01:00
NotifyPropertyChanged(nameof(RadicalStrokeCounts));
NotifyPropertyChanged(nameof(CrossReferences));
2014-11-15 11:50:43 +01:00
NotifyPropertyChanged(nameof(MandarinReading));
NotifyPropertyChanged(nameof(CantoneseReading));
NotifyPropertyChanged(nameof(JapaneseKunReading));
NotifyPropertyChanged(nameof(JapaneseOnReading));
NotifyPropertyChanged(nameof(KoreanReading));
NotifyPropertyChanged(nameof(HangulReading));
NotifyPropertyChanged(nameof(VietnameseReading));
NotifyPropertyChanged(nameof(SimplifiedVariant));
NotifyPropertyChanged(nameof(TraditionalVariant));
2014-10-23 01:54:48 +02:00
}
}
}
private void UpdateDisplayText()
{
string oldValue = displayText;
displayText = character != null ? UnicodeInfo.GetDisplayText(characterInfo) : null;
2017-06-25 17:14:03 +02:00
if (displayText != oldValue) NotifyPropertyChanged(nameof(DisplayText));
}
public string DisplayText => displayText;
2017-06-25 17:14:03 +02:00
public int? CodePoint => character != null ? codePoint : null as int?;
2014-10-23 01:54:48 +02:00
2017-06-25 17:14:03 +02:00
public string Name => character != null ? characterInfo.Name : null;
public string OldName => character != null ? characterInfo.OldName : null;
public UnicodeNameAliasCollection NameAliases => character != null ? characterInfo.NameAliases : UnicodeNameAliasCollection.Empty;
2017-06-25 17:14:03 +02:00
public string Definition => character != null ? characterInfo.Definition : null;
2017-06-25 17:14:03 +02:00
public UnicodeCategory? Category => character != null ? characterInfo.Category : null as UnicodeCategory?;
public string Block => character != null ? characterInfo.Block : null;
2017-06-25 17:14:03 +02:00
public CanonicalCombiningClass? CanonicalCombiningClass => character != null ? characterInfo.CanonicalCombiningClass : null as CanonicalCombiningClass?;
public BidirectionalClass? BidirectionalClass => character != null ? characterInfo.BidirectionalClass : null as BidirectionalClass?;
public CompatibilityFormattingTag? DecompositionType => character != null && characterInfo.DecompositionMapping != null ? characterInfo.DecompositionType : null as CompatibilityFormattingTag?;
2014-11-15 11:50:43 +01:00
2017-06-25 17:14:03 +02:00
public string DecompositionMapping => character != null ? characterInfo.DecompositionMapping : null;
2017-06-25 17:14:03 +02:00
public UnicodeNumericType? NumericType => character != null ? characterInfo.NumericType : null as UnicodeNumericType?;
public UnihanNumericType? UnihanNumericType => character != null ? characterInfo.UnihanNumericType : null as UnihanNumericType?;
public UnicodeRationalNumber? NumericValue => character != null && characterInfo.NumericType != UnicodeNumericType.None ? characterInfo.NumericValue : null as UnicodeRationalNumber?;
2017-06-25 17:14:03 +02:00
public ContributoryProperties? ContributoryProperties => character != null ? characterInfo.ContributoryProperties : null as ContributoryProperties?;
public CoreProperties? CoreProperties => character != null ? characterInfo.CoreProperties : null as CoreProperties?;
public EmojiProperties? EmojiProperties => character != null ? characterInfo.EmojiProperties : null as EmojiProperties?;
2017-06-25 17:14:03 +02:00
public UnicodeRadicalStrokeCountCollection RadicalStrokeCounts => character != null ? characterInfo.UnicodeRadicalStrokeCounts : UnicodeRadicalStrokeCountCollection.Empty;
2017-06-25 17:14:03 +02:00
public UnicodeCrossReferenceCollection CrossReferences => character != null ? characterInfo.CrossRerefences : UnicodeCrossReferenceCollection.Empty;
2017-06-25 17:14:03 +02:00
public string MandarinReading => character != null ? characterInfo.MandarinReading : null;
public string CantoneseReading => character != null ? characterInfo.CantoneseReading : null;
public string JapaneseKunReading => character != null ? characterInfo.JapaneseKunReading : null;
public string JapaneseOnReading => character != null ? characterInfo.JapaneseOnReading : null;
public string KoreanReading => character != null ? characterInfo.KoreanReading : null;
public string HangulReading => character != null ? characterInfo.HangulReading : null;
public string VietnameseReading => character != null ? characterInfo.VietnameseReading : null;
2017-06-25 17:14:03 +02:00
public string SimplifiedVariant => character != null ? characterInfo.SimplifiedVariant : null;
public string TraditionalVariant => character != null ? characterInfo.TraditionalVariant : null;
2014-10-23 01:54:48 +02:00
}
}