spyglass/src/main/java/com/linkedin/android/spyglass/tokenization/impl/WordTokenizer.java
protected int getSearchEndIndex(final @NonNull Spanned text, int cursor) {
        if (cursor < 0 || cursor > text.length()) {
            cursor = 0;
        }

        // Get index of the start of the first span after the cursor (or text.length() if does not exist)
        MentionSpan[] spans = text.getSpans(0, text.length(), MentionSpan.class);
        int closestAfterCursor = text.length();
        for (MentionSpan span : spans) {
            int start = text.getSpanStart(span);
            if (start < closestAfterCursor && start >= cursor) {
                closestAfterCursor = start;
            }
        }

        // Get the index of the end of the line
        String textString = text.toString().substring(cursor, text.length());
        int lineEndIndex = text.length();
        if (textString.contains(mConfig.LINE_SEPARATOR)) {
            lineEndIndex = cursor + textString.indexOf(mConfig.LINE_SEPARATOR);
        }

        // Return whichever is closest after the cursor
        return Math.min(closestAfterCursor, lineEndIndex);
    }
protected int getSearchEndIndex(final @NonNull Spanned text, int cursor) {
        if (cursor < 0 || cursor > text.length()) {
            cursor = 0;
        }

        // Get index of the start of the first span after the cursor (or text.length() if does not exist)
        MentionSpan[] spans = text.getSpans(0, text.length(), MentionSpan.class);
        int closestAfterCursor = text.length();
        for (MentionSpan span : spans) {
            int start = text.getSpanStart(span);
            if (start < closestAfterCursor && start >= cursor) {
                closestAfterCursor = start;
            }
        }

        // Get the index of the end of the line
        String textString = text.toString().substring(cursor, text.length());
        int lineEndIndex = text.length();
        if (textString.contains(mConfig.LINE_SEPARATOR)) {
            lineEndIndex = cursor + textString.indexOf(mConfig.LINE_SEPARATOR);
        }

        // Return whichever is closest after the cursor
        return Math.min(closestAfterCursor, lineEndIndex);
    }
protected int getSearchEndIndex ( final @ NonNull Spanned text , int cursor ) { if ( cursor < 0 || cursor > text . length ( ) ) { cursor = 0 ; } // Get index of the start of the first span after the cursor (or text.length() if does not exist) MentionSpan [ ] spans = text . getSpans ( 0 , text . length ( ) , MentionSpan . class ) ; int closestAfterCursor = text . length ( ) ; for ( MentionSpan span : spans ) { int start = text . getSpanStart ( span ) ; if ( start < closestAfterCursor && start >= cursor ) { closestAfterCursor = start ; } } // Get the index of the end of the line String textString = text . toString ( ) . substring ( cursor , text . length ( ) ) ; int lineEndIndex = text . length ( ) ; if ( textString . contains ( mConfig . LINE_SEPARATOR ) ) { lineEndIndex = cursor + textString . indexOf ( mConfig . LINE_SEPARATOR ) ; } // Return whichever is closest after the cursor return Math . min ( closestAfterCursor , lineEndIndex ) ; }
Returns the index of the beginning of the first span after the cursor or
length of the text if there are no spans after the cursor.

@param text   the {@link Spanned} to examine
@param cursor position of the cursor in text

@return the furthest behind the cursor to search for the current keywords
Returns the index of the beginning of the first span after the cursor or length of the text if there are no spans after the cursor .