/// <summary> /// Запиcь в хранилище предложения новой структуры синтана этого предложения. /// Используется в UpdateParagraph при сохранении абзаца после редактирования в FormParaEdit. /// </summary> public void UpdateSentStruct(long Order, SentenceAsm sentstruct) { var sent = innerPara.Where(x => x.Order == Order).FirstOrDefault(); if (sent != null) { innerPara.Remove(sent); } sentstruct.IsActual = true; sentstruct.Order = Order; innerPara.Add(sentstruct); }
/// <summary> /// Добавление предложений из списка в хранилище абзаца. /// При добавлении вычисляется хэш предложения и по жэшу происходит поиск существующего предложения в хранилище. /// Если предложение есть, то структура переносится в новый список, /// если нет, то добавляется новая структура с признаком "Неактуальная". /// Для "Неактуальных" надо делать синтаксический анализ. /// По окончании новый список заменяет предыдущее содержание хранилища. /// Используется в UpdateParagraph при сохранении абзаца после редактирования в FormParaEdit. /// </summary> public void RefreshParagraph(ArrayList input, bool IsHeader) { List <SentenceAsm> versionPara = new List <SentenceAsm>(); int i = 0; if (IsHeader) { i = -1 * input.Count; } foreach (var sent in input) { SentenceAsm newsprops; var ihash = sent.GetHashCode(); var sentprops = innerPara.Where(x => x.hash.Equals(ihash) && (Belongs2Header(x) == IsHeader)).ToList(); if (sentprops.Count == 0) { newsprops = new SentenceAsm(); newsprops.Text = sent as string; newsprops.hash = ihash; newsprops.IsActual = false; newsprops.IsDirty = true; this.IsDirty = true; } else { newsprops = sentprops[0]; newsprops.IsActual = true; } newsprops.Order = i; versionPara.Add(newsprops); i++; } if (!IsListsEqual(versionPara, IsHeader)) { IsDirty = true; if (IsHeader) { innerPara.RemoveAll(Belongs2Header); } else { innerPara.RemoveAll(Belongs2Body); } innerPara.AddRange(versionPara); } }
public ParagraphAsm(AssemblyBase srcAsm) : base(srcAsm) { IsDirty = false; this.srcAsm = srcAsm; var store = Session.Instance().Store; var sentIDs = (List <long>)srcAsm.GetValue("Phrases"); if (sentIDs != null) { foreach (var sentID in sentIDs) { var asm = store.GetAssembly(sentID, false); var sent = new SentenceAsm(asm); innerPara.Add(sent); } } }
/// <summary> /// Возвращает предложение абзаца по порядку Position. /// Предложения заголовка имеют Position < 0; /// </summary> public string GetSentenseByOrder(int Position) { SentenceAsm sent = innerPara.Where(x => x.Order == Order).FirstOrDefault(); return(sent == null ? "" : sent.Text); }
private static bool Belongs2Body(SentenceAsm p) { return(p.Order > -1); }
private static bool Belongs2Header(SentenceAsm p) { return(p.Order < 0); }