/*******************************************************************************
 * Copyright (c) 2004, 2011 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial implementation
 *     Anton Leherbauer - adding tokens for preprocessing directives
 *     Markus Schorn - classification of preprocessing directives.
 *******************************************************************************/
package org.eclipse.cdt.internal.formatter.scanner;

public class Token {
	public int type;
	public String text;
	public int offset;

	public Token(int t, String i) {
		type = t;
		text = i;
	}

	public Token(int t, String i, ScannerContext context) {
		set(t, i, context);
	}

	public void set(int t, String i, ScannerContext context) {
		type = t;
		text = i;
		offset = context.getOffset() - text.length() - context.undoStackSize();
	}

	@Override
	public String toString() {
		return "Token type=" + type + "  image =" + text + " offset=" + offset; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
	}

	public int getType() {
		return type;
	}

	public String getText() {
		return text;
	}

	public int getOffset() {
		return offset;
	}

	public int getLength() {
		return text.length();
	}

	public int getDelta(Token other) {
		return other.getOffset() + other.getLength() - getOffset();
	}

	public boolean looksLikeExpressionStart() {
		switch (type) {
		case tINTEGER:
		case t_false:
		case t_true:
		case tSTRING:
		case tLSTRING:
		case tFLOATINGPT:
		case tCHAR:
		case tAMPER:
		case tDOT:
		case tLPAREN:
			return true;
		default:
			break;
		}
		return false;
	}

	public boolean looksLikeExpressionEnd() {
		switch (type) {
		case tINTEGER:
		case tSTRING:
		case tLSTRING:
		case tFLOATINGPT:
		case tCHAR:
		case tRPAREN:
		case tIDENTIFIER:
			return true;
		default:
			break;
		}
		return false;
	}

	public boolean isPointer() {
		return (type == tAMPER || type == tSTAR);
	}

	public boolean isOperator() {
		switch (type) {
		case t_new:
		case t_delete:
		case tPLUS:
		case tMINUS:
		case tSTAR:
		case tDIV:
		case tXOR:
		case tMOD:
		case tAMPER:
		case tBITOR:
		case tCOMPL:
		case tNOT:
		case tASSIGN:
		case tLT:
		case tGT:
		case tPLUSASSIGN:
		case tMINUSASSIGN:
		case tSTARASSIGN:
		case tDIVASSIGN:
		case tMODASSIGN:
		case tBITORASSIGN:
		case tAMPERASSIGN:
		case tXORASSIGN:
		case tSHIFTL:
		case tSHIFTR:
		case tSHIFTLASSIGN:
		case tSHIFTRASSIGN:
		case tEQUAL:
		case tNOTEQUAL:
		case tLTEQUAL:
		case tGTEQUAL:
		case tAND:
		case tOR:
		case tINCR:
		case tDECR:
		case tCOMMA:
		case tDOT:
		case tDOTSTAR:
		case tARROW:
		case tARROWSTAR:
			return true;
		default:
			return false;
		}
	}

	public boolean isInfixOperator() {
		switch (type) {
		case tPLUS:
		case tMINUS:
		case tSTAR:
		case tDIV:
		case tXOR:
		case tMOD:
		case tAMPER:
		case tBITOR:
		case tASSIGN:
		case tLT:
		case tGT:
		case tPLUSASSIGN:
		case tMINUSASSIGN:
		case tSTARASSIGN:
		case tDIVASSIGN:
		case tMODASSIGN:
		case tBITORASSIGN:
		case tAMPERASSIGN:
		case tXORASSIGN:
		case tSHIFTL:
		case tSHIFTR:
		case tSHIFTLASSIGN:
		case tSHIFTRASSIGN:
		case tEQUAL:
		case tNOTEQUAL:
		case tLTEQUAL:
		case tGTEQUAL:
		case tAND:
		case tOR:
		case tCOLON:
		case tQUESTION:
			return true;
		default:
			return false;
		}
	}

	public boolean isPrefixOperator() {
		switch (type) {
		case tPLUS:
		case tMINUS:
		case tSTAR:
		case tAMPER:
		case tCOMPL:
		case tNOT:
		case tINCR:
		case tDECR:
			return true;
		default:
			return false;
		}
	}

	public boolean isPostfixOperator() {
		switch (type) {
		case tINCR:
		case tDECR:
			return true;
		default:
			return false;
		}
	}

	public boolean isAssignmentOperator() {
		return isAssignmentOperator(type);
	}

