jsyntaxpane
Class SyntaxDocument

java.lang.Object
  extended by javax.swing.text.AbstractDocument
      extended by javax.swing.text.PlainDocument
          extended by jsyntaxpane.SyntaxDocument
All Implemented Interfaces:
java.io.Serializable, javax.swing.text.Document

public class SyntaxDocument
extends javax.swing.text.PlainDocument

A document that supports being highlighted. The document maintains an internal List of all the Tokens. The Tokens are updated using a Lexer, passed to it during construction.

Author:
Ayman Al-Sairafi
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.text.AbstractDocument
javax.swing.text.AbstractDocument.AbstractElement, javax.swing.text.AbstractDocument.AttributeContext, javax.swing.text.AbstractDocument.BranchElement, javax.swing.text.AbstractDocument.Content, javax.swing.text.AbstractDocument.DefaultDocumentEvent, javax.swing.text.AbstractDocument.ElementEdit, javax.swing.text.AbstractDocument.LeafElement
 
Field Summary
static org.apache.log4j.Logger LOG
           
 
Fields inherited from class javax.swing.text.PlainDocument
lineLimitAttribute, tabSizeAttribute
 
Fields inherited from class javax.swing.text.AbstractDocument
BAD_LOCATION, BidiElementName, ContentElementName, ElementNameAttribute, listenerList, ParagraphElementName, SectionElementName
 
Fields inherited from interface javax.swing.text.Document
StreamDescriptionProperty, TitleProperty
 
Constructor Summary
SyntaxDocument(Lexer lexer)
           
 
Method Summary
 SyntaxDocument append(java.lang.String str)
          Append the given string to the text of this document.
 void clearUndos()
          This will discard all undoable edits
 void doRedo()
          Perform a redo action, if possible.
 void doUndo()
          Perform an undo action, if possible
protected  void fireChangedUpdate(javax.swing.event.DocumentEvent e)
           
protected  void fireInsertUpdate(javax.swing.event.DocumentEvent e)
           
protected  void fireRemoveUpdate(javax.swing.event.DocumentEvent e)
           
 java.lang.String getLineAt(int pos)
          Gets the line at given position.
 int getLineCount()
          Return the number of lines in this document
 int getLineEndOffset(int pos)
          Returns the end position of the line at pos.
 int getLineNumberAt(int pos)
          Return the line number at given position.
 int getLineStartOffset(int pos)
          Returns the starting position of the line at pos
 java.util.regex.Matcher getMatcher(java.util.regex.Pattern pattern)
          Return a matcher that matches the given pattern on the entire document
 java.util.regex.Matcher getMatcher(java.util.regex.Pattern pattern, int start)
          Return a matcher that matches the given pattern in the part of the document starting at offset start.
 java.util.regex.Matcher getMatcher(java.util.regex.Pattern pattern, int start, int length)
          Return a matcher that matches the given pattern in the part of the document starting at offset start and ending at start + length.
 Token getNextToken(Token tok)
          Return the token following the current token, or null This is an expensive operation, so do not use it to update the gui
 Token getPairFor(Token t)
          This is used to return the other part of a paired token in the document.
 Token getPrevToken(Token tok)
          Return the token prior to the given token, or null This is an expensive operation, so do not use it to update the gui
 Token getTokenAt(int pos)
          Find the token at a given position.
 java.util.Iterator<Token> getTokens(int start, int end)
          Return an iterator of tokens between p0 and p1.
 java.lang.String getUncommentedText(int aStart, int anEnd)
          Gets the text without the comments.
 Token getWordAt(int offs, java.util.regex.Pattern p)
           
 void removeLineAt(int pos)
          Deletes the line at given position
 void replace(int offset, int length, java.lang.String text, javax.swing.text.AttributeSet attrs)
          We override this here so that the replace is treated as one operation by the undomanager
 void replaceLineAt(int pos, java.lang.String newLines)
          Replace the line at given position with the given string, which can span multiple lines
 void replaceToken(Token token, java.lang.String replacement)
          Replace the token with the replacement string
 java.lang.String toString()
           
 
Methods inherited from class javax.swing.text.PlainDocument
createDefaultRoot, getDefaultRootElement, getParagraphElement, insertString, insertUpdate, removeUpdate
 
Methods inherited from class javax.swing.text.AbstractDocument
addDocumentListener, addUndoableEditListener, createBranchElement, createLeafElement, createPosition, dump, fireUndoableEditUpdate, getAsynchronousLoadPriority, getAttributeContext, getBidiRootElement, getContent, getCurrentWriter, getDocumentFilter, getDocumentListeners, getDocumentProperties, getEndPosition, getLength, getListeners, getProperty, getRootElements, getStartPosition, getText, getText, getUndoableEditListeners, postRemoveUpdate, putProperty, readLock, readUnlock, remove, removeDocumentListener, removeUndoableEditListener, render, setAsynchronousLoadPriority, setDocumentFilter, setDocumentProperties, writeLock, writeUnlock
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

LOG

public static final org.apache.log4j.Logger LOG
Constructor Detail

SyntaxDocument

public SyntaxDocument(Lexer lexer)
Method Detail

fireChangedUpdate

