package sbt.complete

object ProcessError {
  def apply(command: String, msgs: Seq[String], index: Int): String =
    {
      val (line, modIndex) = extractLine(command, index)
      val point = pointerSpace(command, modIndex)
      msgs.mkString("\n") + "\n" + line + "\n" + point + "^"
    }
  def extractLine(s: String, i: Int): (String, Int) =
    {
      val notNewline = (c: Char) => c != '\n' && c != '\r'
      val left = takeRightWhile(s.substring(0, i))(notNewline)
      val right = s substring i takeWhile notNewline
      (left + right, left.length)
    }
  def takeRightWhile(s: String)(pred: Char => Boolean): String =
    {
      def loop(i: Int): String =
        if (i < 0)
          s
        else if (pred(s(i)))
          loop(i - 1)
        else
          s.substring(i + 1)
      loop(s.length - 1)
    }
  def pointerSpace(s: String, i: Int): String = (s take i) map { case '\t' => '\t'; case _ => ' ' } mkString;
}