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; |
+ } |
+ } |
+ } |
} |