/// <summary> /// Запиcь в хранилище предложения новой структуры синтана этого предложения. /// </summary> public void AddSentStruct(int order, SentenceMap sentstruct) { var sprop = new SentProps(); sprop.order = order; sentstruct.ParagraphID = this.ParagraphID; sentstruct.Order = order; sprop.sentstruct = new SentenceMap(sentstruct); innerPara.Add(sprop); }
/// <summary> /// Добавление предложений абзаца в хранилище. /// При добавлении вычисляется хэш предложения и по жэшу происходит поиск существующего предложения в хранилище. /// Если предложение есть, то структура переносится в новый список, /// если нет, то добавляется новая структура с признаком "Неактуальная". /// Для "Неактуальных" надо делать синтаксический анализ. /// По окончании новый список заменяет предыдущее содержание хранилища. /// </summary> public void RefreshParagraph(ArrayList input, bool IsHeader) { List <SentProps> versionPara = new List <SentProps>(); int i = 0; if (IsHeader) { i = -1 * input.Count; } foreach (var sent in input) { SentProps newsprops; var ihash = sent.GetHashCode(); var sentprops = innerPara.Where(x => x.hash.Equals(ihash) && (Belongs2Header(x) == IsHeader)).ToList(); if (sentprops.Count == 0) { newsprops = new SentProps(); newsprops.sentence = sent as string; newsprops.hash = ihash; newsprops.IsActual = false; } else { newsprops = sentprops[0]; newsprops.IsActual = true; } newsprops.order = i; versionPara.Add(newsprops); i++; } SetDeleted(versionPara, IsHeader); if (IsHeader) { innerPara.RemoveAll(Belongs2Header); } else { innerPara.RemoveAll(Belongs2Body); } innerPara.AddRange(versionPara); }
/// <summary> /// Обновление элемента хранения предложения. /// </summary> public void RefreshSentProp(string sentence, SentenceMap sentstruct, bool IsActual) { int order = sentstruct.Order; SentProps sprop = innerPara.Where(x => x.order == order).FirstOrDefault(); if (sprop == null) { sprop = new SentProps(); sprop.order = order; innerPara.Add(sprop); } if (sprop.sentstruct == null) { sprop.sentstruct = new SentenceMap(sentstruct); } sprop.sentence = sentence; sprop.hash = sentence.GetHashCode(); sprop.IsActual = true; }
/// <summary> /// Возвращает предложение абзаца по порядку order. /// Предложения заголовка имеет order < 0; /// </summary> public string GetSentenseByOrder(int order) { SentProps sprop = innerPara.Where(x => x.order == order).FirstOrDefault(); return(sprop == null ? "" : sprop.sentence); }
private static bool Belongs2Body(SentProps p) { return(p.order > -1); }
private static bool Belongs2Header(SentProps p) { return(p.order < 0); }