58 rader
2.3 KiB
OCaml
58 rader
2.3 KiB
OCaml
(**************************************************************************)
|
|
(* *)
|
|
(* Nottui_pretty, pretty-printer for Nottui *)
|
|
(* Frédéric Bour, Tarides *)
|
|
(* Copyright 2020 Tarides. All rights reserved. *)
|
|
(* *)
|
|
(* Based on PPrint *)
|
|
(* François Pottier, Inria Paris *)
|
|
(* Nicolas Pouillard *)
|
|
(* *)
|
|
(* Copyright 2007-2019 Inria. All rights reserved. This file is *)
|
|
(* distributed under the terms of the GNU Library General Public *)
|
|
(* License, with an exception, as described in the file LICENSE. *)
|
|
(**************************************************************************)
|
|
|
|
(* The type of documents *)
|
|
type t
|
|
|
|
(* The empty document *)
|
|
val empty : t
|
|
|
|
(* A document representing a UI widget *)
|
|
val ui : Nottui.ui -> t
|
|
|
|
(* Forced line break *)
|
|
val hardline : t
|
|
|
|
(* White space *)
|
|
val blank : int -> t
|
|
|
|
(* Choose between two documents based on whether we are in flat-mode or not.
|
|
First document should not force any hardline, otherwise it will completely
|
|
disable flat mode (... it is not possible to be flat and have hardlines).
|
|
*)
|
|
val if_flat : t -> t -> t
|
|
|
|
(* [break n] behaves like [blank n] if flat or [hardline] if non-flat:
|
|
If it fits on current line it displays [n] whitespaces, if not it breaks the
|
|
current line. *)
|
|
val break : int -> t
|
|
|
|
(* Concatenate two documents *)
|
|
val ( ^^ ) : t -> t -> t
|
|
|
|
(* [nest n t] increases indentation level by [n] inside document [t]:
|
|
if a new line has to be introduced in the layout [t], it will be shifted on
|
|
the right by [n] columns. *)
|
|
val nest : int -> t -> t
|
|
|
|
(* [group t] introduces a choice point.
|
|
If sub-documnet [t] fits on the current-line, it will be printed in flat
|
|
mode.
|
|
Otherwise [t] is printed as usual. *)
|
|
val group : t -> t
|
|
|
|
(* [pretty w t] renders document [t] targetting optimal width [w]. *)
|
|
val pretty : int -> t -> Nottui.ui
|