/*
* Catroid: An on-device visual programming system for Android devices
* Copyright (C) 2010-2016 The Catrobat Team
* (<http://developer.catrobat.org/credits>)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* An additional term exception under section 7 of the GNU Affero
* General Public License, version 3, is available at
* http://developer.catrobat.org/license_additional_term
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.catrobat.catroid.formulaeditor;
import org.catrobat.catroid.sensing.CollisionDetection;
import java.util.List;
public class InternToken {
private String tokenStringValue = "";
private InternTokenType internTokenType;
public InternToken(InternTokenType internTokenType) {
this.internTokenType = internTokenType;
}
public InternToken(InternTokenType internTokenType, String tokenStringValue) {
this.tokenStringValue = tokenStringValue;
this.internTokenType = internTokenType;
}
public void setTokenStringValue(String tokenString) {
this.tokenStringValue = tokenString;
}
public String getTokenStringValue() {
return this.tokenStringValue;
}
public void updateVariableReferences(String oldName, String newName) {
if (internTokenType == InternTokenType.USER_VARIABLE && tokenStringValue.equals(oldName)) {
tokenStringValue = newName;
}
}
public void getVariableAndListNames(List<String> variables, List<String> lists) {
if (internTokenType == InternTokenType.USER_VARIABLE && !variables.contains(tokenStringValue)) {
variables.add(tokenStringValue);
}
if (internTokenType == InternTokenType.USER_LIST && !lists.contains(tokenStringValue)) {
lists.add(tokenStringValue);
}
}
public void updateCollisionFormula(String oldName, String newName) {
if (internTokenType == InternTokenType.COLLISION_FORMULA && tokenStringValue.equals(oldName)) {
tokenStringValue = newName;
}
}
public void updateCollisionFormulaToVersion(float catroidLanguageVersion) {
if (catroidLanguageVersion == 0.993f && internTokenType == InternTokenType.COLLISION_FORMULA) {
String secondSpriteName = CollisionDetection.getSecondSpriteNameFromCollisionFormulaString(tokenStringValue);
if (secondSpriteName != null) {
tokenStringValue = secondSpriteName;
}
}
}
public boolean isNumber() {
return internTokenType == InternTokenType.NUMBER;
}
public boolean isOperator() {
return internTokenType == InternTokenType.OPERATOR && Operators.isOperator(tokenStringValue);
}
public boolean isBracketClose() {
return internTokenType == InternTokenType.BRACKET_CLOSE;
}
public boolean isFunctionParameterBracketOpen() {
return internTokenType == InternTokenType.FUNCTION_PARAMETERS_BRACKET_OPEN;
}
public boolean isFunctionParameterBracketClose() {
return internTokenType == InternTokenType.FUNCTION_PARAMETERS_BRACKET_CLOSE;
}
public boolean isFunctionParameterDelimiter() {
return internTokenType == InternTokenType.FUNCTION_PARAMETER_DELIMITER;
}
public boolean isFunctionName() {
return internTokenType == InternTokenType.FUNCTION_NAME;
}
public boolean isSensor() {
return internTokenType == InternTokenType.SENSOR;
}
public boolean isEndOfFileToken() {
return internTokenType == InternTokenType.PARSER_END_OF_FILE;
}
public boolean isUserVariable() {
return internTokenType == InternTokenType.USER_VARIABLE;
}
public boolean isUserVariable(String name) {
return internTokenType == InternTokenType.USER_VARIABLE && tokenStringValue.equals(name);
}
public boolean isUserList() {
return internTokenType == InternTokenType.USER_LIST;
}
public boolean isString() {
return internTokenType == InternTokenType.STRING;
}
public void appendToTokenStringValue(String stringToAppend) {
this.tokenStringValue += stringToAppend;
}
public void appendToTokenStringValue(List<InternToken> internTokensToAppend) {
for (InternToken internToken : internTokensToAppend) {
this.tokenStringValue += internToken.tokenStringValue;
}
}
public InternTokenType getInternTokenType() {
return this.internTokenType;
}
public InternToken deepCopy() {
return new InternToken(internTokenType, tokenStringValue);
}
}