(* Title: Pure/PIDE/command_span.ML
Author: Makarius
Syntactic representation of command spans.
*)
signature COMMAND_SPAN =
sig
datatype kind = Command_Span of string * Position.T | Ignored_Span | Malformed_Span
datatype span = Span of kind * Token.T list
val kind: span -> kind
val content: span -> Token.T list
val symbol_length: span -> int option
val adjust_offsets_kind: (int -> int option) -> kind -> kind
val adjust_offsets: (int -> int option) -> span -> span
end;
structure Command_Span: COMMAND_SPAN =
struct
datatype kind = Command_Span of string * Position.T | Ignored_Span | Malformed_Span;
datatype span = Span of kind * Token.T list;
fun kind (Span (k, _)) = k;
fun content (Span (_, toks)) = toks;
val symbol_length = Position.distance_of o Token.range_of o content;
fun adjust_offsets_kind adjust k =
(case k of
Command_Span (name, pos) => Command_Span (name, Position.adjust_offsets adjust pos)
| _ => k);
fun adjust_offsets adjust (Span (k, toks)) =
Span (adjust_offsets_kind adjust k, map (Token.adjust_offsets adjust) toks);
end;