src/Pure/General/symbol.ML
changeset 33955 fff6f11b1f09
parent 33548 6d5dfa64b980
child 34095 c2f176a38448
equal deleted inserted replaced
33954:1bc3b688548c 33955:fff6f11b1f09
   181       let
   181       let
   182         val raw0 = enclose "\\<^raw:" ">";
   182         val raw0 = enclose "\\<^raw:" ">";
   183         val raw1 = raw0 o implode;
   183         val raw1 = raw0 o implode;
   184         val raw2 = enclose "\\<^raw" ">" o string_of_int o ord;
   184         val raw2 = enclose "\\<^raw" ">" o string_of_int o ord;
   185     
   185     
   186         fun encode cs = enc (Library.take_prefix raw_chr cs)
   186         fun encode cs = enc (take_prefix raw_chr cs)
   187         and enc ([], []) = []
   187         and enc ([], []) = []
   188           | enc (cs, []) = [raw1 cs]
   188           | enc (cs, []) = [raw1 cs]
   189           | enc ([], d :: ds) = raw2 d :: encode ds
   189           | enc ([], d :: ds) = raw2 d :: encode ds
   190           | enc (cs, d :: ds) = raw1 cs :: raw2 d :: encode ds;
   190           | enc (cs, d :: ds) = raw1 cs :: raw2 d :: encode ds;
   191       in
   191       in
   196 
   196 
   197 (* diagnostics *)
   197 (* diagnostics *)
   198 
   198 
   199 fun beginning n cs =
   199 fun beginning n cs =
   200   let
   200   let
   201     val drop_blanks = #1 o Library.take_suffix is_ascii_blank;
   201     val drop_blanks = #1 o take_suffix is_ascii_blank;
   202     val all_cs = drop_blanks cs;
   202     val all_cs = drop_blanks cs;
   203     val dots = if length all_cs > n then " ..." else "";
   203     val dots = if length all_cs > n then " ..." else "";
   204   in
   204   in
   205     (drop_blanks (Library.take (n, all_cs))
   205     (drop_blanks (take n all_cs)
   206       |> map (fn c => if is_ascii_blank c then space else c)
   206       |> map (fn c => if is_ascii_blank c then space else c)
   207       |> implode) ^ dots
   207       |> implode) ^ dots
   208   end;
   208   end;
   209 
   209 
   210 
   210 
   489 
   489 
   490 (* blanks *)
   490 (* blanks *)
   491 
   491 
   492 fun strip_blanks s =
   492 fun strip_blanks s =
   493   sym_explode s
   493   sym_explode s
   494   |> Library.take_prefix is_blank |> #2
   494   |> take_prefix is_blank |> #2
   495   |> Library.take_suffix is_blank |> #1
   495   |> take_suffix is_blank |> #1
   496   |> implode;
   496   |> implode;
   497 
   497 
   498 
   498 
   499 (* bump string -- treat as base 26 or base 1 numbers *)
   499 (* bump string -- treat as base 26 or base 1 numbers *)
   500 
   500 
   514       | bump (s :: ss) =
   514       | bump (s :: ss) =
   515           if is_char s andalso ord "a" <= ord s andalso ord s < ord "z"
   515           if is_char s andalso ord "a" <= ord s andalso ord s < ord "z"
   516           then chr (ord s + 1) :: ss
   516           then chr (ord s + 1) :: ss
   517           else "a" :: s :: ss;
   517           else "a" :: s :: ss;
   518 
   518 
   519     val (ss, qs) = apfst rev (Library.take_suffix is_quasi (sym_explode str));
   519     val (ss, qs) = apfst rev (take_suffix is_quasi (sym_explode str));
   520     val ss' = if symbolic_end ss then "'" :: ss else bump ss;
   520     val ss' = if symbolic_end ss then "'" :: ss else bump ss;
   521   in implode (rev ss' @ qs) end;
   521   in implode (rev ss' @ qs) end;
   522 
   522 
   523 
   523 
   524 
   524