weka.gui.scripting
Class SyntaxDocument

java.lang.Object
  extended by javax.swing.text.AbstractDocument
      extended by javax.swing.text.DefaultStyledDocument
          extended by weka.gui.scripting.SyntaxDocument
All Implemented Interfaces:
java.io.Serializable, javax.swing.text.Document, javax.swing.text.StyledDocument

public class SyntaxDocument
extends javax.swing.text.DefaultStyledDocument

Highlights syntax in a DefaultStyledDocument. Allows any number of keywords to be formatted in any number of user-defined styles.

Author:
camickr (primary author; java sun forums user), David Underhill, FracPete (fracpete at waikato dot ac dot nz) - use of a properties file to setup syntax highlighting instead of hard-coded
See Also:
Serialized Form

Nested Class Summary
static class SyntaxDocument.ATTR_TYPE
          The attribute type.
 
Nested classes/interfaces inherited from class javax.swing.text.DefaultStyledDocument
javax.swing.text.DefaultStyledDocument.AttributeUndoableEdit, javax.swing.text.DefaultStyledDocument.ElementBuffer, javax.swing.text.DefaultStyledDocument.ElementSpec
 
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 javax.swing.text.SimpleAttributeSet DEFAULT_COMMENT
          the attribute set for comments.
static java.lang.String DEFAULT_FONT_FAMILY
          the font family.
static int DEFAULT_FONT_SIZE
          the font size.
static javax.swing.text.SimpleAttributeSet DEFAULT_KEYWORD
          the attribute set for keywords.
static javax.swing.text.SimpleAttributeSet DEFAULT_NORMAL
          the attribute set for normal code.
static javax.swing.text.SimpleAttributeSet DEFAULT_STRING
          the attribute set for strings.
static int MAX_TABS
          the maximum number of tabs.
 
Fields inherited from class javax.swing.text.DefaultStyledDocument
BUFFER_SIZE_DEFAULT
 
Fields inherited from class javax.swing.text.AbstractDocument
BidiElementName, ContentElementName, ElementNameAttribute, ParagraphElementName, SectionElementName
 
Fields inherited from interface javax.swing.text.Document
StreamDescriptionProperty, TitleProperty
 
Constructor Summary
SyntaxDocument(java.util.Properties props)
          Initializes the document.
 
Method Summary
 void addKeyword(java.lang.String keyword, javax.swing.text.MutableAttributeSet attr)
          Associates a keyword with a particular formatting style.
 void addKeywords(java.lang.String[] keywords, javax.swing.text.MutableAttributeSet attr)
          Associates the keywords with a particular formatting style.
 java.lang.String escapeQuote(java.lang.String quoteDelimiter)
          Escapes the quote delimiter.
 boolean getAddMatchingEndBlocks()
          Returns whether matching block ends are inserted or not.
 java.awt.Color getBackgroundColor()
          Returns the background color.
 java.lang.String getBlockEnd()
          Returns the end of a block.
 java.lang.String getBlockStart()
          Returns the start of a block.
 boolean getCaseSensitive()
          Returns whether blanks are used instead of tabs.
 java.lang.String getDelimiters()
          Returns the delimiter characters to use.
 java.lang.String getFontName()
          gets the current font family.
 int getFontSize()
          gets the current font size.
 int getIndentationSize()
          Returns the number of blanks used for indentation.
 javax.swing.text.MutableAttributeSet getKeywordFormatting(java.lang.String keyword)
          Gets the formatting for a keyword.
 boolean getMultiLineComment()
          Returns whether multi-line comments are enabled.
 java.lang.String getMultiLineCommentEnd()
          Returns the end of a multi-line comment.
 java.lang.String getMultiLineCommentStart()
          Returns the string that is the start of a multi-line comment.
 java.lang.String getQuoteDelimiters()
          Returns the quote delimiter characters to use.
 java.lang.String getQuoteEscape()
          Returns the character for escaping a quote delimiter.
 java.lang.String getSingleLineCommentStart()
          Retrusn the single line comment start string.
 boolean getUseBlanks()
          Returns whether blanks are used instead of tabs.
 void insertString(int offset, java.lang.String str, javax.swing.text.AttributeSet a)
          Override to apply syntax highlighting after the document has been updated.
 boolean isDelimiter(java.lang.String character)
          Checks whether the character is a delimiter.
 boolean isQuoteDelimiter(java.lang.String character)
          Checks whether the character is quote delimiter.
 void processChangedLines(int offset, int length)
          Determine how many lines have been changed, then apply highlighting to each line.
 void remove(int offset, int length)
          Applies syntax highlighting after the document has been updated.
 void removeKeyword(java.lang.String keyword)
          Removes an association between a keyword with a particular formatting style.
 void setAddMatchingEndBlocks(boolean value)
          Sets whether matching block ends are inserted or not.
