public bool Match (char c, out MaskedTextResultHint resultHint, bool only_test)
{
if (!MaskedTextProvider.IsValidInputChar (c)) {
resultHint = MaskedTextResultHint.InvalidInput;
return false;
}
if (Parent.ResetOnSpace && c == ' ' && Editable) {
resultHint = MaskedTextResultHint.CharacterEscaped;
if (FilledIn) {
resultHint = MaskedTextResultHint.Success;
if (!only_test && input != ' ') {
switch (Type) {
case EditType.AlphanumericOptional:
case EditType.AlphanumericRequired:
case EditType.CharacterOptional:
case EditType.CharacterRequired:
Input = c;
break;
default:
Input = char.MinValue;
break;
}
}
}
return true;
}
if (Type == EditType.Literal && MaskCharacter == c && Parent.SkipLiterals) {
resultHint = MaskedTextResultHint.Success;
return true;
}
if (!Editable) {
resultHint = MaskedTextResultHint.NonEditPosition;
return false;
}
switch (Type) {
case EditType.AlphanumericOptional:
case EditType.AlphanumericRequired:
if (char.IsLetterOrDigit (c)) {
if (Parent.AsciiOnly && !IsAscii (c)) {
resultHint = MaskedTextResultHint.AsciiCharacterExpected;
return false;
} else {
if (!only_test) {
Input = c;
}
resultHint = MaskedTextResultHint.Success;
return true;
}
} else {
resultHint = MaskedTextResultHint.AlphanumericCharacterExpected;
return false;
}
case EditType.CharacterOptional:
case EditType.CharacterRequired:
if (Parent.AsciiOnly && !IsAscii (c)) {
resultHint = MaskedTextResultHint.LetterExpected;
return false;
} else if (!char.IsControl (c)) {
if (!only_test) {
Input = c;
}
resultHint = MaskedTextResultHint.Success;
return true;
} else {
resultHint = MaskedTextResultHint.LetterExpected;
return false;
}
case EditType.DigitOrSpaceOptional:
case EditType.DigitOrSpaceOptional_Blank:
if (char.IsDigit (c) || c == ' ') {
if (!only_test) {
Input = c;
}
resultHint = MaskedTextResultHint.Success;
return true;
} else {
resultHint = MaskedTextResultHint.DigitExpected;
return false;
}
case EditType.DigitRequired:
if (char.IsDigit (c)) {
if (!only_test) {
Input = c;
}
resultHint = MaskedTextResultHint.Success;
return true;
} else {
resultHint = MaskedTextResultHint.DigitExpected;
return false;
}
case EditType.LetterOptional:
case EditType.LetterRequired:
if (!char.IsLetter (c)) {
resultHint = MaskedTextResultHint.LetterExpected;
return false;
} else if (Parent.AsciiOnly && !IsAscii (c)) {
resultHint = MaskedTextResultHint.LetterExpected;
return false;
} else {
if (!only_test) {
Input = c;
}
resultHint = MaskedTextResultHint.Success;
return true;
}
default:
resultHint = MaskedTextResultHint.Unknown;
return false;
}
}