tweaks to EvaluateConfiguration

This commit is contained in:
Mark Harrah 2011-04-08 19:19:41 -04:00
parent f42c93901b
commit 51e8dac35c
1 changed files with 8 additions and 6 deletions

View File

@ -57,13 +57,15 @@ object EvaluateConfigurations
def apply(eval: Eval, srcs: Seq[File], imports: Seq[String]): Seq[Setting[_]] =
srcs flatMap { src => evaluateConfiguration(eval, src, imports) }
def evaluateConfiguration(eval: Eval, src: File, imports: Seq[String]): Seq[Setting[_]] =
evaluateConfiguration(eval, src.getPath, IO.readLines(src), imports)
def evaluateConfiguration(eval: Eval, name: String, lines: Seq[String], imports: Seq[String]): Seq[Setting[_]] =
evaluateConfiguration(eval, src.getPath, IO.readLines(src), imports, 0)
def evaluateConfiguration(eval: Eval, name: String, lines: Seq[String], imports: Seq[String], offset: Int): Seq[Setting[_]] =
{
val (importExpressions, settingExpressions) = splitExpressions(name, lines)
for((settingExpression,line) <- settingExpressions) yield
evaluateSetting(eval, name, (imports.map(s => (s, -1)) ++ importExpressions), settingExpression, line)
val (importExpressions, settingExpressions) = splitExpressions(lines)
for((settingExpression,line) <- addOffset(offset, settingExpressions)) yield
evaluateSetting(eval, name, (imports.map(s => (s, -1)) ++ addOffset(offset, importExpressions)), settingExpression, line)
}
def addOffset(offset: Int, lines: Seq[(String,Int)]): Seq[(String,Int)] =
lines.map { case (s, i) => (s, i + offset) }
def evaluateSetting(eval: Eval, name: String, imports: Seq[(String,Int)], expression: String, line: Int): Setting[_] =
{
@ -75,7 +77,7 @@ object EvaluateConfigurations
result.value.asInstanceOf[Setting[_]]
}
private[this] def fstS(f: String => Boolean): ((String,Int)) => Boolean = { case (s,i) => f(s) }
def splitExpressions(name: String, lines: Seq[String]): (Seq[(String,Int)], Seq[(String,Int)]) =
def splitExpressions(lines: Seq[String]): (Seq[(String,Int)], Seq[(String,Int)]) =
{
val blank = (_: String).trim.isEmpty
val importOrBlank = fstS(t => blank(t) || (t.trim startsWith "import "))