--- a/Tools__DiffCodeView2.st Wed Jul 18 10:57:46 2012 +0100
+++ b/Tools__DiffCodeView2.st Wed Jul 18 18:00:57 2012 +0100
@@ -27,13 +27,20 @@
"{ NameSpace: Tools }"
-SyncedMultiColumnTextView subclass:#DiffCodeView2
+TwoColumnTextView subclass:#DiffCodeView2
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'Interface-CodeView'
!
+Object subclass:#DiffData
+ instanceVariableNames:'text1 text2 inserted deleted changed'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:DiffCodeView2
+!
+
!DiffCodeView2 class methodsFor:'documentation'!
copyright
@@ -91,22 +98,30 @@
"Created: / 19-07-2011 / 12:55:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-synchronizeWith: aCodeView
+text1:t1 text2:t2
+ |data|
- textViews do:[:each|each synchronizeWith: aCodeView].
-
- "Created: / 19-03-2012 / 14:26:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
+ data := self computeDiffDataForText1:t1 text2:t2.
-textViews
- ^ textViews
-!
+ (textViews at:1)
+ contents:(data text1);
+ deletedLines:(data deleted);
+ changedLines:(data changed);
+ insertedLines:#();
+ originDiffText:t1;
+ emptyLines:(data inserted).
-unsynchronizeWith: aCodeView
+ (textViews at:2)
+ contents:(data text2);
+ deletedLines:#();
+ changedLines:(data changed);
+ insertedLines:(data inserted);
+ originDiffText:t2;
+ emptyLines:(data deleted).
- textViews do:[:each|each unsynchronizeWith: aCodeView].
-
- "Created: / 19-03-2012 / 14:26:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 06-03-2010 / 10:45:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 22-06-2010 / 21:36:35 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 15-07-2010 / 23:08:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!DiffCodeView2 methodsFor:'initialization'!
@@ -128,12 +143,213 @@
"Modified: / 23-06-2010 / 19:36:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!DiffCodeView2 methodsFor:'private'!
+
+computeDiffDataForText1:t1 text2:t2
+ "created diffText object from two strings
+ This processes the DiffData as returned by the (now internal) Diff-tool"
+
+ |array1 array2 diff change index1 index2 text1 text2 i diffData deleted inserted helperText addConstant1 addConstant2 changed helper ins del pom|
+
+ "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 := ''.
+ text2 := ''.
+ 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 := text1 asString , helperText asString.
+ index1 := index1 + 1.
+ ].
+ [
+ index2 <= (change line1)
+ ] whileTrue:[
+ helperText := (array2 at:index2) asText.
+ text2 := text2 , helperText.
+ index2 := index2 + 1.
+ ].
+ ].
+ ins := change inserted.
+ del := change deleted.
+ index1 := (change line0) + 1.
+ index2 := (change line1) + 1.
+ "find replace files "
+ ((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 := text1 , (array1 at:index1) asString.
+ text2 := text2 , (array2 at:index2) asString.
+ index1 := index1 + 1.
+ index2 := index2 + 1.
+ del := del - 1.
+ ins := ins - 1.
+ i := i + 1.
+ ].
+ ].
+ "find deleted files"
+ (del > 0) ifTrue:[
+ i := 1.
+ [ i <= del ] whileTrue:[
+ deleted add:index1 + addConstant1.
+ text2 := text2 , Character cr.
+ addConstant2 := addConstant2 + 1.
+ text1 := text1 , (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 := text1 , Character cr.
+ addConstant1 := addConstant1 + 1.
+ text2 := text2 , (array2 at:index2) asString.
+ index2 := index2 + 1.
+ i := i + 1.
+ ].
+ ].
+ change := change nextLink.
+ ].
+ "kontrola zda nam nechybi posledni znaky"
+ (index1 <= (array1 size)) ifTrue:[
+ [
+ index1 <= (array1 size)
+ ] whileTrue:[
+ helperText := (array1 at:index1) asText.
+ text1 := text1 , helperText.
+ index1 := index1 + 1.
+ ].
+ ].
+ (index2 <= (array2 size)) ifTrue:[
+ [
+ index2 <= (array2 size)
+ ] whileTrue:[
+ helperText := (array2 at:index2) asText.
+ text2 := text2 , helperText.
+ index2 := index2 + 1.
+ ].
+ ].
+ diffData text1:text1.
+ diffData text2:text2.
+ 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 !!
+"/ | 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 (comment): / 19-07-2011 / 11:14:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-07-2012 / 18:55:21 / cg"
+! !
+
+!DiffCodeView2::DiffData methodsFor:'accessing'!
+
+changed
+
+ ^changed copy
+
+ "Modified: / 02-05-2010 / 19:31:18 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 16-07-2010 / 09:35:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+changed:something
+ changed := something.
+!
+
+deleted
+ ^ deleted
+!
+
+deleted:something
+ deleted := something.
+!
+
+inserted
+ ^ inserted
+!
+
+inserted:something
+ inserted := something.
+!
+
+text1
+ ^ text1
+!
+
+text1:something
+ text1 := something.
+!
+
+text2
+ ^ text2
+!
+
+text2:something
+ text2 := something.
+! !
+
!DiffCodeView2 class methodsFor:'documentation'!
version_CVS
- ^ '§Header: /cvs/stx/stx/libtool/Tools__DiffCodeView2.st,v 1.3 2011/07/19 12:32:44 vrany Exp §'
+ ^ 'Header: /cvs/stx/stx/libtool/Tools__DiffCodeView2.st,v 1.4 2012/07/17 17:03:25 cg Exp '
!
version_SVN
- ^ '$Id: Tools__DiffCodeView2.st 7944 2012-03-19 15:32:45Z vranyj1 $'
-! !
+ ^ '$Id: Tools__DiffCodeView2.st 8018 2012-07-18 17:00:57Z vranyj1 $'
+! !
\ No newline at end of file