| Index: java/org/chromium/distiller/webdocument/filters/NestedElementRetainer.java
|
| diff --git a/java/org/chromium/distiller/webdocument/filters/NestedElementRetainer.java b/java/org/chromium/distiller/webdocument/filters/NestedElementRetainer.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..293c766577c87df6ebcf5dc58ee710ef59193f7a
|
| --- /dev/null
|
| +++ b/java/org/chromium/distiller/webdocument/filters/NestedElementRetainer.java
|
| @@ -0,0 +1,40 @@
|
| +package org.chromium.distiller.webdocument.filters;
|
| +
|
| +import org.chromium.distiller.webdocument.WebDocument;
|
| +import org.chromium.distiller.webdocument.WebElement;
|
| +import org.chromium.distiller.webdocument.WebTag;
|
| +
|
| +import java.util.Stack;
|
| +
|
| +public class NestedElementRetainer {
|
| + public static void process(WebDocument document) {
|
| + boolean isContent = false;
|
| + int stackMark = -1;
|
| + Stack<WebTag> stack = new Stack<>();
|
| +
|
| + for (WebElement e : document.getElements()) {
|
| + if (!(e instanceof WebTag)) {
|
| + if (!isContent) {
|
| + isContent = e.getIsContent();
|
| + }
|
| + } else {
|
| + WebTag webTag = (WebTag) e;
|
| + if (webTag.isStartTag()) {
|
| + webTag.setIsContent(isContent);
|
| + stack.push(webTag);
|
| + isContent = false;
|
| + } else {
|
| + WebTag startWebTag = stack.pop();
|
| + isContent |= stackMark >= stack.size();
|
| + if (isContent) {
|
| + stackMark = stack.size() - 1;
|
| + }
|
| + boolean wasContent = startWebTag.getIsContent();
|
| + startWebTag.setIsContent(isContent);
|
| + webTag.setIsContent(isContent);
|
| + isContent = wasContent;
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
|
|