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 <st...@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

_______________________________________________
Pkg-ocaml-maint-commits mailing list
Pkg-ocaml-maint-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits

Reply via email to