|
What this is
Other links
The source code/* * 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 |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.