blob: d6e23b662268982c7047cd9a17e49fce287e31a1 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ide.highlighter.custom;
import com.intellij.ide.highlighter.custom.tokens.KeywordParser;
import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;
/**
* @author Yura Cangea
* @version 1.0
*/
public class SyntaxTable implements Cloneable {
private Set<String> myKeywords1;
private Set<String> myKeywords2;
private Set<String> myKeywords3;
private Set<String> myKeywords4;
private String myLineComment;
public boolean lineCommentOnlyAtStart;
private String myStartComment;
private String myEndComment;
private String myHexPrefix;
private String myNumPostfixChars;
private boolean myIgnoreCase;
private boolean myHasBraces;
private boolean myHasBrackets;
private boolean myHasParens;
private boolean myHasStringEscapes;
private volatile KeywordParser myKeywordParser;
// -------------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------------
public SyntaxTable() {
myKeywords1 = new TreeSet<String>();
myKeywords2 = new TreeSet<String>();
myKeywords3 = new TreeSet<String>();
myKeywords4 = new TreeSet<String>();
}
KeywordParser getKeywordParser() {
KeywordParser parser = myKeywordParser;
if (parser == null) {
synchronized (this) {
parser = myKeywordParser;
if (parser == null) {
myKeywordParser = parser = new KeywordParser(Arrays.asList(myKeywords1, myKeywords2, myKeywords3, myKeywords4), myIgnoreCase);
}
}
}
return parser;
}
@Override
protected Object clone() throws CloneNotSupportedException {
SyntaxTable cl = (SyntaxTable) super.clone();
cl.myKeywords1 = new TreeSet<String>(myKeywords1);
cl.myKeywords2 = new TreeSet<String>(myKeywords2);
cl.myKeywords3 = new TreeSet<String>(myKeywords3);
cl.myKeywords4 = new TreeSet<String>(myKeywords4);
cl.myKeywordParser = null;
return cl;
}
// -------------------------------------------------------------------------
// Public interface
// -------------------------------------------------------------------------
public void addKeyword1(String keyword) {
myKeywords1.add(keyword);
myKeywordParser = null;
}
public Set<String> getKeywords1() {
return myKeywords1;
}
public void addKeyword2(String keyword) {
myKeywords2.add(keyword);
myKeywordParser = null;
}
public Set<String> getKeywords2() {
return myKeywords2;
}
public void addKeyword3(String keyword) {
myKeywords3.add(keyword);
myKeywordParser = null;
}
public Set<String> getKeywords3() {
return myKeywords3;
}
public void addKeyword4(String keyword) {
myKeywords4.add(keyword);
myKeywordParser = null;
}
public Set<String> getKeywords4() {
return myKeywords4;
}
public String getLineComment() {
return myLineComment;
}
public void setLineComment(String lineComment) {
myLineComment = lineComment;
}
public String getStartComment() {
return myStartComment;
}
public void setStartComment(String startComment) {
myStartComment = startComment;
}
public String getEndComment() {
return myEndComment;
}
public void setEndComment(String endComment) {
myEndComment = endComment;
}
public String getHexPrefix() {
return myHexPrefix;
}
public void setHexPrefix(String hexPrefix) {
myHexPrefix = hexPrefix;
}
public String getNumPostfixChars() {
return myNumPostfixChars;
}
public void setNumPostfixChars(String numPostfixChars) {
myNumPostfixChars = numPostfixChars;
}
public boolean isIgnoreCase() {
return myIgnoreCase;
}
public void setIgnoreCase(boolean ignoreCase) {
myIgnoreCase = ignoreCase;
myKeywordParser = null;
}
public boolean isHasBraces() {
return myHasBraces;
}
public void setHasBraces(boolean hasBraces) {
myHasBraces = hasBraces;
}
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SyntaxTable)) return false;
final SyntaxTable syntaxTable = (SyntaxTable)o;
if (myIgnoreCase != syntaxTable.myIgnoreCase) return false;
if (myEndComment != null ? !myEndComment.equals(syntaxTable.myEndComment) : syntaxTable.myEndComment != null) return false;
if (myHexPrefix != null ? !myHexPrefix.equals(syntaxTable.myHexPrefix) : syntaxTable.myHexPrefix != null) return false;
if (!myKeywords1.equals(syntaxTable.myKeywords1)) return false;
if (!myKeywords2.equals(syntaxTable.myKeywords2)) return false;
if (!myKeywords3.equals(syntaxTable.myKeywords3)) return false;
if (!myKeywords4.equals(syntaxTable.myKeywords4)) return false;
if (myLineComment != null ? !myLineComment.equals(syntaxTable.myLineComment) : syntaxTable.myLineComment != null) return false;
if (myNumPostfixChars != null ? !myNumPostfixChars.equals(syntaxTable.myNumPostfixChars) : syntaxTable.myNumPostfixChars != null) return false;
if (myStartComment != null ? !myStartComment.equals(syntaxTable.myStartComment) : syntaxTable.myStartComment != null) return false;
if (myHasBraces != syntaxTable.myHasBraces) return false;
if (myHasBrackets != syntaxTable.myHasBrackets) return false;
if (myHasParens != syntaxTable.myHasParens) return false;
if (myHasStringEscapes != syntaxTable.myHasStringEscapes) return false;
if (lineCommentOnlyAtStart != syntaxTable.lineCommentOnlyAtStart) return false;
return true;
}
public int hashCode() {
return myKeywords1.hashCode();
}
public boolean isHasBrackets() {
return myHasBrackets;
}
public boolean isHasParens() {
return myHasParens;
}
public void setHasBrackets(boolean hasBrackets) {
myHasBrackets = hasBrackets;
}
public void setHasParens(boolean hasParens) {
myHasParens = hasParens;
}
public boolean isHasStringEscapes() {
return myHasStringEscapes;
}
public void setHasStringEscapes(final boolean hasEscapes) {
myHasStringEscapes = hasEscapes;
}
}