--- /dev/null
+package org.simantics.scl.ui.editor;\r
+\r
+import org.eclipse.jface.text.DocumentCommand;\r
+import org.eclipse.jface.text.IAutoEditStrategy;\r
+import org.eclipse.jface.text.IDocument;\r
+\r
+public class MatchingBracketsEditStrategy implements IAutoEditStrategy {\r
+\r
+ char justAddedClosingBracket = (char)0;\r
+ \r
+ public void customizeDocumentCommand(IDocument d, DocumentCommand c) {\r
+ if (c.length == 0 && c.text != null) {\r
+ if(c.text.equals("(")) {\r
+ c.text = "()";\r
+ justAddedClosingBracket = ')';\r
+ }\r
+ else if(c.text.equals("[")) {\r
+ c.text = "[]";\r
+ justAddedClosingBracket = ']';\r
+ }\r
+ else {\r
+ if(c.text.length() == 1 && c.text.charAt(0) == justAddedClosingBracket) {\r
+ c.text = "";\r
+ c.shiftsCaret = false;\r
+ c.caretOffset = c.offset+1;\r
+ }\r
+ justAddedClosingBracket = (char)0;\r
+ return;\r
+ }\r
+ \r
+ // Puts caret between brackets\r
+ c.caretOffset = c.offset+1;\r
+ c.shiftsCaret = false; \r
+ } \r
+ else\r
+ justAddedClosingBracket = (char)0;\r
+ }\r
+ \r
+}\r