/* * Token.java * * Copyright (C) 2009-12 by RStudio, Inc. * * Unless you have received this program directly from RStudio pursuant * to the terms of a commercial license agreement with RStudio, then * this program is licensed to you under the terms of version 3 of the * GNU Affero General Public License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. * */ package org.rstudio.studio.client.workbench.views.source.editors.text.ace; import org.rstudio.core.client.StringUtil; import com.google.gwt.core.client.JavaScriptObject; public class Token extends JavaScriptObject { protected Token() {} public static native final Token create() /*-{ return { "value": "", "type": "", "column": 0 }; }-*/; public static native final Token create(String value, String type, int column) /*-{ return { "value": value, "type": type, "column": column }; }-*/; public native final String getValue() /*-{ return this.value; }-*/; public native final String getType() /*-{ return this.type; }-*/; public native final int getColumn() /*-{ return this.column; }-*/; public final boolean valueEquals(String value) { return value.equals(getValue()); } public final boolean hasAllTypes(String... types) { String tokenType = getType(); if (StringUtil.isNullOrEmpty(tokenType)) return false; for (String type : types) { boolean hasType = tokenType.equals(type) || tokenType.contains(type + ".") || tokenType.contains("." + type); if (!hasType) return false; } return true; } public final boolean hasType(String... types) { String tokenType = getType(); if (StringUtil.isNullOrEmpty(tokenType)) return false; for (String type : types) { if (tokenType.equals(type) || tokenType.contains(type + ".") || tokenType.contains("." + type)) { return true; } } return false; } public final boolean typeEquals(String type) { return type.equals(getType()); } public native final boolean isLeftBracket() /*-{ return this.value && ( this.value === "{" || this.value === "(" || this.value === "[" ); }-*/; public native final boolean isRightBracket() /*-{ return this.value && ( this.value === "}" || this.value === ")" || this.value === "]" ); }-*/; public native final boolean isLeftAssign() /*-{ return this.value && ( this.value === "=" || this.value === "<-" ); }-*/; public native final boolean isValidForFunctionCall() /*-{ return this.type && ( this.type.indexOf("identifier") !== -1 || this.type === "string" || this.type === "keyword" ); }-*/; public native final boolean isExtractionOperator() /*-{ return this.value && ( this.value === "$" || this.value === "@" || this.value === "?" || this.value === "~" ); }-*/; public final String asString() { return "'" + getType() + "' -> '" + getValue() + "'"; } // NOTE: Tokens attached to a document should be considered immutable; // use setters only when applying to a tokenized line separate from an // active editor! public native final void setValue(String value) /*-{ this.value = value; }-*/; }