protected void fireChangedUpdate(javax.swing.event.DocumentEvent e)
Overrides:
fireChangedUpdate in class javax.swing.text.AbstractDocument

fireInsertUpdate

protected void fireInsertUpdate(javax.swing.event.DocumentEvent e)
Overrides:
fireInsertUpdate in class javax.swing.text.AbstractDocument

fireRemoveUpdate

protected void fireRemoveUpdate(javax.swing.event.DocumentEvent e)
Overrides:
fireRemoveUpdate in class javax.swing.text.AbstractDocument

replaceToken

public void replaceToken(Token token,
                         java.lang.String replacement)
Replace the token with the replacement string

Parameters:
token -
replacement -

getTokens

public java.util.Iterator<Token> getTokens(int start,
                                           int end)
Return an iterator of tokens between p0 and p1.

Parameters:
start - start position for getting tokens
end - position for last token
Returns:
Iterator for tokens that overal with range from start to end

getTokenAt

public Token getTokenAt(int pos)
Find the token at a given position. May return null if no token is found (whitespace skipped) or if the position is out of range:

Parameters:
pos -
Returns:

getWordAt

public Token getWordAt(int offs,
                       java.util.regex.Pattern p)

getNextToken

public Token getNextToken(Token tok)
Return the token following the current token, or null This is an expensive operation, so do not use it to update the gui

Parameters:
tok -
Returns:

getPrevToken

public Token getPrevToken(Token tok)
Return the token prior to the given token, or null This is an expensive operation, so do not use it to update the gui

Parameters:
tok -
Returns:

getPairFor

public Token getPairFor(Token t)
This is used to return the other part of a paired token in the document. A paired part has token.pairValue <> 0, and the paired token will have the negative of t.pairValue. This method properly handles nestings of same pairValues, but overlaps are not checked. if The document does not contain a paired token, then null is returned.

Parameters:
t -
Returns:
the other pair's token, or null if nothing is found.

doUndo

public void doUndo()
Perform an undo action, if possible


doRedo

public void doRedo()
Perform a redo action, if possible.


getMatcher

public java.util.regex.Matcher getMatcher(java.util.regex.Pattern pattern)
Return a matcher that matches the given pattern on the entire document

Parameters:
pattern -
Returns:
matcher object

getMatcher

public java.util.regex.Matcher getMatcher(java.util.regex.Pattern pattern,
                                          int start)
Return a matcher that matches the given pattern in the part of the document starting at offset start. Note that the matcher will have offset starting from start

Parameters:
pattern -
start -
Returns:
matcher that MUST be offset by start to get the proper location within the document

getMatcher

public java.util.regex.Matcher getMatcher(java.util.regex.Pattern pattern,
                                          int start,
                                          int length)
Return a matcher that matches the given pattern in the part of the document starting at offset start and ending at start + length. Note that the matcher will have offset starting from start

Parameters:
pattern -
start -
length -
Returns:
matcher that MUST be offset by start to get the proper location within the document

clearUndos

public void clearUndos()
This will discard all undoable edits


getLineAt

public java.lang.String getLineAt(int pos)
                           throws javax.swing.text.BadLocationException
Gets the line at given position. The line returned will NOT include the line terminator '\n'

Parameters:
pos - Position (usually from text.getCaretPosition()
Returns:
the STring of text at given position
Throws:
javax.swing.text.BadLocationException

removeLineAt

public void removeLineAt(int pos)
                  throws javax.swing.text.BadLocationException
Deletes the line at given position

Parameters:
pos -
Throws:
javax.swing.text.BadLocationException

replaceLineAt

public void replaceLineAt(int pos,
                          java.lang.String newLines)
                   throws javax.swing.text.BadLocationException
Replace the line at given position with the given string, which can span multiple lines

Parameters:
pos -
newLines -
Throws:
javax.swing.text.BadLocationException

getUncommentedText

public java.lang.String getUncommentedText(int aStart,
                                           int anEnd)
Gets the text without the comments. For example for the string { // it's a comment this method will return "{ ".

Parameters:
aStart - start of the text.
anEnd - end of the text.
Returns:
String for the line without comments (if exists).

getLineStartOffset

public int getLineStartOffset(int pos)
Returns the starting position of the line at pos

Parameters:
pos -
Returns:
starting position of the line

getLineEndOffset

public int getLineEndOffset(int pos)
Returns the end position of the line at pos. Does a bounds check to ensure the returned value does not exceed document length

Parameters:
pos -
Returns:

getLineCount

public int getLineCount()
Return the number of lines in this document

Returns:

getLineNumberAt

public int getLineNumberAt(int pos)
Return the line number at given position. The line numbers are zero based

Parameters:
pos -
Returns:

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

replace

public void replace(int offset,
                    int length,
                    java.lang.String text,
                    javax.swing.text.AttributeSet attrs)
             throws javax.swing.text.BadLocationException
We override this here so that the replace is treated as one operation by the undomanager

Overrides:
replace in class javax.swing.text.AbstractDocument
Parameters:
offset -
length -
text -
attrs -
Throws:
javax.swing.text.BadLocationException

append

public SyntaxDocument append(java.lang.String str)
Append the given string to the text of this document.

Parameters:
str -
Returns:
this document