本文整理汇总了Java中us.codecraft.xsoup.XTokenQueue类的典型用法代码示例。如果您正苦于以下问题:Java XTokenQueue类的具体用法?Java XTokenQueue怎么用?Java XTokenQueue使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
XTokenQueue类属于us.codecraft.xsoup包,在下文中一共展示了XTokenQueue类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: byFunction
import us.codecraft.xsoup.XTokenQueue; //导入依赖的package包/类
private Evaluator byFunction(XTokenQueue predicatesQueue) {
for (Map.Entry<String, FunctionEvaluator> entry : FUNCTION_MAPPING.entrySet()) {
if (predicatesQueue.matchChomp(entry.getKey())) {
String paramString = predicatesQueue.chompBalanced('(', ')');
List<String> params = XTokenQueue.trimQuotes(XTokenQueue.parseFuncionParams(paramString));
if (params.get(0).startsWith("@")) {
params.set(0, params.get(0).substring(1));
return entry.getValue().call(params.toArray(new String[0]));
} else {
return null;
}
}
}
throw new Selector.SelectorParseException("Could not parse query '%s': unexpected token at '%s'", query, predicatesQueue.remainder());
}
示例2: functionRegex
import us.codecraft.xsoup.XTokenQueue; //导入依赖的package包/类
private void functionRegex(String remainder) {
Validate.isTrue(remainder.endsWith(")"), "Unclosed bracket for function! " + remainder);
List<String> params = XTokenQueue.trimQuotes(XTokenQueue.parseFuncionParams(remainder.substring("regex(".length(), remainder.length() - 1)));
if (params.size() == 1) {
elementOperator = new ElementOperator.Regex(params.get(0));
} else if (params.size() == 2) {
if (params.get(0).startsWith("@")) {
elementOperator = new ElementOperator.Regex(params.get(1), params.get(0).substring(1));
} else {
elementOperator = new ElementOperator.Regex(params.get(0), null, Integer.parseInt(params.get(1)));
}
} else if (params.size() == 3) {
elementOperator = new ElementOperator.Regex(params.get(1), params.get(0).substring(1), Integer.parseInt(params.get(2)));
} else {
throw new Selector.SelectorParseException("Unknown usage for regex()" + remainder);
}
}
示例3: removePadding
import us.codecraft.xsoup.XTokenQueue; //导入依赖的package包/类
/**
* remove padding for JSONP
* @param padding padding
* @return json after padding removed
*/
public Json removePadding(String padding) {
String text = getFirstSourceText();
XTokenQueue tokenQueue = new XTokenQueue(text);
tokenQueue.consumeWhitespace();
tokenQueue.consume(padding);
tokenQueue.consumeWhitespace();
String chompBalanced = tokenQueue.chompBalancedNotInQuotes('(', ')');
return new Json(chompBalanced);
}
示例4: consumePredicates
import us.codecraft.xsoup.XTokenQueue; //导入依赖的package包/类
private Evaluator consumePredicates(String queue) {
XTokenQueue predicatesQueue = new XTokenQueue(queue);
EvaluatorStack evaluatorStack = new EvaluatorStack();
Operation currentOperation = null;
predicatesQueue.consumeWhitespace();
while (!predicatesQueue.isEmpty()) {
if (predicatesQueue.matchChomp("and")) {
currentOperation = Operation.AND;
} else if (predicatesQueue.matchChomp("or")) {
currentOperation = Operation.OR;
} else {
if (currentOperation == null && evaluatorStack.size() > 0) {
throw new IllegalArgumentException(String.format("Need AND/OR between two predicate! %s", predicatesQueue.remainder()));
}
Evaluator evaluator;
if (predicatesQueue.matches("(")) {
evaluator = consumePredicates(predicatesQueue.chompBalanced('(', ')'));
} else if (predicatesQueue.matches("@")) {
evaluator = byAttribute(predicatesQueue);
} else if (predicatesQueue.matchesRegex("\\w+.*")) {
evaluator = byFunction(predicatesQueue);
} else {
throw new Selector.SelectorParseException("Could not parse query '%s': unexpected token at '%s'", query, predicatesQueue.remainder());
}
evaluatorStack.calc(evaluator, currentOperation);
//consume operator
currentOperation = null;
}
predicatesQueue.consumeWhitespace();
}
evaluatorStack.mergeOr();
return evaluatorStack.peek();
}
示例5: chompEqualValue
import us.codecraft.xsoup.XTokenQueue; //导入依赖的package包/类
private String chompEqualValue(XTokenQueue cq) {
String value;
if (cq.matchChomp("'")) {
value = cq.chompTo("'");
} else if (cq.matchChomp("\"")) {
value = cq.chompTo("\"");
} else if (cq.containsAny(" ")) {
value = cq.chompTo(" ");
} else {
value = cq.remainder();
}
return value;
}
示例6: XPathParser
import us.codecraft.xsoup.XTokenQueue; //导入依赖的package包/类
public XPathParser(String xpathStr) {
this.query = xpathStr;
this.tq = new XTokenQueue(xpathStr);
}
示例7: byAttribute
import us.codecraft.xsoup.XTokenQueue; //导入依赖的package包/类
private Evaluator byAttribute(XTokenQueue cq) {
cq.matchChomp("@");
String key = cq.consumeToAny("=", "!=", "^=", "$=", "*=", "~="); // eq, not, start, end, contain, match, (no val)
Validate.notEmpty(key);
cq.consumeWhitespace();
Evaluator evaluator;
if (cq.isEmpty()) {
if ("*".equals(key)) {
evaluator = new XEvaluators.HasAnyAttribute();
} else {
evaluator = new Evaluator.Attribute(key);
}
} else {
if (cq.matchChomp("=")) {
String value = chompEqualValue(cq);
//to support select one class out of all
if (key.equals("class")) {
String className = XTokenQueue.trimQuotes(value);
if (!className.contains(" ")) {
evaluator = new Evaluator.Class(className);
} else {
evaluator = new Evaluator.AttributeWithValue(key, className);
}
} else {
evaluator = new Evaluator.AttributeWithValue(key, XTokenQueue.trimQuotes(value));
}
} else if (cq.matchChomp("!="))
evaluator = new Evaluator.AttributeWithValueNot(key, XTokenQueue.trimQuotes(chompEqualValue(cq)));
else if (cq.matchChomp("^="))
evaluator = new Evaluator.AttributeWithValueStarting(key, XTokenQueue.trimQuotes(chompEqualValue(cq)));
else if (cq.matchChomp("$="))
evaluator = new Evaluator.AttributeWithValueEnding(key, XTokenQueue.trimQuotes(chompEqualValue(cq)));
else if (cq.matchChomp("*="))
evaluator = new Evaluator.AttributeWithValueContaining(key, XTokenQueue.trimQuotes(chompEqualValue(cq)));
else if (cq.matchChomp("~="))
evaluator = new Evaluator.AttributeWithValueMatching(key, Pattern.compile(XTokenQueue.trimQuotes(chompEqualValue(cq))));
else
throw new Selector.SelectorParseException("Could not parse attribute query '%s': unexpected token at '%s'", query, chompEqualValue(cq));
}
return evaluator;
}