package com.github.sommeri.less4j.core.parser;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.antlr.runtime.Token;
public class LexerLogic {
private static final String KEYFRAMES = "keyframes";
private static final String DOCUMENT = "document";
private static final String VIEWPORT = "viewport";
private static final String SUPPORTS = "supports";
private static final String CHARSET = "charset";
private static final Set<String> PAGE_MARGIN_BOXES = new HashSet<String>(Arrays.asList(new String[] { "@top-left-corner", "@top-left", "@top-center", "@top-right", "@top-right-corner", "@bottom-left-corner", "@bottom-left", "@bottom-center", "@bottom-right", "@bottom-right-corner", "@left-top", "@left-middle", "@left-bottom", "@right-top", "@right-middle", "@right-bottom" }));
public int atNameType(String text) {
if (text == null)
return LessLexer.AT_NAME;
if (text.toLowerCase().endsWith(DOCUMENT))
return LessLexer.AT_DOCUMENT;
if (text.toLowerCase().endsWith(KEYFRAMES))
return LessLexer.AT_KEYFRAMES;
if (text.toLowerCase().endsWith(VIEWPORT))
return LessLexer.AT_VIEWPORT;
if (text.toLowerCase().endsWith(SUPPORTS))
return LessLexer.AT_SUPPORTS;
if (text.toLowerCase().endsWith(CHARSET))
return LessLexer.AT_CHARSET;
return LessLexer.AT_NAME;
}
public boolean isAtName(int type) {
return type == LessLexer.AT_NAME || type == LessLexer.AT_DOCUMENT || type == LessLexer.AT_KEYFRAMES || type == LessLexer.AT_VIEWPORT || type == LessLexer.AT_SUPPORTS || type == LessLexer.AT_CHARSET;
}
public boolean isIdentifier(int type) {
return type == LessLexer.IDENT || type == LessLexer.IDENT_WHEN || type == LessLexer.IDENT_NOT || type == LessLexer.IDENT_AND || type == LessLexer.IDENT_OR|| type == LessLexer.IDENT_NTH_CHILD || type == LessLexer.NTH_LAST_CHILD || type == LessLexer.NTH_OF_TYPE || type == LessLexer.NTH_LAST_OF_TYPE || type == LessLexer.IDENT_EXTEND;
}
public boolean isPageMarginBox(Token token) {
return isAmongAtNames(token, PAGE_MARGIN_BOXES);
}
private boolean isAmongAtNames(Token token, Set<String> atNames) {
if (token.getType() != LessParser.AT_NAME || token.getText() == null)
return false;
String text = token.getText().toLowerCase();
return atNames.contains(text);
}
public boolean truthy() {
return true;
}
}