in vim-engine/src/main/kotlin/com/maddyhome/idea/vim/ex/ranges/Address.kt [104:130]
fun createRangeAddresses(str: String, offset: Int, move: Boolean): Array<Address>? {
// Current line
if (str.isEmpty() || str == ".") {
return arrayOf(CurrentLineAddress(offset, move))
} else if (str == "%") {
return arrayOf(
LineAddress(1, 0, move), // Remember, one-based!
LastLineAddress(offset, move)
)
} else if (str == "$") {
return arrayOf(LastLineAddress(offset, move))
} else if (str.startsWith("'") && str.length == 2) {
return arrayOf(MarkAddress(str[1], offset, move))
} else if (str.startsWith("/") || str.startsWith("\\/") || str.startsWith("\\&")) {
return arrayOf(SearchAddress(str, offset, move))
} else if (str.startsWith("?") || str.startsWith("\\?")) {
return arrayOf(SearchAddress(str, offset, move))
} else {
try {
val line1 = str.toInt()
return arrayOf(LineAddress(line1, offset, move))
} catch (e: NumberFormatException) { // Ignore - we'll send back bad range later.
}
}
// User entered an invalid range.
return null
}