1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | package Torello.HTML; import Torello.Java.LV; import Torello.Java.StrFilter; import java.util.Vector; import java.util.stream.IntStream; class UsingStrFilter { static int[] filter( final Vector<? super TagNode> html, final int sPos, final int ePos, final StrFilter filter ) { // Save the list of modified TagNode's in a Java Stream IntStream.Builder b = IntStream.builder(); // Temp Var, Loop Variable LV l = new LV(sPos, ePos, html); TagNode tn; for (int i=l.start; i < l.end; i++) if ((tn = ((HTMLNode) html.elementAt(i)).openTagPWA()) != null) { // Build a list of all inner-tags that must be removed String[] innerTagsToRemove = tn .allAN(true, true) // Builds attibute Stream<String> .filter(innerTag -> filter.test(innerTag)) // Run the user provided filter .toArray(String[]::new); // Stream<String> -> String[] if (innerTagsToRemove.length > 0) { // Build a new TagNode, and then replace the old one with the newly built one // on the page or sub-page, and at the same location. tn = tn.removeAttributes(innerTagsToRemove); html.setElementAt(tn, i); // Java's IntStream-Builder is just a way to "build" a short list of integer's. // The list shall contain all Vector indices where a "TagNode swap" occurred b.accept(i); } } // Build the IntStream, Convert the IntStream -> int[], Return it. return b.build().toArray(); } static int[] filter( final Vector<? super TagNode> html, final int[] posArr, final StrFilter filter ) { // Use Java Stream to keep a list of Vector-Locations that were updated / modified. IntStream.Builder b = IntStream.builder(); for (int i: posArr) { HTMLNode n = (HTMLNode) html.elementAt(i); if (! n.isTagNode()) throw new TagNodeExpectedException(i); TagNode tn = (TagNode) n; if (tn.isClosing) throw new OpeningTagNodeExpectedException(i); // Minimum TagNode.str Length (in order to have attributes): '<', TOKEN, SPACE '>' if (tn.str.length() < (tn.tok.length() + 3)) continue; // Build a list of all inner-tags that must be removed String[] innerTagsToRemove = tn .allAN(true, true) // Builds attibute Stream<String> .filter(innerTag -> filter.test(innerTag)) // Run the user provided filter .toArray(String[]::new); // Stream<String> -> String[] if (innerTagsToRemove.length > 0) { // Build a new TagNode, and then replace the old one with the newly built one // on the page or sub-page, and at the same location. tn = tn.removeAttributes(innerTagsToRemove); html.setElementAt(tn, i); // Java's IntStream-Builder is just a way to "build" a short list of integer's. // The list shall contain all Vector indices where a "TagNode swap" occurred b.accept(i); } } // Build the IntStream, Convert the IntStream -> int[], Return it. return b.build().toArray(); } } |