src/Tools/jEdit/src/proofdocument/token.scala
author wenzelm
Tue, 29 Dec 2009 21:31:17 +0100
changeset 34809 0fed930f2992
parent 34760 dc7f5e0d9d27
permissions -rw-r--r--
misc tuning;

/*
 * Document tokens as text ranges
 *
 * @author Johannes Hölzl, TU Munich
 * @author Fabian Immler, TU Munich
 */

package isabelle.proofdocument


object Token {
  object Kind extends Enumeration
  {
    val COMMAND_START = Value("COMMAND_START")
    val COMMENT = Value("COMMENT")
    val OTHER = Value("OTHER")
  }

  def string_from_tokens(tokens: List[Token], starts: Token => Int): String = {
    def stop(t: Token) = starts(t) + t.length
    tokens match {
      case Nil => ""
      case tok :: toks =>
        val (res, _) = toks.foldLeft(tok.content, stop(tok))((a, token) =>
          (a._1 + " " * (starts(token) - a._2) + token.content, stop(token)))
        res
    }
  }

}

class Token(
  val content: String,
  val kind: Token.Kind.Value)
{
  override def toString = content
  val length = content.length
  val is_start = kind == Token.Kind.COMMAND_START || kind == Token.Kind.COMMENT
}