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 align(s: String, length: Int) = ("%-" + length + 's').format(("%" + s.length() + 's').format(s))
override fun invoke(s: String, length: Int) = ("%-" + length + 's').format(("%" + s.length() + 's').format(s))
},
},
RIGHT {
RIGHT {
override fun align(s: String, length: Int) = ("%-" + length + 's').format(("%" + length + 's').format(s))
override fun invoke(s: String, length: Int) = ("%-" + length + 's').format(("%" + length + 's').format(s))
},
},
CENTER {
CENTER {
override fun align(s: String, length: Int) = ("%-" + length + 's').format(("%" + ((length + s.length()) / 2) + 's').format(s))
override fun invoke(s: String, length: Int) = ("%-" + length + 's').format(("%" + ((length + s.length()) / 2) + 's').format(s))
};
};


abstract fun align(s: String, length: Int): String
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 align(a: Align_function): String {
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.align(lineWords[i], column_widths[i]))
result.append(a(lineWords[i], column_widths[i]))
result.append('|')
result.append('|')
}
}
Line 2,151: Line 2,150:
}
}


private val words = ArrayList<Array<String>>()
private val words = arrayListOf<Array<String>>()
private val column_widths = ArrayList<Int>()
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.set(i, Math.max(column_widths[i], lineWords[i].length()))
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.align(Align_function.LEFT))
"L" -> print(ca(Align_function.LEFT))
"R" -> print(ca.align(Align_function.RIGHT))
"R" -> print(ca(Align_function.RIGHT))
"C" -> print(ca.align(Align_function.CENTER))
"C" -> print(ca(Align_function.CENTER))
else -> System.err.println("Error! Unknown alignment: " + alignment)
else -> System.err.println("Error! Unknown alignment: " + alignment)
}
}