public class RSyntaxDocument extends RDocument implements java.lang.Iterable<Token>, 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.
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
限定符和类型 | 字段和说明 |
---|---|
protected DynamicIntArray |
lastTokensOnLines
Array of values representing the "last token type" on each line.
|
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_DTD, SYNTAX_STYLE_FORMULA, SYNTAX_STYLE_FORTRAN, SYNTAX_STYLE_GROOVY, SYNTAX_STYLE_HTACCESS, SYNTAX_STYLE_HTML, SYNTAX_STYLE_JAVA, SYNTAX_STYLE_JAVASCRIPT, SYNTAX_STYLE_JSON, SYNTAX_STYLE_JSP, SYNTAX_STYLE_LATEX, SYNTAX_STYLE_LISP, SYNTAX_STYLE_LUA, SYNTAX_STYLE_MAKEFILE, SYNTAX_STYLE_MXML, SYNTAX_STYLE_NONE, SYNTAX_STYLE_NSIS, 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_VISUAL_BASIC, SYNTAX_STYLE_WINDOWS_BATCH, SYNTAX_STYLE_XML
构造器和说明 |
---|
RSyntaxDocument(java.lang.String syntaxStyle)
Constructs a plain text document.
|
RSyntaxDocument(TokenMakerFactory tmf,
java.lang.String syntaxStyle)
Constructs a plain text document.
|
限定符和类型 | 方法和说明 |
---|---|
protected void |
fireInsertUpdate(javax.swing.event.DocumentEvent e)
Alerts all listeners to this document of an insertion.
|
protected void |
fireRemoveUpdate(javax.swing.event.DocumentEvent chng)
This method is called AFTER the content has been inserted into the
document and the element structure has been updated.
|
int |
getClosestStandardTokenTypeForInternalType(int type)
Returns the closest
"standard" token type for a given
"internal" token type (e.g. one whose value is < 0 ). |
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.
|
java.lang.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.
|
java.util.Iterator<Token> |
iterator()
Returns an iterator over the tokens in this document.
|
void |
setSyntaxStyle(java.lang.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.
|
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 transient DynamicIntArray lastTokensOnLines
public RSyntaxDocument(java.lang.String syntaxStyle)
syntaxStyle
- The syntax highlighting scheme to use.public RSyntaxDocument(TokenMakerFactory tmf, java.lang.String syntaxStyle)
tmf
- The TokenMakerFactory
for this document. If
this is null
, a default factory is used.syntaxStyle
- The syntax highlighting scheme to use.protected void fireInsertUpdate(javax.swing.event.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
在类中 javax.swing.text.AbstractDocument
e
- The change.protected void fireRemoveUpdate(javax.swing.event.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
在类中 javax.swing.text.AbstractDocument
chng
- The change that occurred.PlainDocument.removeUpdate(javax.swing.text.AbstractDocument.DefaultDocumentEvent)
public int getClosestStandardTokenTypeForInternalType(int type)
"standard" token type
for a given
"internal" token type (e.g. one whose value is < 0
).type
- The token type.type
is returned.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 java.lang.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 java.util.Iterator<Token> iterator()
The remove()
method of the returned iterator will throw
an UnsupportedOperationException
.
iterator
在接口中 java.lang.Iterable<Token>
public void setSyntaxStyle(java.lang.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.setSyntaxStyle(TokenMaker)
public void setSyntaxStyle(TokenMaker tokenMaker)
RSyntaxTextArea
.tokenMaker
- The new token maker to use.setSyntaxStyle(String)
public void setTokenMakerFactory(TokenMakerFactory tmf)
tmf
- The TokenMakerFactory
for this document. If
this is null
, a default factory is used.protected void updateSyntaxHighlightingInformation()
This is called internally whenever the syntax style changes.