	public static boolean isAssignmentOperator(int type) {
		switch (type) {
		case tASSIGN:
		case tPLUSASSIGN:
		case tMINUSASSIGN:
		case tSTARASSIGN:
		case tDIVASSIGN:
		case tAMPERASSIGN:
		case tBITORASSIGN:
		case tXORASSIGN:
		case tMODASSIGN:
		case tSHIFTLASSIGN:
		case tSHIFTRASSIGN:
			return true;
		default:
			return false;
		}
	}

	public boolean isControlStmt() {
		switch (type) {
		case t_if:
		case t_else:
		case t_for:
		case t_do:
		case t_while:
		case t_switch:
		case t_try:
		case t_catch:
		case t_finally:
			return true;
		default:
			return false;
		}
	}

	public boolean isWhiteSpace() {
		return type == tWHITESPACE;
	}

	public boolean isComment() {
		return isLineComment() || isBlockComment();
	}

	public boolean isLineComment() {
		return type == tLINECOMMENT;
	}

	public boolean isBlockComment() {
		return type == tBLOCKCOMMENT;
	}

	public boolean isCaseLabel() {
		return type == t_case || type == t_default;
	}

	public boolean isStructType() {
		return isStructType(type);
	}

	public static boolean isStructType(int type) {
		return type == t_struct || type == t_union || type == t_class;
	}

	public boolean isVisibilityModifier() {
		return isVisibilityModifier(type);
	}

	public static boolean isVisibilityModifier(int type) {
		return type == t_public || type == t_protected || type == t_private;
	}

	public boolean isEndOfStatement() {
		return type == tSEMI || type == tRBRACE;
	}

	public boolean isCPPToken() {
		switch (type) {
		case tCOLONCOLON:
		case t_class:
		case t_namespace:
		case t_using:
		case t_template:
		case t_public:
		case t_protected:
		case t_private:
		case t_operator:
		case t_virtual:
		case t_inline:
		case t_friend:
		case t_mutable:
		case t_new:
		case t_delete:
		case t_reinterpret_cast:
		case t_dynamic_cast:
		case t_static_cast:
		case t_finally:
			return true;
		default:
			return false;
		}
	}

	// overrider
	public boolean isStringLiteral() {
		return type == tSTRING || type == tLSTRING;
	}

	// overrider
	public boolean isCharacterLiteral() {
		return type == tCHAR;
	}

	// overrider
	public boolean isPreprocessor() {
		switch (type) {
		case tPREPROCESSOR:
		case tPREPROCESSOR_DEFINE:
		case tPREPROCESSOR_INCLUDE:
			return true;
		}
		return false;
	}

	// overrider
	public boolean isIncludeDirective() {
		return type == tPREPROCESSOR_INCLUDE;
	}

	// overrider
	public boolean isMacroDefinition() {
		return type == tPREPROCESSOR_DEFINE;
	}

	// Special Token types (non-grammar tokens)
	public static final int tWHITESPACE = 1000;
	public static final int tLINECOMMENT = 1001;
	public static final int tBLOCKCOMMENT = 1002;
	public static final int tPREPROCESSOR = 1003;
	public static final int tPREPROCESSOR_INCLUDE = 1004;
	public static final int tPREPROCESSOR_DEFINE = 1005;
	public static final int tBADCHAR = 1006;

