|
What this is
Other links
The source code/* * 06/27/2002 - 16:34:29 * * CompleteWord.java * Portions copyright (C) 1998-2000 Slava Pestov and Valery Kondakoff * * 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.actions; import java.awt.event.ActionEvent; import java.util.TreeSet; import java.util.Iterator; import javax.swing.text.Element; import javax.swing.text.Document; import javax.swing.text.BadLocationException; import org.jext.*; import org.jext.misc.*; import org.gjt.sp.jedit.textarea.*; public class CompleteWord extends MenuAction implements EditAction { public CompleteWord() { super("complete_word"); } public void actionPerformed(ActionEvent evt) { JextFrame parent = getJextParent(evt); JextTextArea textArea = parent.getTextArea(); Document buffer = textArea.getDocument(); String noWordSep = textArea.getProperty("noWordSep"); if (noWordSep == null) noWordSep = ""; String line = textArea.getLineText(textArea.getCaretLine()); int dot = textArea.getCaretPosition() - textArea.getLineStartOffset(textArea.getCaretLine()); if (dot == 0) return; int wordStart = TextUtilities.findWordStart(line, dot - 1, noWordSep); String word = line.substring(wordStart, dot); if (word.length() == 0) return; parent.showWaitCursor(); TreeSet completions = new TreeSet(); int wordLen = word.length(); for (int i = 0; i < textArea.getLineCount(); i++) { line = textArea.getLineText(i); if (line.startsWith(word)) { String _word = getWord(line, 0, noWordSep); if (_word.length() != wordLen) { completions.add(_word); } } int len = line.length() - word.length(); for (int j = 0; j < len; j++) { char c = line.charAt(j); if (!Character.isLetterOrDigit(c) && noWordSep.indexOf(c) == -1) { if (line.regionMatches(j + 1, word, 0, wordLen)) { String _word = getWord(line, j + 1, noWordSep); if (_word.length() != wordLen) { completions.add(_word); } } } } } if (completions.size() > 1) { //look for a common partial match int endIndex = String.valueOf(completions.first()).length(); Iterator iter = completions.iterator(); while (iter.hasNext()) { endIndex = Math.min(endIndex, getDivergentIndex(String.valueOf(completions.first()), String.valueOf(iter.next()))); }//end while more elements parent.hideWaitCursor(); if (endIndex > wordLen) { textArea.setSelectedText( String.valueOf(completions.first()).substring(wordLen, endIndex)); }//end if a partial match was found else { new CompleteWordList(parent, word, (String[])(completions.toArray(new String[completions.size()]))); }//end else--all matches unique beyond what was originally typed }//end if more than one possible completion else { parent.hideWaitCursor(); if (completions.size() == 1) { textArea.setSelectedText( String.valueOf(completions.first()).substring(wordLen)); }//end if only one possible completion }//end else, one or zero completions }//end actionPerformed private int getDivergentIndex(String str1, String str2) { int result = str1.length(); if (!(str1.equals(str2))) { for (result = 0; result < str1.length() && result < str2.length() && str1.charAt(result) == str2.charAt(result); result++); }//end if the Strings are not equal return result; }//end getDivergentIndex private String getWord(String line, int offset, String noWordSep) { int wordEnd = TextUtilities.findWordEnd(line, offset + 1, noWordSep); return line.substring(offset, wordEnd); } } // End of CompleteWord.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.