public void ClearContext() { TitleChapter = null; CurrentParagraph = null; CurrentHierarchy = null; previousElement = null; }
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; } }