static void setAttributeColor(javax.swing.text.MutableAttributeSet attr, java.awt.Color c)
          Sets the foreground (font) color of the specified attribute.
 void setAttributeColor(SyntaxDocument.ATTR_TYPE attr, java.awt.Color c)
          Sets the foreground (font) color of the specified attribute.
static void setAttributeFont(javax.swing.text.MutableAttributeSet attr, java.awt.Font f)
          Sets the font of the specified attribute.
 void setAttributeFont(SyntaxDocument.ATTR_TYPE attr, int style)
          Sets the font of the specified attribute.
 void setBackgroundColor(java.awt.Color value)
          Sets the background color.
 void setBlockEnd(java.lang.String value)
          Sets the string that is the end of a block.
 void setBlockStart(java.lang.String value)
          Sets the string that is the start of a block.
 void setCaseSensitive(boolean value)
          Sets whether the keywords are case-sensitive or not.
 void setDelimiters(java.lang.String value)
          Sets the delimiter characters to use.
 void setFontName(java.lang.String fontName)
          sets the current font family (affects all built-in styles).
 void setFontSize(int fontSize)
          sets the current font size (affects all built-in styles).
 void setIndentationSize(int value)
          Sets the number of blanks to use for indentation.
 void setMultiLineComment(boolean value)
          Sets whether to enable multi-line comments.
 void setMultiLineCommentEnd(java.lang.String value)
          Sets the string that is the end of a multi-line comment.
 void setMultiLineCommentStart(java.lang.String value)
          Sets the string that is the start of a multi-line comment.
 void setQuoteDelimiters(java.lang.String value)
          Sets the quote delimiter characters to use.
 void setQuoteEscape(java.lang.String value)
          Sets the character to use for escaping a quote character.
 void setSingleLineCommentStart(java.lang.String value)
          Sets the string that is the start of a single-line comment.
 void setTabs(int charactersPerTab)
          sets the number of characters per tab.
 void setUseBlanks(boolean value)
          Sets whether to use blanks instead of tabs.
 
Methods inherited from class javax.swing.text.DefaultStyledDocument
addDocumentListener, addStyle, getBackground, getCharacterElement, getDefaultRootElement, getFont, getForeground, getLogicalStyle, getParagraphElement, getStyle, getStyleNames, removeDocumentListener, removeStyle, setCharacterAttributes, setLogicalStyle, setParagraphAttributes
 
Methods inherited from class javax.swing.text.AbstractDocument
addUndoableEditListener, createPosition, dump, getAsynchronousLoadPriority, getBidiRootElement, getDocumentFilter, getDocumentListeners, getDocumentProperties, getEndPosition, getLength, getListeners, getProperty, getRootElements, getStartPosition, getText, getText, getUndoableEditListeners, putProperty, readLock, readUnlock, removeUndoableEditListener, render, replace, setAsynchronousLoadPriority, setDocumentFilter, setDocumentProperties
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.swing.text.Document
addUndoableEditListener, createPosition, getEndPosition, getLength, getProperty, getRootElements, getStartPosition, getText, getText, putProperty, removeUndoableEditListener, render
 

Field Detail

MAX_TABS

public static final int MAX_TABS
the maximum number of tabs.

See Also:
Constant Field Values

DEFAULT_FONT_FAMILY

public static final java.lang.String DEFAULT_FONT_FAMILY
the font family.

See Also:
Constant Field Values

DEFAULT_FONT_SIZE

public static final int DEFAULT_FONT_SIZE
the font size.

See Also:
Constant Field Values

DEFAULT_NORMAL

public static final javax.swing.text.SimpleAttributeSet DEFAULT_NORMAL
the attribute set for normal code.


DEFAULT_COMMENT

public static final javax.swing.text.SimpleAttributeSet DEFAULT_COMMENT
the attribute set for comments.


DEFAULT_STRING

