public GrammaticalResult(string text, GrammaticalCase inputCase) { Text = text; TextAfter = text; InputCase = inputCase; OutputCase = inputCase; }
public RuleTwoWords(GrammaticalCase dealWith, string firstWordEnd, string firstWordEndChange, string secondWordEnd, string secondWordEndChange) { this.DealWith = dealWith; this.FirstWordEnd = firstWordEnd; this.FirstWordEndChange = firstWordEndChange; this.SecondWordEnd = secondWordEnd; this.SecondWordEndChange = secondWordEndChange; }
public static GrammaticalResult ChangeCase(string text, GrammaticalCase toCaseType) { var result = new GrammaticalResult(text, toCaseType); var newString = string.Empty; if (string.IsNullOrEmpty(text)) { return(result); } if (text.Length < 2) { return(result); } //multiples if (text.Contains(' ')) { var parts = text.Split(' '); //two-pronged if (parts.Count() == 2) { if (toCaseType == GrammaticalCase.Locative) { var rules = RuleBuilder.LocativeRulesTwoWords; return(rules.FindMatchingAndReplace(text, GrammaticalCase.Locative)); } } } else { if (toCaseType == GrammaticalCase.Locative) { var rules = RuleBuilder.LocativeRules; return(rules.FindMatchingAndReplace(text, GrammaticalCase.Locative)); } } return(result); }
public static GrammaticalResult FindMatchingAndReplace(this List <Rule> rules, string text, GrammaticalCase toCaseType) { var result = new GrammaticalResult(text, toCaseType); var newString = string.Empty; foreach (var rule in rules) { if (rule.WordEnd.Length > text.Length) { return(result); } var wordEnd = text.Substring(text.Length - rule.WordEnd.Length); if (rule.WordEnd.Equals(wordEnd)) { return(result.Update(text.Remove(text.Length - rule.WordEnd.Length) + rule.WordEndChange, toCaseType)); } } return(result); }
public static GrammaticalResult FindMatchingAndReplace(this List <RuleTwoWords> rules, string text, GrammaticalCase toCaseType) { var result = new GrammaticalResult(text, toCaseType); var newString = string.Empty; var parts = text.Split(' '); if (parts.Count() != 2) { return(result); } foreach (var rule in rules) { if (rule.FirstWordEnd.Length > parts[0].Length || rule.SecondWordEnd.Length > parts[1].Length) { return(result); } var end = parts[0].Substring(parts[0].Length - rule.FirstWordEnd.Length); var secondEnd = parts[1].Substring(parts[1].Length - rule.SecondWordEnd.Length); if (rule.FirstWordEnd == end && rule.SecondWordEnd == secondEnd) { newString = parts[0].Remove(parts[0].Length - rule.FirstWordEnd.Length) + rule.FirstWordEndChange + " " + parts[1].Remove(parts[1].Length - rule.SecondWordEnd.Length) + rule.SecondWordEndChange; return(result.Update(newString, GrammaticalCase.Locative)); } } return(result); }
public static string ConvertToDateByWordsString(DateTime date, GrammaticalCase grammaticalCase) { string[] days = DayNominative; switch (grammaticalCase) { case GrammaticalCase.Genitive: days = DayGenitive; break; case GrammaticalCase.Nominative: days = DayNominative; break; } var dayAsString = days[date.Day - 1]; var monthAsString = MonthGenitive[date.Month - 1]; var yearAsString = ConvertToNumberByWordsString(date.Year, true); int indexOfLastWordInDateStr = yearAsString.LastIndexOf(" ", StringComparison.Ordinal); if (indexOfLastWordInDateStr == -1) { yearAsString = string.Empty; } else { yearAsString = yearAsString.Substring(0, indexOfLastWordInDateStr + 1); } int year = date.Year % 10; int decade = date.Year % 100; int century = date.Year % 1000; if (year != 0 && decade < 20) // year like 1914 { yearAsString += DayGenitive[decade - 1]; } else if (year != 0 && decade > 20) // year like 1926 { yearAsString += DayGenitive[year - 1]; } else // year like 1930 || 1900 || 2000 { if (decade != 0) // year like 1930 { yearAsString += DecadeGenitive[decade / 10 - 1]; } else if (century != 0) // year like 1930 { yearAsString += CenturyGenitive[century / 100 - 1]; } else { indexOfLastWordInDateStr = yearAsString.Trim().LastIndexOf(" ", StringComparison.Ordinal); yearAsString = yearAsString.Substring(0, indexOfLastWordInDateStr + 1); yearAsString += ThousandGenitive[date.Year / 1000 - 1]; } } return string.Format("{0} {1} {2} года", dayAsString, monthAsString, yearAsString); }
/// <summary> /// Turns the provided date into ordinal words /// </summary> /// <param name="input">The date to be made into ordinal words</param> /// <param name="grammaticalCase">The grammatical case to use for output words</param> /// <returns>The date in ordinal words</returns> public static string ToOrdinalWords(this DateOnly input, GrammaticalCase grammaticalCase) { return(Configurator.DateOnlyToOrdinalWordsConverter.Convert(input, grammaticalCase)); }
public virtual string Convert(DateTime date, GrammaticalCase grammaticalCase) { return(Convert(date)); }
public Rule(GrammaticalCase dealWith, string wordEnd, string wordEndChange) { this.DealWith = dealWith; this.WordEnd = wordEnd; this.WordEndChange = wordEndChange; }
/// <inheritdoc /> public string Convert(DateTime date, GrammaticalCase grammaticalCase) => Transformer.Transform(Inner.Convert(date, grammaticalCase));
public static Model.GrammaticalResult GetLocative(this string text, GrammaticalCase caseType) { return(GrammaticalFunctions.ChangeCase(text, caseType)); }
public static string ConvertToDateByWordsString(DateTime date, GrammaticalCase grammaticalCase) { string[] days = DayNominative; switch (grammaticalCase) { case GrammaticalCase.Genitive: days = DayGenitive; break; case GrammaticalCase.Nominative: days = DayNominative; break; } var dayAsString = days[date.Day - 1]; var monthAsString = MonthGenitive[date.Month - 1]; var yearAsString = ConvertToNumberByWordsString(date.Year, true); int indexOfLastWordInDateStr = yearAsString.LastIndexOf(" ", StringComparison.Ordinal); if (indexOfLastWordInDateStr == -1) { yearAsString = string.Empty; } else { yearAsString = yearAsString.Substring(0, indexOfLastWordInDateStr + 1); } int year = date.Year % 10; int decade = date.Year % 100; int century = date.Year % 1000; if (year != 0 && decade < 20) // year like 1914 { yearAsString += DayGenitive[decade - 1]; } else if (year != 0 && decade > 20) // year like 1926 { yearAsString += DayGenitive[year - 1]; } else // year like 1930 || 1900 || 2000 { if (decade != 0) // year like 1930 { yearAsString += DecadeGenitive[decade / 10 - 1]; } else if (century != 0) // year like 1930 { yearAsString += CenturyGenitive[century / 100 - 1]; } else { indexOfLastWordInDateStr = yearAsString.Trim().LastIndexOf(" ", StringComparison.Ordinal); yearAsString = yearAsString.Substring(0, indexOfLastWordInDateStr + 1); yearAsString += ThousandGenitive[date.Year / 1000 - 1]; } } return(string.Format("{0} {1} {2} года", dayAsString, monthAsString, yearAsString)); }
public GrammaticalResult Update(string textAfter, GrammaticalCase outputCase) { TextAfter = textAfter; OutputCase = outputCase; return(this); }