	// Token types
	static public final int tIDENTIFIER = 1;
	static public final int tINTEGER = 2;
	static public final int tCOLONCOLON = 3;
	static public final int tCOLON = 4;
	static public final int tSEMI = 5;
	static public final int tCOMMA = 6;
	static public final int tQUESTION = 7;
	static public final int tLPAREN = 8;
	static public final int tRPAREN = 9;
	static public final int tLBRACKET = 10;
	static public final int tRBRACKET = 11;
	static public final int tLBRACE = 12;
	static public final int tRBRACE = 13;
	static public final int tPLUSASSIGN = 14;
	static public final int tINCR = 15;
	static public final int tPLUS = 16;
	static public final int tMINUSASSIGN = 17;
	static public final int tDECR = 18;
	static public final int tARROWSTAR = 19;
	static public final int tARROW = 20;
	static public final int tMINUS = 21;
	static public final int tSTARASSIGN = 22;
	static public final int tSTAR = 23;
	static public final int tMODASSIGN = 24;
	static public final int tMOD = 25;
	static public final int tXORASSIGN = 26;
	static public final int tXOR = 27;
	static public final int tAMPERASSIGN = 28;
	static public final int tAND = 29;
	static public final int tAMPER = 30;
	static public final int tBITORASSIGN = 31;
	static public final int tOR = 32;
	static public final int tBITOR = 33;
	static public final int tCOMPL = 34;
	static public final int tNOTEQUAL = 35;
	static public final int tNOT = 36;
	static public final int tEQUAL = 37;
	static public final int tASSIGN = 38;
	static public final int tSHIFTL = 40;
	static public final int tLTEQUAL = 41;
	static public final int tLT = 42;
	static public final int tSHIFTRASSIGN = 43;
	static public final int tSHIFTR = 44;
	static public final int tGTEQUAL = 45;
	static public final int tGT = 46;
	static public final int tSHIFTLASSIGN = 47;
	static public final int tELIPSE = 48;
	static public final int tDOTSTAR = 49;
	static public final int tDOT = 50;
	static public final int tDIVASSIGN = 51;
	static public final int tDIV = 52;
	static public final int tCLASSNAME = 53;
	static public final int t_and = 54;
	static public final int t_and_eq = 55;
	static public final int t_asm = 56;
	static public final int t_auto = 57;
	static public final int t_bitand = 58;
	static public final int t_bitor = 59;
	static public final int t_bool = 60;
	static public final int t_break = 61;
	static public final int t_case = 62;
	static public final int t_catch = 63;
	static public final int t_char = 64;
	static public final int t_class = 65;
	static public final int t_compl = 66;
	static public final int t_const = 67;
	static public final int t_const_cast = 69;
	static public final int t_continue = 70;
	static public final int t_default = 71;
	static public final int t_delete = 72;
	static public final int t_do = 73;
	static public final int t_double = 74;
	static public final int t_dynamic_cast = 75;
	static public final int t_else = 76;
	static public final int t_enum = 77;
	static public final int t_explicit = 78;
	static public final int t_export = 79;
	static public final int t_extern = 80;
	static public final int t_false = 81;
	static public final int t_float = 82;
	static public final int t_for = 83;
	static public final int t_friend = 84;
	static public final int t_goto = 85;
	static public final int t_if = 86;
	static public final int t_inline = 87;
	static public final int t_int = 88;
	static public final int t_long = 89;
	static public final int t_mutable = 90;
	static public final int t_namespace = 91;
	static public final int t_new = 92;
	static public final int t_not = 93;
	static public final int t_not_eq = 94;
	static public final int t_operator = 95;
	static public final int t_or = 96;
	static public final int t_or_eq = 97;
	static public final int t_private = 98;
	static public final int t_protected = 99;
	static public final int t_public = 100;
	static public final int t_register = 101;
	static public final int t_reinterpret_cast = 102;
	static public final int t_return = 103;
	static public final int t_short = 104;
	static public final int t_sizeof = 105;
	static public final int t_static = 106;
	static public final int t_static_cast = 107;
	static public final int t_signed = 108;
	static public final int t_struct = 109;
	static public final int t_switch = 110;
	static public final int t_template = 111;
	static public final int t_this = 112;
	static public final int t_throw = 113;
	static public final int t_true = 114;
	static public final int t_try = 115;
	static public final int t_typedef = 116;
	static public final int t_typeid = 117;
	static public final int t_typename = 118;
	static public final int t_union = 119;
	static public final int t_unsigned = 120;
	static public final int t_using = 121;
	static public final int t_virtual = 122;
	static public final int t_void = 123;
	static public final int t_volatile = 124;
	static public final int t_wchar_t = 125;
	static public final int t_while = 126;
	static public final int t_xor = 127;
	static public final int t_xor_eq = 128;
	static public final int tSTRING = 129;
	static public final int tFLOATINGPT = 130;
	static public final int tLSTRING = 131;
	static public final int tCHAR = 132;
	static public final int tRSTRING = 133;
	static public final int t_restrict = 136;
	static public final int t_interface = 200;
	static public final int t_import = 201;
	static public final int t_instanceof = 202;
	static public final int t_extends = 203;
	static public final int t_implements = 204;
	static public final int t_final = 205;
	static public final int t_super = 206;
	static public final int t_package = 207;
	static public final int t_boolean = 208;
	static public final int t_abstract = 209;
	static public final int t_finally = 210;
	static public final int t_null = 211;
	static public final int t_synchronized = 212;
	static public final int t_throws = 213;
	static public final int t_byte = 214;
	static public final int t_transient = 215;
	static public final int t_native = 216;
	static public final int t_constexpr = 5400;
	static public final int t_noexcept = 5401;
}
