org.fife.ui.rsyntaxtextarea

## Class RSyntaxDocument

- java.lang.Object
- - javax.swing.text.AbstractDocument
  - - javax.swing.text.PlainDocument
    - - org.fife.ui.rtextarea.RDocument
      - - org.fife.ui.rsyntaxtextarea.RSyntaxDocument

All Implemented Interfaces:
  Serializable, Document, SyntaxConstants

    public class RSyntaxDocument
    extends RDocument
    implements SyntaxConstants

The document used by `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.

Version:
  1.0
Author:
  Robert Futrell
See Also:
  Serialized Form

### Nested Class Summary

### Nested classes/interfaces inherited from class javax.swing.text.AbstractDocument

`AbstractDocument.AbstractElement, AbstractDocument.AttributeContext, AbstractDocument.BranchElement, AbstractDocument.Content, AbstractDocument.DefaultDocumentEvent, AbstractDocument.ElementEdit, AbstractDocument.LeafElement`

### Field Summary

Fields
`protected DynamicIntArray` `lastTokensOnLines` Array of values representing the "last token type" on each line.

### 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 org.fife.ui.rsyntaxtextarea.SyntaxConstants

`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_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`

### Fields inherited from interface javax.swing.text.Document

`StreamDescriptionProperty, TitleProperty`

### Constructor Summary

Constructors
Constructor and Description
`RSyntaxDocument(String syntaxStyle)` Constructs a plain text document.
`RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle)` Constructs a plain text document.

### Method Summary

Methods
`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.
`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.
`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.
`protected void` `updateSyntaxHighlightingInformation()` Updates internal state information; e.g. the "last tokens on lines" data.

### Methods inherited from class org.fife.ui.rtextarea.RDocument

`charAt`

### 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, 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`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### lastTokensOnLines

    protected transient DynamicIntArray 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 Detail

#### RSyntaxDocument

    public RSyntaxDocument(String syntaxStyle)

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

    public RSyntaxDocument(TokenMakerFactory tmf,
                   String syntaxStyle)

Constructs a plain text document. A default root element is created, and the tab size set to 5.

Parameters:
  `tmf` - The `TokenMakerFactory` for this document. If this is `null`, a default factory is used.
  `syntaxStyle` - The syntax highlighting scheme to use.

### Method Detail

#### fireInsertUpdate

    protected void fireInsertUpdate(DocumentEvent e)

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 `insertUpdate` because `insertUpdate` is not called by the undo/redo actions, but this method is.

Overrides:
  `fireInsertUpdate` in class `AbstractDocument`
Parameters:
  `e` - The change.

#### fireRemoveUpdate

    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.

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.

Overrides:
  `fireRemoveUpdate` in class `AbstractDocument`
Parameters:
  `chng` - The change that occurred.
See Also:
  `PlainDocument.removeUpdate(javax.swing.text.AbstractDocument.DefaultDocumentEvent)`

#### getClosestStandardTokenTypeForInternalType

    public int getClosestStandardTokenTypeForInternalType(int type)

Returns the closest `"standard" token type` for 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 `type` is returned.

#### getCompleteMarkupCloseTags

    public boolean getCompleteMarkupCloseTags()

Returns whether closing markup tags should be automatically completed. This method only returns `true` if `getLanguageIsMarkup()` also returns `true`.

Returns:
  Whether markup closing tags should be automatically completed.
See Also:
  `getLanguageIsMarkup()`

#### getCurlyBracesDenoteCodeBlocks

    public boolean getCurlyBracesDenoteCodeBlocks()

Returns whether the current programming language uses curly braces ('`{`' and '`}`') to denote code blocks.

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

    public String[] getLineCommentStartAndEnd()

Returns the text to place at the beginning and end of a line to "comment" it in the current programming language.

Returns:
  The start and end strings to add to a line to "comment" it out. A `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.

#### 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.

#### getTokenListForLine

    public final Token getTokenListForLine(int line)

Returns a token list for the specified segment of text representing the specified line number. This method is basically a wrapper for `tokenMaker.getTokenList` that takes into account the last token on the previous line to assure token accuracy.

Parameters:
  `line` - The line number of `text` in the document, >= 0.
Returns:
  A token list representing the specified line.

#### setSyntaxStyle

    public void setSyntaxStyle(String styleKey)

Sets the syntax style being used for syntax highlighting in this document. What styles are supported by a document is determined by its `TokenMakerFactory`. By default, all `RSyntaxDocument`s support all languages built into `RSyntaxTextArea`.

Parameters:
  `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.
See Also:
  `setSyntaxStyle(TokenMaker)`

#### setSyntaxStyle

    public void setSyntaxStyle(TokenMaker tokenMaker)

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 by `RSyntaxTextArea`.

Parameters:
  `tokenMaker` - The new token maker to use.
See Also:
  `setSyntaxStyle(String)`

#### setTokenMakerFactory

    public void setTokenMakerFactory(TokenMakerFactory tmf)

Sets the token maker factory used by this document.

Parameters:
  `tmf` - The `TokenMakerFactory` for this document. If this is `null`, a default factory is used.

#### updateSyntaxHighlightingInformation

    protected void updateSyntaxHighlightingInformation()

Updates internal state information; e.g. the "last tokens on lines" data. After this, a changed update is fired to let listeners know that the document's structure has changed.

This is called internally whenever the syntax style changes.