Chromium Code Reviews| 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..a0edddb1badf131f5ae39bcc7ce6d85896189e4e |
| --- /dev/null |
| +++ b/java/org/chromium/distiller/webdocument/filters/NestedElementRetainer.java |
| @@ -0,0 +1,39 @@ |
| +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; |
| + } |
| + startWebTag.setIsContent(isContent); |
| + webTag.setIsContent(isContent); |
| + isContent = startWebTag.getIsContent(); |
|
wychen
2015/08/04 02:37:01
This line doesn't seem necessary.
|
| + } |
| + } |
| + } |
| + } |
| +} |