Advertisement
Guest User

Untitled

a guest
Jul 11th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.92 KB | None | 0 0
  1. package xyz.fancystuff.pluvius.runtime
  2.  
  3. object OverlayParser {
  4.     fun parse(rawList: List<String>) = rawList
  5.             .map { toSyntaxToken(it) }
  6.             .fold(listOf<OverlaySyntaxToken>()) { acc, item -> foldToList(acc, item) }
  7.             .map { it as OverlayItem }
  8.  
  9.     private fun toSyntaxToken(line: String): OverlaySyntaxToken =  when {
  10.         line.isBlank() -> BlankLine
  11.         isGroupItem(line) -> OverlayGroupItem(line)
  12.         else -> OverlayItem(name = getOverlayPackageFromLine(line), isEnabled = isOverlayEnabled(line))
  13.     }
  14.  
  15.     private fun foldToList(acc: List<OverlaySyntaxToken>, item: OverlaySyntaxToken) = when(item) {
  16.         BlankLine -> acc // do not add blankLine
  17.         is OverlayGroupItem -> listOf(*acc.toTypedArray(), item)  // add header
  18.         is OverlayItem -> {  //inject groupName to a item and remove previous object if it is a GroupItem
  19.             val prevItem = acc.last()
  20.             when(prevItem) {
  21.                 is OverlayGroupItem -> listWithLastItemReplaced(acc, OverlayItem(prevItem.group, item.name, item.isEnabled))
  22.                 is OverlayItem -> listWithItemAdded(acc, OverlayItem(prevItem.group, item.name, item.isEnabled))
  23.                 else -> acc
  24.             }
  25.         }
  26.     }
  27.  
  28.     private fun listWithItemAdded(acc: List<OverlaySyntaxToken>, item: OverlaySyntaxToken): List<OverlaySyntaxToken> {
  29.         return listOf(*acc.toTypedArray(), item) //adding new item
  30.     }
  31.  
  32.     private fun listWithLastItemReplaced(acc: List<OverlaySyntaxToken>, item: OverlaySyntaxToken): List<OverlaySyntaxToken> {
  33.         val list = acc.subList(0, acc.size - 1) //removing last item
  34.         return listOf(*list.toTypedArray(), item) //adding new item
  35.     }
  36.  
  37.     private fun isGroupItem(line: String) = !line.startsWith("[")
  38.     private fun isOverlayEnabled(overlay: String) = overlay.contains("[x]")
  39.     private fun getOverlayPackageFromLine(line: String) = line.substring(4)
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement