예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
        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);
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Возвращает предложение абзаца по порядку Position.
        /// Предложения заголовка имеют Position < 0;
        /// </summary>
        public string GetSentenseByOrder(int Position)
        {
            SentenceAsm sent = innerPara.Where(x => x.Order == Order).FirstOrDefault();

            return(sent == null ? "" : sent.Text);
        }
예제 #5
0
 private static bool Belongs2Body(SentenceAsm p)
 {
     return(p.Order > -1);
 }
예제 #6
0
 private static bool Belongs2Header(SentenceAsm p)
 {
     return(p.Order < 0);
 }