public static final javax.swing.text.SimpleAttributeSet DEFAULT_STRING
the attribute set for strings.


DEFAULT_KEYWORD

public static final javax.swing.text.SimpleAttributeSet DEFAULT_KEYWORD
the attribute set for keywords.

Constructor Detail

SyntaxDocument

public SyntaxDocument(java.util.Properties props)
Initializes the document.

Parameters:
props - the properties to obtain the setup from
Method Detail

setAttributeFont

public void setAttributeFont(SyntaxDocument.ATTR_TYPE attr,
                             int style)
Sets the font of the specified attribute.

Parameters:
attr - the attribute to apply this font to (normal, comment, string)
style - font style (Font.BOLD, Font.ITALIC, Font.PLAIN)

setAttributeFont

public static void setAttributeFont(javax.swing.text.MutableAttributeSet attr,
                                    java.awt.Font f)
Sets the font of the specified attribute.

Parameters:
attr - attribute to apply this font to
f - the font to use

setAttributeColor

public void setAttributeColor(SyntaxDocument.ATTR_TYPE attr,
                              java.awt.Color c)
Sets the foreground (font) color of the specified attribute.

Parameters:
attr - the attribute to apply this font to (normal, comment, string)
c - the color to use

setAttributeColor

public static void setAttributeColor(javax.swing.text.MutableAttributeSet attr,
                                     java.awt.Color c)
Sets the foreground (font) color of the specified attribute.

Parameters:
attr - attribute to apply this color to
c - the color to use

addKeywords

public void addKeywords(java.lang.String[] keywords,
                        javax.swing.text.MutableAttributeSet attr)
Associates the keywords with a particular formatting style.

Parameters:
keywords - the tokens or words to format
attr - how to format the keywords

addKeyword

public void addKeyword(java.lang.String keyword,
                       javax.swing.text.MutableAttributeSet attr)
Associates a keyword with a particular formatting style.

Parameters:
keyword - the token or word to format
attr - how to format keyword

getKeywordFormatting

public javax.swing.text.MutableAttributeSet getKeywordFormatting(java.lang.String keyword)
Gets the formatting for a keyword.

Parameters:
keyword - the token or word to stop formatting
Returns:
how keyword is formatted, or null if no formatting is applied to it

removeKeyword

public void removeKeyword(java.lang.String keyword)
Removes an association between a keyword with a particular formatting style.

Parameters:
keyword - the token or word to stop formatting

setTabs

public void setTabs(int charactersPerTab)
sets the number of characters per tab.

Parameters:
charactersPerTab - the characters per tab

insertString

public void insertString(int offset,
                         java.lang.String str,
                         javax.swing.text.AttributeSet a)
                  throws javax.swing.text.BadLocationException
Override to apply syntax highlighting after the document has been updated.

Specified by:
insertString in interface javax.swing.text.Document
Overrides:
insertString in class javax.swing.text.AbstractDocument
Parameters:
offset - the offset
str - the string to insert
a - the attribute set, can be null
Throws:
javax.swing.text.BadLocationException - if offset is invalid

remove

public void remove(int offset,
                   int length)
            throws javax.swing.text.BadLocationException
Applies syntax highlighting after the document has been updated.

Specified by:
remove in interface javax.swing.text.Document
Overrides:
remove in class javax.swing.text.AbstractDocument
Parameters:
offset - the offset of the deletion
length - the length of the deletion
Throws:
javax.swing.text.BadLocationException - if offsets are invalid

processChangedLines

public void processChangedLines(int offset,
                                int length)
                         throws javax.swing.text.BadLocationException
Determine how many lines have been changed, then apply highlighting to each line.

Parameters:
offset - the offset of the changed lines
length - the length of the change
Throws:
javax.swing.text.BadLocationException - if offset is invalid

isDelimiter

public boolean isDelimiter(java.lang.String character)
Checks whether the character is a delimiter.

Parameters:
character - the character to check
Returns:
true if a delimiter

isQuoteDelimiter

public boolean isQuoteDelimiter(java.lang.String character)
Checks whether the character is quote delimiter.

Parameters:
character - the character to check
Returns:
true if a quote delimiter

escapeQuote

public java.lang.String escapeQuote(java.lang.String quoteDelimiter)
Escapes the quote delimiter.

Parameters:
quoteDelimiter - the string to escape
Returns:
the escaped string

getFontSize

public int getFontSize()
gets the current font size.

