All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.kaitai.struct.LanguageOutputWriter.scala Maven / Gradle / Ivy

package io.kaitai.struct

abstract class LanguageOutputWriter(indentStr: String) {
  var indentLevel = 0

  def inc: Unit = indentLevel += 1
  def dec: Unit = indentLevel -= 1
  def indentNow: String = indentStr * indentLevel

  def add(other: StringLanguageOutputWriter): Unit
  def puts(s: String): Unit
  def puts: Unit
  def close: Unit

  /**
    * Utility method that outputs several lines at once, splitting
    * input by newline. Useful to print out multi-line comments,
    * as for docstrings.
    * @param prefix prefix to prepend to every line
    * @param lines lines as a string, joined by newline
    * @param hanging prefix to prepend to every line except for the first
    *                (i.e. hanging indent)
    */
  def putsLines(prefix: String, lines: String, hanging: String = ""): Unit = {
    val strs = lines.split("\n")
    puts(s"$prefix${strs(0)}")
    strs.drop(1).foreach((line) => puts(s"$prefix$hanging$line"))
  }
}

class StringLanguageOutputWriter(indentStr: String) extends LanguageOutputWriter(indentStr) {
  private val sb = new StringBuilder

  def result = sb.toString

  override def add(other: StringLanguageOutputWriter) = sb.append(other.result)
  override def puts(s: String): Unit = {
    sb.append(indentNow)
    sb.append(s)
    sb.append("\n")
  }
  override def puts: Unit = sb.append("\n")
  override def close = {}

  def clear() = sb.clear()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy