Tools__DiffCodeView2.st
changeset 15474 9d8648afebd3
parent 15279 e15c49676d90
child 15566 184cea584be5
child 15723 901522438802
--- a/Tools__DiffCodeView2.st	Sat Feb 28 03:15:57 2015 +0100
+++ b/Tools__DiffCodeView2.st	Sat Feb 28 04:15:32 2015 +0100
@@ -172,6 +172,190 @@
 
     |array1 array2 diff change index1 index2 text1 text2 i 
      diffData deleted inserted helperText addConstant1 addConstant2 changed helper ins del pom
+     array1Size array2Size cr|
+
+    cr := Character cr asString.
+
+    "create line arrays from origin text(1 item/row)"
+    array1 := self createArray:t1.
+    array2 := self createArray:t2.
+     "inserted,deleted, cahnged lines"
+    inserted := OrderedCollection new.
+    deleted := OrderedCollection new.
+    changed := OrderedCollection new.
+     "indicates which row of origin text is added to ne text"
+    index1 := 1.
+    index2 := 1.
+     "indicate how much rows were deleted or inserted "
+    addConstant1 := 0.
+    addConstant2 := 0.
+    text1 := OrderedCollection new.
+    text2 := OrderedCollection new.
+    diff := Diff new.
+    diff a:array1 b:array2.
+    change := diff diff:false.
+    diffData := DiffData new.
+    [ change notNil ] whileTrue:[
+        "check first lines which are same"
+        (((change line0) > 0) and:[ ((change line1) > 0) ]) ifTrue:[
+            [
+                index1 <= (change line0)
+            ] whileTrue:[
+                helperText := (array1 at:index1) asText.
+                text1 add: helperText asString.
+                index1 := index1 + 1.
+            ].
+            [
+                index2 <= (change line1)
+            ] whileTrue:[
+                helperText := (array2 at:index2) asText.
+                text2 add: helperText.
+                index2 := index2 + 1.
+            ].
+        ].
+        ins := change inserted.
+        del := change deleted.
+        index1 := (change line0) + 1.
+        index2 := (change line1) + 1.
+         "find replaced lines "
+        ((del > 0) and:[ ins > 0 ]) ifTrue:[
+            helper := del - ins.
+            (helper <= 0) ifTrue:[
+                pom := change deleted.
+            ].
+            (helper > 0) ifTrue:[
+                pom := change inserted.
+            ].
+             "its same count row"
+            i := 1.
+            [ i <= pom ] whileTrue:[
+                changed add:index1 + addConstant1.
+                text1 add: (array1 at:index1) asString.
+                text2 add: (array2 at:index2) asString.
+                index1 := index1 + 1.
+                index2 := index2 + 1.
+                del := del - 1.
+                ins := ins - 1.
+                i := i + 1.
+            ].
+        ].
+         "find deleted lines"
+        (del > 0) ifTrue:[
+            i := 1.
+            [ i <= del ] whileTrue:[
+                deleted add:index1 + addConstant1.
+                text2 add: cr.
+                addConstant2 := addConstant2 + 1.
+                text1 add: (array1 at:index1) asString.
+                index1 := index1 + 1.
+                i := i + 1.
+            ].
+        ].
+         "find inserted lines"
+        (ins > 0) ifTrue:[
+            i := 1.
+            [ i <= ins ] whileTrue:[
+                inserted add:index2 + addConstant2.
+                text1 add: cr.
+                addConstant1 := addConstant1 + 1.
+                text2 add: (array2 at:index2) asString.
+                index2 := index2 + 1.
+                i := i + 1.
+            ].
+        ].
+        change := change nextLink.
+    ].
+     "kontrola zda nam nechybi posledni znaky"
+    array1Size := array1 size.
+    (index1 <= array1Size) ifTrue:[
+        [ index1 <= array1Size ] whileTrue:[
+            helperText := (array1 at:index1) asText.
+            text1 add: helperText.
+            index1 := index1 + 1.
+        ].
+    ].
+    array2Size := array2 size.
+    (index2 <= array2Size) ifTrue:[
+        [ index2 <= array2Size ] whileTrue:[
+            helperText := (array2 at:index2) asText.
+            text2 add: helperText.
+            index2 := index2 + 1.
+        ].
+    ].
+
+    1 to:(text1 size min:text2 size) do:[:idx |
+        |l1 l2|
+
+        l1 := text1 at:idx.
+        l2 := text2 at:idx.
+        l1 = l2 ifTrue:[
+            text1 at:idx put:l1 string.   "/ remove color
+            text2 at:idx put:l2 string.
+            changed remove:idx ifAbsent:[].
+        ] ifFalse:[
+            l1 withoutSeparators = l2 withoutSeparators ifTrue:[
+                text1 at:idx put:l1 string.     "/ remove color  
+                text2 at:idx put:l2 string.
+                changed remove:idx ifAbsent:[].
+            ] ifFalse:[
+                "/ self halt.
+            ]
+        ]
+    ].
+
+    diffData text1:(text1 asStringWith:'').
+    diffData text2:(text2 asStringWith:'').
+    diffData changed:changed.
+    diffData inserted:inserted.
+    diffData deleted:deleted.
+    ^ diffData.
+
+    "Modified: / 22-06-2010 / 21:02:50 / Jakub <zelenja7@fel.cvut.cz>"
+    "Modified: / 24-06-2010 / 21:07:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-07-2012 / 18:55:01 / cg"
+!
+
+createArray:text1
+    "cg: isn't that an obfuscated variation of #asCollectionOfLines ?"
+
+    "/ ^ text1 asStringCollection. "/ yes, it looks like !! 
+
+    "/ JV@2012-07-26: Yes, looks like but it is not!! This version
+    "/ keeps CRs in lines. Do not change it back - if you do, DoffCodeView2 
+    "/ will show whole source in a single line.
+
+    | array src line c |
+
+    array := StringCollection new.
+    src := text1 readStream.
+    line := (String new: 80) writeStream.
+    [ src atEnd ] whileFalse:[
+        c := src next.
+        line nextPut: c.
+        c == Character cr ifTrue:[
+            array add: line contents.
+            line reset.
+        ]        
+    ].
+    line position ~~ 0 ifTrue:[
+        array add: line contents
+    ].
+    ^array
+
+    "Created: / 22-03-2010 / 14:48:27 / Jakub <zelenja7@fel.cvut.cz>"
+    "Modified: / 17-07-2012 / 18:55:21 / cg"
+    "Modified (comment): / 26-07-2012 / 21:45:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+old_computeDiffDataForText1:t1 text2:t2 
+    "created diffText object from two strings
+     This processes the DiffData as returned by the (now internal) Diff-tool"
+    
+    "/ cg: same code as in Diff2CodeView2!!!!!!
+    "/ please refactor and make this a utility method on the class side
+
+    |array1 array2 diff change index1 index2 text1 text2 i 
+     diffData deleted inserted helperText addConstant1 addConstant2 changed helper ins del pom
      array1Size array2Size|
 
     "create line arrays from origin text(1 item/row)"
