1 package org.antlr.works.syntax; 2 3 import org.antlr.works.ate.syntax.misc.ATEToken; 4 import org.antlr.works.components.grammar.CEditorGrammar; 5 import org.antlr.works.prefs.AWPrefs; 6 7 import javax.swing.text.BadLocationException ; 8 import javax.swing.text.Document ; 9 39 40 public class GrammarAutoIndent { 41 42 public static void autoIndentOnSpecificKeys(CEditorGrammar editor, Document doc, int offset, int length) throws BadLocationException { 43 String s = doc.getText(offset-1, length+1); 44 if(s.length() < 2) 45 return; 46 47 char c1 = s.charAt(0); 48 char c2 = s.charAt(1); 49 if(c1 == '\n' || c1 == '\r') { 50 if(c2 == '|') { 51 doc.remove(offset, 1); 52 doc.insertString(offset, "\t"+c2+"\t", null); 53 } else if(c2 == ';') { 54 doc.remove(offset, 1); 55 doc.insertString(offset, "\t"+c2, null); 56 } 57 } else if(c2 == ':') { 58 ATEToken token = editor.getCurrentToken(); 61 if(token != null && token.scope != null) 62 return; 63 64 boolean beginningOfRule = true; 67 int originalOffset = offset; 68 while(--offset >= 0) { 69 String t = doc.getText(offset, 1); 70 char c = t.charAt(0); 71 if(c == '\n' || c == '\r') { 72 break; 73 } 74 if(c != ' ' && c != '_' && !Character.isLetterOrDigit(c)) { 75 beginningOfRule = false; 76 break; 77 } 78 } 79 if(beginningOfRule && AWPrefs.autoIndentColonInRule()) { 80 int lengthOfRule = originalOffset-offset; 81 int tabSize = AWPrefs.getEditorTabSize(); 82 83 if(lengthOfRule > tabSize+1) { 84 doc.remove(originalOffset, 1); 85 doc.insertString(originalOffset, "\n\t:\t", null); 86 } else if(lengthOfRule < tabSize+1) { 87 doc.remove(originalOffset, 1); 88 doc.insertString(originalOffset, "\t:\t", null); 89 } else { 90 doc.insertString(originalOffset+1, "\t", null); 91 } 92 } 93 } 94 } 95 96 } 97 | Popular Tags |