Completely changed the structure and switched to Eclipse Plugin.
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / asm / editor / AsmDocumentValidator.java
1 package net.mograsim.plugin.asm.editor;\r
2 \r
3 import java.io.StringReader;\r
4 \r
5 import javax.xml.parsers.DocumentBuilder;\r
6 import javax.xml.parsers.DocumentBuilderFactory;\r
7 \r
8 import org.eclipse.core.resources.IFile;\r
9 import org.eclipse.core.resources.IMarker;\r
10 import org.eclipse.core.runtime.CoreException;\r
11 import org.eclipse.jface.text.DocumentEvent;\r
12 import org.eclipse.jface.text.IDocumentListener;\r
13 import org.xml.sax.InputSource;\r
14 import org.xml.sax.SAXParseException;\r
15 \r
16 public class AsmDocumentValidator implements IDocumentListener\r
17 {\r
18 \r
19         private final IFile file;\r
20         private IMarker marker;\r
21 \r
22         AsmDocumentValidator(IFile file)\r
23         {\r
24                 this.file = file;\r
25         }\r
26 \r
27         @Override\r
28         public void documentChanged(DocumentEvent event)\r
29         {\r
30                 if (this.marker != null)\r
31                 {\r
32                         try\r
33                         {\r
34                                 this.marker.delete();\r
35                         }\r
36                         catch (CoreException e)\r
37                         {\r
38                                 e.printStackTrace();\r
39                         }\r
40                         this.marker = null;\r
41                 }\r
42                 try (StringReader reader = new StringReader(event.getDocument().get());)\r
43                 {\r
44                         DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();\r
45                         documentBuilder.parse(new InputSource(reader));\r
46                 }\r
47                 catch (Exception ex)\r
48                 {\r
49                         try\r
50                         {\r
51                                 this.marker = file.createMarker(IMarker.PROBLEM);\r
52                                 this.marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);\r
53                                 this.marker.setAttribute(IMarker.MESSAGE, ex.getMessage());\r
54                                 if (ex instanceof SAXParseException)\r
55                                 {\r
56                                         SAXParseException saxParseException = (SAXParseException) ex;\r
57                                         int lineNumber = saxParseException.getLineNumber();\r
58                                         int offset = event.getDocument().getLineInformation(lineNumber - 1).getOffset() + saxParseException.getColumnNumber()\r
59                                                         - 1;\r
60                                         this.marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);\r
61                                         this.marker.setAttribute(IMarker.CHAR_START, offset);\r
62                                         this.marker.setAttribute(IMarker.CHAR_END, offset + 1);\r
63                                 }\r
64                         }\r
65                         catch (Exception e)\r
66                         {\r
67                                 e.printStackTrace();\r
68                         }\r
69                 }\r
70         }\r
71 \r
72         @Override\r
73         public void documentAboutToBeChanged(DocumentEvent event)\r
74         {\r
75         }\r
76 \r
77 }\r