/******************************************************************************
* Copyright (C) 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 org.python.pydev.parser.jython.ISpecialStr;
import org.python.pydev.parser.jython.Node;
import org.python.pydev.parser.jython.ParseException;
import org.python.pydev.parser.jython.SimpleNode;
import org.python.pydev.parser.jython.Token;
import org.python.pydev.parser.jython.ast.Num;
import org.python.pydev.parser.jython.ast.Str;

public interface IPythonGrammarActions {

    void markDecoratorWithCall();

    ISpecialStr convertStringToSpecialStr(Object o) throws ParseException;

    public ISpecialStr createSpecialStr(String token) throws ParseException;

    public ISpecialStr createSpecialStr(String token, boolean searchOnLast) throws ParseException;

    public ISpecialStr createSpecialStr(String token, boolean searchOnLast, boolean throwException)
            throws ParseException;

    /**
     * Adds a special token to the current token that's in the top of the stack (the peeked token)
     * Considers that the token at the stack is a Call and adds it to its function.
     */
    void addToPeekCallFunc(Object t, boolean after);

    void addSpecialTokenToLastOpened(Object o) throws ParseException;

    void addToPeek(Object t, boolean after) throws ParseException;

    @SuppressWarnings("rawtypes")
    void addToPeek(SimpleNode peeked, Object t, boolean after, Class class_) throws ParseException;

    @SuppressWarnings("rawtypes")
    SimpleNode addToPeek(Object t, boolean after, Class class_) throws ParseException;

    void jjtreeCloseNodeScope(Node n) throws ParseException;

    void addSpecialToken(Object o, int strategy) throws ParseException;

    void addSpecialToken(Object o) throws ParseException;

    /**
     * @param t the string found without any preceding char to identify the radix.
     * @param radix the radix in which it was found (octal=8, decimal=10, hex=16)
     * @param token this is the image of the object (the exact way it was found in the file)
     * @param numberToFill the Num object that should be set given the other parameters
     * @throws ParseException 
     */
    void makeInt(Token t, int radix, Token token, Num numberToFill) throws ParseException;

    void makeIntSub2(Token t, int radix, Token token, Num numberToFill) throws ParseException;

    void makeIntSub2CheckingOct(Token t, int radix, Token token, Num numberToFill) throws ParseException;

    void makeFloat(Token t, Num numberToFill) throws ParseException;

    void makeComplex(Token t, Num numberToFill) throws ParseException;

    /**
     * Fills the string properly according to the representation found.
     * 
     * 0 = the string
     * 1 = boolean indicating unicode
     * 2 = boolean indicating raw
     * 3 = style
     * 4 = boolean indicating binary
     */
    void makeString(Token t, int quotes, Str strToFill);

    void findTokenAndAdd(String token) throws ParseException;

    void addSpecialToPrev(Object special, boolean after);

    void setImportFromLevel(int level);

}
