/*=============================================================================#
 # Copyright (c) 2005, 2021 Stephan Wahlbrink and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 # which is available at https://www.apache.org/licenses/LICENSE-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 # 
 # Contributors:
 #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
 #=============================================================================*/

package org.eclipse.statet.r.ui.text.r;

import org.eclipse.statet.r.core.rlang.RTerminal;


/**
 * Groups of terminals and keys (suffix KEY) for text tokens recognized by text-parser
 * (syntax-highlighting)
 */
public interface IRTextTokens {
	
	public static final RTerminal[] SYMBOL = new RTerminal[] {
		RTerminal.SYMBOL,
//		RTerminal.SYMBOL_G, // colored like a string because of partitioning
	};
	public static final RTerminal[] STRING = new RTerminal[] {
		RTerminal.STRING_D,
		RTerminal.STRING_S,
		RTerminal.STRING_R,
	};
	public static final RTerminal[] NUM = new RTerminal[] {
		RTerminal.NUM_NUM,
	};
	public static final RTerminal[] NUM_SUB_INT = new RTerminal[] {
		RTerminal.NUM_INT,
	};
	public static final RTerminal[] NUM_SUB_CPLX = new RTerminal[] {
		RTerminal.NUM_CPLX,
	};
	public static final RTerminal[] SPECIALCONST = new RTerminal[] {
		RTerminal.NULL,
		RTerminal.NA,
		RTerminal.NA_REAL,
		RTerminal.NA_INT,
		RTerminal.NA_CPLX,
		RTerminal.NA_CHAR,
		RTerminal.INF,
		RTerminal.NAN,
	};
	public static final RTerminal[] LOGICALCONST = new RTerminal[] {
		RTerminal.TRUE,
		RTerminal.FALSE,
	};
	
	public static final RTerminal[] FLOWCONTROL = new RTerminal[] {
		RTerminal.IF,
		RTerminal.ELSE,
		RTerminal.FOR,
		RTerminal.IN,
		RTerminal.WHILE,
		RTerminal.REPEAT,
		RTerminal.NEXT,
		RTerminal.BREAK,
		RTerminal.FUNCTION,
	};
	public static final RTerminal[] GROUPING = new RTerminal[] {
		RTerminal.BLOCK_OPEN,
		RTerminal.BLOCK_CLOSE,
		RTerminal.GROUP_OPEN,
		RTerminal.GROUP_CLOSE,
	};
	public static final RTerminal[] SEPARATOR = new RTerminal[] {
		RTerminal.COMMA,
		RTerminal.SEMI,
	};
	public static final RTerminal[] NSGET = new RTerminal[] {
		RTerminal.NS_GET,
		RTerminal.NS_GET_INT,
	};
	public static final RTerminal[] SUBACCESS = new RTerminal[] {
		RTerminal.SUB_INDEXED_S_OPEN,
		RTerminal.SUB_INDEXED_D_OPEN,
		RTerminal.SUB_INDEXED_CLOSE,
		RTerminal.SUB_NAMED_PART,
		RTerminal.SUB_NAMED_SLOT,
	};
	public static final RTerminal[] ASSIGN = new RTerminal[] {
		RTerminal.ARROW_LEFT_S,
		RTerminal.ARROW_LEFT_D,
		RTerminal.ARROW_RIGHT_S,
		RTerminal.ARROW_RIGHT_D,
		RTerminal.COLON_EQUAL,
	};
	public static final RTerminal[] ASSIGN_SUB_EQUAL = new RTerminal[] {
		RTerminal.EQUAL,
	};
	public static final RTerminal[] OP = new RTerminal[] {
		RTerminal.PLUS,
		RTerminal.MINUS,
		RTerminal.MULT,
		RTerminal.DIV,
		RTerminal.POWER,
		RTerminal.SEQ,
		RTerminal.TILDE,
		RTerminal.QUESTIONMARK,
	};
	public static final RTerminal[] OP_SUB_LOGICAL = new RTerminal[] {
		RTerminal.NOT,
		RTerminal.AND,
		RTerminal.AND_D,
		RTerminal.OR,
		RTerminal.OR_D,
	};
	public static final RTerminal[] OP_SUB_RELATIONAL = new RTerminal[] {
		RTerminal.REL_EQ,
		RTerminal.REL_GT,
		RTerminal.REL_GE,
		RTerminal.REL_LE,
		RTerminal.REL_LT,
		RTerminal.REL_NE,
	};
	
