1 30 31 package org.syntax.jedit; 32 33 import org.syntax.jedit.tokenmarker.*; 34 import javax.swing.event.*; 35 import javax.swing.text.*; 36 import javax.swing.undo.UndoableEdit ; 37 import javax.swing.undo.UndoManager ; 38 39 40 47 public class SyntaxDocument extends PlainDocument implements UndoableEditListener 48 { 49 UndoManager UM; 50 51 public SyntaxDocument() 52 { 53 UM = new UndoManager (); 54 this.addUndoableEditListener((UndoableEditListener)this ); 55 } 56 57 public void undoableEditHappened(UndoableEditEvent e) { 58 UM.addEdit(e.getEdit()); 60 } 61 62 63 68 public TokenMarker getTokenMarker() 69 { 70 return tokenMarker; 71 } 72 73 79 public void setTokenMarker(TokenMarker tm) 80 { 81 tokenMarker = tm; 82 if(tm == null) 83 return; 84 tokenMarker.insertLines(0,getDefaultRootElement() 85 .getElementCount()); 86 tokenizeLines(); 87 } 88 89 94 public void tokenizeLines() 95 { 96 tokenizeLines(0,getDefaultRootElement().getElementCount()); 97 } 98 99 106 public void tokenizeLines(int start, int len) 107 { 108 if(tokenMarker == null || !tokenMarker.supportsMultilineTokens()) 109 return; 110 111 Segment lineSegment = new Segment(); 112 Element map = getDefaultRootElement(); 113 114 len += start; 115 116 try 117 { 118 for(int i = start; i < len; i++) 119 { 120 Element lineElement = map.getElement(i); 121 int lineStart = lineElement.getStartOffset(); 122 getText(lineStart,lineElement.getEndOffset() 123 - lineStart - 1,lineSegment); 124 tokenMarker.markTokens(lineSegment,i); 125 } 126 } 127 catch(BadLocationException bl) 128 { 129 bl.printStackTrace(); 130 } 131 } 132 133 139 public void beginCompoundEdit() {} 140 141 147 public void endCompoundEdit() {} 148 149 156 public void addUndoableEdit(UndoableEdit edit) { 157 } 159 160 protected TokenMarker tokenMarker; 162 163 168 protected void fireInsertUpdate(DocumentEvent evt) 169 { 170 if(tokenMarker != null) 171 { 172 DocumentEvent.ElementChange ch = evt.getChange( 173 getDefaultRootElement()); 174 if(ch != null) 175 { 176 tokenMarker.insertLines(ch.getIndex() + 1, 177 ch.getChildrenAdded().length - 178 ch.getChildrenRemoved().length); 179 } 180 } 181 182 super.fireInsertUpdate(evt); 183 } 184 185 190 protected void fireRemoveUpdate(DocumentEvent evt) 191 { 192 if(tokenMarker != null) 193 { 194 DocumentEvent.ElementChange ch = evt.getChange( 195 getDefaultRootElement()); 196 if(ch != null) 197 { 198 tokenMarker.deleteLines(ch.getIndex() + 1, 199 ch.getChildrenRemoved().length - 200 ch.getChildrenAdded().length); 201 } 202 } 203 204 super.fireRemoveUpdate(evt); 205 } 206 207 211 public javax.swing.undo.UndoManager getUM() { 212 if (UM == null) { 213 UM = new UndoManager (); 214 } 215 return UM; 217 } 218 219 223 public void setUM(javax.swing.undo.UndoManager UM) { 224 this.UM = UM; 225 } 226 227 } 228 | Popular Tags |