Пример #1
0
			/// <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;
			}