parser: various code and quality enhancements

This commit is contained in:
2023-10-08 04:46:23 -07:00
parent fdac4fb96a
commit 73a458b673
23 changed files with 316 additions and 193 deletions

View File

@ -0,0 +1,16 @@
package gay.pizza.pork.common
class IndentBuffer(
val buffer: StringBuilder = StringBuilder(),
indent: String = " "
) : IndentTracked(indent), Appendable by buffer, CharSequence by buffer {
override fun emit(text: String) {
append(text)
}
override fun emitLine(text: String) {
appendLine(text)
}
override fun toString(): String = buffer.toString()
}

View File

@ -1,36 +1,11 @@
package gay.pizza.pork.common
class IndentPrinter(
val buffer: StringBuilder = StringBuilder(),
val indent: String = " "
) : Appendable by buffer, CharSequence by buffer {
private var indentLevel: Int = 0
private var indentLevelText: String = ""
fun emitIndent() {
append(indentLevelText)
class IndentPrinter(indent: String = " ") : IndentTracked(indent) {
override fun emit(text: String) {
print(text)
}
fun emitIndentedLine(line: String) {
emitIndent()
appendLine(line)
override fun emitLine(text: String) {
println(text)
}
fun increaseIndent() {
indentLevel++
indentLevelText += indent
}
fun decreaseIndent() {
indentLevel--
indentLevelText = indent.repeat(indentLevel)
}
inline fun indented(block: IndentPrinter.() -> Unit) {
increaseIndent()
block(this)
decreaseIndent()
}
override fun toString(): String = buffer.toString()
}

View File

@ -0,0 +1,37 @@
package gay.pizza.pork.common
abstract class IndentTracked(val indent: String) {
private var internalIndentLevel = 0
private var indentLevelText = ""
val indentLevel: Int
get() = internalIndentLevel
fun emitIndent() {
emit(indentLevelText)
}
fun emitIndentedLine(line: String) {
emitIndent()
emitLine(line)
}
fun increaseIndent() {
internalIndentLevel++
indentLevelText += indent
}
fun decreaseIndent() {
internalIndentLevel--
indentLevelText = indent.repeat(indentLevel)
}
inline fun indented(block: IndentTracked.() -> Unit) {
increaseIndent()
block(this)
decreaseIndent()
}
abstract fun emit(text: String)
abstract fun emitLine(text: String)
}