package org.develnext.jphp.core.common;
import org.develnext.jphp.core.tokenizer.token.expr.value.StringExprToken;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class TokenizeGrammarUtils {
public final static String CLOSE_TAG = "?>";
public final static String OPEN_TAG = "<?";
public final static String CLOSE_COMMENT = "*/";
private final static Set<Character> DELIMITERS = new HashSet<>();
static {
DELIMITERS.addAll(Arrays.asList(
'~', '+', '-', '=', '/', '*', ':', '<', '>', '!', '?', '%',
'@', '&', '^', '.', '|',
'(', '[', '{', '}', ']', ')',
';', ',', '"', '\'', '\t', '\n', '\r', ' '
));
}
public static boolean isEngLetter(char ch){
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}
public static boolean isNameChar(char c) {
return (c >= 'a' && c <= 'z')
|| (c >= 'A' && c <= 'Z')
|| (c == '_')
|| (c >= '0' && c <= '9')
|| (c >= 127);
}
public static boolean isVariableChar(char ch){
return ch == '$';
}
public static boolean isSpace(char ch){
return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r';
}
public static boolean isNumeric(char ch) {
return Character.isDigit(ch);
}
public static boolean isFloatDot(char ch){
return '.' == ch;
}
public static StringExprToken.Quote isQuote(char ch){
switch (ch) {
case '\'': return StringExprToken.Quote.SINGLE;
case '"': return StringExprToken.Quote.DOUBLE;
case '`': return StringExprToken.Quote.SHELL;
}
return null;
}
public static boolean isBackslash(char ch){
return ch == '\\';
}
public static boolean isDelimiter(char ch) {
return DELIMITERS.contains(ch);
}
public static boolean isNewline(char ch){
return ch == '\n';
}
public static boolean isCloseTag(String word){
return CLOSE_TAG.equals(word);
}
public static boolean isCloseTag(char... chars) {
int len = CLOSE_TAG.length();
if (chars.length != len) return false;
for (int i = 0; i < chars.length; i++) {
if (chars[i] != CLOSE_TAG.charAt(i)) return false;
}
return true;
}
public static boolean isOpenTag(String word) {
return OPEN_TAG.equals(word);
}
public static boolean isOpenTag(char... chars) {
int len = OPEN_TAG.length();
if (chars.length != len) return false;
for (int i = 0; i < chars.length; i++) {
if (chars[i] != OPEN_TAG.charAt(i)) return false;
}
return true;
}
public static boolean isCloseComment(String word){
return CLOSE_COMMENT.equals(word);
}
}