package org.elixir_lang.lexer;
import com.intellij.psi.tree.IElementType;
import org.elixir_lang.psi.ElixirTypes;
import java.util.HashMap;
import java.util.Map;
/**
* Created by luke.imhoff on 8/20/14.
*/
public class SigilName {
private static final Map<Character, IElementType> elementTypeBySigilName = new HashMap<Character, IElementType>();
static {
elementTypeBySigilName.put('C', ElixirTypes.LITERAL_CHAR_LIST_SIGIL_NAME);
elementTypeBySigilName.put('R', ElixirTypes.LITERAL_REGEX_SIGIL_NAME);
elementTypeBySigilName.put('S', ElixirTypes.LITERAL_STRING_SIGIL_NAME);
elementTypeBySigilName.put('W', ElixirTypes.LITERAL_WORDS_SIGIL_NAME);
elementTypeBySigilName.put('c', ElixirTypes.INTERPOLATING_CHAR_LIST_SIGIL_NAME);
elementTypeBySigilName.put('r', ElixirTypes.INTERPOLATING_REGEX_SIGIL_NAME);
elementTypeBySigilName.put('s', ElixirTypes.INTERPOLATING_STRING_SIGIL_NAME);
elementTypeBySigilName.put('w', ElixirTypes.INTERPOLATING_WORDS_SIGIL_NAME);
}
/*
* Methods
*/
public static IElementType elementType(char sigilName) {
IElementType elementType = elementTypeBySigilName.get(sigilName);
if (elementType == null) {
if (isInterpolating(sigilName)) {
elementType = ElixirTypes.INTERPOLATING_SIGIL_NAME;
} else {
elementType = ElixirTypes.LITERAL_SIGIL_NAME;
}
elementTypeBySigilName.put(sigilName, elementType);
}
return elementType;
}
public static boolean is(char character) {
return (character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z');
}
public static boolean isInterpolating(char sigilName) {
return (sigilName >= 'a' && sigilName <= 'z');
}
}