blob: 273dacb9a2851ceada67be43b730fdf00806a6c4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2013 Tasktop Technologies.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.wikitext.internal.parser.html;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.helper.StringUtil;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode;
/**
* @author David Green
*/
public abstract class DocumentProcessor {
public abstract void process(Document document);
/**
* normalize text node children of the given parent element. Ensures that adjacent text nodes are combined into a
* single text node, and whitespace is normalized.
*
* @param parentElement
* the parent element whose children should be normalized
* @see StringUtil#normaliseWhitespace(String)
*/
protected static void normalizeTextNodes(Element parentElement) {
List<Node> children = parentElement.childNodes();
if (!children.isEmpty()) {
children = new ArrayList<Node>(children);
for (Node child : children) {
if (child instanceof TextNode) {
TextNode childTextNode = (TextNode) child;
Node previousSibling = child.previousSibling();
if (previousSibling instanceof TextNode) {
TextNode previousSiblingTextNode = (TextNode) previousSibling;
childTextNode.text(previousSiblingTextNode.text() + childTextNode.text());
previousSibling.remove();
}
String wholeText = childTextNode.getWholeText();
if (!Html.isWhitespacePreserve(parentElement)) {
wholeText = StringUtil.normaliseWhitespace(wholeText);
}
childTextNode.text(wholeText);
}
}
}
}
}