renamed SymbolPos.scan_position to SymbolPos.scan_pos;
authorwenzelm
Thu, 07 Aug 2008 19:21:40 +0200
changeset 27778 3ec7a4d9ef18
parent 27777 7a63d1b50b88
child 27779 4569003b8813
renamed SymbolPos.scan_position to SymbolPos.scan_pos; implode/explode: explicit type text = string; added implode_delim; explode: Position.reset_range;
src/Pure/General/symbol_pos.ML
--- a/src/Pure/General/symbol_pos.ML	Thu Aug 07 19:21:39 2008 +0200
+++ b/src/Pure/General/symbol_pos.ML	Thu Aug 07 19:21:40 2008 +0200
@@ -19,15 +19,17 @@
   val is_eof: T -> bool
   val stopper: T Scan.stopper
   val !!! : string -> (T list -> 'a) -> T list -> 'a
-  val scan_position: T list -> Position.T * T list
+  val scan_pos: T list -> Position.T * T list
   val scan_comment: (string -> (T list -> T list * T list) -> T list -> T list * T list) ->
     T list -> T list * T list
   val scan_comment_body: (string -> (T list -> T list * T list) -> T list -> T list * T list) ->
     T list -> T list * T list
   val source: Position.T -> (Symbol.symbol, 'a) Source.source ->
     (T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source
-  val implode: T list -> string * Position.range
-  val explode: string * Position.T -> T list
+  type text = string
+  val implode: T list -> text * Position.range
+  val implode_delim: Position.T -> Position.T -> T list -> text * Position.range
+  val explode: text * Position.T -> T list
 end;
 
 structure SymbolPos: SYMBOL_POS =
@@ -66,7 +68,7 @@
 fun $$$ s = Scan.one (fn x => symbol x = s) >> single;
 fun ~$$$ s = Scan.one (fn x => symbol x <> s) >> single;
 
-val scan_position = Scan.ahead (Scan.one (K true)) >> (fn (_, pos): T => pos);
+val scan_pos = Scan.ahead (Scan.one (K true)) >> (fn (_, pos): T => pos);
 
 
 (* ML-style comments *)
@@ -101,6 +103,8 @@
 
 (* compact representation -- with Symbol.DEL padding *)
 
+type text = string;
+
 local
 
 fun pad [] = []
@@ -131,8 +135,11 @@
       in (orig_implode (pad syms), Position.range pos pos') end
   | implode [] = ("", (Position.none, Position.none));
 
+fun implode_delim pos1 pos2 syms = implode (("", pos1) :: syms @ [("", pos2)]);
+
 fun explode (str, pos) =
-  fold_map (fn s => fn p => ((s, p), (Position.advance s p))) (Symbol.explode str) pos
+  fold_map (fn s => fn p => ((s, p), (Position.advance s p)))
+    (Symbol.explode str) (Position.reset_range pos)
   |> #1 |> filter_out (fn (s, _) => s = Symbol.DEL);
 
 end;