blob: 97cf05036982a57098728ea6e99e0b7ec6cedf4c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
(** Per-flavour escaping for the template engine, plus RFC 5545 line folding.
Knows nothing about calendars. Pure and total: every function is defined on
every string, and none reads the clock, the environment or the filesystem. *)
(** The six escaping modes. Markdown, AsciiDoc and plain text all use [None_]:
their metacharacter sets are context-dependent, and escaping them
aggressively produces worse output than not escaping at all (spec section 5).
This is a documented limitation of those flavours. *)
type flavour = Latex | Groff | Html | Xml | Ics | None_
val all : flavour list
val to_string : flavour -> string
val of_string : string -> flavour option
(** [of_extension ".tex"] is [Some Latex]. Returns [None] for an unrecognised
extension: the caller must treat that as an error, never as a fallback to
[None_] (spec section 5 -- guessing wrong here produces malformed output
that looks fine until it does not). *)
val of_extension : string -> flavour option
(** Escape one interpolated value for [flavour]. *)
val apply : flavour -> string -> string
(** Fold one unfolded content line per RFC 5545 section 3.1: at most 75 octets
per line, continuation lines prefixed with one space, CRLF terminators,
never splitting a UTF-8 sequence. The returned string ends with CRLF. *)
val fold_ics : string -> string
|