1 package org.jedit.syntax; 2 3 11 12 import javax.swing.event.*; 13 import javax.swing.text.*; 14 import javax.swing.undo.UndoableEdit ; 15 16 23 public class SyntaxDocument extends PlainDocument 24 { 25 30 public TokenMarker getTokenMarker() 31 { 32 return tokenMarker; 33 } 34 35 41 public void setTokenMarker(TokenMarker tm) 42 { 43 tokenMarker = tm; 44 if(tm == null) 45 return; 46 tokenMarker.insertLines(0,getDefaultRootElement() 47 .getElementCount()); 48 tokenizeLines(); 49 } 50 51 56 public void tokenizeLines() 57 { 58 tokenizeLines(0,getDefaultRootElement().getElementCount()); 59 } 60 61 68 public void tokenizeLines(int start, int len) 69 { 70 if(tokenMarker == null || !tokenMarker.supportsMultilineTokens()) 71 return; 72 73 Segment lineSegment = new Segment(); 74 Element map = getDefaultRootElement(); 75 76 len += start; 77 78 try 79 { 80 for(int i = start; i < len; i++) 81 { 82 Element lineElement = map.getElement(i); 83 int lineStart = lineElement.getStartOffset(); 84 getText(lineStart,lineElement.getEndOffset() 85 - lineStart - 1,lineSegment); 86 tokenMarker.markTokens(lineSegment,i); 87 } 88 } 89 catch(BadLocationException bl) 90 { 91 bl.printStackTrace(); 92 } 93 } 94 95 101 public void beginCompoundEdit() {} 102 103 109 public void endCompoundEdit() {} 110 111 118 public void addUndoableEdit(UndoableEdit edit) {} 119 120 protected TokenMarker tokenMarker; 122 123 128 protected void fireInsertUpdate(DocumentEvent evt) 129 { 130 if(tokenMarker != null) 131 { 132 DocumentEvent.ElementChange ch = evt.getChange( 133 getDefaultRootElement()); 134 if(ch != null) 135 { 136 tokenMarker.insertLines(ch.getIndex() + 1, 137 ch.getChildrenAdded().length - 138 ch.getChildrenRemoved().length); 139 } 140 } 141 142 super.fireInsertUpdate(evt); 143 } 144 145 150 protected void fireRemoveUpdate(DocumentEvent evt) 151 { 152 if(tokenMarker != null) 153 { 154 DocumentEvent.ElementChange ch = evt.getChange( 155 getDefaultRootElement()); 156 if(ch != null) 157 { 158 tokenMarker.deleteLines(ch.getIndex() + 1, 159 ch.getChildrenRemoved().length - 160 ch.getChildrenAdded().length); 161 } 162 } 163 164 super.fireRemoveUpdate(evt); 165 } 166 } 167 | Popular Tags |