public string GetVerb(WordGender gen, WordTime time) { return((time == WordTime.Future) ? "с" : "" + WordBase + Finalizes[(int)gen, (int)time]); }
/// <summary> /// Генерирует предложение /// </summary> /// <param name="pattern">Структура предложения</param> /// <returns>Предложение</returns> public static string Generate(string pattern) { List <Word> Unterminates = GetUnterminates(pattern.Split(" ".ToArray(), StringSplitOptions.RemoveEmptyEntries)); bool solved = false; List <Word> Sentence = Unterminates; while (!solved) { solved = true; List <Word> newSentence = new List <Word>(); newSentence.Add(Dot); for (int i = Sentence.Count - 1; i >= 0; i--) { if (Sentence[i].Type == WordType.Unterminate) { solved = false; var subwords = SelectPath(Sentence[i] as UnTerminateWord); for (int k = 0; k < subwords.Count; k++) { if (subwords[k].Type == WordType.Terminate) { ((TerminateWord)subwords[k]).SpellPart = ((UnTerminateWord)Sentence[i]).SpellPart; } } newSentence.InsertRange(0, subwords); } else if (Sentence[i] != Dot) { newSentence.Insert(0, Sentence[i]); } } if (!solved) { Sentence = newSentence; } } var TSentence = Sentence.Select(word => word as TerminateWord).ToList(); StringBuilder builder = new StringBuilder(); WordTime time = (WordTime)Randomize(0, 2); for (int i = 0; i < TSentence.Count; i++) { TerminateWord tword = TSentence[i]; string wordStr = ""; switch (tword.SentencePart) { case Terminate.Существительное: wordStr = (tword as Noun).GetNoun(); break; case Terminate.Глагол: { var verb = (tword as Verb); var noun = TSentence.First(word => word.SentencePart == Terminate.Существительное); WordGender gen = (noun as Noun).Gender; gen = (noun.SpellPart == UnTerminate.Перечисление) ? WordGender.They : gen; wordStr = verb.GetVerb(gen, time); break; } case Terminate.Прилагательное: { var adj = (tword as Adjective); var noun = TSentence.First(word => word.SentencePart == Terminate.Существительное); WordGender gen = (noun as Noun).Gender; gen = (noun.SpellPart == UnTerminate.Перечисление) ? WordGender.They : gen; wordStr = adj.GetAdjective(gen); break; } case Terminate.Предлог: { wordStr = (tword as Pretext).Name; break; } case Terminate.Союз: { wordStr = (tword as Union).Name; break; } default: break; } wordStr = (i > 0) ? wordStr : wordStr.First().ToString().ToUpper() + wordStr.Substring(1); wordStr = (tword == Dot || tword == Comma || i == 0) ? wordStr : " " + wordStr; builder.Append(wordStr); } return(builder.ToString()); }