org.jsoup.select.CombiningEvaluator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of html2pdf Show documentation
Show all versions of html2pdf Show documentation
pdfHTML is an iText add-on that lets you to parse (X)HTML snippets and the associated CSS and converts
them to PDF.
package org.jsoup.select;
import org.jsoup.helper.StringUtil;
import org.jsoup.nodes.Element;
import com.itextpdf.io.util.MessageFormatUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
/**
* Base combining (and, or) evaluator.
*/
abstract class CombiningEvaluator extends Evaluator {
final ArrayList evaluators;
int num = 0;
CombiningEvaluator() {
super();
evaluators = new ArrayList();
}
CombiningEvaluator(Collection evaluators) {
this();
this.evaluators.addAll(evaluators);
updateNumEvaluators();
}
Evaluator rightMostEvaluator() {
return num > 0 ? evaluators.get(num - 1) : null;
}
void replaceRightMostEvaluator(Evaluator replacement) {
evaluators.set(num - 1, replacement);
}
void updateNumEvaluators() {
// used so we don't need to bash on size() for every match test
num = evaluators.size();
}
static final class And extends CombiningEvaluator {
And(Collection evaluators) {
super(evaluators);
}
And(Evaluator... evaluators) {
this(Arrays.asList(evaluators));
}
@Override
public boolean matches(Element root, Element node) {
for (int i = 0; i < num; i++) {
Evaluator s = evaluators.get(i);
if (!s.matches(root, node))
return false;
}
return true;
}
@Override
public String toString() {
return StringUtil.join(evaluators, " ");
}
}
static final class Or extends CombiningEvaluator {
/**
* Create a new Or evaluator. The initial evaluators are ANDed together and used as the first clause of the OR.
* @param evaluators initial OR clause (these are wrapped into an AND evaluator).
*/
Or(Collection evaluators) {
super();
if (num > 1)
this.evaluators.add(new And(evaluators));
else // 0 or 1
this.evaluators.addAll(evaluators);
updateNumEvaluators();
}
Or() {
super();
}
public void add(Evaluator e) {
evaluators.add(e);
updateNumEvaluators();
}
@Override
public boolean matches(Element root, Element node) {
for (int i = 0; i < num; i++) {
Evaluator s = evaluators.get(i);
if (s.matches(root, node))
return true;
}
return false;
}
@Override
public String toString() {
return MessageFormatUtil.format(":or{0}", evaluators);
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy