public class RSyntaxDocument extends PlainDocument implements SyntaxConstants
RSyntaxTextArea
.
This document is like javax.swing.text.PlainDocument
except that
it also keeps track of syntax highlighting in the document. It has a "style"
attribute associated with it that determines how syntax highlighting is done
(i.e., what language is being highlighted).
Instances of RSyntaxTextArea
will only accept instances of
RSyntaxDocument
, since it is this document that keeps
track of syntax highlighting. All others will cause an exception to be
thrown.
To change the language being syntax highlighted at any time, you merely have
to call setSyntaxStyle(java.lang.String)
. Other than that, this document can be
treated like any other save one caveat: all DocumentEvent
s of
type CHANGE
use their offset and length values to represent the
first and last lines, respectively, that have had their syntax coloring
change. This is really a hack to increase the speed of the painting code
and should really be corrected, but oh well.
AbstractDocument.AbstractElement, AbstractDocument.AttributeContext, AbstractDocument.BranchElement, AbstractDocument.Content, AbstractDocument.DefaultDocumentEvent, AbstractDocument.ElementEdit, AbstractDocument.LeafElement
Modifier and Type | Field and Description |
---|---|
protected DynamicIntArray |
lastTokensOnLines
Array of values representing the "last token type" on each line.
|
lineLimitAttribute, tabSizeAttribute
BAD_LOCATION, BidiElementName, ContentElementName, ElementNameAttribute, listenerList, ParagraphElementName, SectionElementName
SYNTAX_STYLE_ACTIONSCRIPT, SYNTAX_STYLE_ASSEMBLER_X86, SYNTAX_STYLE_BBCODE, SYNTAX_STYLE_C, SYNTAX_STYLE_CLOJURE, SYNTAX_STYLE_CPLUSPLUS, SYNTAX_STYLE_CSHARP, SYNTAX_STYLE_CSS, SYNTAX_STYLE_DELPHI, SYNTAX_STYLE_FORTRAN, SYNTAX_STYLE_GROOVY, SYNTAX_STYLE_HTML, SYNTAX_STYLE_JAVA, SYNTAX_STYLE_JAVASCRIPT, SYNTAX_STYLE_JSP, SYNTAX_STYLE_LISP, SYNTAX_STYLE_LUA, SYNTAX_STYLE_MAKEFILE, SYNTAX_STYLE_MXML, SYNTAX_STYLE_NONE, SYNTAX_STYLE_PERL, SYNTAX_STYLE_PHP, SYNTAX_STYLE_PROPERTIES_FILE, SYNTAX_STYLE_PYTHON, SYNTAX_STYLE_RUBY, SYNTAX_STYLE_SAS, SYNTAX_STYLE_SCALA, SYNTAX_STYLE_SQL, SYNTAX_STYLE_TCL, SYNTAX_STYLE_UNIX_SHELL, SYNTAX_STYLE_WINDOWS_BATCH, SYNTAX_STYLE_XML
StreamDescriptionProperty, TitleProperty
Constructor and Description |
---|
RSyntaxDocument(String syntaxStyle)
Constructs a plain text document.
|
RSyntaxDocument(TokenMakerFactory tmf,
String syntaxStyle)
Constructs a plain text document.
|
Modifier and Type | Method and Description |
---|---|
char |
charAt(int offset)
Returns the character in the document at the specified offset.
|
protected void |
fireInsertUpdate(DocumentEvent e)
Alerts all listeners to this document of an insertion.
|
protected void |
fireRemoveUpdate(DocumentEvent chng)
This method is called AFTER the content has been inserted into the
document and the element structure has been updated.
|
boolean |
getCompleteMarkupCloseTags()
Returns whether closing markup tags should be automatically completed.
|
boolean |
getCurlyBracesDenoteCodeBlocks()
Returns whether the current programming language uses curly braces
('{' and '}') to denote code blocks.
|
boolean |
getLanguageIsMarkup()
Returns whether the current language is a markup language, such as
HTML, XML or PHP.
|
int |
getLastTokenTypeOnLine(int line)
Returns the token type of the last token on the given line.
|
String[] |
getLineCommentStartAndEnd()
Returns the text to place at the beginning and end of a
line to "comment" it in the current programming language.
|
boolean |
getShouldIndentNextLine(int line)
This method returns whether auto indentation should be done if Enter
is pressed at the end of the specified line.
|
Token |
getTokenListForLine(int line)
Returns a token list for the specified segment of text representing
the specified line number.
|
void |
setSyntaxStyle(String styleKey)
Sets the syntax style being used for syntax highlighting in this
document.
|
void |
setSyntaxStyle(TokenMaker tokenMaker)
Sets the syntax style being used for syntax highlighting in this
document.
|
void |
setTokenMakerFactory(TokenMakerFactory tmf)
Sets the token maker factory used by this document.
|
void |
setWhitespaceVisible(boolean visible,
RSyntaxTextArea textArea)
Sets whether whitespace is visible.
|
protected void |
updateSyntaxHighlightingInformation()
Updates internal state information; e.g. the "last tokens on lines"
data.
|
createDefaultRoot, getDefaultRootElement, getParagraphElement, insertString, insertUpdate, removeUpdate
addDocumentListener, addUndoableEditListener, createBranchElement, createLeafElement, createPosition, dump, fireChangedUpdate, 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, replace, setAsynchronousLoadPriority, setDocumentFilter, setDocumentProperties, writeLock, writeUnlock
protected DynamicIntArray lastTokensOnLines
public RSyntaxDocument(String syntaxStyle)
syntaxStyle
- The syntax highlighting scheme to use.public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle)
tmf
- The TokenMakerFactory
for this document. If
this is null
, a default factory is used.syntaxStyle
- The syntax highlighting scheme to use.public char charAt(int offset) throws BadLocationException
offset
- The offset of the character.BadLocationException
- If the offset is invalid.protected void fireInsertUpdate(DocumentEvent e)
The syntax highlighting stuff has to be here instead of in
insertUpdate
because insertUpdate
is not
called by the undo/redo actions, but this method is.
fireInsertUpdate
in class AbstractDocument
e
- The change.protected void fireRemoveUpdate(DocumentEvent chng)
The syntax-highlighting updates need to be done here (as opposed to
an override of postRemoveUpdate
) as this method is called
in response to undo/redo events, whereas postRemoveUpdate
is not.
Now that the text is actually inserted into the content and element structure, we can update our token elements and "last tokens on lines" structure.
fireRemoveUpdate
in class AbstractDocument
chng
- The change that occurred.PlainDocument.removeUpdate(javax.swing.text.AbstractDocument.DefaultDocumentEvent)
public boolean getCompleteMarkupCloseTags()
true
if
getLanguageIsMarkup()
also returns true
.getLanguageIsMarkup()
public boolean getCurlyBracesDenoteCodeBlocks()
public boolean getLanguageIsMarkup()
public int getLastTokenTypeOnLine(int line)
line
- The line to inspect.public String[] getLineCommentStartAndEnd()
null
value for either means there
is no string to add for that part. A value of
null
for the array means this language
does not support commenting/uncommenting lines.public boolean getShouldIndentNextLine(int line)
line
- The line to check.public final Token getTokenListForLine(int line)
tokenMaker.getTokenList
that takes into account the last
token on the previous line to assure token accuracy.line
- The line number of text
in the document, >= 0.public void setSyntaxStyle(String styleKey)
TokenMakerFactory
. By default, all RSyntaxDocument
s
support all languages built into RSyntaxTextArea
.styleKey
- The new style to use, such as
SyntaxConstants.SYNTAX_STYLE_JAVA
. If this style is not
known or supported by this document, then
SyntaxConstants.SYNTAX_STYLE_NONE
is used.public void setSyntaxStyle(TokenMaker tokenMaker)
RSyntaxTextArea
.tokenMaker
- The new token maker to use.public void setTokenMakerFactory(TokenMakerFactory tmf)
tmf
- The TokenMakerFactory
for this document. If
this is null
, a default factory is used.public void setWhitespaceVisible(boolean visible, RSyntaxTextArea textArea)
visible
- Whether whitespace should be visible.protected void updateSyntaxHighlightingInformation()
This is called internally whenever the syntax style changes.