src/Pure/General/position.scala
changeset 49419 e2726211f834
parent 48992 0518bf89c777
child 50201 c26369c9eda6
equal deleted inserted replaced
49418:c451856129cd 49419:e2726211f834
    18   val Offset = new Properties.Int(Isabelle_Markup.OFFSET)
    18   val Offset = new Properties.Int(Isabelle_Markup.OFFSET)
    19   val End_Offset = new Properties.Int(Isabelle_Markup.END_OFFSET)
    19   val End_Offset = new Properties.Int(Isabelle_Markup.END_OFFSET)
    20   val File = new Properties.String(Isabelle_Markup.FILE)
    20   val File = new Properties.String(Isabelle_Markup.FILE)
    21   val Id = new Properties.Long(Isabelle_Markup.ID)
    21   val Id = new Properties.Long(Isabelle_Markup.ID)
    22 
    22 
       
    23   val Def_Line = new Properties.Int(Isabelle_Markup.DEF_LINE)
       
    24   val Def_Offset = new Properties.Int(Isabelle_Markup.DEF_OFFSET)
       
    25   val Def_End_Offset = new Properties.Int(Isabelle_Markup.DEF_END_OFFSET)
       
    26   val Def_File = new Properties.String(Isabelle_Markup.DEF_FILE)
       
    27   val Def_Id = new Properties.Long(Isabelle_Markup.DEF_ID)
       
    28 
    23   object Line_File
    29   object Line_File
    24   {
    30   {
    25     def unapply(pos: T): Option[(Int, String)] =
    31     def unapply(pos: T): Option[(Int, String)] =
    26       (pos, pos) match {
    32       (pos, pos) match {
    27         case (Line(i), File(name)) => Some((i, name))
    33         case (Line(i), File(name)) => Some((i, name))
    28         case (_, File(name)) => Some((1, name))
    34         case (_, File(name)) => Some((1, name))
       
    35         case _ => None
       
    36       }
       
    37   }
       
    38 
       
    39   object Def_Line_File
       
    40   {
       
    41     def unapply(pos: T): Option[(Int, String)] =
       
    42       (pos, pos) match {
       
    43         case (Def_Line(i), Def_File(name)) => Some((i, name))
       
    44         case (_, Def_File(name)) => Some((1, name))
    29         case _ => None
    45         case _ => None
    30       }
    46       }
    31   }
    47   }
    32 
    48 
    33   object Range
    49   object Range
    48         case (Id(id), Offset(offset)) => Some((id, offset))
    64         case (Id(id), Offset(offset)) => Some((id, offset))
    49         case _ => None
    65         case _ => None
    50       }
    66       }
    51   }
    67   }
    52 
    68 
       
    69   object Def_Id_Offset
       
    70   {
       
    71     def unapply(pos: T): Option[(Long, Text.Offset)] =
       
    72       (pos, pos) match {
       
    73         case (Def_Id(id), Def_Offset(offset)) => Some((id, offset))
       
    74         case _ => None
       
    75       }
       
    76   }
       
    77 
    53   object Id_Range
    78   object Id_Range
    54   {
    79   {
    55     def unapply(pos: T): Option[(Long, Text.Range)] =
    80     def unapply(pos: T): Option[(Long, Text.Range)] =
    56       (pos, pos) match {
    81       (pos, pos) match {
    57         case (Id(id), Range(range)) => Some((id, range))
    82         case (Id(id), Range(range)) => Some((id, range))
    58         case _ => None
    83         case _ => None
    59       }
    84       }
    60   }
    85   }
    61 
    86 
    62   private val purge_pos = Map(
    87   def purge(props: T): T = props.filterNot(p => Isabelle_Markup.POSITION_PROPERTIES(p._1))
    63     Isabelle_Markup.DEF_LINE -> Isabelle_Markup.LINE,
       
    64     Isabelle_Markup.DEF_OFFSET -> Isabelle_Markup.OFFSET,
       
    65     Isabelle_Markup.DEF_END_OFFSET -> Isabelle_Markup.END_OFFSET,
       
    66     Isabelle_Markup.DEF_FILE -> Isabelle_Markup.FILE,
       
    67     Isabelle_Markup.DEF_ID -> Isabelle_Markup.ID)
       
    68 
       
    69   def purge(props: T): T =
       
    70     for ((x, y) <- props if !Isabelle_Markup.POSITION_PROPERTIES(x))
       
    71       yield (if (purge_pos.isDefinedAt(x)) (purge_pos(x), y) else (x, y))
       
    72 
    88 
    73 
    89 
    74   /* here: inlined formal markup */
    90   /* here: inlined formal markup */
    75 
    91 
    76   def here(pos: T): String =
    92   def here(pos: T): String =