/** * Determines if this token was triggered by one of the given triggers. * * @param triggers a list of possible triggers to compare to * @return <tt>true</tt> if this token was triggered by one of the given triggers, <tt>false</tt> otherwise */ @SuppressWarnings("squid:S1698") public boolean wasTriggeredBy(String... triggers) { if (triggers.length == 0) { return false; } for (String aTrigger : triggers) { if (aTrigger != null && aTrigger.intern() == getTrigger()) { return true; } } return false; }
/** * Determines if this token was triggered by one of the given triggers. * * @param triggers a list of possible triggers to compare to * @return <tt>true</tt> if this token was triggered by one of the given triggers, <tt>false</tt> otherwise */ @SuppressWarnings("squid:S1698") public boolean wasTriggeredBy(String... triggers) { if (triggers.length == 0) { return false; } for (String aTrigger : triggers) { if (aTrigger != null && aTrigger.intern() == getTrigger()) { return true; } } return false; }
/** * Determines if this token has the given type and trigger. * * @param type the expected type * @param trigger the expected trigger * @return <tt>true</tt> if this token matches the given type and trigger, <tt>false</tt> otherwise */ @SuppressWarnings("squid:S1698") public boolean matches(TokenType type, String trigger) { if (!is(type)) { return false; } if (trigger == null) { throw new IllegalArgumentException("trigger must not be null"); } return getTrigger() == trigger.intern(); }
/** * Determines if this token has the given type and trigger. * * @param type the expected type * @param trigger the expected trigger * @return <tt>true</tt> if this token matches the given type and trigger, <tt>false</tt> otherwise */ @SuppressWarnings("squid:S1698") public boolean matches(TokenType type, String trigger) { if (!is(type)) { return false; } if (trigger == null) { throw new IllegalArgumentException("trigger must not be null"); } return getTrigger() == trigger.intern(); }
private void readOperator(StringBuilder sb) { if (!tokenizer.current().isSymbol("]")) { if (!tokenizer.current().isSymbol("=", "~=", "|=", "^=", "$=", "*=")) { tokenizer.addError(tokenizer.current(), "Unexpected token: '%s'. Expected an operation.", tokenizer.current().getSource()); } sb.append(tokenizer.consume().getTrigger()); } }
private void parseSelectorPrefix(List<String> selector) { if (tokenizer.more() && tokenizer.current().isSymbol("[")) { StringBuilder sb = new StringBuilder(); parseFilterInSelector(sb); parseOperatorInSelector(sb); selector.add(sb.toString()); } if (tokenizer.more() && tokenizer.current().isSymbol("&")) { selector.add(tokenizer.consume().getTrigger()); } if (tokenizer.more() && tokenizer.current().isSymbol("&:")) { tokenizer.consume(); if (tokenizer.current().is(Token.TokenType.ID)) { selector.add("&"); selector.add(":" + tokenizer.consume().getContents()); } } if (tokenizer.more() && tokenizer.current().isSymbol("&::")) { tokenizer.consume(); if (tokenizer.current().is(Token.TokenType.ID)) { selector.add("&"); selector.add("::" + tokenizer.consume().getContents()); } } if (tokenizer.more() && tokenizer.current().isSymbol("::") && tokenizer.next().is(Token.TokenType.ID)) { tokenizer.consume(); selector.add("::" + tokenizer.consume().getContents()); } }
private List<String> parseSelector() { List<String> selector = new ArrayList<>(); parseSelectorPrefix(selector); while (tokenizer.more()) { if (tokenizer.current().isSymbol("{", ",")) { if (selector.isEmpty()) { tokenizer.addError(tokenizer.current(), "Unexpected end of CSS selector"); } return selector; } else if (tokenizer.current().isIdentifier() || tokenizer.current().isSpecialIdentifier("#", "@") || tokenizer.current().isNumber()) { StringBuilder sb = new StringBuilder(tokenizer.consume().getSource()); parseFilterInSelector(sb); parseOperatorInSelector(sb); selector.add(sb.toString()); } else if (tokenizer.current().isSymbol("&") || tokenizer.current().isSymbol("*")) { selector.add(tokenizer.consume().getTrigger()); } else if (tokenizer.current().isSymbol(">", "+", "~")) { selector.add(tokenizer.consume().getSource()); } else { tokenizer.addError(tokenizer.current(), "Unexpected Token: %s", tokenizer.consume().getSource()); } } return selector; }
private Expression parseExpression(boolean acceptLists) { Expression expression = acceptLists ? parseAtomList() : parseAtom(); while (tokenizer.more()) { if (tokenizer.current().isSymbol("+", "-")) { expression = new Operation(tokenizer.consume().getTrigger(), expression, parseAtom()); } else if (tokenizer.current().isSymbol("*", "/", "%")) { String operation = tokenizer.consume().getTrigger(); Expression next = parseAtom(); expression = joinOperations(expression, operation, next); } else { if (tokenizer.current().isSymbol() && !tokenizer.current().isSymbol("!")) { break; } ValueList list = new ValueList(false); list.add(expression); list.add(acceptLists ? parseAtomList() : parseAtom()); expression = list; } } return expression; }