mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			1703 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			1703 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			Java
		
	
	
	
/* DefaultEditorKit.java --
 | 
						|
   Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Classpath.
 | 
						|
 | 
						|
GNU Classpath is free software; you can redistribute it and/or modify
 | 
						|
it under the terms of the GNU General Public License as published by
 | 
						|
the Free Software Foundation; either version 2, or (at your option)
 | 
						|
any later version.
 | 
						|
 | 
						|
GNU Classpath is distributed in the hope that it will be useful, but
 | 
						|
WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
General Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License
 | 
						|
along with GNU Classpath; see the file COPYING.  If not, write to the
 | 
						|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
 | 
						|
package javax.swing.text;
 | 
						|
 | 
						|
import gnu.java.lang.CPStringBuilder;
 | 
						|
 | 
						|
import java.awt.Toolkit;
 | 
						|
import java.awt.event.ActionEvent;
 | 
						|
 | 
						|
import java.io.BufferedReader;
 | 
						|
import java.io.IOException;
 | 
						|
import java.io.InputStream;
 | 
						|
import java.io.InputStreamReader;
 | 
						|
import java.io.OutputStream;
 | 
						|
import java.io.OutputStreamWriter;
 | 
						|
import java.io.Reader;
 | 
						|
import java.io.Writer;
 | 
						|
 | 
						|
import javax.swing.Action;
 | 
						|
import javax.swing.SwingConstants;
 | 
						|
 | 
						|
/**
 | 
						|
 * The default implementation of {@link EditorKit}. This <code>EditorKit</code>
 | 
						|
 * a plain text <code>Document</code> and several commands that together
 | 
						|
 * make up a basic editor, like cut / copy + paste.
 | 
						|
 *
 | 
						|
 * @author original author unknown
 | 
						|
 * @author Roman Kennke (roman@kennke.org)
 | 
						|
 * @author Robert Schuster (robertschuster@fsfe.org)
 | 
						|
 */
 | 
						|
