package husacct.control.presentation.codeviewer.parser; import java.awt.Color; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import org.apache.log4j.Logger; import husacct.control.presentation.codeviewer.CodeViewInternalFrame; public class CSharpFileParser implements AbstractFileParser { private static Logger logger = Logger.getLogger(CSharpFileParser.class); private CodeViewInternalFrame view; private Style defaultStyle; private Style commentStyle; private Style keyStyle; private int lineNumber = 1; private String[] keywords = { "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else", "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float", "for", "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", "long", "namespace", "new", "null", "object", "operator", "out", "override", "params", "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", "short", "sizeof", "stackalloc", "static", "string", "struct", "switch", "this", "throws", "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort", "using", "virtual", "volatile", "void", "while" }; private ArrayList<String> keys = new ArrayList<String>(Arrays.asList(keywords)); private boolean commentLine = false; private boolean commentBlock = false; public CSharpFileParser(CodeViewInternalFrame view) { this.view = view; initialiseStyles(); } @Override public void parseFile(File file) { FileReader fileReader; try { fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); String line; while((line = bufferedReader.readLine()) != null) { parseLine(line); } bufferedReader.close(); } catch (IOException e) { view.addWord("File not found!", defaultStyle, lineNumber); logger.error(" Exception: " + e.getMessage()); } } @Override public void parseLine(String line) { for(String word : line.split(" ")) { if(word.trim().startsWith("/*")) { commentBlock = true; view.addWord(word, commentStyle, lineNumber); } else if(word.trim().endsWith("*/")) { commentBlock = false; view.addWord(word, commentStyle, lineNumber); } else if(commentLine || commentBlock) { view.addWord(word, commentStyle, lineNumber); } else if(word.trim().startsWith("//")) { commentLine = true; view.addWord(word, commentStyle, lineNumber); } else if(keys.contains(word.trim())) { view.addWord(word, keyStyle, lineNumber); } else view.addWord(word, defaultStyle, lineNumber); } commentLine = false; view.setNewLine(); lineNumber++; } @Override public void initialiseStyles() { StyleContext context = new StyleContext(); defaultStyle = context.addStyle("default", null); StyleConstants.setForeground(defaultStyle, new Color(0, 0, 0)); commentStyle = context.addStyle("Blue", null); StyleConstants.setForeground(commentStyle, new Color(0, 149, 123)); keyStyle = context.addStyle("Purple", null); StyleConstants.setForeground(keyStyle, new Color(85, 0, 255)); } }