/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package ca.weblite.netbeans.mirah.lexer; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import mirah.impl.Tokens; import org.netbeans.api.lexer.Language; import org.netbeans.api.lexer.TokenId; /** * * @author shannah */ public class MirahTokenId implements TokenId { public static final MirahTokenId RPAREN = get(Tokens.tRParen.ordinal()); public static final MirahTokenId LPAREN = get(Tokens.tLParen.ordinal()); public static final MirahTokenId RBRACK = get(Tokens.tRBrack.ordinal()); public static final MirahTokenId LBRACK = get(Tokens.tLBrack.ordinal()); public static final MirahTokenId RBRACE = get(Tokens.tRBrace.ordinal()); public static final MirahTokenId LBRACE = get(Tokens.tLBrace.ordinal()); public static final MirahTokenId WHITESPACE = get(Tokens.tWhitespace.ordinal()); public static final MirahTokenId STRING_LITERAL = get(Tokens.tStringContent.ordinal()); public static final MirahTokenId CHAR_LITERAL = get(Tokens.tCharacter.ordinal()); public static final MirahTokenId SQUOTE = get(Tokens.tSQuote.ordinal()); public static final MirahTokenId DQUOTE = get(Tokens.tDQuote.ordinal()); public static final MirahTokenId NL = get(Tokens.tNL.ordinal()); public static final Set<MirahTokenId> WHITESPACE_AND_COMMENTS = new HashSet<MirahTokenId>(Arrays.asList(new MirahTokenId[]{ get(Tokens.tWhitespace), get(Tokens.tComment), get(Tokens.tJavaDoc) })); public static enum Enum { RPAREN, LPAREN, RBRACK, LBRACK, LBRACE, RBRACE, WHITESPACE, STRING_LITERAL, CHAR_LITERAL, SQUOTE, DQUOTE } private static final Map<MirahTokenId,Enum> enumMap = new HashMap<MirahTokenId,Enum>(); static { enumMap.put(RPAREN, Enum.RPAREN); enumMap.put(LPAREN, Enum.LPAREN); enumMap.put(RBRACK, Enum.RBRACK); enumMap.put(LBRACK, Enum.LBRACK); enumMap.put(RBRACE, Enum.RBRACE); enumMap.put(LBRACE, Enum.LBRACE); enumMap.put(WHITESPACE, Enum.WHITESPACE); enumMap.put(STRING_LITERAL, Enum.STRING_LITERAL); enumMap.put(CHAR_LITERAL, Enum.CHAR_LITERAL); enumMap.put(SQUOTE, Enum.SQUOTE); enumMap.put(DQUOTE, Enum.DQUOTE); } public static final Set<MirahTokenId> CONTINUATION_TOKENS = set( Tokens.tOr, Tokens.tAnd, Tokens.tDo, Tokens.tAmper, Tokens.tColon, Tokens.tColons, Tokens.tDot, Tokens.tGE, Tokens.tGT, Tokens.tLE, Tokens.tLT, Tokens.tOpAssign, Tokens.tOrEq, Tokens.tAndEq, Tokens.tLLShift, Tokens.tLShift, Tokens.tRShift, Tokens.tPlus, Tokens.tPipes, Tokens.tPipe, Tokens.tPercent, Tokens.tMinus, Tokens.tStar, Tokens.tStars, Tokens.tNE, Tokens.tIn, Tokens.tSlash, Tokens.tComma, Tokens.tLParen, Tokens.tLBrack, Tokens.tLBrace ); private final String name; private final String primaryCategory; private final int id; private static final Language<MirahTokenId> language = new MirahLanguageHierarchy ().language (); public static final Language<MirahTokenId> getLanguage () { return language; } MirahTokenId ( String name, String primaryCategory, int id ) { this.name = name; this.primaryCategory = primaryCategory; this.id = id; } @Override public String primaryCategory () { return primaryCategory; } @Override public int ordinal () { return id; } @Override public String name () { return name; } public static MirahTokenId get(int id){ return MirahLanguageHierarchy.getToken(id); } public static MirahTokenId get(Tokens tok){ return MirahTokenId.get(tok.ordinal()); } @Override public boolean equals(Object obj) { if ( !(obj instanceof MirahTokenId) ){ return false; } MirahTokenId o = (MirahTokenId)obj; if ( o == null ){ return false; } return o.ordinal() == this.ordinal(); } @Override public int hashCode() { int hash = 7; hash = 59 * hash + this.id; return hash; } public Enum asEnum(){ return enumMap.get(this); } public static Set<MirahTokenId> set(Tokens... toks){ HashSet<MirahTokenId> out = new HashSet<MirahTokenId>(); for ( Tokens t : toks ){ out.add(MirahTokenId.get(t)); } return out; } }