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 = |