Java JTextComponent Word getWordDimensionBeforeCaret(JTextComponent editor)

Here you can find the source of getWordDimensionBeforeCaret(JTextComponent editor)

Description

get Word Dimension Before Caret

License

Apache License

Declaration

public static Dimension getWordDimensionBeforeCaret(JTextComponent editor) 

Method Source Code

//package com.java2s;
//License from project: Apache License 

import javax.swing.text.BadLocationException;

import javax.swing.text.JTextComponent;
import java.awt.*;

public class Main {
    public static Dimension getWordDimensionBeforeCaret(JTextComponent editor) {
        try {/*from  w  w  w.j av a 2  s. c om*/
            int iEnd = editor.getCaretPosition();
            int iStart = getPreviousWord(editor, iEnd);

            editor.getText(iStart, iEnd - iStart);
            return new Dimension(iStart, iEnd);
        } catch (BadLocationException e) {
            return null;
        }
    }

    private static int getPreviousWord(JTextComponent editor, int iOffset) throws BadLocationException {
        String text = editor.getText();
        int iStart = getWordStart(editor, iOffset);
        for (iOffset = iStart - 1; iOffset >= 0 && Character.isWhitespace(text.charAt(iOffset)); iOffset--)
            ;
        if (iOffset < 0) {
            return iStart;
        }
        return getWordStart(editor, iOffset);
    }

    public static int getWordStart(JTextComponent editor, int iOffset) throws BadLocationException {
        String text = editor.getText();
        iOffset = maybeAdjustOffsetToNextWord(text, iOffset);

        int iStart = iOffset;
        for (; iStart > 0 && Character.isJavaIdentifierPart(text.charAt(iStart)); iStart--)
            ;
        if (iStart != iOffset) {
            iStart++;
        }
        return iStart;
    }

    private static int maybeAdjustOffsetToNextWord(String text, int iOffset) throws BadLocationException {
        if (text.length() < iOffset) {
            throw new BadLocationException("Index out of bounds. Offset: " + iOffset + "  Length: " + text.length(),
                    iOffset);
        }

        if (iOffset > 0 && !text.isEmpty()
                && (text.length() == iOffset || Character.isWhitespace(text.charAt(iOffset)))) {
            if (Character.isWhitespace(text.charAt(iOffset - 1))) {
                while (iOffset < text.length()) {
                    if (!Character.isWhitespace(text.charAt(iOffset))) {
                        return iOffset;
                    }
                    iOffset++;
                }
            }
            iOffset--;
        }
        return iOffset;
    }
}

Related

  1. getNextWordInParagraph(JTextComponent c, Element line, int offs, boolean first)
  2. getPartialWordBeforePos(JTextComponent editor, int iPos)
  3. getPreviousWord(JTextComponent editor, int iOffset)
  4. getWordAtCaret(JTextComponent editor)
  5. getWordDimensionAtCaret(JTextComponent editor)
  6. getWordEnd(JTextComponent c, int offs)
  7. getWordEnd(JTextComponent editor, int iOffset)
  8. getWordStart(JTextComponent c, int offs)
  9. getWordWrappedTextDimension(JTextComponent textComponent, int width)