RTextArea
Date: 2017-02-11

org.fife.ui.rtextarea

## Class RTextArea

- java.lang.Object
- - java.awt.Component
  - - java.awt.Container
    - - javax.swing.JComponent
      - - javax.swing.text.JTextComponent
        - - javax.swing.JTextArea
          - - org.fife.ui.rtextarea.RTextAreaBase
            - - org.fife.ui.rtextarea.RTextArea

- All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.awt.print.Printable, java.io.Serializable, javax.accessibility.Accessible, javax.swing.Scrollable
  Direct Known Subclasses:
    RSyntaxTextArea

      public class RTextArea
      extends RTextAreaBase
      implements java.awt.print.Printable

  An extension of `JTextArea` that adds the following features:
  - Insert/Overwrite modes (can be toggled via the Insert key)
  - A right-click popup menu with standard editing options
  - Macro support
  - "Mark all" functionality.
  - A way to change the background to an image (gif/png/jpg)
  - Highlight the current line (can be toggled)
  - An easy way to print its text (implements Printable)
  - Hard/soft (emulated with spaces) tabs
  - Fixes a bug with setTabSize
  - Other handy new methods
  NOTE: If the background for an `RTextArea` is set to a color, its opaque property is set to `true` for performance reasons. If the background is set to an image, then the opaque property is set to `false`. This slows things down a little, but if it didn't happen then we would see garbage on-screen when the user scrolled through a document using the arrow keys (not the page-up/down keys though). You should never have to set the opaque property yourself; it is always done for you.
  See Also:
    Serialized Form

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected class` | `RTextArea.RTextAreaMutableCaretEvent` Modified from `MutableCaretEvent` in `JTextComponent` so that mouse events get fired when the user is selecting text with the mouse as well.

    - ### Nested classes/interfaces inherited from class org.fife.ui.rtextarea.RTextAreaBase

      `RTextAreaBase.RTAMouseListener`

    - ### Nested classes/interfaces inherited from class javax.swing.JTextArea

      `javax.swing.JTextArea.AccessibleJTextArea`

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

      `javax.swing.text.JTextComponent.AccessibleJTextComponent, javax.swing.text.JTextComponent.DropLocation, javax.swing.text.JTextComponent.KeyBinding`

    - ### Nested classes/interfaces inherited from class javax.swing.JComponent

      `javax.swing.JComponent.AccessibleJComponent`

    - ### Nested classes/interfaces inherited from class java.awt.Container

      `java.awt.Container.AccessibleAWTContainer`

    - ### Nested classes/interfaces inherited from class java.awt.Component

      `java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `COPY_ACTION`
    `static int` | `CUT_ACTION`
    `static int` | `DELETE_ACTION`
    `static int` | `INSERT_MODE` Constant representing insert mode.
    `static java.lang.String` | `MARK_ALL_COLOR_PROPERTY` The property fired when the "mark all" color changes.
    `static java.lang.String` | `MARK_ALL_OCCURRENCES_CHANGED_PROPERTY` The property fired when what ranges are labeled "mark all" changes.
    `static int` | `OVERWRITE_MODE` Constant representing overwrite mode.
    `static int` | `PASTE_ACTION`
    `static int` | `REDO_ACTION`
    `static int` | `SELECT_ALL_ACTION`
    `static int` | `UNDO_ACTION`

    - ### Fields inherited from class org.fife.ui.rtextarea.RTextAreaBase

      `BACKGROUND_IMAGE_PROPERTY, CURRENT_LINE_HIGHLIGHT_COLOR_PROPERTY, CURRENT_LINE_HIGHLIGHT_FADE_PROPERTY, HIGHLIGHT_CURRENT_LINE_PROPERTY, ROUNDED_SELECTION_PROPERTY`

    - ### Fields inherited from class javax.swing.text.JTextComponent

      `DEFAULT_KEYMAP, FOCUS_ACCELERATOR_KEY`

    - ### Fields inherited from class javax.swing.JComponent

      `accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW`

    - ### Fields inherited from class java.awt.Component

      `BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

    - ### Fields inherited from interface java.awt.print.Printable

      `NO_SUCH_PAGE, PAGE_EXISTS`

    - ### Fields inherited from interface java.awt.image.ImageObserver

      `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RTextArea()` Constructor.
    `RTextArea(javax.swing.text.AbstractDocument doc)` Constructor.
    `RTextArea(javax.swing.text.AbstractDocument doc, java.lang.String text, int rows, int cols)` Constructor.
    `RTextArea(int textMode)` Creates a new `RTextArea`.
    `RTextArea(int rows, int cols)` Constructor.
    `RTextArea(java.lang.String text)` Constructor.
    `RTextArea(java.lang.String text, int rows, int cols)` Constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.lang.Object` | `addLineHighlight(int line, java.awt.Color color)` Adds a line highlight.
    `void` | `beginAtomicEdit()` Begins an "atomic edit." All text editing operations between this call and the next call to `endAtomicEdit()` will be treated as a single operation by the undo manager.
    `static void` | `beginRecordingMacro()` Begins recording a macro.
    `boolean` | `canRedo()` Tells whether a redo is possible
    `boolean` | `canUndo()` Tells whether an undo is possible
    `protected void` | `configurePopupMenu(javax.swing.JPopupMenu popupMenu)` Configures the popup menu for this text area.
    `protected javax.swing.text.Document` | `createDefaultModel()` Creates the default implementation of the model to be used at construction if one isn't explicitly given.
    `protected RTextAreaBase.RTAMouseListener` | `createMouseListener()` Returns the caret event/mouse listener for `RTextArea`s.
    `protected javax.swing.JPopupMenu` | `createPopupMenu()` Creates the right-click popup menu.
    `protected javax.swing.JMenuItem` | `createPopupMenuItem(javax.swing.Action a)` Creates and configures a menu item for used in the popup menu.
    `protected RTextAreaUI` | `createRTextAreaUI()` Returns the a real UI to install on this text area.
    `protected RUndoManager` | `createUndoManager()` Creates an undo manager for use in this text area.
    `void` | `discardAllEdits()` Removes all undoable edits from this document's undo manager.
    `void` | `endAtomicEdit()` Completes an "atomic" edit.
    `static void` | `endRecordingMacro()` Ends recording a macro.
    `protected void` | `fireCaretUpdate(javax.swing.event.CaretEvent e)` Notifies all listeners that a caret change has occurred.
    `static RecordableTextAction` | `getAction(int action)` Provides a way to gain access to the editor actions on the right-click popup menu.
    `static Macro` | `getCurrentMacro()` Returns the macro currently stored in this `RTextArea`.
    `static java.awt.Color` | `getDefaultMarkAllHighlightColor()` Returns the default color used for "mark all."
    `static IconGroup` | `getIconGroup()` Returns the icon group being used for the actions of this text area.
    `java.awt.Color` | `getMarkAllHighlightColor()` Returns the color used in "mark all."
    `int` | `getMaxAscent()` Returns the maximum ascent of all fonts used in this text area.
    `javax.swing.JPopupMenu` | `getPopupMenu()` Returns the popup menu for this component, lazily creating it if necessary.
    `static java.lang.String` | `getSelectedOccurrenceText()` Returns the text last selected and used in a Ctrl+K operation.
    `int` | `getTextMode()` Returns the text mode this editor pane is currently in.
    `ToolTipSupplier` | `getToolTipSupplier()` Returns the tool tip supplier.
    `java.lang.String` | `getToolTipText(java.awt.event.MouseEvent e)` Returns the tooltip to display for a mouse event at the given location.
    `RUndoManager` | `getUndoManager()`
    `protected void` | `handleReplaceSelection(java.lang.String content)` Does the actual dirty-work of replacing the selected text in this text area (i.e., in its document).
    `protected void` | `init()` Initializes this text area.
    `static boolean` | `isRecordingMacro()` Returns whether or not a macro is being recorded.
    `static void` | `loadMacro(Macro macro)` Loads a macro to be used by all `RTextArea`s in the current application.
    `void` | `paste()`
    `void` | `playbackLastMacro()` "Plays back" the last recorded macro in this text area.
    `int` | `print(java.awt.Graphics g, java.awt.print.PageFormat pageFormat, int pageIndex)` Method called when it's time to print this badboy (the old-school, AWT way).
    `void` | `read(java.io.Reader in, java.lang.Object desc)` We override this method because the super version gives us an entirely new `Document`, thus requiring us to re-attach our Undo manager.
    `void` | `redoLastAction()` Attempt to redo the last action.
    `void` | `removeAllLineHighlights()` Removes all line highlights.
    `void` | `removeLineHighlight(java.lang.Object tag)` Removes a line highlight.
    `void` | `replaceRange(java.lang.String str, int start, int end)` Replaces text from the indicated start to end position with the new text specified.
    `void` | `replaceSelection(java.lang.String text)` This method overrides `JTextComponent`'s `replaceSelection`, so that if `textMode` is `OVERWRITE_MODE`, it actually overwrites.
    `static void` | `setActionProperties(int action, java.lang.String name, char mnemonic, javax.swing.KeyStroke accelerator)` Sets the properties of one of the actions this text area owns.
    `static void` | `setActionProperties(int action, java.lang.String name, java.lang.Integer mnemonic, javax.swing.KeyStroke accelerator)` Sets the properties of one of the actions this text area owns.
    `void` | `setCaret(javax.swing.text.Caret caret)` Sets the caret to use in this text area.
    `void` | `setCaretStyle(int mode, CaretStyle style)` Sets the style of caret used when in insert or overwrite mode.
    `void` | `setDocument(javax.swing.text.Document document)` Sets the document used by this text area.
    `static void` | `setIconGroup(IconGroup group)` Sets the path in which to find images to associate with the editor's actions.
    `void` | `setMarkAllHighlightColor(java.awt.Color color)` Sets the color used for "mark all." This fires a property change of type `MARK_ALL_COLOR_PROPERTY`.
    `void` | `setPopupMenu(javax.swing.JPopupMenu popupMenu)` Sets the popup menu used by this text area.
    `void` | `setRoundedSelectionEdges(boolean rounded)` Sets whether the edges of selections are rounded in this text area.
    `static void` | `setSelectedOccurrenceText(java.lang.String text)` Sets the text last selected/Ctrl+K'd in an `RTextArea`.
    `void` | `setTextMode(int mode)` Sets the text mode for this editor pane.
    `void` | `setToolTipSupplier(ToolTipSupplier supplier)` Sets the tool tip supplier.
    `void` | `setUI(javax.swing.plaf.TextUI ui)` Sets the UI used by this text area.
    `void` | `setUndoManager(RUndoManager undoManager)`
    `void` | `undoLastAction()` Attempt to undo an "action" done in this text area.

    - ### Methods inherited from class org.fife.ui.rtextarea.RTextAreaBase

      `addNotify, convertSpacesToTabs, convertTabsToSpaces, forceCurrentLineHighlightRepaint, getBackground, getBackgroundImage, getBackgroundObject, getCaretLineNumber, getCaretOffsetFromLineStart, getCurrentCaretY, getCurrentLineHighlightColor, getDefaultCaretColor, getDefaultCurrentLineHighlightColor, getDefaultFont, getDefaultForeground, getDefaultMarginLineColor, getDefaultMarginLinePosition, getDefaultTabSize, getFadeCurrentLineHighlight, getHighlightCurrentLine, getLineEndOffsetOfCurrentLine, getLineHeight, getLineStartOffsetOfCurrentLine, getMarginLineColor, getMarginLinePixelLocation, getMarginLinePosition, getRoundedSelectionEdges, getTabsEmulated, isMarginLineEnabled, isOSX, paintComponent, possiblyUpdateCurrentLineHighlightLocation, processComponentEvent, setBackground, setBackgroundImage, setBackgroundObject, setCurrentLineHighlightColor, setFadeCurrentLineHighlight, setFont, setHighlightCurrentLine, setLineWrap, setMargin, setMarginLineColor, setMarginLineEnabled, setMarginLinePosition, setRTextAreaUI, setTabsEmulated, setTabSize, updateMarginLineX, yForLine, yForLineContaining`

    - ### Methods inherited from class javax.swing.JTextArea

      `append, getAccessibleContext, getColumns, getColumnWidth, getLineCount, getLineEndOffset, getLineOfOffset, getLineStartOffset, getLineWrap, getPreferredScrollableViewportSize, getPreferredSize, getRowHeight, getRows, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getTabSize, getUIClassID, getWrapStyleWord, insert, paramString, setColumns, setRows, setWrapStyleWord`

    - ### Methods inherited from class javax.swing.text.JTextComponent

      `addCaretListener, addInputMethodListener, addKeymap, copy, cut, getActions, getCaret, getCaretColor, getCaretListeners, getCaretPosition, getDisabledTextColor, getDocument, getDragEnabled, getDropLocation, getDropMode, getFocusAccelerator, getHighlighter, getInputMethodRequests, getKeymap, getKeymap, getMargin, getNavigationFilter, getPrintable, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getSelectedText, getSelectedTextColor, getSelectionColor, getSelectionEnd, getSelectionStart, getText, getText, getUI, isEditable, loadKeymap, modelToView, moveCaretPosition, print, print, print, processInputMethodEvent, removeCaretListener, removeKeymap, removeNotify, restoreComposedText, saveComposedText, select, selectAll, setCaretColor, setCaretPosition, setComponentOrientation, setDisabledTextColor, setDragEnabled, setDropMode, setEditable, setFocusAccelerator, setHighlighter, setKeymap, setNavigationFilter, setSelectedTextColor, setSelectionColor, setSelectionEnd, setSelectionStart, setText, updateUI, viewToModel, write`

    - ### Methods inherited from class javax.swing.JComponent

      `addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update`

    - ### Methods inherited from class java.awt.Container

      `add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree`

    - ### Methods inherited from class java.awt.Component

      `action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

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

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

- - ### Field Detail

    - #### INSERT_MODE

          public static final int INSERT_MODE

      Constant representing insert mode.
      See Also:
        `setCaretStyle(int, CaretStyle)`, Constant Field Values

    - #### OVERWRITE_MODE

          public static final int OVERWRITE_MODE

      Constant representing overwrite mode.
      See Also:
        `setCaretStyle(int, CaretStyle)`, Constant Field Values

    - #### MARK_ALL_COLOR_PROPERTY

          public static final java.lang.String MARK_ALL_COLOR_PROPERTY

      The property fired when the "mark all" color changes.
      See Also:
        Constant Field Values

    - #### MARK_ALL_OCCURRENCES_CHANGED_PROPERTY

          public static final java.lang.String MARK_ALL_OCCURRENCES_CHANGED_PROPERTY

      The property fired when what ranges are labeled "mark all" changes.
      See Also:
        Constant Field Values

    - #### COPY_ACTION

          public static final int COPY_ACTION

      See Also:
        Constant Field Values

    - #### CUT_ACTION

          public static final int CUT_ACTION

      See Also:
        Constant Field Values

    - #### DELETE_ACTION

          public static final int DELETE_ACTION

      See Also:
        Constant Field Values

    - #### PASTE_ACTION

          public static final int PASTE_ACTION

      See Also:
        Constant Field Values

    - #### REDO_ACTION

          public static final int REDO_ACTION

      See Also:
        Constant Field Values

    - #### SELECT_ALL_ACTION

          public static final int SELECT_ALL_ACTION

      See Also:
        Constant Field Values

    - #### UNDO_ACTION

          public static final int UNDO_ACTION

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### RTextArea

          public RTextArea()

      Constructor.

    - #### RTextArea

          public RTextArea(javax.swing.text.AbstractDocument doc)

      Constructor.
      Parameters:
        `doc` - The document for the editor.

    - #### RTextArea

          public RTextArea(java.lang.String text)

      Constructor.
      Parameters:
        `text` - The initial text to display.

    - #### RTextArea

          public RTextArea(int rows,
                   int cols)

      Constructor.
      Parameters:
        `rows` - The number of rows to display.
        `cols` - The number of columns to display.
      Throws:
        `java.lang.IllegalArgumentException` - If either `rows` or `cols` is negative.

    - #### RTextArea

          public RTextArea(java.lang.String text,
                   int rows,
                   int cols)

      Constructor.
      Parameters:
        `text` - The initial text to display.
        `rows` - The number of rows to display.
        `cols` - The number of columns to display.
      Throws:
        `java.lang.IllegalArgumentException` - If either `rows` or `cols` is negative.

    - #### RTextArea

          public RTextArea(javax.swing.text.AbstractDocument doc,
                   java.lang.String text,
                   int rows,
                   int cols)

      Constructor.
      Parameters:
        `doc` - The document for the editor.
        `text` - The initial text to display.
        `rows` - The number of rows to display.
        `cols` - The number of columns to display.
      Throws:
        `java.lang.IllegalArgumentException` - If either `rows` or `cols` is negative.

    - #### RTextArea

          public RTextArea(int textMode)

      Creates a new `RTextArea`.
      Parameters:
        `textMode` - Either `INSERT_MODE` or `OVERWRITE_MODE`.

  - ### Method Detail

    - #### addLineHighlight

          public java.lang.Object addLineHighlight(int line,
                                          java.awt.Color color)
                                            throws javax.swing.text.BadLocationException

      Adds a line highlight.
      Parameters:
        `line` - The line to highlight. This is zero-based.
        `color` - The color to highlight the line with.
      Throws:
        `javax.swing.text.BadLocationException` - If `line` is an invalid line number.
      See Also:
        `removeLineHighlight(Object)`, `removeAllLineHighlights()`

    - #### beginAtomicEdit

          public void beginAtomicEdit()

      Begins an "atomic edit." All text editing operations between this call and the next call to `endAtomicEdit()` will be treated as a single operation by the undo manager.

      Using this method should be done with great care. You should probably wrap the call to `endAtomicEdit()` in a `finally` block:

           textArea.beginAtomicEdit();
           try {
              // Do editing
           } finally {
              textArea.endAtomicEdit();
           }

      See Also:
        `endAtomicEdit()`

    - #### beginRecordingMacro

          public static void beginRecordingMacro()

      Begins recording a macro. After this method is called, all input/caret events, etc. are recorded until `endMacroRecording` is called. If this method is called but the text component is already recording a macro, nothing happens (but the macro keeps recording).
      See Also:
        `isRecordingMacro()`, `endRecordingMacro()`

    - #### canUndo

          public boolean canUndo()

      Tells whether an undo is possible
      See Also:
        `canRedo()`, `undoLastAction()`

    - #### canRedo

          public boolean canRedo()

      Tells whether a redo is possible
      See Also:
        `canUndo()`, `redoLastAction()`

    - #### configurePopupMenu

          protected void configurePopupMenu(javax.swing.JPopupMenu popupMenu)

      Configures the popup menu for this text area. This method is called right before it is displayed, so a hosting application can do any custom configuration (configuring actions, adding/removing items, etc.).

      The default implementation does nothing.

      If you set the popup menu via `setPopupMenu(JPopupMenu)`, you will want to override this method, especially if you removed any of the menu items in the default popup menu.

      Parameters:
        `popupMenu` - The popup menu. This will never be `null`.
      See Also:
        `createPopupMenu()`, `setPopupMenu(JPopupMenu)`

    - #### createDefaultModel

          protected javax.swing.text.Document createDefaultModel()

      Creates the default implementation of the model to be used at construction if one isn't explicitly given. A new instance of RDocument is returned.
      Overrides:
        `createDefaultModel` in class `javax.swing.JTextArea`
      Returns:
        The default document.

    - #### createMouseListener

          protected RTextAreaBase.RTAMouseListener createMouseListener()

      Returns the caret event/mouse listener for `RTextArea`s.
      Specified by:
        `createMouseListener` in class `RTextAreaBase`
      Returns:
        The caret event/mouse listener.

    - #### createPopupMenu

          protected javax.swing.JPopupMenu createPopupMenu()

      Creates the right-click popup menu. Subclasses can override this method to replace or augment the popup menu returned.
      Returns:
        The popup menu.
      See Also:
        `setPopupMenu(JPopupMenu)`, `configurePopupMenu(JPopupMenu)`, `createPopupMenuItem(Action)`

    - #### createPopupMenuItem

          protected javax.swing.JMenuItem createPopupMenuItem(javax.swing.Action a)

      Creates and configures a menu item for used in the popup menu.
      Parameters:
        `a` - The action for the menu item.
      Returns:
        The menu item.
      See Also:
        `createPopupMenu()`

    - #### createRTextAreaUI

          protected RTextAreaUI createRTextAreaUI()

      Returns the a real UI to install on this text area.
      Specified by:
        `createRTextAreaUI` in class `RTextAreaBase`
      Returns:
        The UI.

    - #### createUndoManager

          protected RUndoManager createUndoManager()

      Creates an undo manager for use in this text area.
      Returns:
        The undo manager.

    - #### discardAllEdits

          public void discardAllEdits()

      Removes all undoable edits from this document's undo manager. This method also makes the undo/redo actions disabled.

    - #### endAtomicEdit

          public void endAtomicEdit()

      Completes an "atomic" edit.
      See Also:
        `beginAtomicEdit()`

    - #### endRecordingMacro

          public static void endRecordingMacro()

      Ends recording a macro. If this method is called but the text component is not recording a macro, nothing happens.
      See Also:
        `isRecordingMacro()`, `beginRecordingMacro()`

    - #### fireCaretUpdate

          protected void fireCaretUpdate(javax.swing.event.CaretEvent e)

      Notifies all listeners that a caret change has occurred.
      Overrides:
        `fireCaretUpdate` in class `javax.swing.text.JTextComponent`
      Parameters:
        `e` - The caret event.

    - #### getAction

          public static RecordableTextAction getAction(int action)

      Provides a way to gain access to the editor actions on the right-click popup menu. This way you can make toolbar/menu bar items use the actual actions used by all `RTextArea`s, so that icons stay synchronized and you don't have to worry about enabling/disabling them yourself.

      Keep in mind that these actions are shared across all instances of `RTextArea`, so a change to any action returned by this method is global across all `RTextArea` editors in your application.

      Parameters:
        `action` - The action to retrieve, such as `CUT_ACTION`. If the action name is invalid, `null` is returned.
      Returns:
        The action, or `null` if an invalid action is requested.

    - #### getCurrentMacro

          public static Macro getCurrentMacro()

      Returns the macro currently stored in this `RTextArea`. Since macros are shared, all `RTextArea`s in the currently- running application are using this macro.
      Returns:
        The current macro, or `null` if no macro has been recorded/loaded.
      See Also:
        `loadMacro(Macro)`

    - #### getDefaultMarkAllHighlightColor

          public static final java.awt.Color getDefaultMarkAllHighlightColor()

      Returns the default color used for "mark all."
      Returns:
        The color.
      See Also:
        `getMarkAllHighlightColor()`, `setMarkAllHighlightColor(Color)`

    - #### getIconGroup

          public static IconGroup getIconGroup()

      Returns the icon group being used for the actions of this text area.
      Returns:
        The icon group.
      See Also:
        `setIconGroup(IconGroup)`

    - #### getMarkAllHighlightColor

          public java.awt.Color getMarkAllHighlightColor()

      Returns the color used in "mark all."
      Returns:
        The color.
      See Also:
        `setMarkAllHighlightColor(Color)`

    - #### getMaxAscent

          public int getMaxAscent()

      Returns the maximum ascent of all fonts used in this text area. In the case of a standard `RTextArea`, this is simply the ascent of the current font.

      This value could be useful, for example, to implement a line-numbering scheme.

      Returns:
        The ascent of the current font.

    - #### getPopupMenu

          public javax.swing.JPopupMenu getPopupMenu()

      Returns the popup menu for this component, lazily creating it if necessary.
      Returns:
        The popup menu.
      See Also:
        `createPopupMenu()`, `setPopupMenu(JPopupMenu)`

    - #### getSelectedOccurrenceText

          public static java.lang.String getSelectedOccurrenceText()

      Returns the text last selected and used in a Ctrl+K operation.
      Returns:
        The text, or `null` if none.
      See Also:
        `setSelectedOccurrenceText(String)`

    - #### getTextMode

          public final int getTextMode()

      Returns the text mode this editor pane is currently in.
      Returns:
        Either `INSERT_MODE` or `OVERWRITE_MODE`.
      See Also:
        `setTextMode(int)`

    - #### getToolTipSupplier

          public ToolTipSupplier getToolTipSupplier()

      Returns the tool tip supplier.
      Returns:
        The tool tip supplier, or `null` if one isn't installed.
      See Also:
        `setToolTipSupplier(ToolTipSupplier)`

    - #### getToolTipText

          public java.lang.String getToolTipText(java.awt.event.MouseEvent e)

      Returns the tooltip to display for a mouse event at the given location. This method is overridden to check for a `ToolTipSupplier`; if there is one installed, it is queried for tool tip text before using the super class's implementation of this method.
      Overrides:
        `getToolTipText` in class `javax.swing.text.JTextComponent`
      Parameters:
        `e` - The mouse event.
      Returns:
        The tool tip text, or `null` if none.
      See Also:
        `getToolTipSupplier()`, `setToolTipSupplier(ToolTipSupplier)`

    - #### handleReplaceSelection

          protected void handleReplaceSelection(java.lang.String content)

      Does the actual dirty-work of replacing the selected text in this text area (i.e., in its document). This method provides a hook for subclasses to handle this in a different way.
      Parameters:
        `content` - The content to add.

    - #### init

          protected void init()

      Initializes this text area.
      Overrides:
        `init` in class `RTextAreaBase`

    - #### isRecordingMacro

          public static boolean isRecordingMacro()

      Returns whether or not a macro is being recorded.
      Returns:
        Whether or not a macro is being recorded.
      See Also:
        `beginRecordingMacro()`, `endRecordingMacro()`

    - #### loadMacro

          public static void loadMacro(Macro macro)

      Loads a macro to be used by all `RTextArea`s in the current application.
      Parameters:
        `macro` - The macro to load.
      See Also:
        `getCurrentMacro()`

    - #### paste

          public void paste()

      Overrides:
        `paste` in class `javax.swing.text.JTextComponent`

    - #### playbackLastMacro

          public void playbackLastMacro()

      "Plays back" the last recorded macro in this text area.

    - #### print

          public int print(java.awt.Graphics g,
                  java.awt.print.PageFormat pageFormat,
                  int pageIndex)

      Method called when it's time to print this badboy (the old-school, AWT way).
      Specified by:
        `print` in interface `java.awt.print.Printable`
      Parameters:
        `g` - The context into which the page is drawn.
        `pageFormat` - The size and orientation of the page being drawn.
        `pageIndex` - The zero based index of the page to be drawn.

    - #### read

          public void read(java.io.Reader in,
                  java.lang.Object desc)
                    throws java.io.IOException

      We override this method because the super version gives us an entirely new `Document`, thus requiring us to re-attach our Undo manager. With this version we just replace the text.
      Overrides:
        `read` in class `javax.swing.text.JTextComponent`
      Throws:
        `java.io.IOException`

    - #### redoLastAction

          public void redoLastAction()

      Attempt to redo the last action.
      See Also:
        `undoLastAction()`

    - #### removeAllLineHighlights

          public void removeAllLineHighlights()

      Removes all line highlights.
      See Also:
        `removeLineHighlight(Object)`

    - #### removeLineHighlight

          public void removeLineHighlight(java.lang.Object tag)

      Removes a line highlight.
      Parameters:
        `tag` - The tag of the line highlight to remove.
      See Also:
        `removeAllLineHighlights()`, `addLineHighlight(int, Color)`

    - #### replaceRange

          public void replaceRange(java.lang.String str,
                          int start,
                          int end)

      Replaces text from the indicated start to end position with the new text specified. Does nothing if the model is null. Simply does a delete if the new string is null or empty.

      This method is thread safe, although most Swing methods are not.

      This method is overridden so that our Undo manager remembers it as a single operation (it has trouble with this, especially for `RSyntaxTextArea` and the "auto-indent" feature).

      Overrides:
        `replaceRange` in class `javax.swing.JTextArea`
      Parameters:
        `str` - the text to use as the replacement
        `start` - the start position >= 0
        `end` - the end position >= start
      Throws:
        `java.lang.IllegalArgumentException` - if part of the range is an invalid position in the model
      See Also:
        `JTextArea.insert(String, int)`, `replaceRange(String, int, int)`

    - #### replaceSelection

          public void replaceSelection(java.lang.String text)

      This method overrides `JTextComponent`'s `replaceSelection`, so that if `textMode` is `OVERWRITE_MODE`, it actually overwrites.
      Overrides:
        `replaceSelection` in class `javax.swing.text.JTextComponent`
      Parameters:
        `text` - The content to replace the selection with.

    - #### setActionProperties

          public static void setActionProperties(int action,
                                 java.lang.String name,
                                 char mnemonic,
                                 javax.swing.KeyStroke accelerator)

      Sets the properties of one of the actions this text area owns.
      Parameters:
        `action` - The action to modify; for example, `CUT_ACTION`.
        `name` - The new name for the action.
        `mnemonic` - The new mnemonic for the action.
        `accelerator` - The new accelerator key for the action.

    - #### setActionProperties

          public static void setActionProperties(int action,
                                 java.lang.String name,
                                 java.lang.Integer mnemonic,
                                 javax.swing.KeyStroke accelerator)

      Sets the properties of one of the actions this text area owns.
      Parameters:
        `action` - The action to modify; for example, `CUT_ACTION`.
        `name` - The new name for the action.
        `mnemonic` - The new mnemonic for the action.
        `accelerator` - The new accelerator key for the action.

    - #### setCaret

          public void setCaret(javax.swing.text.Caret caret)

      Sets the caret to use in this text area. It is strongly encouraged to use `ConfigurableCaret`s (which is used by default), or a subclass, since they know how to render themselves differently when the user toggles between insert and overwrite modes.
      Overrides:
        `setCaret` in class `javax.swing.text.JTextComponent`
      Parameters:
        `caret` - The caret to use. If this is not an instance of `ConfigurableCaret`, an exception is thrown.
      Throws:
        `java.lang.IllegalArgumentException` - If the specified caret is not an `ConfigurableCaret`.
      See Also:
        `setCaretStyle(int, CaretStyle)`

    - #### setCaretStyle

          public void setCaretStyle(int mode,
                           CaretStyle style)

      Sets the style of caret used when in insert or overwrite mode.
      Parameters:
        `mode` - Either `INSERT_MODE` or `OVERWRITE_MODE`.
        `style` - The style for the caret.
      See Also:
        `ConfigurableCaret`

    - #### setDocument

          public void setDocument(javax.swing.text.Document document)

      Sets the document used by this text area.
      Overrides:
        `setDocument` in class `javax.swing.text.JTextComponent`
      Parameters:
        `document` - The new document to use.
      Throws:
        `java.lang.IllegalArgumentException` - If the document is not an instance of `RDocument`.

    - #### setIconGroup

          public static void setIconGroup(IconGroup group)

      Sets the path in which to find images to associate with the editor's actions. The path MUST contain the following images (with the appropriate extension as defined by the icon group):
      - cut
      - copy
      - paste
      - delete
      - undo
      - redo
      - selectall
      If any of the above images don't exist, the corresponding action will not have an icon.
      Parameters:
        `group` - The icon group to load.
      See Also:
        `getIconGroup()`

    - #### setMarkAllHighlightColor

          public void setMarkAllHighlightColor(java.awt.Color color)

      Sets the color used for "mark all." This fires a property change of type `MARK_ALL_COLOR_PROPERTY`.
      Parameters:
        `color` - The color to use for "mark all."
      See Also:
        `getMarkAllHighlightColor()`

    - #### setPopupMenu

          public void setPopupMenu(javax.swing.JPopupMenu popupMenu)

      Sets the popup menu used by this text area.

      If you set the popup menu with this method, you'll want to consider also overriding `configurePopupMenu(JPopupMenu)`, especially if you removed any of the default menu items.

      Parameters:
        `popupMenu` - The popup menu. If this is `null`, no popup menu will be displayed.
      See Also:
        `getPopupMenu()`, `configurePopupMenu(JPopupMenu)`

    - #### setRoundedSelectionEdges

          public void setRoundedSelectionEdges(boolean rounded)

      Sets whether the edges of selections are rounded in this text area. This method fires a property change of type `RTextAreaBase.ROUNDED_SELECTION_PROPERTY`.
      Overrides:
        `setRoundedSelectionEdges` in class `RTextAreaBase`
      Parameters:
        `rounded` - Whether selection edges should be rounded.
      See Also:
        `RTextAreaBase.getRoundedSelectionEdges()`

    - #### setSelectedOccurrenceText

          public static void setSelectedOccurrenceText(java.lang.String text)

      Sets the text last selected/Ctrl+K'd in an `RTextArea`. This text will be searched for in subsequent Ctrl+K/Ctrl+Shift+K actions (Cmd+K on OS X).

      Since the selected occurrence actions are built into RTextArea, applications usually do not have to call this method directly, but can choose to do so if they wish (for example, if they wish to set this value when the user does a search via a Find dialog).

      Parameters:
        `text` - The selected text.
      See Also:
        `getSelectedOccurrenceText()`

    - #### setTextMode

          public void setTextMode(int mode)

      Sets the text mode for this editor pane. If the currently installed caret is an instance of `ConfigurableCaret`, it will be automatically updated to render itself appropriately for the new text mode.
      Parameters:
        `mode` - Either `INSERT_MODE` or `OVERWRITE_MODE`.
      See Also:
        `getTextMode()`

    - #### setToolTipSupplier

          public void setToolTipSupplier(ToolTipSupplier supplier)

      Sets the tool tip supplier.
      Parameters:
        `supplier` - The new tool tip supplier, or `null` if there is to be no supplier.
      See Also:
        `getToolTipSupplier()`

    - #### setUI

          public final void setUI(javax.swing.plaf.TextUI ui)

      Sets the UI used by this text area. This is overridden so only the right-click popup menu's UI is updated. The look and feel of an `RTextArea` is independent of the Java Look and Feel, and so this method does not change the text area itself. Subclasses (such as `RSyntaxTextArea` can call `setRTextAreaUI` if they wish to install a new UI.
      Overrides:
        `setUI` in class `javax.swing.text.JTextComponent`
      Parameters:
        `ui` - This parameter is ignored.

    - #### undoLastAction

          public void undoLastAction()

      Attempt to undo an "action" done in this text area.
      See Also:
        `redoLastAction()`

    - #### getUndoManager

          public RUndoManager getUndoManager()

    - #### setUndoManager

          public void setUndoManager(RUndoManager undoManager)