summaryrefslogtreecommitdiffstats
path: root/ocamldoc/odoc_merge.ml
diff options
context:
space:
mode:
Diffstat (limited to 'ocamldoc/odoc_merge.ml')
-rw-r--r--ocamldoc/odoc_merge.ml22
1 files changed, 22 insertions, 0 deletions
diff --git a/ocamldoc/odoc_merge.ml b/ocamldoc/odoc_merge.ml
index fd046752e..44804ba0b 100644
--- a/ocamldoc/odoc_merge.ml
+++ b/ocamldoc/odoc_merge.ml
@@ -23,6 +23,26 @@ open Odoc_exception
open Odoc_class
open Odoc_module
+let merge_before_tags l =
+ let rec iter acc = function
+ [] -> List.rev acc
+ | (v, text) :: q ->
+ let (l1, l2) = List.partition
+ (fun (v2,_) -> v = v2) q
+ in
+ let acc =
+ let text =
+ List.fold_left
+ (fun acc t -> acc @ [Raw " "] @ t)
+ text (List.map snd l1)
+ in
+ (v, text) :: acc
+ in
+ iter acc l2
+ in
+ iter [] l
+;;
+
(** Merge two Odoctypes.info struture, completing the information of
the first one with the information in the second one.
The merge treatment depends on a given merge_option list.
@@ -83,6 +103,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
Some v1
in
+ let new_before = merge_before_tags (m1.i_before @ m2.i_before) in
let new_dep =
match m1.i_deprecated, m2.i_deprecated with
None, None -> None
@@ -170,6 +191,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
Odoc_types.i_version = new_version ;
Odoc_types.i_sees = new_sees ;
Odoc_types.i_since = new_since ;
+ Odoc_types.i_before = new_before ;
Odoc_types.i_deprecated = new_dep ;
Odoc_types.i_params = new_params ;
Odoc_types.i_raised_exceptions = new_raised_exceptions ;