src/Tools/jEdit/src/proofdocument/Token.scala
author immler@in.tum.de
Thu, 19 Feb 2009 20:44:28 +0100
changeset 34526 b504abb6eff6
parent 34492 2268cbe29fca
child 34531 db1c28e326fc
permissions -rw-r--r--
tokens and commands as lists
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34407
aad6834ba380 added some headers and comments;
wenzelm
parents: 34390
diff changeset
     1
/*
aad6834ba380 added some headers and comments;
wenzelm
parents: 34390
diff changeset
     2
 * Document tokens as text ranges
aad6834ba380 added some headers and comments;
wenzelm
parents: 34390
diff changeset
     3
 *
aad6834ba380 added some headers and comments;
wenzelm
parents: 34390
diff changeset
     4
 * @author Johannes Hölzl, TU Munich
aad6834ba380 added some headers and comments;
wenzelm
parents: 34390
diff changeset
     5
 * @author Fabian Immler, TU Munich
aad6834ba380 added some headers and comments;
wenzelm
parents: 34390
diff changeset
     6
 */
aad6834ba380 added some headers and comments;
wenzelm
parents: 34390
diff changeset
     7
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
     8
package isabelle.proofdocument
34483
0923926022d7 superficial tuning;
wenzelm
parents: 34482
diff changeset
     9
0923926022d7 superficial tuning;
wenzelm
parents: 34482
diff changeset
    10
34481
660c639870a4 replaced type parameter C by Command (thanks to globally simultaneous scope);
wenzelm
parents: 34407
diff changeset
    11
import isabelle.prover.Command
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    12
34483
0923926022d7 superficial tuning;
wenzelm
parents: 34482
diff changeset
    13
34388
23b8351ecbbe arbitrary type for tokens
immler@in.tum.de
parents: 34318
diff changeset
    14
object Token {
34482
0f4b34445f40 turned Token.Kind into Enumeration;
wenzelm
parents: 34481
diff changeset
    15
  object Kind extends Enumeration {
0f4b34445f40 turned Token.Kind into Enumeration;
wenzelm
parents: 34481
diff changeset
    16
    val COMMAND_START = Value("COMMAND_START")
0f4b34445f40 turned Token.Kind into Enumeration;
wenzelm
parents: 34481
diff changeset
    17
    val COMMENT = Value("COMMENT")
0f4b34445f40 turned Token.Kind into Enumeration;
wenzelm
parents: 34481
diff changeset
    18
    val OTHER = Value("OTHER")
34388
23b8351ecbbe arbitrary type for tokens
immler@in.tum.de
parents: 34318
diff changeset
    19
  }
34389
e858aafb4809 moved methods to object Token
immler@in.tum.de
parents: 34388
diff changeset
    20
34526
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    21
  def check_start(t: Token, P: Int => Boolean) = t != null && P(t.start)
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    22
  def check_stop(t: Token, P: Int => Boolean) = t != null && P(t.stop)
34389
e858aafb4809 moved methods to object Token
immler@in.tum.de
parents: 34388
diff changeset
    23
34526
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    24
  private def fill(n: Int) = {
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    25
    val blanks = new Array[Char](n)
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    26
    for(i <- 0 to n - 1) blanks(i) = ' '
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    27
    new String(blanks)
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    28
  }
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    29
  def string_from_tokens (tokens: List[Token]): String = {
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    30
    tokens match {
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    31
      case Nil => ""
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    32
      case t::tokens => (tokens.foldLeft
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    33
          (t.content, t.stop)
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    34
          ((a, token) => (a._1 + fill(token.start - a._2) + token.content, token.stop))
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    35
        )._1
34389
e858aafb4809 moved methods to object Token
immler@in.tum.de
parents: 34388
diff changeset
    36
    }
e858aafb4809 moved methods to object Token
immler@in.tum.de
parents: 34388
diff changeset
    37
  }
34526
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    38
34388
23b8351ecbbe arbitrary type for tokens
immler@in.tum.de
parents: 34318
diff changeset
    39
}
23b8351ecbbe arbitrary type for tokens
immler@in.tum.de
parents: 34318
diff changeset
    40
34526
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    41
class Token(var start: Int, val content: String, val kind: Token.Kind.Value) {
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    42
  val length = content.length
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    43
  def stop = start + length
b504abb6eff6 tokens and commands as lists
immler@in.tum.de
parents: 34492
diff changeset
    44
  override def toString = content + "(" + kind + ")"
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    45
}