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

        // Get index of the end of the last span before the cursor (or 0 if does not exist)
        MentionSpan[] spans = text.getSpans(0, text.length(), MentionSpan.class);
        int closestToCursor = 0;
        for (MentionSpan span : spans) {
            int end = text.getSpanEnd(span);
            if (end > closestToCursor && end <= cursor) {
                closestToCursor = end;
            }
        }

        // Get the index of the start of the line
        String textString = text.toString().substring(0, cursor);
        int lineStartIndex = 0;
        if (textString.contains(mConfig.LINE_SEPARATOR)) {
            lineStartIndex = textString.lastIndexOf(mConfig.LINE_SEPARATOR) + 1;
        }

        // Return whichever is closer before to the cursor
        return Math.max(closestToCursor, lineStartIndex);
    }
protected int getSearchStartIndex(final @NonNull Spanned text, int cursor) {
        if (cursor < 0 || cursor > text.length()) {
            cursor = 0;
        }

        // Get index of the end of the last span before the cursor (or 0 if does not exist)
        MentionSpan[] spans = text.getSpans(0, text.length(), MentionSpan.class);
        int closestToCursor = 0;
        for (MentionSpan span : spans) {
            int end = text.getSpanEnd(span);
            if (end > closestToCursor && end <= cursor) {
                closestToCursor = end;
            }
        }

        // Get the index of the start of the line
        String textString = text.toString().substring(0, cursor);
        int lineStartIndex = 0;
        if (textString.contains(mConfig.LINE_SEPARATOR)) {
            lineStartIndex = textString.lastIndexOf(mConfig.LINE_SEPARATOR) + 1;
        }

        // Return whichever is closer before to the cursor
        return Math.max(closestToCursor, lineStartIndex);
    }
protected int getSearchStartIndex ( final @ NonNull Spanned text , int cursor ) { if ( cursor < 0 || cursor > text . length ( ) ) { cursor = 0 ; } // Get index of the end of the last span before the cursor (or 0 if does not exist) MentionSpan [ ] spans = text . getSpans ( 0 , text . length ( ) , MentionSpan . class ) ; int closestToCursor = 0 ; for ( MentionSpan span : spans ) { int end = text . getSpanEnd ( span ) ; if ( end > closestToCursor && end <= cursor ) { closestToCursor = end ; } } // Get the index of the start of the line String textString = text . toString ( ) . substring ( 0 , cursor ) ; int lineStartIndex = 0 ; if ( textString . contains ( mConfig . LINE_SEPARATOR ) ) { lineStartIndex = textString . lastIndexOf ( mConfig . LINE_SEPARATOR ) + 1 ; } // Return whichever is closer before to the cursor return Math . max ( closestToCursor , lineStartIndex ) ; }
Returns the index of the end of the last span before the cursor or
the start of the current line if there are no spans before the cursor.

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

@return the furthest in front of the cursor to search for the current keywords
Returns the index of the end of the last span before the cursor or the start of the current line if there are no spans before the cursor .