Class 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

      Nested Classes 
      Modifier and Type Class Description
      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

      Fields 
      Modifier and Type Field Description
      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

      Constructors 
      Constructor Description
      SyntaxDocument​(java.util.Properties props)
      Initializes the document.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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, removeElement, 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

      • 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