/******************************************************************************
* Copyright (C) 2009-2012  Fabio Zadrozny
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Fabio Zadrozny <fabiofz@gmail.com> - initial API and implementation
******************************************************************************/
package org.python.pydev.parser.grammarcommon;

import java.lang.reflect.Field;

/**
 * With this class we're able to get constants from a class (note, to
 * recreate this code, the make_replace.py must be run, as it's COG-generated)
 */
public abstract class AbstractTokenManagerWithConstants {

    @SuppressWarnings("rawtypes")
    protected abstract Class getConstantsClass();

    @SuppressWarnings("rawtypes")
    protected final int getFromConstants(String constant) {
        try {
            Class c = getConstantsClass();
            Field declaredField = c.getDeclaredField(constant);
            return declaredField.getInt(this);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    protected AbstractTokenManagerWithConstants() {

        /*[[[cog
        import cog
        
        names = [       
        "EOF",
        "SPACE" ,
        "CONTINUATION"     ,
        "NEWLINE1"   ,
        "NEWLINE"     ,
        "NEWLINE2"     ,
        "CRLF1"     ,
        "DEDENT" ,
        "INDENT" ,
        "TRAILING_COMMENT" ,
        "SINGLE_LINE_COMMENT" ,
        "LPAREN" ,
        "RPAREN" ,
        "LBRACE" ,
        "RBRACE" ,
        "LBRACKET", 
        "RBRACKET" ,
        "SEMICOLON" ,
        "COMMA" ,
        "DOT" ,
        "COLON", 
        "PLUS" ,
        "MINUS" ,
        "MULTIPLY" ,
        "DIVIDE" ,
        "FLOORDIVIDE" ,
        "POWER" ,
        "LSHIFT" ,
        "RSHIFT" ,
        "MODULO" ,
        "NOT"     ,
        "XOR" ,
        "OR" ,
        "AND" ,
        "EQUAL", 
        "GREATER" ,
        "LESS"     ,
        "EQEQUAL" ,
        "EQLESS" ,
        "EQGREATER" ,
        "NOTEQUAL" ,
        "PLUSEQ" ,
        "MINUSEQ" ,
        "MULTIPLYEQ" ,
        "DIVIDEEQ" ,
        "FLOORDIVIDEEQ" ,
        "MODULOEQ" ,
        "ANDEQ"     ,
        "OREQ" ,
        "XOREQ" ,
        "LSHIFTEQ" ,
        "RSHIFTEQ" ,
        "POWEREQ" ,
        "OR_BOOL" ,
        "AND_BOOL" ,
        "NOT_BOOL" ,
        "IS" ,
        "IN" ,
        "LAMBDA" ,
        "IF" ,
        "ELSE", 
        "ELIF" ,
        "WHILE" ,
        "FOR" ,
        "TRY" ,
        "EXCEPT" ,
        "DEF"     ,
        "CLASS" ,
        "FINALLY", 
        "PASS"     ,
        "BREAK" ,
        "CONTINUE" ,
        "RETURN" ,
        "YIELD" ,
        "IMPORT" ,
        "FROM" ,
        "DEL" ,
        "RAISE", 
        "GLOBAL", 
        #"NONLOCAL" , --not available for all
        "ASSERT" ,
        #"AS" , --not available for all
        #"WITH", --not available for all
        #"FALSE", --not available for all 
        #"TRUE" , --not available for all
        #"NONE" , --not available for all
        "AT" ,
        "NAME", 
        "LETTER" ,
        "DECNUMBER" ,
        "HEXNUMBER" ,
        "OCTNUMBER" ,
        "FLOAT" ,
        "COMPLEX", 
        "EXPONENT", 
        "DIGIT" ,
        "SINGLE_STRING" ,
        "SINGLE_STRING2" ,
        "TRIPLE_STRING" ,
        "TRIPLE_STRING2" ,
        
        #--not available for all
        #"SINGLE_BSTRING" ,
        #"SINGLE_BSTRING2" ,
        #"TRIPLE_BSTRING" ,
        #"TRIPLE_BSTRING2" ,
        ]
        
        
        lexer_names=[
        "DEFAULT" ,
        "FORCE_NEWLINE1" ,
        "FORCE_NEWLINE2" ,
        "INDENTING" ,
        "INDENTATION_UNCHANGED" ,
        "UNREACHABLE" ,
        "IN_STRING11" ,
        "IN_STRING21" ,
        "IN_STRING13" ,
        "IN_STRING23" ,
        
        #--not available for all
        #"IN_BSTRING11" ,
        #"IN_BSTRING21" ,
        #"IN_BSTRING13" ,
        #"IN_BSTRING23" ,
        #"IN_STRING1NLC" ,
        #"IN_STRING2NLC" ,
        #"IN_BSTRING1NLC" ,
        #"IN_BSTRING2NLC" ,
        ]

        def GetTitles(name):
            as_title = name.title().replace('_', '')
            as_title_1st_lower = as_title[0].lower()+as_title[1:]
            return as_title, as_title_1st_lower
            
        def WriteAssign(name, is_lexer=False):
            as_title, as_title_1st_lower = GetTitles(name)
            if not is_lexer:
                cog.outl("%sId =  getFromConstants(\"%s\");" % (as_title_1st_lower, name))
            else:
                cog.outl("lexer%sId =  getFromConstants(\"%s\");" % (as_title, name))
                
        def WriteField(name, is_lexer=False):
            as_title, as_title_1st_lower = GetTitles(name)
            if not is_lexer:
                cog.outl("private final int %sId;" % (as_title_1st_lower))
            else:
                cog.outl("private final int lexer%sId;" % (as_title))
            
        def WriteGetter(name, is_lexer=False):
            as_title, as_title_1st_lower = GetTitles(name)
            if not is_lexer:
                cog.outl("public final int get%sId(){return %sId;}" % (as_title, as_title_1st_lower))
            else:
                cog.outl("public final int getLexer%sId(){return lexer%sId;}" % (as_title, as_title))
            
        
        #finish the constructor
        for name in names:
            WriteAssign(name)
        for name in lexer_names:
            WriteAssign(name, True)
            
        cog.outl("}")
            
        cog.outl("")
        cog.outl("//Fields ----------")
        for name in names:
            WriteField(name)
        for name in lexer_names:
            WriteField(name, True)
            
            
        cog.outl("")
        cog.outl("//Getters ----------")
        for name in names:
            WriteGetter(name)
        for name in lexer_names:
            WriteGetter(name, True)
        ]]]*/
        eofId = getFromConstants("EOF");
        spaceId = getFromConstants("SPACE");
        continuationId = getFromConstants("CONTINUATION");
        newline1Id = getFromConstants("NEWLINE1");
        newlineId = getFromConstants("NEWLINE");
        newline2Id = getFromConstants("NEWLINE2");
        crlf1Id = getFromConstants("CRLF1");
        dedentId = getFromConstants("DEDENT");
        indentId = getFromConstants("INDENT");
        trailingCommentId = getFromConstants("TRAILING_COMMENT");
        singleLineCommentId = getFromConstants("SINGLE_LINE_COMMENT");
        lparenId = getFromConstants("LPAREN");
        rparenId = getFromConstants("RPAREN");
        lbraceId = getFromConstants("LBRACE");
        rbraceId = getFromConstants("RBRACE");
        lbracketId = getFromConstants("LBRACKET");
        rbracketId = getFromConstants("RBRACKET");
        semicolonId = getFromConstants("SEMICOLON");
        commaId = getFromConstants("COMMA");
        dotId = getFromConstants("DOT");
        colonId = getFromConstants("COLON");
        plusId = getFromConstants("PLUS");
        minusId = getFromConstants("MINUS");
        multiplyId = getFromConstants("MULTIPLY");
        divideId = getFromConstants("DIVIDE");
        floordivideId = getFromConstants("FLOORDIVIDE");
        powerId = getFromConstants("POWER");
        lshiftId = getFromConstants("LSHIFT");
        rshiftId = getFromConstants("RSHIFT");
        moduloId = getFromConstants("MODULO");
        notId = getFromConstants("NOT");
        xorId = getFromConstants("XOR");
        orId = getFromConstants("OR");
        andId = getFromConstants("AND");
        equalId = getFromConstants("EQUAL");
        greaterId = getFromConstants("GREATER");
        lessId = getFromConstants("LESS");
        eqequalId = getFromConstants("EQEQUAL");
        eqlessId = getFromConstants("EQLESS");
        eqgreaterId = getFromConstants("EQGREATER");
        notequalId = getFromConstants("NOTEQUAL");
        pluseqId = getFromConstants("PLUSEQ");
        minuseqId = getFromConstants("MINUSEQ");
        multiplyeqId = getFromConstants("MULTIPLYEQ");
        divideeqId = getFromConstants("DIVIDEEQ");
        floordivideeqId = getFromConstants("FLOORDIVIDEEQ");
        moduloeqId = getFromConstants("MODULOEQ");
        andeqId = getFromConstants("ANDEQ");
        oreqId = getFromConstants("OREQ");
        xoreqId = getFromConstants("XOREQ");
        lshifteqId = getFromConstants("LSHIFTEQ");
        rshifteqId = getFromConstants("RSHIFTEQ");
        powereqId = getFromConstants("POWEREQ");
        orBoolId = getFromConstants("OR_BOOL");
        andBoolId = getFromConstants("AND_BOOL");
        notBoolId = getFromConstants("NOT_BOOL");
        isId = getFromConstants("IS");
        inId = getFromConstants("IN");
        lambdaId = getFromConstants("LAMBDA");
        ifId = getFromConstants("IF");
        elseId = getFromConstants("ELSE");
        elifId = getFromConstants("ELIF");
        whileId = getFromConstants("WHILE");
        forId = getFromConstants("FOR");
        tryId = getFromConstants("TRY");
        exceptId = getFromConstants("EXCEPT");
        defId = getFromConstants("DEF");
        classId = getFromConstants("CLASS");
        finallyId = getFromConstants("FINALLY");
        passId = getFromConstants("PASS");
        breakId = getFromConstants("BREAK");
        continueId = getFromConstants("CONTINUE");
        returnId = getFromConstants("RETURN");
        yieldId = getFromConstants("YIELD");
        importId = getFromConstants("IMPORT");
        fromId = getFromConstants("FROM");
        delId = getFromConstants("DEL");
        raiseId = getFromConstants("RAISE");
        globalId = getFromConstants("GLOBAL");
        assertId = getFromConstants("ASSERT");
        atId = getFromConstants("AT");
        nameId = getFromConstants("NAME");
        letterId = getFromConstants("LETTER");
        decnumberId = getFromConstants("DECNUMBER");
        hexnumberId = getFromConstants("HEXNUMBER");
        octnumberId = getFromConstants("OCTNUMBER");
        floatId = getFromConstants("FLOAT");
        complexId = getFromConstants("COMPLEX");
        exponentId = getFromConstants("EXPONENT");
        digitId = getFromConstants("DIGIT");
        singleStringId = getFromConstants("SINGLE_STRING");
        singleString2Id = getFromConstants("SINGLE_STRING2");
        tripleStringId = getFromConstants("TRIPLE_STRING");
        tripleString2Id = getFromConstants("TRIPLE_STRING2");
        lexerDefaultId = getFromConstants("DEFAULT");
        lexerForceNewline1Id = getFromConstants("FORCE_NEWLINE1");
        lexerForceNewline2Id = getFromConstants("FORCE_NEWLINE2");
        lexerIndentingId = getFromConstants("INDENTING");
        lexerIndentationUnchangedId = getFromConstants("INDENTATION_UNCHANGED");
        lexerUnreachableId = getFromConstants("UNREACHABLE");
        lexerInString11Id = getFromConstants("IN_STRING11");
        lexerInString21Id = getFromConstants("IN_STRING21");
        lexerInString13Id = getFromConstants("IN_STRING13");
        lexerInString23Id = getFromConstants("IN_STRING23");
    }

    //Fields ----------
    private final int eofId;
    private final int spaceId;
    private final int continuationId;
    private final int newline1Id;
    private final int newlineId;
    private final int newline2Id;
    private final int crlf1Id;
    private final int dedentId;
    private final int indentId;
    private final int trailingCommentId;
    private final int singleLineCommentId;
    private final int lparenId;
    private final int rparenId;
    private final int lbraceId;
    private final int rbraceId;
    private final int lbracketId;
    private final int rbracketId;
    private final int semicolonId;
    private final int commaId;
    private final int dotId;
    private final int colonId;
    private final int plusId;
    private final int minusId;
    private final int multiplyId;
    private final int divideId;
    private final int floordivideId;
    private final int powerId;
    private final int lshiftId;
    private final int rshiftId;
    private final int moduloId;
    private final int notId;
    private final int xorId;
    private final int orId;
    private final int andId;
    private final int equalId;
    private final int greaterId;
    private final int lessId;
    private final int eqequalId;
    private final int eqlessId;
    private final int eqgreaterId;
    private final int notequalId;
    private final int pluseqId;
    private final int minuseqId;
    private final int multiplyeqId;
    private final int divideeqId;
    private final int floordivideeqId;
    private final int moduloeqId;
    private final int andeqId;
    private final int oreqId;
    private final int xoreqId;
    private final int lshifteqId;
    private final int rshifteqId;
    private final int powereqId;
    private final int orBoolId;
    private final int andBoolId;
    private final int notBoolId;
    private final int isId;
    private final int inId;
    private final int lambdaId;
    private final int ifId;
    private final int elseId;
    private final int elifId;
    private final int whileId;
    private final int forId;
    private final int tryId;
    private final int exceptId;
    private final int defId;
    private final int classId;
    private final int finallyId;
    private final int passId;
    private final int breakId;
    private final int continueId;
    private final int returnId;
    private final int yieldId;
    private final int importId;
    private final int fromId;
    private final int delId;
    private final int raiseId;
    private final int globalId;
    private final int assertId;
    private final int atId;
    private final int nameId;
    private final int letterId;
    private final int decnumberId;
    private final int hexnumberId;
    private final int octnumberId;
    private final int floatId;
    private final int complexId;
    private final int exponentId;
    private final int digitId;
    private final int singleStringId;
    private final int singleString2Id;
    private final int tripleStringId;
    private final int tripleString2Id;
    private final int lexerDefaultId;
    private final int lexerForceNewline1Id;
    private final int lexerForceNewline2Id;
    private final int lexerIndentingId;
    private final int lexerIndentationUnchangedId;
    private final int lexerUnreachableId;
    private final int lexerInString11Id;
    private final int lexerInString21Id;
    private final int lexerInString13Id;
    private final int lexerInString23Id;

    //Getters ----------
    public final int getEofId() {
        return eofId;
    }

    public final int getSpaceId() {
        return spaceId;
    }

    public final int getContinuationId() {
        return continuationId;
    }

    public final int getNewline1Id() {
        return newline1Id;
    }

    public final int getNewlineId() {
        return newlineId;
    }

    public final int getNewline2Id() {
        return newline2Id;
    }

    public final int getCrlf1Id() {
        return crlf1Id;
    }

    public final int getDedentId() {
        return dedentId;
    }

    public final int getIndentId() {
        return indentId;
    }

    public final int getTrailingCommentId() {
        return trailingCommentId;
    }

    public final int getSingleLineCommentId() {
        return singleLineCommentId;
    }

    public final int getLparenId() {
        return lparenId;
    }

    public final int getRparenId() {
        return rparenId;
    }

    public final int getLbraceId() {
        return lbraceId;
    }

    public final int getRbraceId() {
        return rbraceId;
    }

    public final int getLbracketId() {
        return lbracketId;
    }

    public final int getRbracketId() {
        return rbracketId;
    }

    public final int getSemicolonId() {
        return semicolonId;
    }

    public final int getCommaId() {
        return commaId;
    }

    public final int getDotId() {
        return dotId;
    }

    public final int getColonId() {
        return colonId;
    }

    public final int getPlusId() {
        return plusId;
    }

    public final int getMinusId() {
        return minusId;
    }

    public final int getMultiplyId() {
        return multiplyId;
    }

    public final int getDivideId() {
        return divideId;
    }

    public final int getFloordivideId() {
        return floordivideId;
    }

    public final int getPowerId() {
        return powerId;
    }

    public final int getLshiftId() {
        return lshiftId;
    }

    public final int getRshiftId() {
        return rshiftId;
    }

    public final int getModuloId() {
        return moduloId;
    }

    public final int getNotId() {
        return notId;
    }

    public final int getXorId() {
        return xorId;
    }

    public final int getOrId() {
        return orId;
    }

    public final int getAndId() {
        return andId;
    }

    public final int getEqualId() {
        return equalId;
    }

    public final int getGreaterId() {
        return greaterId;
    }

    public final int getLessId() {
        return lessId;
    }

    public final int getEqequalId() {
        return eqequalId;
    }

    public final int getEqlessId() {
        return eqlessId;
    }

    public final int getEqgreaterId() {
        return eqgreaterId;
    }

    public final int getNotequalId() {
        return notequalId;
    }

    public final int getPluseqId() {
        return pluseqId;
    }

    public final int getMinuseqId() {
        return minuseqId;
    }

    public final int getMultiplyeqId() {
        return multiplyeqId;
    }

    public final int getDivideeqId() {
        return divideeqId;
    }

    public final int getFloordivideeqId() {
        return floordivideeqId;
    }

    public final int getModuloeqId() {
        return moduloeqId;
    }

    public final int getAndeqId() {
        return andeqId;
    }

    public final int getOreqId() {
        return oreqId;
    }

    public final int getXoreqId() {
        return xoreqId;
    }

    public final int getLshifteqId() {
        return lshifteqId;
    }

    public final int getRshifteqId() {
        return rshifteqId;
    }

    public final int getPowereqId() {
        return powereqId;
    }

    public final int getOrBoolId() {
        return orBoolId;
    }

    public final int getAndBoolId() {
        return andBoolId;
    }

    public final int getNotBoolId() {
        return notBoolId;
    }

    public final int getIsId() {
        return isId;
    }

    public final int getInId() {
        return inId;
    }

    public final int getLambdaId() {
        return lambdaId;
    }

    public final int getIfId() {
        return ifId;
    }

    public final int getElseId() {
        return elseId;
    }

    public final int getElifId() {
        return elifId;
    }

    public final int getWhileId() {
        return whileId;
    }

    public final int getForId() {
        return forId;
    }

    public final int getTryId() {
        return tryId;
    }

    public final int getExceptId() {
        return exceptId;
    }

    public final int getDefId() {
        return defId;
    }

    public final int getClassId() {
        return classId;
    }

    public final int getFinallyId() {
        return finallyId;
    }

    public final int getPassId() {
        return passId;
    }

    public final int getBreakId() {
        return breakId;
    }

    public final int getContinueId() {
        return continueId;
    }

    public final int getReturnId() {
        return returnId;
    }

    public final int getYieldId() {
        return yieldId;
    }

    public final int getImportId() {
        return importId;
    }

    public final int getFromId() {
        return fromId;
    }

    public final int getDelId() {
        return delId;
    }

    public final int getRaiseId() {
        return raiseId;
    }

    public final int getGlobalId() {
        return globalId;
    }

    public final int getAssertId() {
        return assertId;
    }

    public final int getAtId() {
        return atId;
    }

    public final int getNameId() {
        return nameId;
    }

    public final int getLetterId() {
        return letterId;
    }

    public final int getDecnumberId() {
        return decnumberId;
    }

    public final int getHexnumberId() {
        return hexnumberId;
    }

    public final int getOctnumberId() {
        return octnumberId;
    }

    public final int getFloatId() {
        return floatId;
    }

    public final int getComplexId() {
        return complexId;
    }

    public final int getExponentId() {
        return exponentId;
    }

    public final int getDigitId() {
        return digitId;
    }

    public final int getSingleStringId() {
        return singleStringId;
    }

    public final int getSingleString2Id() {
        return singleString2Id;
    }

    public final int getTripleStringId() {
        return tripleStringId;
    }

    public final int getTripleString2Id() {
        return tripleString2Id;
    }

    public final int getLexerDefaultId() {
        return lexerDefaultId;
    }

    public final int getLexerForceNewline1Id() {
        return lexerForceNewline1Id;
    }

    public final int getLexerForceNewline2Id() {
        return lexerForceNewline2Id;
    }

    public final int getLexerIndentingId() {
        return lexerIndentingId;
    }

    public final int getLexerIndentationUnchangedId() {
        return lexerIndentationUnchangedId;
    }

    public final int getLexerUnreachableId() {
        return lexerUnreachableId;
    }

    public final int getLexerInString11Id() {
        return lexerInString11Id;
    }

    public final int getLexerInString21Id() {
        return lexerInString21Id;
    }

    public final int getLexerInString13Id() {
        return lexerInString13Id;
    }

    public final int getLexerInString23Id() {
        return lexerInString23Id;
    }
    //[[[end]]]

}