Mustache logic-less templates in OCaml
Library mustache
Module Mustache
exception Invalid_param of string

A module for creating and rendering mustache templates in OCaml.

exception Invalid_template of string
exception Missing_variable of string

Raised when a missing variable in a template is not substituted

exception Missing_section of string
exception Missing_partial of string
module Json : sig ... end
type name = string
type dotted_name = string list
type t =
| String of string
| Escaped of dotted_name
| Section of section
| Unescaped of dotted_name
| Partial of partial
| Inverted_section of section
| Concat of t list
| Comment of string
and section = {
name : dotted_name;
contents : t;
and partial = {
indent : int;
name : name;
contents : t option Lazy.t;
val parse_lx : Lexing.lexbuf -> t


val of_string : string -> t
val pp : Format.formatter -> t -> unit

pp fmt template print a template as raw mustache to the formatter fmt.

val to_formatter : Format.formatter -> t -> unit

Alias for compatibility

val to_string : t -> string

to_string template uses to_formatter in order to return a string representing the template as raw mustache.

val render_fmt : ?strict:bool -> ?partials:( name -> t option ) -> Format.formatter -> t -> Json.t -> unit

render_fmt fmt template json render template, filling it with data from json, printing it to formatter fmt.

For each partial p, if partials p is Some t then the partial is substituted by t. Otherwise, the partial is substituted by the empty string is strict is false. If strict is true, the Missing_partial exception is raised.

val render : ?strict:bool -> ?partials:( name -> t option ) -> t -> Json.t -> string

render template json use render_fmt to render template with data from json and returns the resulting string.

val fold : string:( string -> 'a ) -> section:( inverted:bool -> dotted_name -> 'a -> 'a ) -> escaped:( dotted_name -> 'a ) -> unescaped:( dotted_name -> 'a ) -> partial:( int -> name -> t option Lazy.t -> 'a ) -> comment:( string -> 'a ) -> concat:( 'a list -> 'a ) -> t -> 'a

fold template is the composition of f over parts of template, called in order of occurrence, where each f is one of the labelled arguments applied to the corresponding part. The default for f is the identity function.

  • parameter string

    Applied to each literal part of the template.

  • parameter escaped

    Applied to "name" for occurrences of {{name}}.

  • parameter unescaped

    Applied to "name" for occurrences of {{{name}}}.

  • parameter partial

    Applied to "box" for occurrences of {{> box}}.

  • parameter comment

    Applied to "comment" for occurrences of {{! comment}}.

val expand_partials : ( name -> t option ) -> t -> t

expand_partials f template is template where for each Partial p node, p.contents now evaluates to f if they were evaluating to None. Note that no lazy is forced at this point, and calls to f are delayed until p.contents is forced.

module Infix : sig ... end

Shortcut for concatening two templates pieces.

val escape_html : string -> string

Escape &, "\"", ', < and > character for html rendering.

val raw : string -> t

<p>This is raw text.</p>

val escaped : dotted_name -> t


val unescaped : dotted_name -> t


val inverted_section : dotted_name -> t -> t

{{^person}} {{/person}}

val section : dotted_name -> t -> t

{{#person}} {{/person}}

val partial : ?indent:int -> name -> t option Lazy.t -> t

{{> box}}

val comment : string -> t

{{! this is a comment}}

val concat : t list -> t

Group a t list as a single t.

module With_locations : sig ... end

Variant of the t mustache datatype which includes source-file locations, and associated functions.

val erase_locs : With_locations.t -> t

Erase locations from a mustache value of type With_locations.t.

val add_dummy_locs : t -> With_locations.t

Add the dummy_loc location to each node of a mustache value of type t.