--- 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 $'
! !