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

            return(sprop == null ? "" : sprop.sentence);
        }
Пример #5
0
 private static bool Belongs2Body(SentProps p)
 {
     return(p.order > -1);
 }
Пример #6
0
 private static bool Belongs2Header(SentProps p)
 {
     return(p.order < 0);
 }