equal
deleted
inserted
replaced
12 val ~$$ : Symbol.symbol -> T list -> T * T list |
12 val ~$$ : Symbol.symbol -> T list -> T * T list |
13 val $$$ : Symbol.symbol -> T list -> T list * T list |
13 val $$$ : Symbol.symbol -> T list -> T list * T list |
14 val ~$$$ : Symbol.symbol -> T list -> T list * T list |
14 val ~$$$ : Symbol.symbol -> T list -> T list * T list |
15 val content: T list -> string |
15 val content: T list -> string |
16 val range: T list -> Position.range |
16 val range: T list -> Position.range |
|
17 val split_lines: T list -> T list list |
17 val trim_blanks: T list -> T list |
18 val trim_blanks: T list -> T list |
|
19 val trim_lines: T list -> T list |
18 val is_eof: T -> bool |
20 val is_eof: T -> bool |
19 val stopper: T Scan.stopper |
21 val stopper: T Scan.stopper |
20 val !!! : Scan.message -> (T list -> 'a) -> T list -> 'a |
22 val !!! : Scan.message -> (T list -> 'a) -> T list -> 'a |
21 val scan_pos: T list -> Position.T * T list |
23 val scan_pos: T list -> Position.T * T list |
22 val scan_string_q: string -> T list -> (Position.T * (T list * Position.T)) * T list |
24 val scan_string_q: string -> T list -> (Position.T * (T list * Position.T)) * T list |
58 fun range (syms as (_, pos) :: _) = |
60 fun range (syms as (_, pos) :: _) = |
59 let val pos' = List.last syms |-> Position.advance |
61 let val pos' = List.last syms |-> Position.advance |
60 in Position.range pos pos' end |
62 in Position.range pos pos' end |
61 | range [] = Position.no_range; |
63 | range [] = Position.no_range; |
62 |
64 |
|
65 |
|
66 (* lines and blanks *) |
|
67 |
|
68 fun split_lines [] = [] |
|
69 | split_lines (list: T list) = |
|
70 let |
|
71 fun split syms = |
|
72 (case take_prefix (fn (s, _) => s <> "\n") syms of |
|
73 (line, []) => [line] |
|
74 | (line, nl :: rest) => line :: split rest); |
|
75 in split list end; |
|
76 |
63 val trim_blanks = |
77 val trim_blanks = |
64 take_prefix (Symbol.is_blank o symbol) #> #2 #> |
78 take_prefix (Symbol.is_blank o symbol) #> #2 #> |
65 take_suffix (Symbol.is_blank o symbol) #> #1; |
79 take_suffix (Symbol.is_blank o symbol) #> #1; |
|
80 |
|
81 val trim_lines = |
|
82 split_lines #> map trim_blanks #> separate [(Symbol.space, Position.none)] #> flat; |
66 |
83 |
67 |
84 |
68 (* stopper *) |
85 (* stopper *) |
69 |
86 |
70 fun mk_eof pos = (Symbol.eof, pos); |
87 fun mk_eof pos = (Symbol.eof, pos); |