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)
}