public static void DectectInputFormat(string str, out InputFormats inputFormat, out InputDigitLanguages inputDigitLanguage) { inputFormat = InputFormats.Digits; if (str[0] == '-' || str[0] == '+') { inputFormat = InputFormats.DigitsWithSign; } inputDigitLanguage = NumberParsersSuggestions.DetectInputDigitLanguage(str); if (inputDigitLanguage == InputDigitLanguages.None) { inputFormat = InputFormats.Letters; } }
/// <summary> /// Creates suggestions for the given pattern info /// </summary> /// <param name="rule">the change rules that give order to the suggestions</param> /// <param name="pi">the pattern info object to create suggestions for</param> /// <returns></returns> private static string[] CreateDigitizedNumberSuggestions(NumberChangeRule rule, DigitizedNumberPatternInfo pi) { if (pi == null) { return(new string[0]); } var lstSug = new List <string>(); var inpFormat = NumberChangeRule.InputFormats.Digits; var inpLang = NumberParsersSuggestions.DetectInputDigitLanguage(pi.Content); if (inpLang == NumberChangeRule.InputDigitLanguages.None) { inpLang = NumberChangeRule.InputDigitLanguages.English; } string f20NormalizedEng = ParsingUtils.ConvertNumber2English(MathUtils.NormalizeForF20Format(pi.Number.ToString("F20"))); string f20CurrencyEng = MathUtils.InsertThousandSeperator(f20NormalizedEng); bool addCurrency = (f20NormalizedEng != f20CurrencyEng); string f20NormPer = ParsingUtils.ConvertNumber2Persian(f20NormalizedEng); string f20CurrencyPer = ParsingUtils.ConvertNumber2Persian(f20CurrencyEng); string perLetterNumber; if (!NumberToPersianString.TryConvertNumberToPersianString(pi.Number, out perLetterNumber)) { perLetterNumber = null; } string perLetterNegNumber = null; if (pi.Content[0] == '-') { if (!NumberToPersianString.TryConvertNumberToPersianString(-pi.Number, out perLetterNegNumber)) { perLetterNegNumber = null; } else { perLetterNegNumber = "-" + perLetterNegNumber; } } else if (pi.Content[0] == '+' && !String.IsNullOrEmpty(perLetterNumber)) { perLetterNegNumber = "+" + perLetterNumber; } KeyValuePair <NumberChangeRule.OutputFormats, NumberChangeRule.OutputDigitLanguages>?sugPrior = null; if (rule != null) { if (!String.IsNullOrEmpty(perLetterNegNumber)) { inpFormat = NumberChangeRule.InputFormats.DigitsWithSign; } if (rule.ContainsKey(inpFormat, inpLang)) { sugPrior = rule.GetValueForKey(inpFormat, inpLang); } else if (inpFormat == NumberChangeRule.InputFormats.DigitsWithSign && rule.ContainsKey(NumberChangeRule.InputFormats.Digits, inpLang)) { sugPrior = rule.GetValueForKey(NumberChangeRule.InputFormats.Digits, inpLang); } } // now giving orders if ((sugPrior != null && (sugPrior.Value.Value == NumberChangeRule.OutputDigitLanguages.Persian) && (sugPrior.Value.Key == NumberChangeRule.OutputFormats.FloatingPoint || sugPrior.Value.Key == NumberChangeRule.OutputFormats.Fractional)) || (sugPrior == null && inpLang != NumberChangeRule.InputDigitLanguages.Persian)) { // adding floating in Persian digits lstSug.Add(f20NormPer); if (addCurrency) { lstSug.Add(f20CurrencyPer); } // adding number in persian letters if (!String.IsNullOrEmpty(perLetterNumber)) { lstSug.Add(perLetterNumber); } // adding number in persian letters and sign if (!String.IsNullOrEmpty(perLetterNegNumber)) { lstSug.Add(perLetterNegNumber); } // adding number in english digits lstSug.Add(f20NormalizedEng); if (addCurrency) { lstSug.Add(f20CurrencyEng); } } else if ((sugPrior != null && (sugPrior.Value.Value == NumberChangeRule.OutputDigitLanguages.Persian) && (sugPrior.Value.Key == NumberChangeRule.OutputFormats.FloatingPointWithSep))) { // adding floating in Persian digits if (addCurrency) { lstSug.Add(f20CurrencyPer); } lstSug.Add(f20NormPer); // adding number in persian letters if (!String.IsNullOrEmpty(perLetterNumber)) { lstSug.Add(perLetterNumber); } // adding number in persian letters and sign if (!String.IsNullOrEmpty(perLetterNegNumber)) { lstSug.Add(perLetterNegNumber); } // adding number in english digits if (addCurrency) { lstSug.Add(f20CurrencyEng); } lstSug.Add(f20NormalizedEng); } else if ((sugPrior != null && (sugPrior.Value.Key == NumberChangeRule.OutputFormats.Letters)) || (sugPrior == null && inpLang == NumberChangeRule.InputDigitLanguages.Persian)) { // adding number in persian letters if (!String.IsNullOrEmpty(perLetterNumber)) { lstSug.Add(perLetterNumber); } // adding number in persian letters and sign if (!String.IsNullOrEmpty(perLetterNegNumber)) { lstSug.Add(perLetterNegNumber); } // adding number in english digits lstSug.Add(f20NormalizedEng); if (addCurrency) { lstSug.Add(f20CurrencyEng); } // adding floating in Persian digits lstSug.Add(f20NormPer); if (addCurrency) { lstSug.Add(f20CurrencyPer); } } else if (sugPrior != null && (sugPrior.Value.Key == NumberChangeRule.OutputFormats.LettersWithSign)) { // adding number in persian letters and sign if (!String.IsNullOrEmpty(perLetterNegNumber)) { lstSug.Add(perLetterNegNumber); } // adding number in persian letters if (!String.IsNullOrEmpty(perLetterNumber)) { lstSug.Add(perLetterNumber); } // adding number in english digits lstSug.Add(f20NormalizedEng); if (addCurrency) { lstSug.Add(f20CurrencyEng); } // adding floating in Persian digits lstSug.Add(f20NormPer); if (addCurrency) { lstSug.Add(f20CurrencyPer); } } else if (sugPrior != null && (sugPrior.Value.Value == NumberChangeRule.OutputDigitLanguages.English) && (sugPrior.Value.Key == NumberChangeRule.OutputFormats.FloatingPoint || sugPrior.Value.Key == NumberChangeRule.OutputFormats.Fractional)) { // adding number in english digits lstSug.Add(f20NormalizedEng); if (addCurrency) { lstSug.Add(f20CurrencyEng); } // adding floating in Persian digits lstSug.Add(f20NormPer); if (addCurrency) { lstSug.Add(f20CurrencyPer); } // adding number in persian letters and sign if (!String.IsNullOrEmpty(perLetterNegNumber)) { lstSug.Add(perLetterNegNumber); } // adding number in persian letters if (!String.IsNullOrEmpty(perLetterNumber)) { lstSug.Add(perLetterNumber); } } else if (sugPrior != null && (sugPrior.Value.Value == NumberChangeRule.OutputDigitLanguages.English) && (sugPrior.Value.Key == NumberChangeRule.OutputFormats.FloatingPointWithSep)) { // adding number in english digits if (addCurrency) { lstSug.Add(f20CurrencyEng); } lstSug.Add(f20NormalizedEng); // adding floating in Persian digits if (addCurrency) { lstSug.Add(f20CurrencyPer); } lstSug.Add(f20NormPer); // adding number in persian letters and sign if (!String.IsNullOrEmpty(perLetterNegNumber)) { lstSug.Add(perLetterNegNumber); } // adding number in persian letters if (!String.IsNullOrEmpty(perLetterNumber)) { lstSug.Add(perLetterNumber); } } else { // adding number in persian letters if (!String.IsNullOrEmpty(perLetterNumber)) { lstSug.Add(perLetterNumber); } // adding number in persian letters and sign if (!String.IsNullOrEmpty(perLetterNegNumber)) { lstSug.Add(perLetterNegNumber); } // adding number in english digits lstSug.Add(f20NormalizedEng); if (addCurrency) { lstSug.Add(f20CurrencyEng); } // adding floating in Persian digits lstSug.Add(f20NormPer); if (addCurrency) { lstSug.Add(f20CurrencyPer); } } return(lstSug.ToArray()); }