package moe.odango.index.utils import org.jsoup.internal.StringUtil import org.jsoup.nodes.CDataNode import org.jsoup.nodes.Element import org.jsoup.nodes.Node import org.jsoup.nodes.TextNode import org.jsoup.select.NodeTraversor import org.jsoup.select.NodeVisitor fun Element.brText(): String { val accum = StringUtil.borrowBuilder(); NodeTraversor.traverse(object : NodeVisitor { override fun head(node: Node, depth: Int) { if (node is TextNode) { appendNormalisedText(accum, node); } else if (node is Element) { if (accum.isNotEmpty() && ((node.isBlock && !accum.lastIsWhitespace()) || node.tagName() == "br") ) { if (node.tagName() == "br") { var lastIndex = accum.lastIndex while (accum[lastIndex] == ' ') { lastIndex-- } accum.delete(lastIndex + 1, accum.length) accum.append('\n') } else { accum.append(' '); } } } } override fun tail(node: Node, depth: Int) { // make sure there is a space between block tags and immediately following text nodes