@@ -215,7 +399,7 @@
         del := change deleted.
         index1 := (change line0) + 1.
         index2 := (change line1) + 1.
-         "find replace files "
+         "find replaced lines "
         ((del > 0) and:[ ins > 0 ]) ifTrue:[
             helper := del - ins.
             (helper <= 0) ifTrue:[
@@ -237,7 +421,7 @@
                 i := i + 1.
             ].
         ].
-         "find deleted files"
+         "find deleted lines"
         (del > 0) ifTrue:[
             i := 1.
             [ i <= del ] whileTrue:[
@@ -290,38 +474,6 @@
     "Modified: / 22-06-2010 / 21:02:50 / Jakub <zelenja7@fel.cvut.cz>"
     "Modified: / 24-06-2010 / 21:07:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 17-07-2012 / 18:55:01 / cg"
-!
-
-createArray:text1
-    "cg: isn't that an obfuscated variation of #asCollectionOfLines ?"
-
-    "/ ^ text1 asStringCollection. "/ yes, it looks like !! 
-
-    "/ JV@2012-07-26: Yes, looks like but it is not!! This version
-    "/ keeps CRs in lines. Do not change it back - if you do, DoffCodeView2 
-    "/ will show whole source in a single line.
-
-    | array src line c |
-
-    array := StringCollection new.
-    src := text1 readStream.
-    line := (String new: 80) writeStream.
-    [ src atEnd ] whileFalse:[
-        c := src next.
-        line nextPut: c.
-        c == Character cr ifTrue:[
-            array add: line contents.
-            line reset.
-        ]        
-    ].
-    line position ~~ 0 ifTrue:[
-        array add: line contents
-    ].
-    ^array
-
-    "Created: / 22-03-2010 / 14:48:27 / Jakub <zelenja7@fel.cvut.cz>"
-    "Modified: / 17-07-2012 / 18:55:21 / cg"
-    "Modified (comment): / 26-07-2012 / 21:45:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !DiffCodeView2::DiffData methodsFor:'accessing'!
@@ -373,10 +525,10 @@
 !DiffCodeView2 class methodsFor:'documentation'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__DiffCodeView2.st,v 1.10 2015-02-13 19:27:53 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__DiffCodeView2.st,v 1.11 2015-02-28 03:15:32 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: Tools__DiffCodeView2.st,v 1.10 2015-02-13 19:27:53 cg Exp $'
+    ^ '$Id: Tools__DiffCodeView2.st,v 1.11 2015-02-28 03:15:32 cg Exp $'
 ! !