public MaskedTextProvider(string mask, CultureInfo culture, bool allowPromptAsInput, char promptChar, char passwordChar, bool restrictToAscii)
{
if (string.IsNullOrEmpty(mask))
{
throw new ArgumentException(SR.Format(SR.MaskedTextProviderMaskNullOrEmpty), nameof(mask));
}
foreach (char c in mask)
{
if (!IsPrintableChar(c))
{
throw new ArgumentException(SR.MaskedTextProviderMaskInvalidChar);
}
}
if (culture == null)
{
culture = CultureInfo.CurrentCulture;
}
_flagState = new BitVector32();
// read only property-backend fields.
_mask = mask;
_promptChar = promptChar;
_passwordChar = passwordChar;
//Neutral cultures cannot be queried for culture-specific information.
if (culture.IsNeutralCulture)
{
// find the first specific (non-neutral) culture that contains country/region specific info.
foreach (CultureInfo tempCulture in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
if (culture.Equals(tempCulture.Parent))
{
_culture = tempCulture;
break;
}
}
// Last resort use invariant culture.
if (_culture == null)
{
_culture = CultureInfo.InvariantCulture;
}
}
else
{
_culture = culture;
}
if (!_culture.IsReadOnly)
{
_culture = CultureInfo.ReadOnly(_culture);
}
_flagState[s_ALLOW_PROMPT_AS_INPUT] = allowPromptAsInput;
_flagState[s_ASCII_ONLY] = restrictToAscii;
// set default values for read/write properties.
_flagState[s_INCLUDE_PROMPT] = false;
_flagState[s_INCLUDE_LITERALS] = true;
_flagState[s_RESET_ON_PROMPT] = true;
_flagState[s_SKIP_SPACE] = true;
_flagState[s_RESET_ON_LITERALS] = true;
Initialize();
}