/// <summary> /// /// </summary> /// <param name="para"></param> /// <param name="startingNodeToMoveToNewPara"></param> /// <returns>the XmlNode corresponding to the new paragraph defn</returns> internal XmlNode InsertParagraphBreak(IStTxtPara para, XmlNode startingNodeToMoveToNewPara) { // IStTxtPara/Segments/CmBaseAnnotation[] ParagraphBuilder pb = GetParagraphBuilder(para); // make a new paragraph node after the current one if (pb.ParagraphDefinition != null) { XmlNode newParaDefn = InsertNewParagraphDefn(pb.ParagraphDefinition); ParagraphBuilder pbNew = new ParagraphBuilder(m_cache, m_text.ContentsOA.ParagraphsOS, newParaDefn); // if we are breaking at a segment form, create new segment and move the rest of the segment forms XmlNode startingSegNode = null; if (startingNodeToMoveToNewPara.ParentNode.Name == "SegmentForms37") { pbNew.CreateSegmentNode(); XmlNode newSegForms = pbNew.CreateSegmentForms(); MoveSiblingNodes(startingNodeToMoveToNewPara, newSegForms, null); // get the next segment if any. int iSeg = XmlUtils.GetIndexAmongSiblings(startingNodeToMoveToNewPara.ParentNode.ParentNode); List<XmlNode> segmentNodes = pb.SegmentNodes(); startingSegNode = segmentNodes[iSeg].NextSibling; } else { Debug.Assert(startingNodeToMoveToNewPara.ParentNode.Name == "Segments16"); startingSegNode = startingNodeToMoveToNewPara; } if (startingSegNode != null) { // move all the remaining segments beginning at startingSegNode into the new paragraph. MoveSiblingNodes(startingSegNode, pbNew.ParagraphDefinition.LastChild, null); } return pbNew.ParagraphDefinition; } return null; }