package com.sap.furcas.ide.editor.matching;
import java.util.ArrayList;
import java.util.Stack;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
public class CtsStaticMatcher {
public static char[] MATCHING_BRACKETS= { '{', '}', '(', ')', '[', ']' /*, '<','>' */};
private String AUTOINDENT_START_CHAR= "{";
private String AUTOINDENT_END_CHAR= "}";
private ArrayList<CtsStringPair> pairs= new ArrayList<CtsStringPair>();
public void setAutoIndentChars(String AUTOINDENT_START_CHAR,String AUTOINDENT_END_CHAR){
this.AUTOINDENT_START_CHAR= AUTOINDENT_START_CHAR;
this.AUTOINDENT_END_CHAR= AUTOINDENT_END_CHAR;
}
public CtsStaticMatcher(){
pairs.add(new CtsStringPair("(",")"));
pairs.add(new CtsStringPair("[","]"));
// pairs.add(new CtsStringPair("<",">")); // for "less" this is really inconvenient...
pairs.add(new CtsStringPair("\"","\""));
}
public String getClosingText(String openingText) {
for (int i=0;i<pairs.size();i++){
CtsStringPair p=pairs.get(i);
if (openingText.equals(p.getOpening()))
return p.getClosing();
}
return null;
}
public boolean isOpeningText(String text) {
for (int i=0;i<pairs.size();i++){
CtsStringPair p=pairs.get(i);
if (text.equals(p.getOpening()))
return true;
}
return false;
}
public boolean isClosingText(String text) {
for (int i=0;i<pairs.size();i++){
CtsStringPair p=pairs.get(i);
if (text.equals(p.getClosing()))
return true;
}
return false;
}
public boolean areBracesMatching(IDocument d) throws BadLocationException {
Stack<String> stack= new Stack<String>();
int counter=0;
while (counter < d.getLength()) {
String c=""+ d.getChar(counter);
if(c.equals(AUTOINDENT_START_CHAR )){
stack.push(AUTOINDENT_START_CHAR);
}
else{
if (c.equals(AUTOINDENT_END_CHAR )){
if (stack.size()==0)return true;
stack.pop();
}
}
counter++;
}
if(stack.size()>0)return false;
else return true;
}
public boolean isIndentingChar(String c) {
return AUTOINDENT_START_CHAR.equals(c) ;
}
public String getClosingBrace() {
return AUTOINDENT_END_CHAR;
}
}