Returns:
the font size

setFontSize

public void setFontSize(int fontSize)
sets the current font size (affects all built-in styles).

Parameters:
fontSize - the size

getFontName

public java.lang.String getFontName()
gets the current font family.

Returns:
the font name

setFontName

public void setFontName(java.lang.String fontName)
sets the current font family (affects all built-in styles).

Parameters:
fontName - the font name

setIndentationSize

public void setIndentationSize(int value)
Sets the number of blanks to use for indentation.

Parameters:
value - the number of blanks

getIndentationSize

public int getIndentationSize()
Returns the number of blanks used for indentation.

Returns:
the number of blanks

setDelimiters

public void setDelimiters(java.lang.String value)
Sets the delimiter characters to use.

Parameters:
value - the characters

getDelimiters

public java.lang.String getDelimiters()
Returns the delimiter characters to use.

Returns:
the characters

setQuoteDelimiters

public void setQuoteDelimiters(java.lang.String value)
Sets the quote delimiter characters to use.

Parameters:
value - the characters

getQuoteDelimiters

public java.lang.String getQuoteDelimiters()
Returns the quote delimiter characters to use.

Returns:
the characters

setQuoteEscape

public void setQuoteEscape(java.lang.String value)
Sets the character to use for escaping a quote character.

Parameters:
value - the character

getQuoteEscape

public java.lang.String getQuoteEscape()
Returns the character for escaping a quote delimiter.

Returns:
the character

setSingleLineCommentStart

public void setSingleLineCommentStart(java.lang.String value)
Sets the string that is the start of a single-line comment.

Parameters:
value - the string

getSingleLineCommentStart

public java.lang.String getSingleLineCommentStart()
Retrusn the single line comment start string.

Returns:
the start string

setMultiLineCommentStart

public void setMultiLineCommentStart(java.lang.String value)
Sets the string that is the start of a multi-line comment.

Parameters:
value - the string

getMultiLineCommentStart

public java.lang.String getMultiLineCommentStart()
Returns the string that is the start of a multi-line comment.

Returns:
the string

setMultiLineCommentEnd

public void setMultiLineCommentEnd(java.lang.String value)
Sets the string that is the end of a multi-line comment.

Parameters:
value - the string

getMultiLineCommentEnd

public java.lang.String getMultiLineCommentEnd()
Returns the end of a multi-line comment.

Returns:
the end string

setBlockStart

public void setBlockStart(java.lang.String value)
Sets the string that is the start of a block.

Parameters:
value - the string

getBlockStart

public java.lang.String getBlockStart()
Returns the start of a block.

Returns:
the end string

setBlockEnd

public void setBlockEnd(java.lang.String value)
Sets the string that is the end of a block.

Parameters:
value - the string

getBlockEnd

public java.lang.String getBlockEnd()
Returns the end of a block.

Returns:
the end string

setAddMatchingEndBlocks

public void setAddMatchingEndBlocks(boolean value)
Sets whether matching block ends are inserted or not.

Parameters:
value - if true then matching block ends are inserted

getAddMatchingEndBlocks

public boolean getAddMatchingEndBlocks()
Returns whether matching block ends are inserted or not.

Returns:
true if matching block ends are inserted

setUseBlanks

public void setUseBlanks(boolean value)
Sets whether to use blanks instead of tabs.

Parameters:
value - if true then blanks are used instead of tabs

getUseBlanks

public boolean getUseBlanks()
Returns whether blanks are used instead of tabs.

Returns:
true if blanks are used instead of tabs

setBackgroundColor

public void setBackgroundColor(java.awt.Color value)
Sets the background color.

Parameters:
value - the background color

getBackgroundColor

public java.awt.Color getBackgroundColor()
Returns the background color.

Returns:
the background color

setMultiLineComment

public void setMultiLineComment(boolean value)
Sets whether to enable multi-line comments.

Parameters:
value - if true then multi-line comments are enabled

getMultiLineComment

public boolean getMultiLineComment()
Returns whether multi-line comments are enabled.

Returns:
true if multi-line comments are enabled

setCaseSensitive

public void setCaseSensitive(boolean value)
Sets whether the keywords are case-sensitive or not.

Parameters:
value - if true then keywords are treated case-sensitive

getCaseSensitive

public boolean getCaseSensitive()
Returns whether blanks are used instead of tabs.

Returns:
true if keywords are case-sensitive