src/Pure/General/position.scala
author blanchet
Fri, 27 Aug 2010 13:12:23 +0200
changeset 38823 828e68441a2f
parent 38568 f117ba49a59c
child 38722 ba31936497c2
permissions -rw-r--r--
renaming + treat "TFree" better in "pattern_for_type"
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
27968
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/General/position.scala
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     3
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     4
Position properties.
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     5
*/
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     6
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     7
package isabelle
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     8
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
     9
32450
375db037f4d2 misc tuning;
wenzelm
parents: 31705
diff changeset
    10
object Position
375db037f4d2 misc tuning;
wenzelm
parents: 31705
diff changeset
    11
{
31705
0c83e3e75fcf replaced java Properties by pure property lists;
wenzelm
parents: 29140
diff changeset
    12
  type T = List[(String, String)]
27968
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
    13
36683
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents: 36677
diff changeset
    14
  def get_line(pos: T): Option[Int] = Markup.get_int(Markup.LINE, pos)
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents: 36677
diff changeset
    15
  def get_column(pos: T): Option[Int] = Markup.get_int(Markup.COLUMN, pos)
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents: 36677
diff changeset
    16
  def get_offset(pos: T): Option[Int] = Markup.get_int(Markup.OFFSET, pos)
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents: 36677
diff changeset
    17
  def get_end_line(pos: T): Option[Int] = Markup.get_int(Markup.END_LINE, pos)
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents: 36677
diff changeset
    18
  def get_end_column(pos: T): Option[Int] = Markup.get_int(Markup.END_COLUMN, pos)
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents: 36677
diff changeset
    19
  def get_end_offset(pos: T): Option[Int] = Markup.get_int(Markup.END_OFFSET, pos)
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents: 36677
diff changeset
    20
  def get_file(pos: T): Option[String] = Markup.get_string(Markup.FILE, pos)
38355
8cb265fb12fe represent document ids by (long) int, to benefit from the somewhat faster Inttab in ML (LinearSet in Scala is invariably indexed by native object ids);
wenzelm
parents: 36683
diff changeset
    21
  def get_id(pos: T): Option[Long] = Markup.get_long(Markup.ID, pos)
31705
0c83e3e75fcf replaced java Properties by pure property lists;
wenzelm
parents: 29140
diff changeset
    22
38479
e628da370072 more efficient Markup_Tree, based on branches sorted by quasi-order;
wenzelm
parents: 38355
diff changeset
    23
  def get_range(pos: T): Option[Text.Range] =
36677
1225dd15827d simplified via Position extractors;
wenzelm
parents: 34211
diff changeset
    24
    (get_offset(pos), get_end_offset(pos)) match {
38565
32b924a832c4 further clarification/unification of Position.Range and Text.Range concerning singularities: start offset is always included;
wenzelm
parents: 38479
diff changeset
    25
      case (Some(start), Some(stop)) if start <= stop => Some(Text.Range(start, stop))
38568
f117ba49a59c alternative constructor for Range singularities;
wenzelm
parents: 38565
diff changeset
    26
      case (Some(start), None) => Some(Text.Range(start))
38565
32b924a832c4 further clarification/unification of Position.Range and Text.Range concerning singularities: start offset is always included;
wenzelm
parents: 38479
diff changeset
    27
      case (_, _) => None
36677
1225dd15827d simplified via Position extractors;
wenzelm
parents: 34211
diff changeset
    28
    }
1225dd15827d simplified via Position extractors;
wenzelm
parents: 34211
diff changeset
    29
38355
8cb265fb12fe represent document ids by (long) int, to benefit from the somewhat faster Inttab in ML (LinearSet in Scala is invariably indexed by native object ids);
wenzelm
parents: 36683
diff changeset
    30
  object Id { def unapply(pos: T): Option[Long] = get_id(pos) }
38479
e628da370072 more efficient Markup_Tree, based on branches sorted by quasi-order;
wenzelm
parents: 38355
diff changeset
    31
  object Range { def unapply(pos: T): Option[Text.Range] = get_range(pos) }
27968
85b5f024d94b Position properties.
wenzelm
parents:
diff changeset
    32
}