private[this] def process()

in scrooge-generator/src/main/scala/com/twitter/scrooge/mustache/Handlebar.scala [58:117]


  private[this] def process(
    indentLevel: Int,
    segment: Segment,
    dictionary: Dictionary
  ): (Int, String) = {
    var nextIndentLevel = 0
    val processed = segment match {
      case Data(data) =>
        nextIndentLevel = {
          val lastLine = data.split("\n").lastOption.getOrElse("")
          if (OnlySpaces.findFirstIn(lastLine).isDefined) {
            lastLine.length
          } else {
            0
          }
        }
        data
      case Interpolation(name) => dictionary(name).toData
      case Section(name, document, reversed, joiner) =>
        dictionary(name) match {
          case ListValue(items) =>
            if (reversed) {
              ""
            } else {
              val contents = items.map { d => generate(indentLevel, document, d) }
              joiner map { join(contents, _) } getOrElse (contents.mkString)
            }
          case other =>
            val expose = if (reversed) !other.toBoolean else other.toBoolean
            if (expose) {
              generate(indentLevel, document, dictionary)
            } else {
              ""
            }
        }
      case Partial(name) =>
        dictionary(name) match {
          case PartialValue(handlebar) =>
            val generated = handlebar.generate(dictionary)
            if (indentLevel > 0) {
              val indentation = Space * indentLevel
              val indented =
                generated.split("\n").zipWithIndex.map {
                  case (line, i) =>
                    if (i > 0 && !brittspace(line)) {
                      indentation + line
                    } else {
                      line
                    }
                } mkString ("\n")
              indented
            } else
              generated

          case other => ""
        }

    }
    (nextIndentLevel, processed)
  }