I tried implementing it with something like ``` ...
# announcements
g
I tried implementing it with something like
Copy code
class TokenSeqSourcedCharSequence(val tokens: Sequence<TextFileToken>) : CharSequence {

        var cursorIndex = 0;
        var iterated: Sequence<TextFileToken> = tokens

        //slow!!!
        override val length: Int = tokenCount

        override fun get(index: Int): Char {
            moveTo(index)
            val value = iterated.firstOrNull() ?: throw IndexOutOfBoundsException()
            return value.asSingleChar()
        }

        override fun subSequence(startIndex: Int, endIndexExclusive: Int): CharSequence {
            moveTo(startIndex)
            val values = iterated.take(endIndexExclusive - startIndex)
            return CachedCharSequence(TokenSeqSourcedCharSequence(values))
        }

        private fun moveTo(index: Int) {
            if (index > cursorIndex) {
                val delta = index - cursorIndex
                iterated = iterated.drop(delta)
                cursorIndex = index
            }
            else {
                iterated = tokens.drop(index)
                cursorIndex = index
            }
        }

        override fun toString(): String = tokens
                .map { it.asSingleChar() }
                .fold(StringBuilder()) { builder, next -> builder.apply { append(next) } }
                .toString()
    }