public class DefaultEditorKit extends EditorKit
 | 
						|
{
 | 
						|
  static class SelectionPreviousWordAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    SelectionPreviousWordAction()
 | 
						|
    {
 | 
						|
      super(selectionPreviousWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      try
 | 
						|
        {
 | 
						|
          JTextComponent t = getTextComponent(event);
 | 
						|
 | 
						|
          if (t != null)
 | 
						|
            {
 | 
						|
              int offs = Utilities.getPreviousWord(t, t.getCaretPosition());
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.moveDot(offs);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
        }
 | 
						|
      catch(BadLocationException ble)
 | 
						|
        {
 | 
						|
          // Can't happen.
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionNextWordAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    SelectionNextWordAction()
 | 
						|
    {
 | 
						|
      super(selectionNextWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      try
 | 
						|
        {
 | 
						|
          JTextComponent t = getTextComponent(event);
 | 
						|
 | 
						|
          if (t != null)
 | 
						|
            {
 | 
						|
              int offs = Utilities.getNextWord(t, t.getCaretPosition());
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.moveDot(offs);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
        }
 | 
						|
      catch(BadLocationException ble)
 | 
						|
        {
 | 
						|
          // Can't happen.
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionBeginWordAction extends TextAction
 | 
						|
  {
 | 
						|
    SelectionBeginWordAction()
 | 
						|
    {
 | 
						|
      super(selectionBeginWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      try
 | 
						|
        {
 | 
						|
          JTextComponent t = getTextComponent(event);
 | 
						|
 | 
						|
          if (t != null)
 | 
						|
            {
 | 
						|
              int offs = Utilities.getWordStart(t, t.getCaretPosition());
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.moveDot(offs);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
        }
 | 
						|
      catch(BadLocationException ble)
 | 
						|
        {
 | 
						|
          // Can't happen.
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionEndWordAction extends TextAction
 | 
						|
  {
 | 
						|
    SelectionEndWordAction()
 | 
						|
    {
 | 
						|
      super(selectionEndWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      try
 | 
						|
        {
 | 
						|
          JTextComponent t = getTextComponent(event);
 | 
						|
 | 
						|
          if (t != null)
 | 
						|
            {
 | 
						|
              int offs = Utilities.getWordEnd(t, t.getCaretPosition());
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.moveDot(offs);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
        }
 | 
						|
      catch(BadLocationException ble)
 | 
						|
        {
 | 
						|
          // Can't happen.
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class BeginWordAction extends TextAction
 | 
						|
  {
 | 
						|
    BeginWordAction()
 | 
						|
    {
 | 
						|
      super(beginWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      try
 | 
						|
        {
 | 
						|
          JTextComponent t = getTextComponent(event);
 | 
						|
 | 
						|
          if (t != null)
 | 
						|
            {
 | 
						|
              int offs = Utilities.getWordStart(t, t.getCaretPosition());
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.setDot(offs);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
        }
 | 
						|
      catch(BadLocationException ble)
 | 
						|
        {
 | 
						|
          // Can't happen.
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class EndWordAction extends TextAction
 | 
						|
  {
 | 
						|
    EndWordAction()
 | 
						|
    {
 | 
						|
      super(endWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      try
 | 
						|
        {
 | 
						|
          JTextComponent t = getTextComponent(event);
 | 
						|
 | 
						|
          if (t != null)
 | 
						|
            {
 | 
						|
              int offs = Utilities.getWordEnd(t, t.getCaretPosition());
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.setDot(offs);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
        }
 | 
						|
      catch(BadLocationException ble)
 | 
						|
        {
 | 
						|
          // Can't happen.
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class PreviousWordAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    PreviousWordAction()
 | 
						|
    {
 | 
						|
      super(previousWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      try
 | 
						|
        {
 | 
						|
          JTextComponent t = getTextComponent(event);
 | 
						|
 | 
						|
          if (t != null)
 | 
						|
            {
 | 
						|
              int offs = Utilities.getPreviousWord(t, t.getCaretPosition());
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.setDot(offs);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
        }
 | 
						|
      catch(BadLocationException ble)
 | 
						|
        {
 | 
						|
          // Can't happen.
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class NextWordAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    NextWordAction()
 | 
						|
    {
 | 
						|
      super(nextWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      try
 | 
						|
        {
 | 
						|
          JTextComponent t = getTextComponent(event);
 | 
						|
 | 
						|
          if (t != null)
 | 
						|
            {
 | 
						|
              int offs = Utilities.getNextWord(t, t.getCaretPosition());
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.setDot(offs);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
        }
 | 
						|
      catch(BadLocationException ble)
 | 
						|
        {
 | 
						|
          // Can't happen.
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectAllAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    SelectAllAction()
 | 
						|
    {
 | 
						|
      super(selectAllAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          int offs = t.getDocument().getLength();
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          c.setDot(0);
 | 
						|
          c.moveDot(offs);
 | 
						|
          try
 | 
						|
            {
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionBeginAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    SelectionBeginAction()
 | 
						|
    {
 | 
						|
      super(selectionBeginAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          c.moveDot(0);
 | 
						|
          try
 | 
						|
            {
 | 
						|
              c.setMagicCaretPosition(t.modelToView(0).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionEndAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    SelectionEndAction()
 | 
						|
    {
 | 
						|
      super(selectionEndAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          int offs = t.getDocument().getLength();
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          c.moveDot(offs);
 | 
						|
          try
 | 
						|
            {
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionBeginLineAction
 | 
						|
    extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    SelectionBeginLineAction()
 | 
						|
    {
 | 
						|
      super(selectionBeginLineAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          try
 | 
						|
            {
 | 
						|
              int offs = Utilities.getRowStart(t, c.getDot());
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionEndLineAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    SelectionEndLineAction()
 | 
						|
    {
 | 
						|
      super(selectionEndLineAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          try
 | 
						|
            {
 | 
						|
              int offs = Utilities.getRowEnd(t, c.getDot());
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectLineAction extends TextAction
 | 
						|
  {
 | 
						|
    SelectLineAction()
 | 
						|
    {
 | 
						|
      super(selectLineAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          try
 | 
						|
            {
 | 
						|
              int offs1 = Utilities.getRowStart(t, c.getDot());
 | 
						|
              int offs2 = Utilities.getRowEnd(t, c.getDot());
 | 
						|
              c.setDot(offs2);
 | 
						|
              c.moveDot(offs1);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs2).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectWordAction extends TextAction
 | 
						|
  {
 | 
						|
    SelectWordAction()
 | 
						|
    {
 | 
						|
      super(selectWordAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          int dot = c.getDot();
 | 
						|
          try
 | 
						|
            {
 | 
						|
              int wordStart = Utilities.getWordStart(t, dot);
 | 
						|
 | 
						|
              if (dot == wordStart)
 | 
						|
                {
 | 
						|
                  // Current cursor position is on the first character in a word.
 | 
						|
                  c.setDot(wordStart);
 | 
						|
                  c.moveDot(Utilities.getWordEnd(t, wordStart));
 | 
						|
                }
 | 
						|
              else
 | 
						|
                {
 | 
						|
                  // Current cursor position is not on the first character
 | 
						|
                  // in a word.
 | 
						|
                  int nextWord = Utilities.getNextWord(t, dot);
 | 
						|
                  int previousWord = Utilities.getPreviousWord(t, dot);
 | 
						|
                  int previousWordEnd = Utilities.getWordEnd(t, previousWord);
 | 
						|
 | 
						|
                  // Cursor position is in the space between two words. In such a
 | 
						|
                  // situation just select the space.
 | 
						|
                  if (dot >= previousWordEnd && dot <= nextWord)
 | 
						|
                    {
 | 
						|
                      c.setDot(previousWordEnd);
 | 
						|
                      c.moveDot(nextWord);
 | 
						|
                    }
 | 
						|
                  else
 | 
						|
                    {
 | 
						|
                      // Cursor position is inside a word. Just select it then.
 | 
						|
                      c.setDot(previousWord);
 | 
						|
                      c.moveDot(previousWordEnd);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
              // If the position was updated change the magic caret position
 | 
						|
              // as well.
 | 
						|
              if (c.getDot() != dot)
 | 
						|
                c.setMagicCaretPosition(t.modelToView(c.getDot()).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionDownAction
 | 
						|
      extends TextAction.VerticalMovementAction
 | 
						|
  {
 | 
						|
    SelectionDownAction()
 | 
						|
    {
 | 
						|
      super(selectionDownAction, SwingConstants.SOUTH);
 | 
						|
    }
 | 
						|
 | 
						|
    protected void actionPerformedImpl(Caret c, int offs)
 | 
						|
    {
 | 
						|
      c.moveDot(offs);
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionUpAction
 | 
						|
  extends TextAction.VerticalMovementAction
 | 
						|
  {
 | 
						|
    SelectionUpAction()
 | 
						|
    {
 | 
						|
      super(selectionUpAction, SwingConstants.NORTH);
 | 
						|
    }
 | 
						|
 | 
						|
    protected void actionPerformedImpl(Caret c, int offs)
 | 
						|
    {
 | 
						|
      c.moveDot(offs);
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionForwardAction
 | 
						|
      extends TextAction.HorizontalMovementAction
 | 
						|
  {
 | 
						|
    SelectionForwardAction()
 | 
						|
    {
 | 
						|
      super(selectionForwardAction, SwingConstants.EAST);
 | 
						|
    }
 | 
						|
 | 
						|
    protected void actionPerformedImpl(Caret c, int offs)
 | 
						|
    {
 | 
						|
      c.moveDot(offs);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class SelectionBackwardAction
 | 
						|
      extends TextAction.HorizontalMovementAction
 | 
						|
  {
 | 
						|
    SelectionBackwardAction()
 | 
						|
    {
 | 
						|
      super(selectionBackwardAction, SwingConstants.WEST);
 | 
						|
    }
 | 
						|
 | 
						|
    protected void actionPerformedImpl(Caret c, int offs)
 | 
						|
    {
 | 
						|
      c.moveDot(offs);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class DownAction
 | 
						|
      extends TextAction.VerticalMovementAction
 | 
						|
  {
 | 
						|
    DownAction()
 | 
						|
    {
 | 
						|
      super(downAction, SwingConstants.SOUTH);
 | 
						|
    }
 | 
						|
 | 
						|
    protected void actionPerformedImpl(Caret c, int offs)
 | 
						|
    {
 | 
						|
      c.setDot(offs);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class UpAction
 | 
						|
      extends TextAction.VerticalMovementAction
 | 
						|
  {
 | 
						|
    UpAction()
 | 
						|
    {
 | 
						|
      super(upAction, SwingConstants.NORTH);
 | 
						|
    }
 | 
						|
 | 
						|
    protected void actionPerformedImpl(Caret c, int offs)
 | 
						|
    {
 | 
						|
      c.setDot(offs);
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  static class ForwardAction
 | 
						|
      extends TextAction.HorizontalMovementAction
 | 
						|
  {
 | 
						|
    ForwardAction()
 | 
						|
    {
 | 
						|
      super(forwardAction, SwingConstants.EAST);
 | 
						|
    }
 | 
						|
 | 
						|
    protected void actionPerformedImpl(Caret c, int offs)
 | 
						|
    {
 | 
						|
      c.setDot(offs);
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  static class BackwardAction
 | 
						|
      extends TextAction.HorizontalMovementAction
 | 
						|
  {
 | 
						|
    BackwardAction()
 | 
						|
    {
 | 
						|
      super(backwardAction, SwingConstants.WEST);
 | 
						|
    }
 | 
						|
 | 
						|
    protected void actionPerformedImpl(Caret c, int offs)
 | 
						|
    {
 | 
						|
      c.setDot(offs);
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  static class DeletePrevCharAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    DeletePrevCharAction()
 | 
						|
    {
 | 
						|
      super(deletePrevCharAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          try
 | 
						|
            {
 | 
						|
              int pos = t.getSelectionStart();
 | 
						|
              int len = t.getSelectionEnd() - pos;
 | 
						|
 | 
						|
              if (len > 0)
 | 
						|
                  t.getDocument().remove(pos, len);
 | 
						|
              else if (pos > 0)
 | 
						|
                {
 | 
						|
                  pos--;
 | 
						|
                  t.getDocument().remove(pos, 1);
 | 
						|
                  Caret c = t.getCaret();
 | 
						|
                  c.setDot(pos);
 | 
						|
                  c.setMagicCaretPosition(t.modelToView(pos).getLocation());
 | 
						|
                }
 | 
						|
            }
 | 
						|
          catch (BadLocationException e)
 | 
						|
            {
 | 
						|
              // FIXME: we're not authorized to throw this.. swallow it?
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class DeleteNextCharAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    DeleteNextCharAction()
 | 
						|
    {
 | 
						|
      super(deleteNextCharAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          try
 | 
						|
            {
 | 
						|
              int pos = t.getSelectionStart();
 | 
						|
              int len = t.getSelectionEnd() - pos;
 | 
						|
 | 
						|
              if (len > 0)
 | 
						|
                  t.getDocument().remove(pos, len);
 | 
						|
              else if (pos < t.getDocument().getLength())
 | 
						|
                  t.getDocument().remove(pos, 1);
 | 
						|
 | 
						|
              Caret c = t.getCaret();
 | 
						|
              c.setDot(pos);
 | 
						|
              c.setMagicCaretPosition(t.modelToView(pos).getLocation());
 | 
						|
            }
 | 
						|
          catch (BadLocationException e)
 | 
						|
            {
 | 
						|
              // FIXME: we're not authorized to throw this.. swallow it?
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class EndLineAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    EndLineAction()
 | 
						|
    {
 | 
						|
      super(endLineAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          try
 | 
						|
            {
 | 
						|
              int offs = Utilities.getRowEnd(t, t.getCaretPosition());
 | 
						|
              if (offs > -1)
 | 
						|
                {
 | 
						|
                  Caret c = t.getCaret();
 | 
						|
                  c.setDot(offs);
 | 
						|
                  c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
                }
 | 
						|
            }
 | 
						|
          catch (BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Nothing to do here
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class BeginLineAction
 | 
						|
      extends TextAction
 | 
						|
  {
 | 
						|
    BeginLineAction()
 | 
						|
    {
 | 
						|
      super(beginLineAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          try
 | 
						|
            {
 | 
						|
              int offs = Utilities.getRowStart(t, t.getCaretPosition());
 | 
						|
              if (offs > -1)
 | 
						|
                {
 | 
						|
                  Caret c = t.getCaret();
 | 
						|
                  c.setDot(offs);
 | 
						|
                  c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
                }
 | 
						|
            }
 | 
						|
          catch (BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Do nothing here.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class BeginAction extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    BeginAction()
 | 
						|
    {
 | 
						|
      super(beginAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          c.setDot(0);
 | 
						|
          try
 | 
						|
            {
 | 
						|
              c.setMagicCaretPosition(t.modelToView(0).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  static class EndAction extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    EndAction()
 | 
						|
    {
 | 
						|
      super(endAction);
 | 
						|
    }
 | 
						|
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        {
 | 
						|
          int offs = t.getDocument().getLength();
 | 
						|
          Caret c = t.getCaret();
 | 
						|
          c.setDot(offs);
 | 
						|
          try
 | 
						|
            {
 | 
						|
              c.setMagicCaretPosition(t.modelToView(offs).getLocation());
 | 
						|
            }
 | 
						|
          catch(BadLocationException ble)
 | 
						|
            {
 | 
						|
              // Can't happen.
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a beep on the PC speaker.
 | 
						|
   *
 | 
						|
   * @see Toolkit#beep()
 | 
						|
   */
 | 
						|
  public static class BeepAction extends TextAction
 | 
						|
  {
 | 
						|
    /**
 | 
						|
     * Creates a new <code>BeepAction</code>.
 | 
						|
     */
 | 
						|
    public BeepAction()
 | 
						|
    {
 | 
						|
      super(beepAction);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs the <code>Action</code>.
 | 
						|
     *
 | 
						|
     * @param event the action event describing the user action
 | 
						|
     */
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      Toolkit.getDefaultToolkit().beep();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Copies the selected content into the system clipboard.
 | 
						|
   *
 | 
						|
   * @see Toolkit#getSystemClipboard()
 | 
						|
   * @see CutAction
 | 
						|
   * @see PasteAction
 | 
						|
   */
 | 
						|
  public static class CopyAction extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new <code>CopyAction</code>.
 | 
						|
     */
 | 
						|
    public CopyAction()
 | 
						|
    {
 | 
						|
      super(copyAction);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs the <code>Action</code>.
 | 
						|
     *
 | 
						|
     * @param event the action event describing the user action
 | 
						|
     */
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent target = getTextComponent(event);
 | 
						|
      if (target != null)
 | 
						|
        target.copy();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
  /**
 | 
						|
   * Copies the selected content into the system clipboard and deletes the
 | 
						|
   * selection.
 | 
						|
   *
 | 
						|
   * @see Toolkit#getSystemClipboard()
 | 
						|
   * @see CopyAction
 | 
						|
   * @see PasteAction
 | 
						|
   */
 | 
						|
  public static class CutAction extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new <code>CutAction</code>.
 | 
						|
     */
 | 
						|
    public CutAction()
 | 
						|
    {
 | 
						|
      super(cutAction);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs the <code>Action</code>.
 | 
						|
     *
 | 
						|
     * @param event the action event describing the user action
 | 
						|
     */
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent target = getTextComponent(event);
 | 
						|
      if (target != null)
 | 
						|
        target.cut();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Copies content from the system clipboard into the editor.
 | 
						|
   *
 | 
						|
   * @see Toolkit#getSystemClipboard()
 | 
						|
   * @see CopyAction
 | 
						|
   * @see CutAction
 | 
						|
   */
 | 
						|
  public static class PasteAction extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new <code>PasteAction</code>.
 | 
						|
     */
 | 
						|
    public PasteAction()
 | 
						|
    {
 | 
						|
      super(pasteAction);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs the <code>Action</code>.
 | 
						|
     *
 | 
						|
     * @param event the action event describing the user action
 | 
						|
     */
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent target = getTextComponent(event);
 | 
						|
      if (target != null)
 | 
						|
        target.paste();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This action is executed as default action when a KEY_TYPED
 | 
						|
   * event is received and no keymap entry exists for that. The purpose
 | 
						|
   * of this action is to filter out a couple of characters. This includes
 | 
						|
   * the control characters and characters with the ALT-modifier.
 | 
						|
   *
 | 
						|
   * If an event does not get filtered, it is inserted into the document
 | 
						|
   * of the text component. If there is some text selected in the text
 | 
						|
   * component, this text will be replaced.
 | 
						|
   */
 | 
						|
  public static class DefaultKeyTypedAction
 | 
						|
    extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new <code>DefaultKeyTypedAction</code>.
 | 
						|
     */
 | 
						|
    public DefaultKeyTypedAction()
 | 
						|
    {
 | 
						|
      super(defaultKeyTypedAction);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs the <code>Action</code>.
 | 
						|
     *
 | 
						|
     * @param event the action event describing the user action
 | 
						|
     */
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      // first we filter the following events:
 | 
						|
      // - control characters
 | 
						|
      // - key events with the ALT modifier
 | 
						|
      JTextComponent target = getTextComponent(event);
 | 
						|
      if ((target != null) && (event != null))
 | 
						|
        {
 | 
						|
          if ((target.isEditable()) && (target.isEnabled()))
 | 
						|
            {
 | 
						|
              String content = event.getActionCommand();
 | 
						|
              int mod = event.getModifiers();
 | 
						|
              if ((content != null) && (content.length() > 0)
 | 
						|
                  && (mod & ActionEvent.ALT_MASK) == 0
 | 
						|
                  && (mod & ActionEvent.CTRL_MASK) == 0)
 | 
						|
                {
 | 
						|
                  char c = content.charAt(0);
 | 
						|
                  if ((c >= 0x20) && (c != 0x7F))
 | 
						|
                    {
 | 
						|
                      target.replaceSelection(content);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This action inserts a newline character into the document
 | 
						|
   * of the text component. This is typically triggered by hitting
 | 
						|
   * ENTER on the keyboard.
 | 
						|
   */
 | 
						|
  public static class InsertBreakAction extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new <code>InsertBreakAction</code>.
 | 
						|
     */
 | 
						|
    public InsertBreakAction()
 | 
						|
    {
 | 
						|
      super(insertBreakAction);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs the <code>Action</code>.
 | 
						|
     *
 | 
						|
     * @param event the action event describing the user action
 | 
						|
     */
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        t.replaceSelection("\n");
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Places content into the associated editor. If there currently is a
 | 
						|
   * selection, this selection is replaced.
 | 
						|
   */
 | 
						|
  // FIXME: Figure out what this Action is supposed to do. Obviously text
 | 
						|
  // that is entered by the user is inserted through DefaultKeyTypedAction.
 | 
						|
  public static class InsertContentAction extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new <code>InsertContentAction</code>.
 | 
						|
     */
 | 
						|
    public InsertContentAction()
 | 
						|
    {
 | 
						|
      super(insertContentAction);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs the <code>Action</code>.
 | 
						|
     *
 | 
						|
     * @param event the action event describing the user action
 | 
						|
     */
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      // FIXME: Figure out what this Action is supposed to do. Obviously text
 | 
						|
      // that is entered by the user is inserted through DefaultKeyTypedAction.
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Inserts a TAB character into the text editor.
 | 
						|
   */
 | 
						|
  public static class InsertTabAction extends TextAction
 | 
						|
  {
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new <code>TabAction</code>.
 | 
						|
     */
 | 
						|
    public InsertTabAction()
 | 
						|
    {
 | 
						|
      super(insertTabAction);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs the <code>Action</code>.
 | 
						|
     *
 | 
						|
     * @param event the action event describing the user action
 | 
						|
     */
 | 
						|
    public void actionPerformed(ActionEvent event)
 | 
						|
    {
 | 
						|
      JTextComponent t = getTextComponent(event);
 | 
						|
      if (t != null)
 | 
						|
        t.replaceSelection("\t");
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * The serial version of DefaultEditorKit.
 | 
						|
   */
 | 
						|
  private static final long serialVersionUID = 9017245433028523428L;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one character
 | 
						|
   * backwards.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String backwardAction = "caret-backward";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that creates a beep in the speaker.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String beepAction = "beep";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the <code>Document</code>.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String beginAction = "caret-begin";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the current line.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String beginLineAction = "caret-begin-line";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the current paragraph.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String beginParagraphAction = "caret-begin-paragraph";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the current word.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String beginWordAction = "caret-begin-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that copies the selected content
 | 
						|
   * into the system clipboard.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String copyAction = "copy-to-clipboard";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that copies the selected content
 | 
						|
   * into the system clipboard and removes the selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String cutAction = "cut-to-clipboard";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that is performed by default if
 | 
						|
   * a key is typed and there is no keymap entry.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String defaultKeyTypedAction = "default-typed";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that deletes the character that
 | 
						|
   * follows the current caret position.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String deleteNextCharAction = "delete-next";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that deletes the character that
 | 
						|
   * precedes the current caret position.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String deletePrevCharAction = "delete-previous";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one line down.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String downAction = "caret-down";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the end
 | 
						|
   * of the <code>Document</code>.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String endAction = "caret-end";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the end
 | 
						|
   * of the current line.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String endLineAction = "caret-end-line";
 | 
						|
 | 
						|
  /**
 | 
						|
   * When a document is read and an CRLF is encountered, then we add a property
 | 
						|
   * with this name and a value of "\r\n".
 | 
						|
   */
 | 
						|
  public static final String EndOfLineStringProperty = "__EndOfLine__";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the end
 | 
						|
   * of the current paragraph.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String endParagraphAction = "caret-end-paragraph";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the end
 | 
						|
   * of the current word.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String endWordAction = "caret-end-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one character
 | 
						|
   * forward.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String forwardAction = "caret-forward";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that inserts a line break.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String insertBreakAction = "insert-break";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that inserts some content.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String insertContentAction = "insert-content";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that inserts a TAB.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String insertTabAction = "insert-tab";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the next word.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String nextWordAction = "caret-next-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one page down.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String pageDownAction = "page-down";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one page up.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String pageUpAction = "page-up";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that copies content from the system
 | 
						|
   * clipboard into the document.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String pasteAction = "paste-from-clipboard";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the previous word.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String previousWordAction = "caret-previous-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that sets the editor in read only
 | 
						|
   * mode.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String readOnlyAction = "set-read-only";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that selects the whole document.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectAllAction = "select-all";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one character
 | 
						|
   * backwards, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionBackwardAction = "selection-backward";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the document, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionBeginAction = "selection-begin";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the current line, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionBeginLineAction = "selection-begin-line";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the current paragraph, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionBeginParagraphAction =
 | 
						|
    "selection-begin-paragraph";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the current word, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionBeginWordAction = "selection-begin-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one line down,
 | 
						|
   * possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionDownAction = "selection-down";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the end
 | 
						|
   * of the document, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionEndAction = "selection-end";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the end
 | 
						|
   * of the current line, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionEndLineAction = "selection-end-line";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the end
 | 
						|
   * of the current paragraph, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionEndParagraphAction =
 | 
						|
    "selection-end-paragraph";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the end
 | 
						|
   * of the current word, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionEndWordAction = "selection-end-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one character
 | 
						|
   * forwards, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionForwardAction = "selection-forward";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the next word, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionNextWordAction = "selection-next-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret to the beginning
 | 
						|
   * of the previous word, possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionPreviousWordAction =
 | 
						|
    "selection-previous-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one line up,
 | 
						|
   * possibly extending the current selection.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectionUpAction = "selection-up";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that selects the line around the
 | 
						|
   * caret.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectLineAction = "select-line";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that selects the paragraph around the
 | 
						|
   * caret.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectParagraphAction = "select-paragraph";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that selects the word around the
 | 
						|
   * caret.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String selectWordAction = "select-word";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that moves the caret one line up.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String upAction = "caret-up";
 | 
						|
 | 
						|
  /**
 | 
						|
   * The name of the <code>Action</code> that sets the editor in read-write
 | 
						|
   * mode.
 | 
						|
   *
 | 
						|
   * @see #getActions()
 | 
						|
   */
 | 
						|
  public static final String writableAction = "set-writable";
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new <code>DefaultEditorKit</code>.
 | 
						|
   */
 | 
						|
  public DefaultEditorKit()
 | 
						|
  {
 | 
						|
    // Nothing to do here.
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * The <code>Action</code>s that are supported by the
 | 
						|
   * <code>DefaultEditorKit</code>.
 | 
						|
   */
 | 
						|
  private static Action[] defaultActions =
 | 
						|
  new Action[] {
 | 
						|
    // These classes are public because they are so in the RI.
 | 
						|
    new BeepAction(),
 | 
						|
    new CopyAction(),
 | 
						|
    new CutAction(),
 | 
						|
    new DefaultKeyTypedAction(),
 | 
						|
    new InsertBreakAction(),
 | 
						|
    new InsertContentAction(),
 | 
						|
    new InsertTabAction(),
 | 
						|
    new PasteAction(),
 | 
						|
 | 
						|
    // These are (package-)private inner classes.
 | 
						|
    new DeleteNextCharAction(),
 | 
						|
    new DeletePrevCharAction(),
 | 
						|
 | 
						|
    new BeginLineAction(),
 | 
						|
    new SelectionBeginLineAction(),
 | 
						|
 | 
						|
    new EndLineAction(),
 | 
						|
    new SelectionEndLineAction(),
 | 
						|
 | 
						|
    new BackwardAction(),
 | 
						|
    new SelectionBackwardAction(),
 | 
						|
 | 
						|
    new ForwardAction(),
 | 
						|
    new SelectionForwardAction(),
 | 
						|
 | 
						|
    new UpAction(),
 | 
						|
    new SelectionUpAction(),
 | 
						|
 | 
						|
    new DownAction(),
 | 
						|
    new SelectionDownAction(),
 | 
						|
 | 
						|
    new NextWordAction(),
 | 
						|
    new SelectionNextWordAction(),
 | 
						|
 | 
						|
    new PreviousWordAction(),
 | 
						|
    new SelectionPreviousWordAction(),
 | 
						|
 | 
						|
    new BeginAction(),
 | 
						|
    new SelectionBeginAction(),
 | 
						|
 | 
						|
    new EndAction(),
 | 
						|
    new SelectionEndAction(),
 | 
						|
 | 
						|
    new BeginWordAction(),
 | 
						|
    new SelectionBeginWordAction(),
 | 
						|
 | 
						|
    new EndWordAction(),
 | 
						|
    new SelectionEndWordAction(),
 | 
						|
 | 
						|
    new SelectAllAction(),
 | 
						|
    new SelectLineAction(),
 | 
						|
    new SelectWordAction()
 | 
						|
  };
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates the <code>Caret</code> for this <code>EditorKit</code>. This
 | 
						|
   * returns a {@link DefaultCaret} in this case.
 | 
						|
   *
 | 
						|
   * @return the <code>Caret</code> for this <code>EditorKit</code>
 | 
						|
   */
 | 
						|
  public Caret createCaret()
 | 
						|
  {
 | 
						|
    return new DefaultCaret();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates the default {@link Document} that this <code>EditorKit</code>
 | 
						|
   * supports. This is a {@link PlainDocument} in this case.
 | 
						|
   *
 | 
						|
   * @return the default {@link Document} that this <code>EditorKit</code>
 | 
						|
   *         supports
 | 
						|
   */
 | 
						|
  public Document createDefaultDocument()
 | 
						|
  {
 | 
						|
    return new PlainDocument();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the <code>Action</code>s supported by this <code>EditorKit</code>.
 | 
						|
   *
 | 
						|
   * @return the <code>Action</code>s supported by this <code>EditorKit</code>
 | 
						|
   */
 | 
						|
  public Action[] getActions()
 | 
						|
  {
 | 
						|
    return defaultActions;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the content type that this <code>EditorKit</code> supports.
 | 
						|
   * The <code>DefaultEditorKit</code> supports the content type
 | 
						|
   * <code>text/plain</code>.
 | 
						|
   *
 | 
						|
   * @return the content type that this <code>EditorKit</code> supports
 | 
						|
   */
 | 
						|
  public String getContentType()
 | 
						|
  {
 | 
						|
    return "text/plain";
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns a {@link ViewFactory} that is able to create {@link View}s for
 | 
						|
   * the <code>Element</code>s that are used in this <code>EditorKit</code>'s
 | 
						|
   * model. This returns null which lets the UI of the text component supply
 | 
						|
   * <code>View</code>s.
 | 
						|
   *
 | 
						|
   * @return a {@link ViewFactory} that is able to create {@link View}s for
 | 
						|
   *         the <code>Element</code>s that are used in this
 | 
						|
   *         <code>EditorKit</code>'s model
 | 
						|
   */
 | 
						|
  public ViewFactory getViewFactory()
 | 
						|
  {
 | 
						|
    return null;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Reads a document of the supported content type from an {@link InputStream}
 | 
						|
   * into the actual {@link Document} object.
 | 
						|
   *
 | 
						|
   * @param in the stream from which to read the document
 | 
						|
   * @param document the document model into which the content is read
 | 
						|
   * @param offset the offset inside to document where the content is inserted
 | 
						|
   *
 | 
						|
   * @throws BadLocationException if <code>offset</code> is an invalid location
 | 
						|
   *         inside <code>document</code>
 | 
						|
   * @throws IOException if something goes wrong while reading from
 | 
						|
   *        <code>in</code>
 | 
						|
   */
 | 
						|
  public void read(InputStream in, Document document, int offset)
 | 
						|
    throws BadLocationException, IOException
 | 
						|
  {
 | 
						|
    read(new InputStreamReader(in), document, offset);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Reads a document of the supported content type from a {@link Reader}
 | 
						|
   * into the actual {@link Document} object.
 | 
						|
   *
 | 
						|
   * @param in the reader from which to read the document
 | 
						|
   * @param document the document model into which the content is read
 | 
						|
   * @param offset the offset inside to document where the content is inserted
 | 
						|
   *
 | 
						|
   * @throws BadLocationException if <code>offset</code> is an invalid location
 | 
						|
   *         inside <code>document</code>
 | 
						|
   * @throws IOException if something goes wrong while reading from
 | 
						|
   *        <code>in</code>
 | 
						|
   */
 | 
						|
  public void read(Reader in, Document document, int offset)
 | 
						|
    throws BadLocationException, IOException
 | 
						|
  {
 | 
						|
    BufferedReader reader = new BufferedReader(in);
 | 
						|
 | 
						|
    String line;
 | 
						|
    CPStringBuilder content = new CPStringBuilder();
 | 
						|
 | 
						|
    while ((line = reader.readLine()) != null)
 | 
						|
      {
 | 
						|
        content.append(line);
 | 
						|
        content.append("\n");
 | 
						|
      }
 | 
						|
 | 
						|
    document.insertString(offset, content.substring(0, content.length() - 1),
 | 
						|
                          SimpleAttributeSet.EMPTY);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Writes the <code>Document</code> (or a fragment of the
 | 
						|
   * <code>Document</code>) to an {@link OutputStream} in the
 | 
						|
   * supported content type format.
 | 
						|
   *
 | 
						|
   * @param out the stream to write to
 | 
						|
   * @param document the document that should be written out
 | 
						|
   * @param offset the beginning offset from where to write
 | 
						|
   * @param len the length of the fragment to write
 | 
						|
   *
 | 
						|
   * @throws BadLocationException if <code>offset</code> or
 | 
						|
   *         <code>offset + len</code>is an invalid location inside
 | 
						|
   *         <code>document</code>
 | 
						|
   * @throws IOException if something goes wrong while writing to
 | 
						|
   *        <code>out</code>
 | 
						|
   */
 | 
						|
  public void write(OutputStream out, Document document, int offset, int len)
 | 
						|
    throws BadLocationException, IOException
 | 
						|
  {
 | 
						|
    write(new OutputStreamWriter(out), document, offset, len);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Writes the <code>Document</code> (or a fragment of the
 | 
						|
   * <code>Document</code>) to a {@link Writer} in the
 | 
						|
   * supported content type format.
 | 
						|
   *
 | 
						|
   * @param out the writer to write to
 | 
						|
   * @param document the document that should be written out
 | 
						|
   * @param offset the beginning offset from where to write
 | 
						|
   * @param len the length of the fragment to write
 | 
						|
   *
 | 
						|
   * @throws BadLocationException if <code>offset</code> is an
 | 
						|
   * invalid location inside <code>document</code>.
 | 
						|
   * @throws IOException if something goes wrong while writing to
 | 
						|
   *        <code>out</code>
 | 
						|
   */
 | 
						|
  public void write(Writer out, Document document, int offset, int len)
 | 
						|
      throws BadLocationException, IOException
 | 
						|
  {
 | 
						|
    // Throw a BLE if offset is invalid
 | 
						|
    if (offset < 0 || offset > document.getLength())
 | 
						|
      throw new BadLocationException("Tried to write to invalid location",
 | 
						|
                                     offset);
 | 
						|
 | 
						|
    // If they gave an overly large len, just adjust it
 | 
						|
    if (offset + len > document.getLength())
 | 
						|
      len = document.getLength() - offset;
 | 
						|
 | 
						|
    out.write(document.getText(offset, len));
 | 
						|
  }
 | 
						|
}
 |