public static bool SplitElements(DomElementList SourceList, bool deeply) { bool result = false; DomElementList tempList = new DomElementList(); tempList.AddRange(SourceList); foreach (DomElement element in tempList) { if (element is DomStringElement) { // 将文本元素拆分成多个字符元素 int index = SourceList.IndexOf(element); DomElementList cs = ((DomStringElement)element).SplitChars(); SourceList.RemoveAt(index); for (int iCount = 0; iCount < cs.Count; iCount++) { SourceList.Insert(index + iCount, cs[iCount]); } result = true; } else if (element is DomContainerElement) { SplitElements(((DomContainerElement)element).Elements, deeply); //SourceList.Add(element); } } return(result); }
/// <summary> /// 删除元素列表中自动创建的段落标记元素 /// </summary> /// <param name="elements">文档元素列表</param> /// <returns>操作是否改变了列表内容</returns> public static bool RemoveAutoCreateParagraphFlag(DomElementList elements) { if (elements != null && elements.Count > 0) { if (elements.LastElement is DomParagraphFlagElement) { DomParagraphFlagElement p = (DomParagraphFlagElement)elements.LastElement; if (p.AutoCreate) { elements.RemoveAt(elements.Count - 1); return(true); } } } return(false); }
public static DomElementList MergeParagraphs( DomElementList sourceElements, bool includeSelectionOnly) { if (sourceElements == null || sourceElements.Count == 0) { return(null); //throw new ArgumentNullException("sourceElements"); } DomElementList list = MergeElements(sourceElements, includeSelectionOnly); DomElementList result = new DomElementList(); DomDocument document = sourceElements[0].OwnerDocument; DomParagraphElement p = new DomParagraphElement(); p.OwnerDocument = document; result.Add(p); foreach (DomElement element in list) { DomParagraphElement paragraph = (DomParagraphElement)result[result.Count - 1]; if (element is DomParagraphFlagElement) { paragraph.StyleIndex = element.StyleIndex; paragraph.Elements.AddRaw(element); paragraph = new DomParagraphElement(); paragraph.OwnerDocument = document; result.Add(paragraph); } else { paragraph.Elements.AddRaw(element); } } DomParagraphElement lastP = (DomParagraphElement)result[result.Count - 1]; if (lastP.Elements.Count == 0) { // 删除最后一个没有任何内容的段落对象 result.RemoveAt(result.Count - 1); } return(result); }