private void withinParagraph ( final Spanned text , int start , int end ) { // create sorted set of CharacterStyles SortedSet < CharacterStyle > sortedSpans = new TreeSet <> ( ( s1 , s2 ) -> { int start1 = text . getSpanStart ( s1 ) ; int start2 = text . getSpanStart ( s2 ) ; if ( start1 != start2 ) return start1 - start2 ; // span which starts first comes first int end1 = text . getSpanEnd ( s1 ) ; int end2 = text . getSpanEnd ( s2 ) ; if ( end1 != end2 ) return end2 - end1 ; // longer span comes first // if the paragraphs have the same span [start, end] we compare their name // compare the name only because local + anonymous classes have no canonical name return s1 . getClass ( ) . getName ( ) . compareTo ( s2 . getClass ( ) . getName ( ) ) ; } ) ; List < CharacterStyle > spanList = Arrays . asList ( text . getSpans ( start , end , CharacterStyle . class ) ) ; sortedSpans . addAll ( spanList ) ; // process paragraphs/divs convertText ( text , start , end , sortedSpans ) ; }
Convert a spanned text within a paragraph