All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.swabunga.spell.DefaultWordFinder Maven / Gradle / Ivy

The newest version!
/*
Jazzy - a Java library for Spell Checking
Copyright (C) 2001 Mindaugas Idzelis
Full text of license can be found in LICENSE.txt

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library 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
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
package com.swabunga.spell;

import com.swabunga.spell.event.Word;

/**
 * A basic word finder, which searches text for sequences of letters.
 * 
 * @author Anthony Roy ([email protected])
 */
public class DefaultWordFinder extends AbstractWordFinder {

    // ~ Instance/static variables
    // ...............................................

    // ~ Constructors
    // ............................................................

    /**
     * Creates a new DefaultWordFinder object.
     * 
     * @param inText the String to search
     */
    public DefaultWordFinder(String inText) {
        super(inText);
    }

    /**
     * Creates a new DefaultWordFinder object.
     */
    public DefaultWordFinder() {
        super();
    }

    // ~ Methods
    // .................................................................

    /**
     * This method scans the text from the end of the last word, and returns a
     * new Word object corresponding to the next word.
     * 
     * @return the next word.
     * @throws WordNotFoundException search string contains no more words.
     */
    public Word next() {
        if (nextWord == null) {
            throw new WordNotFoundException("No more words found.");
        }
        currentWord.copy(nextWord);
        setSentenceIterator(currentWord);

        int i = currentWord.getEnd();
        boolean finished = false;

        while (i < text.length() && !finished) {
            if (isWordChar(i)) {
                nextWord.setStart(i);
                int end = getNextWordEnd(text, i);
                nextWord.setText(text.substring(i, end));
                finished = true;
            }
            i++;
        }
        if (!finished)
            nextWord = null;

        return currentWord;
    }

    /**
     * Returns the position in the string after the end of the next
     * word. Note that this return value should not be used as an index into the
     * string without checking first that it is in range, since it is possible
     * for the value text.length() to be returned by this method.
     */
    private int getNextWordEnd(String text, int startPos) {
        // If we're dealing with a possible 'internet word' we need to provide
        // some special handling
        if (SpellChecker.isINETWord(text.substring(startPos))) {
            for (int i = startPos; i < text.length(); i++) {
                char ch = text.charAt(i);
                if (Character.isLetterOrDigit(ch))
                    continue;

                if (ch == '\r' || ch == '\n')
                    return i;
                // Chop off any characters that might be enclosing the 'internet
                // word'. eg ',",),]
                if (Character.isSpaceChar(ch))
                    if (i > 0 && Character.isLetterOrDigit(text.charAt(i - 1)))
                        return i;
                    else
                        return i - 1;
            }
            return text.length();
        } else {
            for (int i = startPos; i < text.length(); i++) {
                if (!isWordChar(i))
                    return i;
            }
            return text.length();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy