csword.java
来自「java写的多功能文件编辑器」· Java 代码 · 共 164 行
JAVA
164 行
/* * 11/27/2000 - 15:04:22 * * PrevCsWord.java - Finds previous case-sensitive word. * Copyright (C) 2000 Matt Benson * * 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.jext.textarea;import java.util.Arrays;import java.awt.event.ActionEvent;import javax.swing.text.BadLocationException;import org.gjt.sp.jedit.textarea.TextUtilities;import org.jext.JextTextArea;import org.jext.MenuAction;public class CsWord extends MenuAction{ public static final String[] DIRECTIONS = { "bkd", "fwd"}; public static final String[] ACTIONS = { "nil", "sel", "del"}; public static final int NO_ACTION = 0; public static final int SELECT = 1; public static final int DELETE = 2; private int action; private int direction; public CsWord(int action, int direction) { super("CsWord_" + "_" + ACTIONS[action] + "_" + DIRECTIONS[((direction > 0) ? 1 : 0)]); this.action = action; this.direction = direction; }//end constructor public void actionPerformed(ActionEvent evt) { JextTextArea textArea = getTextArea(evt); int start = textArea.getSelectionStart(); if (action == DELETE) { if (start != textArea.getSelectionEnd()) { textArea.setSelectedText(""); return; }//end if a selection exists }//end if action == DELETE int caret = textArea.getCaretPosition(); int line = textArea.getCaretLine(); int lineStart = textArea.getLineStartOffset(line); caret -= lineStart; String lineText = textArea.getLineText(textArea.getCaretLine()); caret += direction; try { int origCaret = caret; char origChar = lineText.charAt(caret); if (direction == TextUtilities.FORWARD) { char checkChar = lineText.charAt(caret - direction); if (!(Character.isLetterOrDigit(checkChar))) { caret -= direction; origChar = checkChar; }//end if Character.isLetterOrDigit(checkChar) }//end if FORWARD and not letter or digit caret = TextUtilities.findTypeChange(lineText, caret, direction); if (origCaret != caret) { char caretChar = lineText.charAt(caret); if ((!(Character.isLetterOrDigit(origChar) && Character.isLetterOrDigit(caretChar))// (these two || (Character.isUpperCase(origChar) && Character.isLowerCase(caretChar)))// or these two) && (direction == TextUtilities.BACKWARD))//and this { caret -= direction; }//end big fat if statement if ((Character.isLetterOrDigit(origChar) && Character.isLetterOrDigit(lineText.charAt(caret))) && (caret + 1 == lineText.length()) && direction == TextUtilities.FORWARD) { caret += direction; }//end 2nd big fat if statement if (Character.isWhitespace(origChar) && Character.isWhitespace(caretChar)) { try { while (Character.isWhitespace(lineText.charAt(caret))) { caret += direction; }//end while more white space (different types) }//end try catch (IndexOutOfBoundsException oobe_wan_kenoobi) { caret -= direction; }//end catch IndexOutOfBoundsException }//end if whitespace characters }//end if origCaret == caret }//end try catch (IndexOutOfBoundsException oobe) { try { textArea.getText().charAt(lineStart + caret); }//end try catch (IndexOutOfBoundsException oobeII) { textArea.getToolkit().beep(); return; }//end catch }//end catch if (action == SELECT) { textArea.select(textArea.getMarkPosition(), lineStart + caret); }//end if select else { if (action == DELETE) { try { int documentPosition = caret + lineStart; int length = Math.abs(start - documentPosition); textArea.getDocument().remove( ((direction == TextUtilities.FORWARD) ? start : documentPosition), length); }//end try to remove word catch (BadLocationException bl) { bl.printStackTrace(); }//end catch }//end else else { textArea.setCaretPosition(lineStart + caret); }//end else }//end else }//end actionPerformed}//end class CsWord// End of CsWord.java
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?