@@ -101,6 +101,19 @@ let shift1_attr = mktag "shift"
101101let shift2_attr = mktag " shift_"
102102
103103(* for partial application of move *)
104+ type move_control = Mfull | MdeleteOnly | MinsertOnly
105+
106+ let move_control_to_string = function
107+ | Mfull -> " F"
108+ | MdeleteOnly -> " D"
109+ | MinsertOnly -> " I"
110+
111+ let move_control_of_string = function
112+ | "F" -> Mfull
113+ | "D" -> MdeleteOnly
114+ | "I" -> MinsertOnly
115+ | _ -> Mfull
116+
104117let move_control_attr = mktag " mctl"
105118
106119let is_file_edit_tag n =
@@ -711,14 +724,25 @@ let make_change_file_elem path ch =
711724
712725
713726(* for move *)
714- let output_elem_mov ch mid
727+ let output_elem_mov ch mid mctl_opt
715728 path_from paths_from path_to paths_to key_opt adj_opt depth_opt shift_opt
716729 =
730+ let _al =
731+ match mctl_opt with
732+ | Some mctl ->
733+ [ mid_attr, MID. to_raw mid;
734+ move_control_attr, move_control_to_string mctl;
735+ path_from_attr,path_from#to_string;
736+ path_to_attr, path_to#to_string;
737+ ]
738+ | None ->
739+ [ mid_attr, MID. to_raw mid;
740+ path_from_attr,path_from#to_string;
741+ path_to_attr, path_to#to_string;
742+ ]
743+ in
717744 let al =
718- [ mid_attr, MID. to_raw mid;
719- path_from_attr,path_from#to_string;
720- path_to_attr, path_to#to_string;
721- ] @
745+ _al @
722746 (key_opt_to_attr parent_attr key_opt) @
723747 (int_opt_to_attr adj_attr adj_opt) @
724748 (int_opt_to_attr depth_attr depth_opt) @
@@ -727,17 +751,30 @@ let output_elem_mov ch mid
727751 fprintf ch " <%s %s%s%s/>" mov_tag
728752 (attrs_to_string al) (mkbdry_from paths_from) (mkbdry_to paths_to)
729753
730- let output_elem_bi_mov ch mid
754+ let output_elem_bi_mov ch mid mctl_opt
731755 path1from paths1from path1to paths1to key_opt1 adj_opt1 depth_opt1 shift_opt1
732756 path2from paths2from path2to paths2to key_opt2 adj_opt2 depth_opt2 shift_opt2
733757 =
758+ let _al =
759+ match mctl_opt with
760+ | Some mctl ->
761+ [ mid_attr, MID. to_raw mid;
762+ move_control_attr, move_control_to_string mctl;
763+ path1from_attr,path1from#to_string;
764+ path1to_attr, path1to#to_string;
765+ path2from_attr,path2from#to_string;
766+ path2to_attr, path2to#to_string;
767+ ]
768+ | None ->
769+ [ mid_attr, MID. to_raw mid;
770+ path1from_attr,path1from#to_string;
771+ path1to_attr, path1to#to_string;
772+ path2from_attr,path2from#to_string;
773+ path2to_attr, path2to#to_string;
774+ ]
775+ in
734776 let al =
735- [ mid_attr, MID. to_raw mid;
736- path1from_attr,path1from#to_string;
737- path1to_attr, path1to#to_string;
738- path2from_attr,path2from#to_string;
739- path2to_attr, path2to#to_string;
740- ] @
777+ _al @
741778 (key_opt_to_attr parent1_attr key_opt1) @
742779 (int_opt_to_attr adj1_attr adj_opt1) @
743780 (int_opt_to_attr depth1_attr depth_opt1) @
@@ -1000,6 +1037,7 @@ module Fmt = struct
10001037 * content_dumper
10011038
10021039 | Mov of MID. t
1040+ * move_control option
10031041 * path_c * boundary * path_c * boundary
10041042 * subtree_key option * int option * int option * int option
10051043
@@ -1015,9 +1053,9 @@ module Fmt = struct
10151053 let mkins stid path paths key_opt adj_opt depth_opt shift_opt dumper =
10161054 Ins (stid, path, paths, key_opt, adj_opt, depth_opt, shift_opt, dumper)
10171055
1018- let mkmov mid path_from paths_from path_to paths_to
1056+ let mkmov mid mctl_opt path_from paths_from path_to paths_to
10191057 key_opt adj_opt depth_opt shift_opt =
1020- Mov (mid, path_from, paths_from, path_to, paths_to,
1058+ Mov (mid, mctl_opt, path_from, paths_from, path_to, paths_to,
10211059 key_opt, adj_opt, depth_opt, shift_opt)
10221060
10231061 let mkchg path paths dumper =
@@ -1043,9 +1081,9 @@ module Fmt = struct
10431081 dumper ch;
10441082 output_ed_elem_ins ch
10451083
1046- | Mov (mid, path_from, paths_from, path_to, paths_to,
1084+ | Mov (mid, mctl_opt, path_from, paths_from, path_to, paths_to,
10471085 key_opt, adj_opt, depth_opt, shift_opt) ->
1048- output_elem_mov ch mid
1086+ output_elem_mov ch mid mctl_opt
10491087 path_from paths_from path_to paths_to
10501088 key_opt adj_opt depth_opt shift_opt
10511089
@@ -1080,6 +1118,7 @@ module Fmt = struct
10801118 * path_c * boundary
10811119
10821120 | Mov of MID. t
1121+ * move_control option
10831122 * path_c * boundary * path_c * boundary
10841123 * subtree_key option * int option * int option * int option
10851124 * path_c * boundary * path_c * boundary
@@ -1104,11 +1143,12 @@ module Fmt = struct
11041143 path', paths')
11051144
11061145 let mkmov mid
1146+ mctl_opt
11071147 path_from paths_from path_to paths_to
11081148 key_opt adj_opt depth_opt shift_opt
11091149 path_from' paths_from' path_to' paths_to'
11101150 key_opt' adj_opt' depth_opt' shift_opt' =
1111- Mov (mid, path_from, paths_from, path_to, paths_to,
1151+ Mov (mid, mctl_opt, path_from, paths_from, path_to, paths_to,
11121152 key_opt, adj_opt, depth_opt, shift_opt,
11131153 path_from', paths_from', path_to', paths_to',
11141154 key_opt', adj_opt', depth_opt', shift_opt')
@@ -1142,12 +1182,12 @@ module Fmt = struct
11421182 dumper ch;
11431183 output_ed_elem_ins ch
11441184
1145- | Mov (mid, path_from, paths_from, path_to, paths_to,
1185+ | Mov (mid, mctl_opt, path_from, paths_from, path_to, paths_to,
11461186 key_opt, adj_opt, depth_opt, shift_opt,
11471187 path_from', paths_from', path_to', paths_to',
11481188 key_opt', adj_opt', depth_opt', shift_opt')
11491189 ->
1150- output_elem_bi_mov ch mid
1190+ output_elem_bi_mov ch mid mctl_opt
11511191 path_from paths_from path_to paths_to
11521192 key_opt adj_opt depth_opt shift_opt
11531193 path_from' paths_from' path_to' paths_to'
@@ -1180,12 +1220,12 @@ module Fmt = struct
11801220 Del (stid, path', paths',
11811221 path, paths, key_opt, adj_opt, depth_opt, shift_opt, dumper)
11821222
1183- | Mov (mid, path_from, paths_from, path_to, paths_to,
1223+ | Mov (mid, mctl_opt, path_from, paths_from, path_to, paths_to,
11841224 key_opt, adj_opt, depth_opt, shift_opt,
11851225 path_from', paths_from', path_to', paths_to',
11861226 key_opt', adj_opt', depth_opt', shift_opt')
11871227 ->
1188- Mov (mid, path_from', paths_from', path_to', paths_to',
1228+ Mov (mid, mctl_opt, path_from', paths_from', path_to', paths_to',
11891229 key_opt', adj_opt', depth_opt', shift_opt',
11901230 path_from, paths_from, path_to, paths_to,
11911231 key_opt, adj_opt, depth_opt, shift_opt)
0 commit comments