-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathPromptTheme.scala
More file actions
35 lines (29 loc) · 1.07 KB
/
Copy pathPromptTheme.scala
File metadata and controls
35 lines (29 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.scalapenos.sbt.prompt
import sbt._
/**
* A PromptTheme contains a sequence of Promptlets and an optional Separator.
* It can render itself into a prompt string based on the current SBT State.
*/
case class PromptTheme(promptlets: Seq[Promptlet], separator: PromptletSeparator) {
def render(state: State): String = {
val styled = promptlets.map(_.render(state)).filterNot(_.isEmpty)
val separated = new StringBuilder
var previous: StyledText = null // scalafix:ok
for (next <- styled) {
if (previous == null) {
separated ++= next.rendered
} else {
separated ++= separator.render(previous, next).rendered
separated ++= next.rendered
}
previous = next
}
separated.toString
}
}
object PromptTheme {
def apply(promptlets: Seq[Promptlet]): PromptTheme = apply(promptlets, PromptletSeparators.NoSeparator)
def apply(promptlets: Seq[Promptlet], separator: (StyledText, StyledText) ⇒ StyledText): PromptTheme = {
apply(promptlets, PromptletSeparator(separator))
}
}