	public static final RTerminal[] UNDEFINED = new RTerminal[] {
		RTerminal.UNKNOWN,
	};
	public static final RTerminal[] COMMENT = new RTerminal[] {
		RTerminal.COMMENT, RTerminal.ROXYGEN_COMMENT,
	};
	
	
	public static final String ROOT = "text_R_"; //$NON-NLS-1$
	
	public static final String SYMBOL_KEY = ROOT+"rDefault"; //$NON-NLS-1$
	public static final String SYMBOL_SUB_ASSIGN_KEY = SYMBOL_KEY + ".Assignment"; //$NON-NLS-1$
	public static final String SYMBOL_SUB_LOGICAL_KEY = SYMBOL_KEY + ".Logical"; //$NON-NLS-1$
	public static final String SYMBOL_SUB_FLOWCONTROL_KEY = SYMBOL_KEY + ".Flowcontrol"; //$NON-NLS-1$
	public static final String SYMBOL_SUB_CUSTOM1_KEY = SYMBOL_KEY + ".Custom2"; //$NON-NLS-1$
	public static final String SYMBOL_SUB_CUSTOM2_KEY = SYMBOL_KEY + ".Custom1"; //$NON-NLS-1$
	
	public static final String STRING_KEY = ROOT+"rString"; //$NON-NLS-1$
	public static final String NUM_KEY = ROOT+"rNumbers"; //$NON-NLS-1$
	public static final String NUM_SUB_INT_KEY = NUM_KEY+".Integer"; //$NON-NLS-1$
	public static final String NUM_SUB_CPLX_KEY = NUM_KEY+".Complex"; //$NON-NLS-1$
	
	public static final String SPECIALCONST_KEY = ROOT+"rSpecialConstants"; //$NON-NLS-1$
	public static final String LOGICALCONST_KEY = ROOT+"rLogicalConstants"; //$NON-NLS-1$
	public static final String GROUPING_KEY = ROOT+"rGrouping"; //$NON-NLS-1$
	public static final String SEPARATOR_KEY = ROOT+"rSeparators"; //$NON-NLS-1$
	public static final String SUBACCESS_KEY = ROOT+"rIndexing";	 //$NON-NLS-1$
	public static final String ASSIGN_KEY = ROOT+"rAssignment"; //$NON-NLS-1$
	public static final String ASSIGN_SUB_EQUAL_KEY = ASSIGN_KEY + ".Equalsign"; //$NON-NLS-1$
	public static final String FLOWCONTROL_KEY = ROOT+"rFlowcontrol"; //$NON-NLS-1$
	public static final String OP_KEY = ROOT+"rOtherOperators"; //$NON-NLS-1$
	public static final String OP_SUB_LOGICAL_KEY = OP_KEY + ".Logical"; //$NON-NLS-1$
	public static final String OP_SUB_RELATIONAL_KEY = OP_KEY + ".Relational"; //$NON-NLS-1$
	public static final String OP_SUB_USERDEFINED_KEY = OP_KEY + ".Userdefined"; //$NON-NLS-1$
	
	public static final String COMMENT_KEY = ROOT+"rComment"; //$NON-NLS-1$
	public static final String TASK_TAG_KEY = ROOT+"taskTag"; //$NON-NLS-1$
	public static final String ROXYGEN_KEY = ROOT + "rRoxygen"; //$NON-NLS-1$
	public static final String ROXYGEN_TAG_KEY = ROOT + "rRoxygenTag"; //$NON-NLS-1$
	public static final String UNDEFINED_KEY = ROOT+"rUndefined"; //$NON-NLS-1$
	
}
