public void ClearContext()
 {
     TitleChapter     = null;
     CurrentParagraph = null;
     CurrentHierarchy = null;
     previousElement  = null;
 }
示例#2
0
 public ParagraphParseContext(IElementParseContext previousSibling, int currentParagraphIndex)
 {
     PreviousSibling = previousSibling;
     ParseResult     = new ParagraphParseResult()
     {
         ParagraphIndex = currentParagraphIndex
     };
 }
        public HierarchyParseContext(ElementType elementType, IElementParseContext previousSibling,
                                     IHierarchyParseContext parentHierarchy)
        {
            ElementType     = elementType;
            PreviousSibling = previousSibling;
            ParentHierarchy = parentHierarchy;

            ParseResult      = new HierarchyParseResult(elementType);
            ChildHierarchies = new List <IHierarchyParseContext>();
        }
        public DisposeHandler ParseParagraph()
        {
            CurrentParagraph = new ParagraphParseContext(previousElement, ++currentParagraphIndex);

            return(new DisposeHandler(() =>
            {
                CurrentHierarchy.AddParagraphResult(CurrentParagraph.ParseResult);

                previousElement = CurrentParagraph;
            }));
        }
        public void ExitHierarchyElement()
        {
            CurrentHierarchy.Parsed = true;

            if (CurrentHierarchy.ElementType == ElementType.TableCell)
            {
                var hierarchyInfo = (TableHierarchyInfo)CurrentHierarchy.ParentHierarchy.ParentHierarchy.HierarchyInfo;
                if (hierarchyInfo.CurrentRow == 0)
                {
                    hierarchyInfo.FirstRowParseContexts.Add(CurrentHierarchy);
                }

                if (hierarchyInfo.CurrentColumn == 0)
                {
                    hierarchyInfo.FirstColumnParseContexts.Add(CurrentHierarchy);
                }
            }
            else if (CurrentHierarchy.ElementType == ElementType.Title)
            {
                SetTitleVerse(CurrentHierarchy.ChapterEntry);
            }

            var valuableHierarchyResult = CurrentHierarchy.ParseResult.GetValuableHierarchyResult();

            previousElement  = CurrentHierarchy;
            CurrentHierarchy = CurrentHierarchy.ParentHierarchy;

            if (valuableHierarchyResult != null)
            {
                if (CurrentHierarchy != null)
                {
                    CurrentHierarchy.AddHierarchyResult(valuableHierarchyResult);
                }
                else
                {
                    if (DocumentParseResult.RootHierarchyResult != null)
                    {
                        throw new InvalidOperationException("DocumentParseResult.RootHierarchyResult != null");
                    }

                    DocumentParseResult.RootHierarchyResult = valuableHierarchyResult;
                }
            }
        }
        public void EnterHierarchyElement(ElementType paragraphType)
        {
            CurrentHierarchy = new HierarchyParseContext(paragraphType, previousElement, CurrentHierarchy);
            CurrentHierarchy.ParentHierarchy?.ChildHierarchies.Add(CurrentHierarchy);
            previousElement = null;         // чтобы когда мы войдём в параграф, у него PreviousSibling был null

            switch (paragraphType)
            {
            case ElementType.ListElement:
            {
                if (CurrentHierarchy.ParentHierarchy?.ElementType != ElementType.List)
                {
                    CurrentHierarchy.ChangeElementType(ElementType.SimpleBlock);
                }
            }
            break;

            case ElementType.Table:
            {
                CurrentHierarchy.HierarchyInfo = new TableHierarchyInfo();
            }
            break;

            case ElementType.TableBody:
            {
                if (CurrentHierarchy.ParentHierarchy?.ElementType != ElementType.Table)
                {
                    CurrentHierarchy.ChangeElementType(ElementType.SimpleBlock);
                }
                else
                {
                    CurrentHierarchy.HierarchyInfo = CurrentHierarchy.ParentHierarchy.HierarchyInfo;
                }
            }
            break;

            case ElementType.TableRow:
            {
                if (CurrentHierarchy.ParentHierarchy?.ElementType == ElementType.Table ||
                    CurrentHierarchy.ParentHierarchy?.ElementType == ElementType.TableBody)
                {
                    var hierarchyInfo = ((TableHierarchyInfo)CurrentHierarchy.ParentHierarchy.HierarchyInfo);
                    hierarchyInfo.CurrentRow++;
                    hierarchyInfo.CurrentColumn = -1;
                }
                else
                {
                    CurrentHierarchy.ChangeElementType(ElementType.SimpleBlock);
                }
            }
            break;

            case ElementType.TableCell:
            {
                if (CurrentHierarchy.ParentHierarchy?.ElementType == ElementType.TableRow)
                {
                    ((TableHierarchyInfo)CurrentHierarchy.ParentHierarchy.ParentHierarchy.HierarchyInfo).CurrentColumn++;
                }
                else
                {
                    CurrentHierarchy.ChangeElementType(ElementType.SimpleBlock);
                }
            }
            break;
            }
        }