Chromium Code Reviews| Index: java/org/chromium/distiller/webdocument/filters/RelevantElements.java |
| diff --git a/java/org/chromium/distiller/webdocument/filters/RelevantElements.java b/java/org/chromium/distiller/webdocument/filters/RelevantElements.java |
| index 02ec74670b5dd6b98dd3767d0e40540326e41c48..ec4a2665037b708d4defadabe6511a48fa58c393 100644 |
| --- a/java/org/chromium/distiller/webdocument/filters/RelevantElements.java |
| +++ b/java/org/chromium/distiller/webdocument/filters/RelevantElements.java |
| @@ -7,6 +7,10 @@ package org.chromium.distiller.webdocument.filters; |
| import org.chromium.distiller.webdocument.WebDocument; |
| import org.chromium.distiller.webdocument.WebElement; |
| import org.chromium.distiller.webdocument.WebText; |
| +import org.chromium.distiller.webdocument.PlaceHolderStart; |
| +import org.chromium.distiller.webdocument.PlaceHolderEnd; |
| +import java.util.List; |
| +import java.util.Stack; |
| public class RelevantElements { |
| public static boolean process(WebDocument document) { |
| @@ -25,6 +29,42 @@ public class RelevantElements { |
| } |
| } |
| } |
| + handlePlaceHolderElements(document.getElements()); |
| return changes; |
| } |
| + |
| + public static void handlePlaceHolderElements(List<WebElement> elements) { |
| + class PlaceHolder { |
| + public PlaceHolder(WebElement start, boolean flush) { |
|
mdjones
2015/07/29 17:12:16
What if there were only one class for a placeholde
|
| + this.start = start; |
| + this.flush = flush; |
| + } |
| + |
| + WebElement start; |
| + boolean flush; |
| + } |
| + boolean flush = false; |
| + int stackMark = -1; |
|
mdjones
2015/07/29 17:12:16
I don't understand what this var is for. The only
|
| + Stack<PlaceHolder> holderStack = new Stack<>(); |
| + |
| + for (WebElement e : elements) { |
| + if (e instanceof WebText) { |
| + if (!flush) { |
| + flush = e.getIsContent(); |
| + } |
| + } else if (e instanceof PlaceHolderStart) { |
| + holderStack.push(new PlaceHolder(e, flush)); |
| + flush = false; |
| + } else if (e instanceof PlaceHolderEnd) { |
| + PlaceHolder placeHolder = holderStack.pop(); |
| + boolean isContent; |
|
mdjones
2015/07/29 21:00:24
Set isContent to flush here instead, or just use f
|
| + if ((isContent = flush || stackMark >= holderStack.size())) { |
| + stackMark = holderStack.size() - 1; |
| + } |
| + placeHolder.start.setIsContent(isContent); |
| + e.setIsContent(isContent); |
| + flush = placeHolder.flush; |
| + } |
| + } |
| + } |
| } |