Created
May 8, 2018 08:04
-
-
Save hypest/a949f42c167a7ce4884067ace57a51ed to your computer and use it in GitHub Desktop.
custom data view renderer to visualize the spans structure
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.wordpress.aztec | |
import android.text.Spanned | |
import android.text.TextUtils | |
import java.util.* | |
/** | |
* Created by hypest on 11/01/17. | |
*/ | |
object SpanLogger { | |
private fun spaces(count: Int, char: String = " "): String { | |
return TextUtils.join("", Collections.nCopies(count, char)) | |
} | |
val MARK = 1 | |
val POINT = 2 | |
val PARAGRAPH = 3 | |
@JvmStatic fun logSpans(text: Spanned): String { | |
val spans = text.getSpans(0, 9999999, Any::class.java) | |
val spansList = Arrays.asList<Any>(*spans) | |
val sb = StringBuilder() | |
sb.append('\n').append(text.toString().replace('\n', '¶').replace('\u200B', '¬')) // ↵↭ | |
sb.append(" length = " + text.length) | |
for (span in spansList) { | |
val start = text.getSpanStart(span) | |
val end = text.getSpanEnd(span) | |
var gap = text.length + 5 | |
sb.append('\n') | |
if (start > 0) { | |
sb.append(spaces(start)) | |
gap -= start | |
} | |
val spanMode = text.getSpanFlags(span) and Spanned.SPAN_POINT_MARK_MASK | |
val leftMode = (spanMode and 0x30) ushr 4 | |
val rightMode = spanMode and 0x03 | |
if (end - start > 0) { | |
when (leftMode) { | |
MARK -> sb.append('>') | |
POINT -> sb.append('<') | |
PARAGRAPH -> sb.append(if (start == 0) '<' else '>') | |
} | |
gap-- | |
} else { | |
if (spanMode == Spanned.SPAN_INCLUSIVE_INCLUSIVE) { | |
sb.append('x') | |
} else if (spanMode == Spanned.SPAN_INCLUSIVE_EXCLUSIVE) { | |
sb.append('>') | |
} else if (spanMode == Spanned.SPAN_EXCLUSIVE_INCLUSIVE) { | |
sb.append('<') | |
} else if (spanMode == Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) { | |
sb.append('!') | |
} else if (spanMode == Spanned.SPAN_PARAGRAPH) { | |
if (start == 0) { | |
sb.append('!') | |
} else if (start == text.length) { | |
sb.append('<') | |
} else { | |
sb.append('>') | |
} | |
} | |
} | |
if (end - start - 1 > 0) { | |
sb.append(spaces(end - start - 1, "-")) | |
gap -= end - start - 1 | |
} | |
if (end - start > 0) { | |
when (rightMode) { | |
MARK -> sb.append('>') | |
POINT -> sb.append('<') | |
PARAGRAPH -> sb.append(if (end == text.length) '<' else '>') | |
} | |
gap-- | |
} | |
sb.append(spaces(gap)) | |
sb.append(" ") | |
.append(String.format("%03d", start)) | |
.append(" -> ") | |
.append(String.format("%03d", end)) | |
.append(" : ") | |
.append(span.javaClass.simpleName) | |
} | |
return sb.toString() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment