in vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/GuiCursorOptionHelper.kt [21:79]
fun convertToken(token: String): GuiCursorEntry {
val split = token.split(':')
if (split.size == 1) {
throw exExceptionMessage("E545", token)
}
if (split.size != 2) {
throw exExceptionMessage("E546", token)
}
val modeList = split[0]
val argumentList = split[1]
val modes = enumSetOf<GuiCursorMode>()
modes.addAll(
modeList.split('-').map {
GuiCursorMode.fromString(it) ?: throw exExceptionMessage("E546", token)
},
)
var type: GuiCursorType? = null
var thickness: Int? = null
var highlightGroup = ""
var lmapHighlightGroup = ""
val blinkModes = mutableListOf<String>()
argumentList.split('-').forEach {
when {
it == "block" -> type = GuiCursorType.BLOCK
it.startsWith("ver") -> {
type = GuiCursorType.VER
thickness = it.slice(3 until it.length).toIntOrNull() ?: throw exExceptionMessage("E548", token)
if (thickness == 0) {
throw exExceptionMessage("E549", token)
}
}
it.startsWith("hor") -> {
type = GuiCursorType.HOR
thickness = it.slice(3 until it.length).toIntOrNull() ?: throw exExceptionMessage("E548", token)
if (thickness == 0) {
throw exExceptionMessage("E549", token)
}
}
it.startsWith("blink") -> {
// We don't do anything with blink...
blinkModes.add(it)
}
it.contains('/') -> {
val i = it.indexOf('/')
highlightGroup = it.slice(0 until i)
lmapHighlightGroup = it.slice(i + 1 until it.length)
}
else -> highlightGroup = it
}
}
return GuiCursorEntry(modes, type, thickness, highlightGroup, lmapHighlightGroup, blinkModes)
}