123456789101112131415161718192021222324(** A segment is an optionally tagged string from the user content. (Note the use of [option].) *)type'tagsegment='tagoption*string(** A line is a list of {!type:segment}s along with tags. *)type'tagline={tags:'taglist;segments:'tagsegmentlist}(** A block is a collection of consecutive lines. *)type'tagblock={begin_line_num:int(** The starting 1-indexed line number of a block. *);end_line_num:int(** The ending 1-indexed line number of a block. *);lines:'taglinelist(** The {!type:line}s within a block. *)}(** A part consists of multiple blocks from the same file. These blocks should be non-overlapping and sorted by importance or the textual order. *)type'tagpart={source:Range.source(** The source of a part. *);blocks:'tagblocklist(** The blocks within a part. *)}(** Highlighted texts. *)type'tagt='tagpartlist