Skip to content

Commit 46b1267

Browse files
committed
Split differ
1 parent f52675f commit 46b1267

11 files changed

+90
-2526
lines changed

src/package.devc.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
44
<asx:values>
55
<DEVC>
6-
<CTEXT>ABAP Differ</CTEXT>
6+
<CTEXT>ABAP Diff3</CTEXT>
77
</DEVC>
88
</asx:values>
99
</asx:abap>
Lines changed: 62 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
1-
CLASS zcl_differ_diff3 DEFINITION
1+
CLASS zcl_diff3 DEFINITION
22
PUBLIC
33
FINAL
44
CREATE PUBLIC.
55

66
************************************************************************
7-
* ABAP Differ - Diff3
7+
* ABAP Diff3
88
*
9-
* https://github.com/Marc-Bernard-Tools/ABAP-Differ
9+
* https://github.com/Marc-Bernard-Tools/ABAP-Diff3
1010
*
1111
* This is a port of JavaScript (https://github.com/bhousel/node-diff3, MIT license)
1212
* https://github.com/bhousel/node-diff3/blob/main/index.mjs as of 2021-09-24
1313
*
14-
* Copyright 2021 Marc Bernard <https://marcbernardtools.com/>
14+
* Copyright 2022 Marc Bernard <https://marcbernardtools.com/>
1515
* SPDX-License-Identifier: MIT
1616
************************************************************************
17+
1718
PUBLIC SECTION.
1819

19-
INTERFACES zif_differ_diff3.
20+
INTERFACES zif_diff3.
2021

2122
CLASS-METHODS create
2223
RETURNING
23-
VALUE(ri_result) TYPE REF TO zif_differ_diff3.
24+
VALUE(ri_result) TYPE REF TO zif_diff3.
2425

2526
CLASS-METHODS convert_to_abap_indices
2627
CHANGING
27-
!ct_diff_indices TYPE zif_differ_diff3=>ty_diff_indices_result_t OPTIONAL.
28+
!ct_diff_indices TYPE zif_diff3=>ty_diff_indices_result_t OPTIONAL.
2829

2930
PROTECTED SECTION.
3031

@@ -34,52 +35,53 @@ CLASS zcl_differ_diff3 DEFINITION
3435
TYPES:
3536
BEGIN OF ty_hunk,
3637
ab TYPE ty_ab,
37-
o_start TYPE zif_differ_diff3=>ty_number,
38-
o_length TYPE zif_differ_diff3=>ty_number,
39-
ab_start TYPE zif_differ_diff3=>ty_number,
40-
ab_length TYPE zif_differ_diff3=>ty_number,
38+
o_start TYPE zif_diff3=>ty_number,
39+
o_length TYPE zif_diff3=>ty_number,
40+
ab_start TYPE zif_diff3=>ty_number,
41+
ab_length TYPE zif_diff3=>ty_number,
4142
END OF ty_hunk.
4243
TYPES:
4344
ty_hunks TYPE STANDARD TABLE OF ty_hunk WITH DEFAULT KEY.
4445

4546
METHODS process_common
4647
CHANGING
4748
!ct_common TYPE string_table
48-
!ct_result TYPE zif_differ_diff3=>ty_comm_result_t.
49+
!ct_result TYPE zif_diff3=>ty_comm_result_t.
4950

5051
METHODS chunk_description
5152
IMPORTING
5253
!it_buffer TYPE string_table
53-
!iv_offset TYPE zif_differ_diff3=>ty_number
54-
!iv_length TYPE zif_differ_diff3=>ty_number
54+
!iv_offset TYPE zif_diff3=>ty_number
55+
!iv_length TYPE zif_diff3=>ty_number
5556
RETURNING
56-
VALUE(rs_result) TYPE zif_differ_diff3=>ty_chunk.
57+
VALUE(rs_result) TYPE zif_diff3=>ty_chunk.
5758

5859
METHODS add_hunk
5960
IMPORTING
60-
!it_buffer TYPE zif_differ_diff3=>ty_diff_indices_result_t
61+
!it_buffer TYPE zif_diff3=>ty_diff_indices_result_t
6162
!iv_ab TYPE ty_ab
6263
CHANGING
63-
ct_hunks TYPE ty_hunks.
64+
!ct_hunks TYPE ty_hunks.
6465

6566
METHODS advance_to
6667
IMPORTING
67-
!iv_end_offset TYPE zif_differ_diff3=>ty_number
68-
!it_o TYPE string_table
68+
!iv_end_offset TYPE zif_diff3=>ty_number
69+
!it_o TYPE string_table
6970
CHANGING
70-
cv_curr_offset TYPE zif_differ_diff3=>ty_number
71-
ct_results TYPE zif_differ_diff3=>ty_region_t.
71+
!cv_curr_offset TYPE zif_diff3=>ty_number
72+
!ct_results TYPE zif_diff3=>ty_region_t.
7273

7374
METHODS flush_ok
7475
CHANGING
7576
!ct_buffer TYPE string_table
76-
!ct_result TYPE zif_differ_diff3=>ty_merge_region_t.
77+
!ct_result TYPE zif_diff3=>ty_merge_region_t.
7778

7879
METHODS get_labels
7980
IMPORTING
80-
!is_labels TYPE zif_differ_diff3=>ty_labels
81+
!is_labels TYPE zif_diff3=>ty_labels
8182
RETURNING
82-
VALUE(rs_labels) TYPE zif_differ_diff3=>ty_labels.
83+
VALUE(rs_labels) TYPE zif_diff3=>ty_labels.
84+
8385
PRIVATE SECTION.
8486

8587
METHODS _reverse
@@ -100,7 +102,7 @@ ENDCLASS.
100102

101103

102104

103-
CLASS zcl_differ_diff3 IMPLEMENTATION.
105+
CLASS zcl_diff3 IMPLEMENTATION.
104106

105107

106108
METHOD add_hunk.
@@ -166,7 +168,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
166168

167169
METHOD create.
168170

169-
ri_result = NEW zcl_differ_diff3( ).
171+
ri_result = NEW zcl_diff3( ).
170172

171173
ENDMETHOD.
172174

@@ -208,15 +210,15 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
208210
METHOD process_common.
209211

210212
IF ct_common IS NOT INITIAL.
211-
DATA(ls_res) = VALUE zif_differ_diff3=>ty_comm_result( common = _reverse( ct_common ) ).
213+
DATA(ls_res) = VALUE zif_diff3=>ty_comm_result( common = _reverse( ct_common ) ).
212214
INSERT ls_res INTO ct_result INDEX 1.
213215
CLEAR ct_common.
214216
ENDIF.
215217

216218
ENDMETHOD.
217219

218220

219-
METHOD zif_differ_diff3~diff3_merge.
221+
METHOD zif_diff3~diff3_merge.
220222
" Applies the output of diff3MergeRegions to actually
221223
" construct the merged buffer; the returned result alternates
222224
" between 'ok' and 'conflict' blocks.
@@ -225,7 +227,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
225227
DATA ls_result LIKE LINE OF rt_result.
226228
DATA lt_ok_buffer TYPE string_table.
227229

228-
DATA(lt_regions) = zif_differ_diff3~diff3_merge_regions(
230+
DATA(lt_regions) = zif_diff3~diff3_merge_regions(
229231
it_a = it_a
230232
it_o = it_o
231233
it_b = it_b ).
@@ -265,7 +267,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
265267
ENDMETHOD.
266268

267269

268-
METHOD zif_differ_diff3~diff3_merge_regions.
270+
METHOD zif_diff3~diff3_merge_regions.
269271
" Given three buffers, A, O, and B, where both A and B are
270272
" independently derived from O, returns a fairly complicated
271273
" internal representation of merge decisions it's taken. The
@@ -280,10 +282,10 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
280282

281283
TYPES:
282284
BEGIN OF ty_bound,
283-
n0 TYPE zif_differ_diff3=>ty_number,
284-
n1 TYPE zif_differ_diff3=>ty_number,
285-
n2 TYPE zif_differ_diff3=>ty_number,
286-
n3 TYPE zif_differ_diff3=>ty_number,
285+
n0 TYPE zif_diff3=>ty_number,
286+
n1 TYPE zif_diff3=>ty_number,
287+
n2 TYPE zif_diff3=>ty_number,
288+
n3 TYPE zif_diff3=>ty_number,
287289
END OF ty_bound.
288290

289291
DATA:
@@ -299,7 +301,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
299301

300302
add_hunk(
301303
EXPORTING
302-
it_buffer = zif_differ_diff3~diff_indices(
304+
it_buffer = zif_diff3~diff_indices(
303305
it_buffer1 = it_o
304306
it_buffer2 = it_a )
305307
iv_ab = 'a'
@@ -308,7 +310,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
308310

309311
add_hunk(
310312
EXPORTING
311-
it_buffer = zif_differ_diff3~diff_indices(
313+
it_buffer = zif_diff3~diff_indices(
312314
it_buffer1 = it_o
313315
it_buffer2 = it_b )
314316
iv_ab = 'b'
@@ -472,16 +474,16 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
472474
ENDMETHOD.
473475

474476

475-
METHOD zif_differ_diff3~diff_comm.
477+
METHOD zif_diff3~diff_comm.
476478
" We apply the LCS to build a 'comm'-style picture of the
477479
" differences between buffer1 and buffer2.
478480

479481
DATA:
480482
ls_res LIKE LINE OF rt_result,
481-
ls_different TYPE zif_differ_diff3=>ty_comm_result-diff,
482-
lt_common TYPE zif_differ_diff3=>ty_comm_result-common.
483+
ls_different TYPE zif_diff3=>ty_comm_result-diff,
484+
lt_common TYPE zif_diff3=>ty_comm_result-common.
483485

484-
DATA(lt_lcs) = zif_differ_diff3~lcs( it_buffer1 = it_buffer1
486+
DATA(lt_lcs) = zif_diff3~lcs( it_buffer1 = it_buffer1
485487
it_buffer2 = it_buffer2 ).
486488

487489
DATA(lv_tail1) = lines( it_buffer1 ).
@@ -538,12 +540,12 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
538540
ENDMETHOD.
539541

540542

541-
METHOD zif_differ_diff3~diff_indices.
543+
METHOD zif_diff3~diff_indices.
542544
" We apply the LCS to give a simple representation of the
543545
" offsets and lengths of mismatched chunks in the input
544546
" buffers. This is used by diff3MergeRegions.
545547

546-
DATA(lt_lcs) = zif_differ_diff3~lcs(
548+
DATA(lt_lcs) = zif_diff3~lcs(
547549
it_buffer1 = it_buffer1
548550
it_buffer2 = it_buffer2 ).
549551

@@ -562,7 +564,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
562564
lv_tail2 = ls_candidate-buffer2index.
563565

564566
IF lv_mismatch_length1 > 0 OR lv_mismatch_length2 > 0.
565-
DATA(ls_result) = VALUE zif_differ_diff3=>ty_diff_indices_result(
567+
DATA(ls_result) = VALUE zif_diff3=>ty_diff_indices_result(
566568
buffer1-key = lv_tail1 + 1
567569
buffer1-len = lv_mismatch_length1
568570
buffer1content = _slice(
@@ -584,13 +586,13 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
584586
ENDMETHOD.
585587

586588

587-
METHOD zif_differ_diff3~diff_patch.
589+
METHOD zif_diff3~diff_patch.
588590
" We apply the LCS to build a JSON representation of a
589591
" diff(1)-style patch.
590592

591593
DATA ls_result LIKE LINE OF rt_result.
592594

593-
DATA(lt_lcs) = zif_differ_diff3~lcs( it_buffer1 = it_buffer1
595+
DATA(lt_lcs) = zif_diff3~lcs( it_buffer1 = it_buffer1
594596
it_buffer2 = it_buffer2 ).
595597

596598
DATA(lv_tail1) = lines( it_buffer1 ).
@@ -624,7 +626,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
624626
ENDMETHOD.
625627

626628

627-
METHOD zif_differ_diff3~invert_patch.
629+
METHOD zif_diff3~invert_patch.
628630
" Takes the output of diffPatch(), and inverts the sense of it, so that it
629631
" can be applied to buffer2 to give buffer1 rather than the other way around.
630632

@@ -640,7 +642,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
640642
ENDMETHOD.
641643

642644

643-
METHOD zif_differ_diff3~lcs.
645+
METHOD zif_diff3~lcs.
644646
" Text diff algorithm following Hunt and McIlroy 1976.
645647
" J. W. Hunt and M. D. McIlroy, An algorithm for differential buffer
646648
" comparison, Bell Telephone Laboratories CSTR #41 (1976)
@@ -652,13 +654,13 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
652654
TYPES:
653655
BEGIN OF ty_equivalenceclass,
654656
key TYPE string,
655-
values TYPE zif_differ_diff3=>ty_numbers,
657+
values TYPE zif_diff3=>ty_numbers,
656658
END OF ty_equivalenceclass.
657659

658660
DATA:
659661
lt_equivalenceclasses TYPE HASHED TABLE OF ty_equivalenceclass WITH UNIQUE KEY key,
660-
lt_candidates TYPE zif_differ_diff3=>ty_lcs_result_t,
661-
ls_newcandidate TYPE zif_differ_diff3=>ty_lcs_result.
662+
lt_candidates TYPE zif_diff3=>ty_lcs_result_t,
663+
ls_newcandidate TYPE zif_diff3=>ty_lcs_result.
662664

663665
DATA(lv_j) = 0.
664666
LOOP AT it_buffer2 ASSIGNING FIELD-SYMBOL(<lv_buffer2>).
@@ -672,7 +674,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
672674
lv_j = lv_j + 1.
673675
ENDLOOP.
674676

675-
DATA(ls_nullresult) = VALUE zif_differ_diff3=>ty_lcs_result(
677+
DATA(ls_nullresult) = VALUE zif_diff3=>ty_lcs_result(
676678
key = 0
677679
buffer1index = -1
678680
buffer2index = -1
@@ -747,11 +749,11 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
747749
ENDMETHOD.
748750

749751

750-
METHOD zif_differ_diff3~merge.
752+
METHOD zif_diff3~merge.
751753

752754
DATA(ls_labels) = get_labels( is_labels ).
753755

754-
DATA(lt_regions) = zif_differ_diff3~diff3_merge(
756+
DATA(lt_regions) = zif_diff3~diff3_merge(
755757
it_a = it_a
756758
it_o = it_o
757759
it_b = it_b
@@ -773,11 +775,11 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
773775
ENDMETHOD.
774776

775777

776-
METHOD zif_differ_diff3~merge_diff3.
778+
METHOD zif_diff3~merge_diff3.
777779

778780
DATA(ls_labels) = get_labels( is_labels ).
779781

780-
DATA(lt_regions) = zif_differ_diff3~diff3_merge(
782+
DATA(lt_regions) = zif_diff3~diff3_merge(
781783
it_a = it_a
782784
it_o = it_o
783785
it_b = it_b
@@ -801,11 +803,11 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
801803
ENDMETHOD.
802804

803805

804-
METHOD zif_differ_diff3~merge_dig_in.
806+
METHOD zif_diff3~merge_dig_in.
805807

806808
DATA(ls_labels) = get_labels( is_labels ).
807809

808-
DATA(lt_regions) = zif_differ_diff3~diff3_merge(
810+
DATA(lt_regions) = zif_diff3~diff3_merge(
809811
it_a = it_a
810812
it_o = it_o
811813
it_b = it_b
@@ -815,7 +817,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
815817
IF <ls_region>-ok IS NOT INITIAL.
816818
INSERT LINES OF <ls_region>-ok INTO TABLE rs_result-result.
817819
ELSE.
818-
DATA(lt_c) = zif_differ_diff3~diff_comm(
820+
DATA(lt_c) = zif_diff3~diff_comm(
819821
it_buffer1 = <ls_region>-conflict-a
820822
it_buffer2 = <ls_region>-conflict-b ).
821823

@@ -837,7 +839,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
837839
ENDMETHOD.
838840

839841

840-
METHOD zif_differ_diff3~patch.
842+
METHOD zif_diff3~patch.
841843
" Applies a patch to a buffer.
842844
" Given buffer1 and buffer2, `patch(buffer1, diffPatch(buffer1, buffer2))` should give buffer2.
843845

@@ -864,7 +866,7 @@ CLASS zcl_differ_diff3 IMPLEMENTATION.
864866
ENDMETHOD.
865867

866868

867-
METHOD zif_differ_diff3~strip_patch.
869+
METHOD zif_diff3~strip_patch.
868870
" Takes the output of diffPatch(), and removes extra information from it.
869871
" It can still be used by patch(), below, but can no longer be inverted.
870872

0 commit comments

Comments
 (0)