mirror of
https://github.com/GayPizzaSpecifications/pork.git
synced 2025-08-03 21:21:33 +00:00
parser: various code and quality enhancements
This commit is contained in:
16
common/src/main/kotlin/gay/pizza/pork/common/IndentBuffer.kt
Normal file
16
common/src/main/kotlin/gay/pizza/pork/common/IndentBuffer.kt
Normal 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()
|
||||
}
|
@ -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()
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
Reference in New Issue
Block a user