⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 registers.java

📁 Java写的文本编辑器
💻 JAVA
字号:
/* * Registers.java - Register manager * Copyright (C) 1999, 2000, 2001 Slava Pestov * * This program 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 * of the License, or any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */package org.gjt.sp.jedit;import javax.swing.text.*;import java.lang.reflect.*;import java.awt.datatransfer.*;import java.awt.Toolkit;import java.io.*;import java.util.Vector;import org.gjt.sp.jedit.gui.*;import org.gjt.sp.jedit.textarea.JEditTextArea;import org.gjt.sp.util.Log;/** * jEdit's registers are an extension of the clipboard metaphor. * * @author Slava Pestov * @version $Id: Registers.java,v 1.1.1.1 2001/09/02 05:37:26 spestov Exp $ */public class Registers{	/**	 * Convinience method that copies the text selected in the specified	 * text area into the specified register.	 * @param textArea The text area	 * @param register The register	 * @since jEdit 2.7pre2	 */	public static void copy(JEditTextArea textArea, char register)	{		String selection = textArea.getSelectedText();		if(selection == null)			return;		setRegister(register,selection);		HistoryModel.getModel("clipboard").addItem(selection);	}	/**	 * Convinience method that appends the text selected in the specified	 * text area to the specified register, with a newline between the old	 * and new text.	 * @param textArea The text area	 * @param register The register	 */	public static void append(JEditTextArea textArea, char register)	{		append(textArea,register,"\n",false);	}	/**	 * Convinience method that appends the text selected in the specified	 * text area to the specified register.	 * @param textArea The text area	 * @param register The register	 * @param separator The text to insert between the old and new text	 */	public static void append(JEditTextArea textArea, char register,		String separator)	{		append(textArea,register,separator,false);	}	/**	 * Convinience method that appends the text selected in the specified	 * text area to the specified register.	 * @param textArea The text area	 * @param register The register	 * @param separator The text to insert between the old and new text	 * @param cut Should the current selection be removed?	 * @since jEdit 3.2pre1	 */	public static void append(JEditTextArea textArea, char register,		String separator, boolean cut)	{		if(cut && !textArea.isEditable())		{			textArea.getToolkit().beep();			return;		}		String selection = textArea.getSelectedText();		if(selection == null)			return;		Register reg = getRegister(register);		String registerContents = reg.toString();		if(reg != null && registerContents != null)		{			if(registerContents.endsWith(separator))				selection = registerContents + selection;			else				selection = registerContents + separator + selection;		}		setRegister(register,selection);		HistoryModel.getModel("clipboard").addItem(selection);		if(cut)			textArea.setSelectedText("");	}	/**	 * Convinience method that copies the text selected in the specified	 * text area into the specified register, and then removes it from the	 * text area.	 * @param textArea The text area	 * @param register The register	 * @since jEdit 2.7pre2	 */	public static void cut(JEditTextArea textArea, char register)	{		if(textArea.isEditable())		{			String selection = textArea.getSelectedText();			if(selection == null)				return;			setRegister(register,selection);			HistoryModel.getModel("clipboard").addItem(selection);			textArea.setSelectedText("");		}		else			textArea.getToolkit().beep();	}	/**	 * Convinience method that pastes the contents of the specified	 * register into the text area.	 * @param textArea The text area	 * @param register The register	 * @since jEdit 2.7pre2	 */	public static void paste(JEditTextArea textArea, char register)	{		if(!textArea.isEditable())		{			textArea.getToolkit().beep();			return;		}		Register reg = getRegister(register);		if(reg == null)		{			textArea.getToolkit().beep();			return;		}		else		{			String selection = reg.toString();			if(selection == null)			{				textArea.getToolkit().beep();				return;			}			// preserve magic pos for easy insertion of the			// same string at the start of multiple lines			int magic = textArea.getMagicCaretPosition();			textArea.setSelectedText(selection);			if(textArea.getCaretPosition()				!= textArea.getLineEndOffset(textArea.getCaretLine()) - 1)			{				textArea.setMagicCaretPosition(magic);			}			else			{				// if user is pasting at end of line, chances are				// they want the caret to go the the end of the				// line again when they move it up or down			}			HistoryModel.getModel("clipboard").addItem(selection);		}	}	/**	 * Returns the specified register.	 * @param name The name	 */	public static Register getRegister(char name)	{		if(registers == null || name >= registers.length)			return null;		else			return registers[name];	}	/**	 * Sets the specified register.	 * @param name The name	 * @param newRegister The new value	 */	public static void setRegister(char name, Register newRegister)	{		if(name >= registers.length)		{			Register[] newRegisters = new Register[				Math.min(1<<16,name * 2)];			System.arraycopy(registers,0,newRegisters,0,				registers.length);			registers = newRegisters;		}		registers[name] = newRegister;	}	/**	 * Sets the specified register.	 * @param name The name	 * @param value The new value	 */	public static void setRegister(char name, String value)	{		if(name >= registers.length)		{			Register[] newRegisters = new Register[				Math.min(1<<16,name * 2)];			System.arraycopy(registers,0,newRegisters,0,				registers.length);			registers = newRegisters;			registers[name] = new StringRegister(value);		}		else		{			Register register = registers[name];			if(register != null)				register.setValue(value);			else				registers[name] = new StringRegister(value);		}	}	/**	 * Clears (i.e. it's value to null) the specified register.	 * @param name The register name	 */	public static void clearRegister(char name)	{		if(name >= registers.length)			return;		Register register = registers[name];		if(name == '$' || name == '%')			register.setValue("");		else			registers[name] = null;	}	/**	 * Returns an array of all available registers. Some of the elements	 * of this array might be null.	 */	public static Register[] getRegisters()	{		return registers;	}	/**	 * A register.	 */	public interface Register	{		/**		 * Converts to a string.		 */		String toString();		/**		 * Sets the register contents.		 */		void setValue(String value);	}	/**	 * A clipboard register. Register "$" should always be an	 * instance of this.	 */	public static class ClipboardRegister implements Register	{		Clipboard clipboard;		public ClipboardRegister(Clipboard clipboard)		{			this.clipboard = clipboard;		}		/**		 * Sets the clipboard contents.		 */		public void setValue(String value)		{			StringSelection selection = new StringSelection(value);			clipboard.setContents(selection,null);		}		/**		 * Returns the clipboard contents.		 */		public String toString()		{			try			{				String selection = (String)(clipboard					.getContents(this).getTransferData(					DataFlavor.stringFlavor));				boolean trailingEOL = (selection.endsWith("\n")					|| selection.endsWith(System.getProperty(					"line.separator")));				// Some Java versions return the clipboard				// contents using the native line separator,				// so have to convert it here				BufferedReader in = new BufferedReader(					new StringReader(selection));				StringBuffer buf = new StringBuffer();				String line;				while((line = in.readLine()) != null)				{					buf.append(line);					buf.append('\n');				}				// remove trailing \n				if(!trailingEOL)					buf.setLength(buf.length() - 1);				return buf.toString();			}			catch(Exception e)			{				Log.log(Log.NOTICE,this,e);				return null;			}		}	}	/**	 * Register that stores a string.	 */	public static class StringRegister implements Register	{		private String value;		/**		 * Creates a new string register.		 * @param value The contents		 */		public StringRegister(String value)		{			this.value = value;		}		/**		 * Sets the register contents.		 */		public void setValue(String value)		{			this.value = value;		}		/**		 * Converts to a string.		 */		public String toString()		{			return value;		}		/**		 * Called when this register is no longer available. This		 * implementation does nothing.		 */		public void dispose() {}	}	// private members	private static Register[] registers;	private Registers() {}	static	{		registers = new Register[256];		registers['$'] = new ClipboardRegister(Toolkit			.getDefaultToolkit().getSystemClipboard());		// Check for Java 1.4 method that returns PRIMARY selection		// on X Windows		try		{			Method method = Toolkit.class.getMethod(				"getSystemSelection",new Class[0]);			Clipboard selection = (Clipboard)method.invoke(				Toolkit.getDefaultToolkit(),new Object[0]);			if(selection != null)			{				Log.log(Log.DEBUG,Registers.class,					"Toolkit.getSystemSelection() detected");				Log.log(Log.DEBUG,Registers.class,"% register is system selection");				registers['%'] = new ClipboardRegister(selection);			}			else			{				Log.log(Log.DEBUG,Registers.class,					"Toolkit.getSystemSelection() "					+ "detected, but returns null");				Log.log(Log.DEBUG,Registers.class,"% register is jEdit-specific");				registers['%'] = new StringRegister("");			}		}		catch(Exception e)		{			Log.log(Log.DEBUG,Registers.class,				"Toolkit.getSystemSelection() not detected");			Log.log(Log.DEBUG,Registers.class,"% register is jEdit-specific");			registers['%'] = new StringRegister("");		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -