private static CyrResult DeclineIgnoreSuffix(CyrPhrase decliner, string phrase, params string[] ignoreSuffixesStart) { int openSymbolIndex = phrase.IndexOfAny(ignoreSuffixesStart); if (openSymbolIndex == -1) { return(CaseTools.Decline(decliner, phrase)); } string parenthesisExpr = phrase.Substring(openSymbolIndex, phrase.Length - openSymbolIndex); string parenthesisLessPhrase = phrase.Remove(openSymbolIndex, phrase.Length - openSymbolIndex); CyrResult result = CaseTools.Decline(decliner, parenthesisLessPhrase); if (result == null) { return(null); } foreach (CasesEnum labelCase in Enum.GetValues(typeof(CasesEnum))) { result.Set(labelCase, result.Get(labelCase) + parenthesisExpr); } return(result); }
private static PluralPair PluralizeIgnoreSuffix(CyrPhrase decliner, string phrase, params string[] ignoreSuffixesStart) { int ignoredTailStart = phrase.IndexOfAny(ignoreSuffixesStart); if (ignoredTailStart == -1) { CyrResult declinedPhrase = CaseTools.DeclinePlural(decliner, phrase); return(declinedPhrase == null ? null : new PluralPair(phrase, declinedPhrase.Nominative)); } string ignoredSuffix = phrase.Substring(ignoredTailStart, phrase.Length - ignoredTailStart); string head = phrase.Remove(ignoredTailStart, phrase.Length - ignoredTailStart); CyrResult declinedHead = CaseTools.DeclinePlural(decliner, head); return(declinedHead == null ? null : new PluralPair(phrase, declinedHead.Nominative + ignoredSuffix)); }