// Token: 0x060068B0 RID: 26800 RVA: 0x001D8BE4 File Offset: 0x001D6DE4 protected override BaseParagraph GetParagraph(ITextPointer textPointer, bool fEmptyOk) { Invariant.Assert(textPointer is TextPointer); BaseParagraph baseParagraph = null; while (baseParagraph == null) { TextPointerContext pointerContext = textPointer.GetPointerContext(LogicalDirection.Forward); if (pointerContext == TextPointerContext.ElementStart) { TextElement adjacentElementFromOuterPosition = ((TextPointer)textPointer).GetAdjacentElementFromOuterPosition(LogicalDirection.Forward); if (adjacentElementFromOuterPosition is ListItem) { baseParagraph = new ListItemParagraph(adjacentElementFromOuterPosition, base.StructuralCache); break; } if (adjacentElementFromOuterPosition is List) { baseParagraph = new ListParagraph(adjacentElementFromOuterPosition, base.StructuralCache); break; } if (((TextPointer)textPointer).IsFrozen) { textPointer = textPointer.CreatePointer(); } textPointer.MoveToPosition(adjacentElementFromOuterPosition.ElementEnd); } else if (pointerContext == TextPointerContext.ElementEnd) { if (base.Element == ((TextPointer)textPointer).Parent) { break; } if (((TextPointer)textPointer).IsFrozen) { textPointer = textPointer.CreatePointer(); } textPointer.MoveToNextContextPosition(LogicalDirection.Forward); } else { if (((TextPointer)textPointer).IsFrozen) { textPointer = textPointer.CreatePointer(); } textPointer.MoveToNextContextPosition(LogicalDirection.Forward); } } if (baseParagraph != null) { base.StructuralCache.CurrentFormatContext.DependentMax = (TextPointer)textPointer; } return(baseParagraph); }
/// <summary> /// Determine paragraph type at the current TextPointer and /// create it. Only ListItem elements are considered. Any other /// content is skipped. /// </summary> /// <param name="textPointer"> /// TextPointer at which paragraph is to be created /// </param> /// <param name="fEmptyOk"> /// True if empty paragraph is acceptable /// </param> /// <returns> /// BaseParagraph that was created /// </returns> protected override BaseParagraph GetParagraph(ITextPointer textPointer, bool fEmptyOk) { Invariant.Assert(textPointer is TextPointer); BaseParagraph paragraph = null; while (paragraph == null) { TextPointerContext runType = textPointer.GetPointerContext(LogicalDirection.Forward); if (runType == TextPointerContext.ElementStart) { TextElement element = ((TextPointer)textPointer).GetAdjacentElementFromOuterPosition(LogicalDirection.Forward); if (element is ListItem) { // paragraph = new ListItemParagraph(element, StructuralCache); break; } else if (element is List) { // paragraph = new ListParagraph(element, StructuralCache); break; } // Skip all elements, which are not valid list item children if (((TextPointer)textPointer).IsFrozen) { // Need to clone TextPointer before moving it. textPointer = textPointer.CreatePointer(); } textPointer.MoveToPosition(element.ElementEnd); } else if (runType == TextPointerContext.ElementEnd) { // End of list, if the same as Owner of associated element // Skip content otherwise if (Element == ((TextPointer)textPointer).Parent) { break; } if (((TextPointer)textPointer).IsFrozen) { // Need to clone TextPointer before moving it. textPointer = textPointer.CreatePointer(); } textPointer.MoveToNextContextPosition(LogicalDirection.Forward); } else { // Skip content if (((TextPointer)textPointer).IsFrozen) { // Need to clone TextPointer before moving it. textPointer = textPointer.CreatePointer(); } textPointer.MoveToNextContextPosition(LogicalDirection.Forward); } } if (paragraph != null) { StructuralCache.CurrentFormatContext.DependentMax = (TextPointer)textPointer; } return paragraph; }
/// <summary> /// Constructor. /// </summary> /// <param name="paragraph"> /// ListParagraph associated with this para client. /// </param> internal ListParaClient(ListParagraph paragraph) : base(paragraph) { }
/// <summary> /// Determine paragraph type at the current TextPointer and /// create it. Only ListItem elements are considered. Any other /// content is skipped. /// </summary> /// <param name="textPointer"> /// TextPointer at which paragraph is to be created /// </param> /// <param name="fEmptyOk"> /// True if empty paragraph is acceptable /// </param> /// <returns> /// BaseParagraph that was created /// </returns> protected override BaseParagraph GetParagraph(ITextPointer textPointer, bool fEmptyOk) { Invariant.Assert(textPointer is TextPointer); BaseParagraph paragraph = null; while (paragraph == null) { TextPointerContext runType = textPointer.GetPointerContext(LogicalDirection.Forward); if (runType == TextPointerContext.ElementStart) { TextElement element = ((TextPointer)textPointer).GetAdjacentElementFromOuterPosition(LogicalDirection.Forward); if (element is ListItem) { // Need to handle visibility collapsed. //Visibility visibility = Retriever.Visibility(treePtr.CPPtr.Element); //if (visibility != Visibility.Collapsed) //{ // para = new //} //else skip the element paragraph = new ListItemParagraph(element, StructuralCache); break; } else if (element is List) { // Need to handle visibility collapsed. //Visibility visibility = Retriever.Visibility(treePtr.CPPtr.Element); //if (visibility != Visibility.Collapsed) //{ // para = new //} //else skip the element paragraph = new ListParagraph(element, StructuralCache); break; } // Skip all elements, which are not valid list item children if (((TextPointer)textPointer).IsFrozen) { // Need to clone TextPointer before moving it. textPointer = textPointer.CreatePointer(); } textPointer.MoveToPosition(element.ElementEnd); } else if (runType == TextPointerContext.ElementEnd) { // End of list, if the same as Owner of associated element // Skip content otherwise if (Element == ((TextPointer)textPointer).Parent) { break; } if (((TextPointer)textPointer).IsFrozen) { // Need to clone TextPointer before moving it. textPointer = textPointer.CreatePointer(); } textPointer.MoveToNextContextPosition(LogicalDirection.Forward); } else { // Skip content if (((TextPointer)textPointer).IsFrozen) { // Need to clone TextPointer before moving it. textPointer = textPointer.CreatePointer(); } textPointer.MoveToNextContextPosition(LogicalDirection.Forward); } } if (paragraph != null) { StructuralCache.CurrentFormatContext.DependentMax = (TextPointer)textPointer; } return(paragraph); }
//------------------------------------------------------------------- // // Private Methods // //------------------------------------------------------------------- #region Private Methods // ------------------------------------------------------------------ // Determine paragraph type at the current tree position and create it. // If going out of scope, return null. // // Paragraph type is determined using following: // (1) if textPointer points to Text, TextParagraph // (2) if textPointer points to ElementEnd (end of TextElement): // * if the same as Owner, NULL if fEmptyOk, TextPara otherwise // (3) if textPointer points to ElementStart (start of TextElement): // * if block, ContainerParagraph // * if inline, TextParagraph // (4) if textPointer points to UIElement: // * if block, UIElementParagraph // * if inline, TextParagraph // (5) if textPointer points to TextContainer.End, NULL // ------------------------------------------------------------------ protected virtual BaseParagraph GetParagraph(ITextPointer textPointer, bool fEmptyOk) { BaseParagraph paragraph = null; switch (textPointer.GetPointerContext(LogicalDirection.Forward)) { case TextPointerContext.Text: // Text paragraph // WORKAROUND FOR SCHEMA VALIDATION if(textPointer.TextContainer.Start.CompareTo(textPointer) > 0) { if(!(Element is TextElement) || ((TextElement)Element).ContentStart != textPointer) { throw new InvalidOperationException(SR.Get(SRID.TextSchema_TextIsNotAllowedInThisContext, Element.GetType().Name)); } } paragraph = new TextParagraph(Element, StructuralCache); break; case TextPointerContext.ElementEnd: // The end of TextElement Invariant.Assert(textPointer is TextPointer); Invariant.Assert(Element == ((TextPointer)textPointer).Parent); if(!fEmptyOk) { paragraph = new TextParagraph(Element, StructuralCache); } break; case TextPointerContext.ElementStart: // The beginning of TextElement // * if block, ContainerParagraph // * if inline, TextParagraph Debug.Assert(textPointer is TextPointer); TextElement element = ((TextPointer)textPointer).GetAdjacentElementFromOuterPosition(LogicalDirection.Forward); if (element is List) { paragraph = new ListParagraph(element, StructuralCache); } else if (element is Table) { paragraph = new TableParagraph(element, StructuralCache); } else if (element is BlockUIContainer) { paragraph = new UIElementParagraph(element, StructuralCache); } else if (element is Block || element is ListItem) { paragraph = new ContainerParagraph(element, StructuralCache); } else if (element is Inline) // Note this includes AnchoredBlocks - intentionally { paragraph = new TextParagraph(Element, StructuralCache); } else { // The only remaining TextElement classes are: TableRowGroup, TableRow, TableCell // which should never go here. Invariant.Assert(false); } break; case TextPointerContext.EmbeddedElement: // Embedded UIElements are always part of TextParagraph. // There is no possibility to make UIElement a block. paragraph = new TextParagraph(Element, StructuralCache); break; case TextPointerContext.None: // End of tree case. Invariant.Assert(textPointer.CompareTo(textPointer.TextContainer.End) == 0); if (!fEmptyOk) { paragraph = new TextParagraph(Element, StructuralCache); } break; } if (paragraph != null) { StructuralCache.CurrentFormatContext.DependentMax = (TextPointer) textPointer; } return paragraph; }
// Token: 0x060067A3 RID: 26531 RVA: 0x001D08E0 File Offset: 0x001CEAE0 protected virtual BaseParagraph GetParagraph(ITextPointer textPointer, bool fEmptyOk) { BaseParagraph baseParagraph = null; switch (textPointer.GetPointerContext(LogicalDirection.Forward)) { case TextPointerContext.None: Invariant.Assert(textPointer.CompareTo(textPointer.TextContainer.End) == 0); if (!fEmptyOk) { baseParagraph = new TextParagraph(base.Element, base.StructuralCache); } break; case TextPointerContext.Text: if (textPointer.TextContainer.Start.CompareTo(textPointer) > 0 && (!(base.Element is TextElement) || ((TextElement)base.Element).ContentStart != textPointer)) { throw new InvalidOperationException(SR.Get("TextSchema_TextIsNotAllowedInThisContext", new object[] { base.Element.GetType().Name })); } baseParagraph = new TextParagraph(base.Element, base.StructuralCache); break; case TextPointerContext.EmbeddedElement: baseParagraph = new TextParagraph(base.Element, base.StructuralCache); break; case TextPointerContext.ElementStart: { TextElement adjacentElementFromOuterPosition = ((TextPointer)textPointer).GetAdjacentElementFromOuterPosition(LogicalDirection.Forward); if (adjacentElementFromOuterPosition is List) { baseParagraph = new ListParagraph(adjacentElementFromOuterPosition, base.StructuralCache); } else if (adjacentElementFromOuterPosition is Table) { baseParagraph = new TableParagraph(adjacentElementFromOuterPosition, base.StructuralCache); } else if (adjacentElementFromOuterPosition is BlockUIContainer) { baseParagraph = new UIElementParagraph(adjacentElementFromOuterPosition, base.StructuralCache); } else if (adjacentElementFromOuterPosition is Block || adjacentElementFromOuterPosition is ListItem) { baseParagraph = new ContainerParagraph(adjacentElementFromOuterPosition, base.StructuralCache); } else if (adjacentElementFromOuterPosition is Inline) { baseParagraph = new TextParagraph(base.Element, base.StructuralCache); } else { Invariant.Assert(false); } break; } case TextPointerContext.ElementEnd: Invariant.Assert(textPointer is TextPointer); Invariant.Assert(base.Element == ((TextPointer)textPointer).Parent); if (!fEmptyOk) { baseParagraph = new TextParagraph(base.Element, base.StructuralCache); } break; } if (baseParagraph != null) { base.StructuralCache.CurrentFormatContext.DependentMax = (TextPointer)textPointer; } return(baseParagraph); }