[Pkg-ocaml-maint-commits] [easy-format] 04/08: Imported Upstream version 1.2.0
Stéphane Glondu
glondu at moszumanska.debian.org
Tue Jan 26 15:12:31 UTC 2016
This is an automated email from the git hooks/post-receive script.
glondu pushed a commit to branch master
in repository easy-format.
commit 3471338d7c1d4e1f060ecf2b92fdafe8d2ba56bf
Author: Stephane Glondu <steph at glondu.net>
Date: Tue Jan 26 16:06:46 2016 +0100
Imported Upstream version 1.2.0
---
.gitignore | 4 ++-
Makefile | 2 +-
easy_format.ml | 65 ++++++++++++++++++++++++++++++++++------------
easy_format.mli | 37 ++++++++++++++++++++------
simple_example.ml | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
5 files changed, 153 insertions(+), 32 deletions(-)
diff --git a/.gitignore b/.gitignore
index 3099d3e..061a5ce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,4 +18,6 @@ nativecode
lambda_example
simple_example
test_easy_format
-
+easy_format_example.html
+easy_format_example.ml
+ocamldoc
diff --git a/Makefile b/Makefile
index 8944a7b..305183a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-VERSION = 1.1.0
+VERSION = 1.2.0
export VERSION
NATDYNLINK := $(shell if [ -f `ocamlfind ocamlc -where`/dynlink.cmxa ]; \
diff --git a/easy_format.ml b/easy_format.ml
index 2840700..24e6a28 100644
--- a/easy_format.ml
+++ b/easy_format.ml
@@ -1,12 +1,20 @@
open Format
-type wrap =
- [ `Wrap_atoms
- | `Always_wrap
- | `Never_wrap
- | `Force_breaks
- | `Force_breaks_rec
- | `No_breaks ]
+type wrap = [
+ | `Wrap_atoms
+ | `Always_wrap
+ | `Never_wrap
+ | `Force_breaks
+ | `Force_breaks_rec
+ | `No_breaks
+]
+
+type label_break = [
+ | `Auto
+ | `Always
+ | `Always_rec
+ | `Never
+]
type style_name = string
type style = {
@@ -57,12 +65,14 @@ let list = {
}
type label_param = {
+ label_break: label_break;
space_after_label : bool;
indent_after_label : int;
label_style : style_name option;
}
let label = {
+ label_break = `Auto;
space_after_label = true;
indent_after_label = 2;
label_style = None;
@@ -118,12 +128,13 @@ let propagate_from_leaf_to_root
has the attribute wrap_body = `Force_breaks_rec.
*)
let propagate_forced_breaks x =
- (* acc = whether to force breaks in wrappable lists *)
+ (* acc = whether to force breaks in wrappable lists or labels *)
let init_acc = function
+ | List ((_, _, _, { wrap_body = `Force_breaks_rec }), _)
+ | Label ((_, { label_break = `Always_rec }), _) -> true
| Atom _
| Label _
- | Custom _ -> false
- | List ((_, _, _, { wrap_body = `Force_breaks_rec }), _) -> true
+ | Custom _
| List _ -> false
in
let merge_acc force_breaks1 force_breaks2 =
@@ -135,6 +146,7 @@ let propagate_forced_breaks x =
| List ((_, _, _, { wrap_body = `Force_breaks }), _) -> x, force_breaks
| List ((op, sep, cl, ({ wrap_body = (`Wrap_atoms
+ | `Never_wrap
| `Always_wrap) } as p)),
children) ->
if force_breaks then
@@ -143,9 +155,16 @@ let propagate_forced_breaks x =
else
x, false
- | List ((_, _, _, { wrap_body = (`Never_wrap | `No_breaks) }), _)
+ | Label ((a, ({ label_break = `Auto } as lp)), b) ->
+ if force_breaks then
+ let lp = { lp with label_break = `Always } in
+ Label ((a, lp), b), true
+ else
+ x, false
+
+ | List ((_, _, _, { wrap_body = `No_breaks }), _)
+ | Label ((_, { label_break = (`Always | `Always_rec | `Never) }), _)
| Atom _
- | Label _
| Custom _ -> x, force_breaks
in
let new_x, forced_breaks =
@@ -491,10 +510,22 @@ struct
fprint_t fmt lab;
close_tag fmt lp.label_style;
- if lp.space_after_label then
- pp_print_break fmt 1 indent
- else
- pp_print_break fmt 0 indent;
+ (match lp.label_break with
+ | `Auto ->
+ if lp.space_after_label then
+ pp_print_break fmt 1 indent
+ else
+ pp_print_break fmt 0 indent
+ | `Always
+ | `Always_rec ->
+ pp_force_newline fmt ();
+ pp_print_string fmt (String.make indent ' ')
+ | `Never ->
+ if lp.space_after_label then
+ pp_print_char fmt ' '
+ else
+ ()
+ );
fprint_t fmt x;
pp_close_box fmt ()
@@ -619,12 +650,14 @@ struct
}
let label_true = {
+ label_break = `Auto;
space_after_label = true;
indent_after_label = 2;
label_style = None;
}
let label_false = {
+ label_break = `Auto;
space_after_label = false;
indent_after_label = 2;
label_style = None;
diff --git a/easy_format.mli b/easy_format.mli
index ce706a6..0aeb629 100644
--- a/easy_format.mli
+++ b/easy_format.mli
@@ -39,6 +39,19 @@ type wrap =
i.e. never break line between list items
*)
+type label_break = [
+ | `Auto
+ | `Always
+ | `Always_rec
+ | `Never
+]
+(** When to break the line after a [Label]:
+ - [Auto]: break after the label if there's not enough room
+ - [Always]: always break after the label
+ - [Always_rec]: always break after the label and force breaks in all parent
+ lists and labels, similarly to [`Force_breaks_rec] for lists.
+ - [Never]: never break after the label
+*)
type style_name = string
@@ -116,14 +129,22 @@ val list : list_param
See {!Easy_format.label}.
*)
type label_param = {
- space_after_label : bool; (** Whether there must be some whitespace
- after the label.
- Default: [true] *)
- indent_after_label : int; (** Extra indentation before the item
- that comes after a label.
- Default: [2]
- *)
- label_style : style_name option; (** Default: [None] *)
+ label_break: label_break;
+ (** Whether to break the line after the label.
+ Introduced in version 1.2.0.
+ Default: [`Auto] *)
+
+ space_after_label : bool;
+ (** Whether there must be some whitespace after the label.
+ Default: [true] *)
+
+ indent_after_label : int;
+ (** Extra indentation before the item that comes after a label.
+ Default: [2]
+ *)
+
+ label_style : style_name option;
+ (** Default: [None] *)
}
val label : label_param
diff --git a/simple_example.ml b/simple_example.ml
index 76c349c..56abc67 100644
--- a/simple_example.ml
+++ b/simple_example.ml
@@ -123,11 +123,42 @@ let format_function_definition (body_label, body_param) name param body =
)
(*
+ Illustrate the difference between `Force_break and `Force_breaks_rec on
+ labels.
+*)
+let label_one_atom = Atom ("reallyLongLabelOne", atom)
+let label_two_atom = Atom ("reallyLongLabelTwo", atom)
+let label_three_atom = Atom ("reallyLongLabelABC", atom)
+let make_list_in_labels (wrap) =
+ Label (
+ (label_one_atom, label),
+ (
+ Label (
+ (label_two_atom, label),
+ (
+ Label (
+ (label_three_atom, label),
+ List (
+ ("[", ",", "]", { list with wrap_body = wrap }),
+ [
+ Atom ("1.23456", atom);
+ Atom ("9.87654", atom);
+ Atom ("9.87654", atom);
+ Atom ("9.87654", atom);
+ ]
+ )
+ )
+ )
+ )
+ )
+ )
+
+(*
Illustrate the difference between `Force_break and `Force_breaks_rec
*)
-let make_heterogenous_list wrap =
+let make_heterogenous_list (container_wrap, wrap) =
List (
- ("[", ",", "]", { list with wrap_body = `Always_wrap }),
+ ("[", ",", "]", { list with wrap_body = container_wrap }),
[
Atom ("0", atom);
List (
@@ -170,6 +201,9 @@ let print_tuple fmt l =
let print_heterogenous_list fmt wrap =
Pretty.to_formatter fmt (make_heterogenous_list wrap)
+let print_list_in_labels fmt wrap =
+ Pretty.to_formatter fmt (make_list_in_labels wrap)
+
let print_sum ?wrap fmt l =
Pretty.to_formatter fmt (format_sum ?wrap l)
@@ -195,12 +229,43 @@ let () =
(* Heterogenous list *)
print "wrappable outer list, inner list using `Force_breaks";
- with_margin 80 print_heterogenous_list `Force_breaks;
- with_margin 20 print_heterogenous_list `Force_breaks;
+ with_margin 80 print_heterogenous_list (`Always_wrap, `Force_breaks);
+ with_margin 20 print_heterogenous_list (`Always_wrap, `Force_breaks);
print "wrappable outer list, inner list using `Force_breaks_rec";
- with_margin 80 print_heterogenous_list `Force_breaks_rec;
- with_margin 20 print_heterogenous_list `Force_breaks_rec;
+ with_margin 80 print_heterogenous_list (`Always_wrap, `Force_breaks_rec);
+ with_margin 20 print_heterogenous_list (`Always_wrap, `Force_breaks_rec);
+
+ print "never_wrap outer list, inner list using `Force_breaks";
+ with_margin 80 print_heterogenous_list (`Never_wrap, `Force_breaks);
+ with_margin 20 print_heterogenous_list (`Never_wrap, `Force_breaks);
+
+ print "never_wrap outer list, inner list using `Force_breaks_rec";
+ with_margin 80 print_heterogenous_list (`Never_wrap, `Force_breaks_rec);
+ with_margin 20 print_heterogenous_list (`Never_wrap, `Force_breaks_rec);
+
+ print "no breaks outer list, inner list using `Force_breaks";
+ with_margin 80 print_heterogenous_list (`No_breaks, `Force_breaks);
+ with_margin 20 print_heterogenous_list (`No_breaks, `Force_breaks);
+
+ print "no breaks outer list, inner list using `Force_breaks_rec";
+ with_margin 80 print_heterogenous_list (`No_breaks, `Force_breaks_rec);
+ with_margin 20 print_heterogenous_list (`No_breaks, `Force_breaks_rec);
+
+ print "label with inner list using `Force_breaks_rec";
+ with_margin 80 print_list_in_labels (`Force_breaks_rec);
+ with_margin 70 print_list_in_labels (`Force_breaks_rec);
+ with_margin 20 print_list_in_labels (`Force_breaks_rec);
+
+ print "label with inner list using `Force_breaks";
+ with_margin 80 print_list_in_labels (`Force_breaks);
+ with_margin 70 print_list_in_labels (`Force_breaks);
+ with_margin 20 print_list_in_labels (`Force_breaks);
+
+ print "label with inner list using `Never_wrap";
+ with_margin 80 print_list_in_labels (`Never_wrap);
+ with_margin 70 print_list_in_labels (`Never_wrap);
+ with_margin 20 print_list_in_labels (`Never_wrap);
(* Triangular array of arrays showing wrapping of lists of atoms *)
let m = Array.init 20 (fun i -> Array.init i (fun i -> sqrt (float i))) in
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/easy-format.git
More information about the Pkg-ocaml-maint-commits
mailing list