Align columns: Difference between revisions
Content deleted Content added
m syntax coloring as VB |
Kotlin version enhanced |
||
Line 2,116: | Line 2,116: | ||
import java.nio.file.Files |
import java.nio.file.Files |
||
import java.nio.file.Paths |
import java.nio.file.Paths |
||
import java.util.ArrayList |
|||
enum class Align_function { |
enum class Align_function { |
||
LEFT { |
LEFT { |
||
override fun |
override fun invoke(s: String, length: Int) = ("%-" + length + 's').format(("%" + s.length() + 's').format(s)) |
||
}, |
}, |
||
RIGHT { |
RIGHT { |
||
override fun |
override fun invoke(s: String, length: Int) = ("%-" + length + 's').format(("%" + length + 's').format(s)) |
||
}, |
}, |
||
CENTER { |
CENTER { |
||
override fun |
override fun invoke(s: String, length: Int) = ("%-" + length + 's').format(("%" + ((length + s.length()) / 2) + 's').format(s)) |
||
}; |
}; |
||
abstract fun |
abstract operator fun invoke(s: String, length: Int): String |
||
} |
} |
||
Line 2,137: | Line 2,136: | ||
*/ |
*/ |
||
class Column_aligner(val lines: List<String>) { |
class Column_aligner(val lines: List<String>) { |
||
fun |
operator fun invoke(a: Align_function): String { |
||
val result = StringBuilder() |
val result = StringBuilder() |
||
for (lineWords in words) { |
for (lineWords in words) { |
||
Line 2,143: | Line 2,142: | ||
if (i == 0) |
if (i == 0) |
||
result.append('|') |
result.append('|') |
||
result.append(a |
result.append(a(lineWords[i], column_widths[i])) |
||
result.append('|') |
result.append('|') |
||
} |
} |
||
Line 2,151: | Line 2,150: | ||
} |
} |
||
private val words = |
private val words = arrayListOf<Array<String>>() |
||
private val column_widths = |
private val column_widths = arrayListOf<Int>() |
||
init { |
init { |
||
Line 2,162: | Line 2,161: | ||
column_widths += lineWords[i].length() |
column_widths += lineWords[i].length() |
||
else |
else |
||
column_widths |
column_widths[i] = Math.max(column_widths[i], lineWords[i].length()) |
||
} |
} |
||
} |
} |
||
Line 2,174: | Line 2,173: | ||
val alignment = if (args.size() >= 2) args[1] else "L" |
val alignment = if (args.size() >= 2) args[1] else "L" |
||
when (alignment) { |
when (alignment) { |
||
"L" -> print(ca |
"L" -> print(ca(Align_function.LEFT)) |
||
"R" -> print(ca |
"R" -> print(ca(Align_function.RIGHT)) |
||
"C" -> print(ca |
"C" -> print(ca(Align_function.CENTER)) |
||
else -> System.err.println("Error! Unknown alignment: " + alignment) |
else -> System.err.println("Error! Unknown alignment: " + alignment) |
||
} |
} |