override fun processToken()

in src/org/jetbrains/r/rmarkdown/PatchingLexer.kt [26:72]


  override fun processToken() {
    if (delegate.tokenType === FenceLangType) {
      val fenceType: IElementType = provideFence(tokenSequence) ?: return
      queue.add(getTokenData())

      delegate.advance()
      if (delegate.tokenType != MARKDOWN_EOL) {
        return
      }
      queue.add(getTokenData())

      val start = delegate.tokenEnd
      val state = delegate.state
      var end = start
      var eol: TokenData? = null
      val restore = ArrayList<TokenData>()
      while(true) {
        delegate.advance()
        val cur = getTokenData()
        when(cur.type) {
          null -> {
            queue.addAll(restore)
            return
          }
          FenceEndType -> {
            if (end - start > 0) {
              queue.add(TokenData(fenceType, start, end, state))
            }
            if (eol != null) queue.add(eol)
            return
          }
          MARKDOWN_EOL -> {
            end = cur.start
            eol = cur
          }
          else -> {
            if (cur.type == WhiteSpaceType && bufferSequence.subSequence(cur.start, cur.end).contains('>')) {
              queue.addAll(restore)
              return
            }
            end = cur.end
          }
        }
        restore.add(cur)
      }
    }
  }