public IEnumerable <Suggestion> GetFirstSuggestion(string searchText, object currentValue) { var currentTime = currentValue is DateTime ? (DateTime)currentValue : DateTime.Now; var newSuggestions = new List <Suggestion>(); // Ignore if first character is + or - if (searchText.Length >= 1) { var firstCharacter = searchText[0]; if (firstCharacter == '+' || firstCharacter == '-') { return(newSuggestions); } } // Find the parts in the time. var dateParts = Regex.Split(searchText.ToLower(), @"[^a-zA-Z0-9]+").ToList(); // Remove empty parts foreach (var part in dateParts.ToList()) { if (string.IsNullOrWhiteSpace(part)) { dateParts.Remove(part); } } switch (dateParts.Count) { default: return(newSuggestions); case 1: var part = new TimePartParser(dateParts[0], 1, currentTime); GetSinglePartSuggestions(part, newSuggestions, currentTime); break; case 2: { var firstPart = new TimePartParser(dateParts[0], 1, currentTime); var secondPart = new TimePartParser(dateParts[1], 2, currentTime); GetTwoPartSuggestions(firstPart, secondPart, newSuggestions, currentTime); break; } } return(newSuggestions); }
private void GetSinglePartSuggestions(TimePartParser part, List <Suggestion> newSuggestions, DateTime currentTime) { // Check Possible Hour if ((part.TimeType & (TimeTypeFlags.PossibleHour | TimeTypeFlags.DefiniteHour)) > 0) { // Possible or definite hour var suggestedTime = currentTime.SetHour(part.HourValue); var probability = part.HourProbability; if (currentTime != suggestedTime) { var s = new Suggestion ( "", suggestedTime.ToShortTimeString(), "", probability, suggestedTime ); newSuggestions.Add(s); } } // Check Minute if ((part.TimeType & (TimeTypeFlags.PossibleMinute | TimeTypeFlags.DefinitieMinute)) > 0) { // Possible or definite minute var suggestedTime = currentTime.SetMinute(part.MinuteValue); var probability = part.MinuteProbability; if (currentTime != suggestedTime) { var s = new Suggestion ( "", suggestedTime.ToShortTimeString(), "", probability, suggestedTime ); newSuggestions.Add(s); } } }
private void GetTwoPartSuggestions(TimePartParser firstPart, TimePartParser secondPart, List <Suggestion> newSuggestions, DateTime currentTime) { // Check Possible Hour and Minute if ((firstPart.TimeType & (TimeTypeFlags.PossibleHour | TimeTypeFlags.DefiniteHour)) > 0 && (secondPart.TimeType & (TimeTypeFlags.PossibleMinute | TimeTypeFlags.DefinitieMinute)) > 0) { var suggestedTime = currentTime.SetHour(firstPart.HourValue).SetMinute(secondPart.MinuteValue); var probability = (firstPart.HourProbability + secondPart.MinuteProbability) / 2; if (currentTime != suggestedTime) { var s = new Suggestion ( "", suggestedTime.ToShortTimeString(), "", probability, suggestedTime ); newSuggestions.Add(s); } } // Check Possible Minute and Hour (realy?) if ((firstPart.TimeType & (TimeTypeFlags.PossibleMinute | TimeTypeFlags.DefinitieMinute)) > 0 && (secondPart.TimeType & (TimeTypeFlags.PossibleHour | TimeTypeFlags.DefiniteHour)) > 0) { var suggestedTime = currentTime.SetHour(secondPart.HourValue).SetMinute(firstPart.MinuteValue); var probability = (secondPart.HourProbability + firstPart.MinuteProbability) / 2; if (currentTime != suggestedTime) { var s = new Suggestion ( "", suggestedTime.ToShortTimeString(), "", probability, suggestedTime ); newSuggestions.Add(s); } } }