Module Topkg_care.Text

Text processing helpers.

Marked-up text files

Warning. Some of the following functions are not serious and can break on certain valid inputs in all sorts of fashion. To understand breakage bear in mind that they operate line-wise.

type flavour = [
| `Markdown
| `Asciidoc
]

The type for text document formats.

val flavour_of_fpath : Fpath.t -> flavour option

flavour_of_fpath p determines a flavour according to the extension of p as follows:

  • Some `Markdown for .md
  • Some `Asciidoc for .asciidoc or .adoc
  • None otherwise
val head : ?flavour:flavour -> string -> (string * string) option

head ~flavour text extracts the head of the document text of flavour flavour (defaults to `Markdown).

The head is defined as follows:

  • Anything before the first header is discarded.
  • The first header is kept in the first component
  • Everything that follows until the next header of the same or greater level is kept discarding trailing blank lines.
val header_title : ?flavour:flavour -> string -> string

header_title ~flavour text extract the title of a header text of flavour flavour (defaults to `Markdown).

Toy change log parsing

val change_log_last_entry : ?flavour:flavour -> string -> (string * (string * string)) option

change_log_last_version ~flavour text tries to parse the last change log entry of text (i.e. the head of text) into Some (version, (header, text)), where (header,text) is the result of head and version a version number extracted from header (see topkg-log(2) for details).

val change_log_file_last_entry : Fpath.t -> (string * (string * string)Bos_setup.R.msg) Bos_setup.result

change_log_file_last_entry file tries to parse the last change log entry of the file file using flavour_of_fpath and and change_log_last_entry.

Toy URI parsing

val split_uri : ?rel:bool -> string -> (string * string * string) option

split_uri uri splits uri into a triple (scheme, host, path). If rel is true (defaults to false), a leading "/" in path is removed.

Edit and page text

val edit_file : Fpath.t -> (int, Bos_setup.R.msg) Bos_setup.result

edit_file f invokes the tool mentioned in the EDITOR environment variable with f and returns the exit code of the program.

val find_pager : don't:bool -> (Bos_setup.Cmd.t optionBos_setup.R.msg) Bos_setup.result

find ~no_pager is an optional pager command. If don't is true returns None. Otherwise first consults the PAGER environment variable, then tries less or more in that order. If the TERM environment variable is "dumb" or undefined unconditionaly returns None.