/**
*
*/
package org.korsakow.ide.ui.components.code;
import java.awt.Color;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.util.List;
import javax.swing.JTextField;
import org.korsakow.ide.code.RuleParserException;
import org.korsakow.ide.code.k5.K5Lexeme;
import org.korsakow.ide.code.k5.K5RuleParser2;
import org.korsakow.ide.code.k5.K5Symbol;
public class CodeEditor extends JTextField
{
private K5RuleParser2 parser;
public CodeEditor()
{
parser = new K5RuleParser2();
addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent event) {
update();
}
});
}
public void update()
{
String text = getText();
try {
List<K5Lexeme> tokens = parser.tokenize(text);
StringBuilder sb = new StringBuilder();
for (K5Lexeme lexeme : tokens)
{
sb.append(lexeme.getToken())
.append(K5Symbol.DEFAULT_STATEMENT_SEPARATOR);
}
if (sb.length() > 0)
sb.deleteCharAt(1); // trailing whitespace
setText(sb.toString());
setForeground(Color.black);
} catch (RuleParserException e) {
setForeground(Color.red);
}
}
}