Class RSyntaxDocument
- All Implemented Interfaces:
Serializable, Iterable<Token>, Document, 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(String). Other than that, this document can be
treated like any other save one caveat: all DocumentEvents 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.
- Version:
- 1.0
- Author:
- Robert Futrell
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class AbstractDocument
AbstractDocument.AbstractElement, AbstractDocument.AttributeContext, AbstractDocument.BranchElement, AbstractDocument.Content, AbstractDocument.DefaultDocumentEvent, AbstractDocument.ElementEdit, AbstractDocument.LeafElement -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected DynamicIntArrayArray of values representing the "last token type" on each line.Fields inherited from class PlainDocument
lineLimitAttribute, tabSizeAttributeFields inherited from class AbstractDocument
BAD_LOCATION, BidiElementName, ContentElementName, ElementNameAttribute, listenerList, ParagraphElementName, SectionElementNameFields inherited from interface Document
StreamDescriptionProperty, TitlePropertyFields inherited from interface SyntaxConstants
SYNTAX_STYLE_ACTIONSCRIPT, SYNTAX_STYLE_ASSEMBLER_6502, SYNTAX_STYLE_ASSEMBLER_X86, SYNTAX_STYLE_BBCODE, SYNTAX_STYLE_C, SYNTAX_STYLE_CLOJURE, SYNTAX_STYLE_CPLUSPLUS, SYNTAX_STYLE_CSHARP, SYNTAX_STYLE_CSS, SYNTAX_STYLE_CSV, SYNTAX_STYLE_D, SYNTAX_STYLE_DART, SYNTAX_STYLE_DELPHI, SYNTAX_STYLE_DOCKERFILE, SYNTAX_STYLE_DTD, SYNTAX_STYLE_FORTRAN, SYNTAX_STYLE_GO, SYNTAX_STYLE_GROOVY, SYNTAX_STYLE_HANDLEBARS, SYNTAX_STYLE_HOSTS, SYNTAX_STYLE_HTACCESS, SYNTAX_STYLE_HTML, SYNTAX_STYLE_INI, SYNTAX_STYLE_JAVA, SYNTAX_STYLE_JAVASCRIPT, SYNTAX_STYLE_JSON, SYNTAX_STYLE_JSON_WITH_COMMENTS, SYNTAX_STYLE_JSP, SYNTAX_STYLE_KOTLIN, SYNTAX_STYLE_LATEX, SYNTAX_STYLE_LESS, SYNTAX_STYLE_LISP, SYNTAX_STYLE_LUA, SYNTAX_STYLE_MAKEFILE, SYNTAX_STYLE_MARKDOWN, SYNTAX_STYLE_MXML, SYNTAX_STYLE_NONE, SYNTAX_STYLE_NSIS, SYNTAX_STYLE_PERL, SYNTAX_STYLE_PHP, SYNTAX_STYLE_PROPERTIES_FILE, SYNTAX_STYLE_PROTO, SYNTAX_STYLE_PYTHON, SYNTAX_STYLE_RUBY, SYNTAX_STYLE_RUST, SYNTAX_STYLE_SAS, SYNTAX_STYLE_SCALA, SYNTAX_STYLE_SQL, SYNTAX_STYLE_TCL, SYNTAX_STYLE_TYPESCRIPT, SYNTAX_STYLE_UNIX_SHELL, SYNTAX_STYLE_VISUAL_BASIC, SYNTAX_STYLE_WINDOWS_BATCH, SYNTAX_STYLE_XML, SYNTAX_STYLE_YAML -
Constructor Summary
ConstructorsConstructorDescriptionRSyntaxDocument(String syntaxStyle) Constructs a plain text document.RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) Constructs a plain text document. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidAlerts all listeners to this document of an insertion.protected voidThis method is called AFTER the content has been inserted into the document and the element structure has been updated.intReturns the closest"standard" token typefor a given "internal" token type (e.g. one whose value is< 0).booleanReturns whether closing markup tags should be automatically completed.booleangetCurlyBracesDenoteCodeBlocks(int languageIndex) Returns whether the current programming language uses curly braces ('{' and '}') to denote code blocks.booleanReturns whether the current language is a markup language, such as HTML, XML or PHP.intgetLastTokenTypeOnLine(int line) Returns the token type of the last token on the given line.String[]getLineCommentStartAndEnd(int languageIndex) Returns the text to place at the beginning and end of a line to "comment" it in this programming language.booleangetShouldIndentNextLine(int line) This method returns whether auto indentation should be done if Enter is pressed at the end of the specified line.Returns the syntax style being used.getTokenListForLine(int line) Returns a token list for the specified segment of text representing the specified line number.booleanisIdentifierChar(int languageIndex, char ch) Returns whether a character could be part of an "identifier" token in a specific language.iterator()Returns an iterator over the paintable tokens in this document.voidsetSyntaxStyle(String styleKey) Sets the syntax style being used for syntax highlighting in this document.voidsetSyntaxStyle(TokenMaker tokenMaker) Sets the syntax style being used for syntax highlighting in this document.voidSets the token maker factory used by this document.Methods inherited from class PlainDocument
createDefaultRoot, getDefaultRootElement, getParagraphElement, insertString, insertUpdate, removeUpdateMethods inherited from class AbstractDocument
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, writeUnlockMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Iterable
forEach, spliterator
-
Field Details
-
lastTokensOnLines
Array of values representing the "last token type" on each line. This is used in cases such as multi-line comments: if the previous line ended with an (unclosed) multi-line comment, we can use this knowledge and start the current line's syntax highlighting in multi-line comment state.
-
-
Constructor Details
-
RSyntaxDocument
Constructs a plain text document. A default root element is created, and the tab size set to 5.- Parameters:
syntaxStyle- The syntax highlighting scheme to use.
-
RSyntaxDocument
Constructs a plain text document. A default root element is created, and the tab size set to 5.- Parameters:
tmf- TheTokenMakerFactoryfor this document. If this isnull, a default factory is used.syntaxStyle- The syntax highlighting scheme to use.
-
-
Method Details
-
fireInsertUpdate
Alerts all listeners to this document of an insertion. This is overridden so we can update our syntax highlighting stuff.The syntax highlighting stuff has to be here instead of in
insertUpdatebecauseinsertUpdateis not called by the undo/redo actions, but this method is.- Overrides:
fireInsertUpdatein classAbstractDocument- Parameters:
e- The change.
-
fireRemoveUpdate
This method is called AFTER the content has been inserted into the document and the element structure has been updated.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, whereaspostRemoveUpdateis 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.
- Overrides:
fireRemoveUpdatein classAbstractDocument- Parameters:
chng- The change that occurred.- See Also:
-
getClosestStandardTokenTypeForInternalType
public int getClosestStandardTokenTypeForInternalType(int type) Returns the closest"standard" token typefor a given "internal" token type (e.g. one whose value is< 0).- Parameters:
type- The token type.- Returns:
- The closest "standard" token type. If a mapping is not defined
for this language, then
typeis returned.
-
getCompleteMarkupCloseTags
public boolean getCompleteMarkupCloseTags()Returns whether closing markup tags should be automatically completed. This method only returnstrueifgetLanguageIsMarkup()also returnstrue.- Returns:
- Whether markup closing tags should be automatically completed.
- See Also:
-
getCurlyBracesDenoteCodeBlocks
public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) Returns whether the current programming language uses curly braces ('{' and '}') to denote code blocks.- Parameters:
languageIndex- The language index at the offset in question. Since someTokenMakers effectively have nested languages (such as JavaScript in HTML), this parameter tells theTokenMakerwhat sub-language to look at.- Returns:
- Whether curly braces denote code blocks.
-
getLanguageIsMarkup
public boolean getLanguageIsMarkup()Returns whether the current language is a markup language, such as HTML, XML or PHP.- Returns:
- Whether the current language is a markup language.
-
getLastTokenTypeOnLine
public int getLastTokenTypeOnLine(int line) Returns the token type of the last token on the given line.- Parameters:
line- The line to inspect.- Returns:
- The token type of the last token on the specified line. If the line is invalid, an exception is thrown.
-
getLineCommentStartAndEnd
Returns the text to place at the beginning and end of a line to "comment" it in this programming language.- Parameters:
languageIndex- The language index to get comment information for.- Returns:
- The start and end strings to add to a line to "comment"
it out. A
nullvalue for either means there is no string to add for that part. A value ofnullfor the array means this language does not support commenting/uncommenting lines.
-
getShouldIndentNextLine
public boolean getShouldIndentNextLine(int line) This method returns whether auto indentation should be done if Enter is pressed at the end of the specified line.- Parameters:
line- The line to check.- Returns:
- Whether an extra indentation should be done.
-
getSyntaxStyle
Returns the syntax style being used.- Returns:
- The syntax style.
- See Also:
-
getTokenListForLine
Returns a token list for the specified segment of text representing the specified line number. This method is basically a wrapper fortokenMaker.getTokenListthat takes into account the last token on the previous line to assure token accuracy.- Parameters:
line- The line number oftextin the document, >= 0.- Returns:
- A token list representing the specified line.
-
isIdentifierChar
public boolean isIdentifierChar(int languageIndex, char ch) Returns whether a character could be part of an "identifier" token in a specific language. This is used to identify such things as the bounds of the "word" to select on double-clicking.- Parameters:
languageIndex- The language index the character was found in.ch- The character.- Returns:
- Whether the character could be part of an "identifier" token.
-
iterator
Returns an iterator over the paintable tokens in this document. Results are undefined if this document is modified while the iterator is being iterated through, so this should only be used on the EDT.The
remove()method of the returned iterator will throw anUnsupportedOperationException. -
setSyntaxStyle
Sets the syntax style being used for syntax highlighting in this document. What styles are supported by a document is determined by itsTokenMakerFactory. By default, allRSyntaxDocuments support all languages built intoRSyntaxTextArea.- Parameters:
styleKey- The new style to use, such asSyntaxConstants.SYNTAX_STYLE_JAVA. If this style is not known or supported by this document, thenSyntaxConstants.SYNTAX_STYLE_NONEis used.- See Also:
-
setSyntaxStyle
Sets the syntax style being used for syntax highlighting in this document. You should call this method if you've created a custom token maker for a language not normally supported byRSyntaxTextArea.- Parameters:
tokenMaker- The new token maker to use.- See Also:
-
setTokenMakerFactory
Sets the token maker factory used by this document.- Parameters:
tmf- TheTokenMakerFactoryfor this document. If this isnull, a default factory is used.
-