package jekyll-format

  1. Overview
  2. Docs

Parse Jekyll-format delimited tags from message bodies

General tag parsing

val extract_tag : ?start:int -> start_tag:string -> stop_tag:string -> string -> (int * string * int) option

extract_tag ?start ~start_tag ~stop_tag s will extract the indices that represents the text in "<start><ws><text><ws><stop>". Whitespace is trimmed, and None is returned if non-empty text could not be parsed.

  • returns

    starting index of the tag within the string, the tag contents with whitespace trimmed, and the index of the first character after the end tag (which may be out of bounds of the string)

val extract_tags : ?start:int -> start_tag:string -> stop_tag:string -> string -> (int * string * int) list

extract_tags ?start ~start_tag ~stop_tag s will extract the list of indices that represent the text in "<start_Tag><ws><text><ws><stop_tag>". Whitespace is trimmed from the text body.

  • returns

    list of tuples of the starting index of the tag within the string, the tag contents with whitespace trimmed, and the index of the first character after the end tag (which may be out of bounds of the string)

val map_tag : sub:Astring.String.sub -> (int * string * int) -> Astring.String.sub -> Astring.String.sub

map_tag ~sub tag_info body will substitute the tag_info (typically returned by extract_tag with the value of sub

val map_tags : start_tag:string -> stop_tag:string -> f:(string -> string option) -> Astring.String.sub -> Astring.String.sub

map_tags ~start_tag ~stop_tag ~f body will apply the function f to all the tags found that match start_tag and stop_tag. The scanning is done via extract_tags and covers all occurrences in body. f should return None if the tag is to be skipped, and Some sub where sub is the string to substitute into the tag body.

val map_tag_bodies : start_tag:string -> stop_tag:string -> f_start:(string -> 'a option) -> f_stop:(string -> bool) -> f_map:('a option -> Astring.String.sub -> Astring.String.sub) -> Astring.String.sub -> Astring.String.sub

map_tag_bodies ~start_tag ~stop_tag ~f_start ~f_stop ~f_map body searches for tags delimited by start_tag and stop_tag. The tags are pattern matched using f_start to find the starting tag, and f_stop for the end tag. When a matching tag pair is found, a substitution is generated using f_map, and the resulting substitution is returned with the rest of the string unchanged. f_start can pass Some args (parsed from the start tag body to the f_map function so that tag arguments can be handled by the processor.

Jekyll liquid tag parsing functions

val extract_liquid_tag : ?start:int -> string -> (int * string * int) option

extract_liquid_tag behaves as extract_tag but is specialised to parse Jekyll liquid tags of the form {% ... %}.

val extract_liquid_tags : ?start:int -> string -> (int * string * int) list

extract_liquid_tags behaves as extract_tags but is specialised to parse Jekyll liquid tags of the form {% ... %}.

val map_liquid_tags : f:(string -> string option) -> Astring.String.sub -> Astring.String.sub

map_liquid_tags ~f body behaves as map_tags but is specialised to parse Jekyll liquid tags of the form {% ... %}.

val map_liquid_tag_bodies : f_start:(string -> 'a option) -> f_stop:(string -> bool) -> f_map:('a option -> Astring.String.sub -> Astring.String.sub) -> Astring.String.sub -> Astring.String.sub

map_liquid_tag_bodies operates as map_tag_bodies but is specialised to parse Jekyll liquid tags of the form {% ... %}.