Module Jekyll_tags

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.

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.

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 {% ... %}.