# HG changeset patch # User Claus Gittinger # Date 842294506 -7200 # Node ID bbed5ec2fbeb7a99890355cfbc3414e70f595e5c # Parent 72dd9d6a9ea301a8e7e62281cafb682088bf3911 checkin from browser diff -r 72dd9d6a9ea3 -r bbed5ec2fbeb Diff3TextView.st --- a/Diff3TextView.st Mon Sep 09 18:55:51 1996 +0200 +++ b/Diff3TextView.st Mon Sep 09 20:41:46 1996 +0200 @@ -18,7 +18,7 @@ category:'Views-Text' ! -!Diff3TextView class methodsFor:'documentation'! +!Diff3TextView class methodsFor:'documentation'! copyright " @@ -48,7 +48,7 @@ " ! ! -!Diff3TextView class methodsFor:'instance creation'! +!Diff3TextView class methodsFor:'instance creation'! openOnMergedText:text label:firstLabel label:secondLabel label:thirdLabel "open up a view showing firstText, secondText and thirdText side-by-side, @@ -86,6 +86,95 @@ "Modified: 12.12.1995 / 13:09:13 / cg" ! ! +!Diff3TextView class methodsFor:'public helpers'! + +emphasizeMergedDiff3Text:mergedText emphasize1:e1 emphasize2:e2 emphasizeSep:e3 + "given the merge()/rcsmerge() merged output (as created by 'cvs update'), + create & return a text object which contains the conflicts + highlighted. + CAVEAT: this is a highly specialized method - probably not the right place + for it here ..." + + |dIdx dEnd state s entry c list skip sep| + + list := OrderedCollection new. + + dIdx := 1. + dEnd := mergedText size + 1. + state := #initial. + [dIdx < dEnd] whileTrue:[ + dIdx == dEnd ifTrue:[ + "dummy cleanup entry" + entry := nil. + state := #initial. + ] ifFalse:[ + entry := mergedText at:dIdx. + dIdx := dIdx + 1. + ]. + + skip := false. + + entry notNil ifTrue:[ + sep := nil. + + (entry startsWith:'<<<<<<<') ifTrue:[ + state := 1. skip := true. sep := '----- your version ----'. + ] ifFalse:[ + (entry startsWith:'|||||||') ifTrue:[ + state := 2. skip := true. + ] ifFalse:[ + (entry startsWith:'=======') ifTrue:[ + state == 2 ifFalse:[ + state := 23 "/ on both 2 and 3 + ] ifTrue:[ + state := 3 "/ only in 3 + ]. + skip := true. + sep := '----- other version ----'. + ] ifFalse:[ + (entry startsWith:'>>>>>>>') ifTrue:[ + state := #initial. + skip := true. + sep := '------------------------'. + ] + ] + ] + ]. + + sep notNil ifTrue:[ + list add:(Text + string:sep + emphasis:e3). + ]. + + skip ifFalse:[ + state == #initial ifTrue:[ + list add:entry + ]. + state == 1 ifTrue:[ + e1 notNil ifTrue:[ + list add:(Text string:entry emphasis:e1) + ] ifFalse:[ + list add:entry + ] + ]. + (state == 3 or:[state == 23]) ifTrue:[ + e2 notNil ifTrue:[ + list add:(Text string:entry emphasis:e2) + ] ifFalse:[ + list add:entry + ] + ]. + ]. + ]. + ]. + + ^ list + + "Created: 9.9.1996 / 19:54:00 / cg" + "Modified: 9.9.1996 / 20:41:40 / cg" +! ! + !Diff3TextView methodsFor:'initialization'! initStyle @@ -233,8 +322,8 @@ "Modified: 13.12.1995 / 19:56:32 / cg" ! ! -!Diff3TextView class methodsFor:'documentation'! +!Diff3TextView class methodsFor:'documentation'! version -^ '$Header: /cvs/stx/stx/libtool/Diff3TextView.st,v 1.3 1995-12-13 19:03:36 cg Exp $' +^ '$Header: /cvs/stx/stx/libtool/Diff3TextView.st,v 1.4 1996-09-09 18:41:46 cg Exp $' ! ! diff -r 72dd9d6a9ea3 -r bbed5ec2fbeb Diff3TxtV.st --- a/Diff3TxtV.st Mon Sep 09 18:55:51 1996 +0200 +++ b/Diff3TxtV.st Mon Sep 09 20:41:46 1996 +0200 @@ -18,7 +18,7 @@ category:'Views-Text' ! -!Diff3TextView class methodsFor:'documentation'! +!Diff3TextView class methodsFor:'documentation'! copyright " @@ -48,7 +48,7 @@ " ! ! -!Diff3TextView class methodsFor:'instance creation'! +!Diff3TextView class methodsFor:'instance creation'! openOnMergedText:text label:firstLabel label:secondLabel label:thirdLabel "open up a view showing firstText, secondText and thirdText side-by-side, @@ -86,6 +86,95 @@ "Modified: 12.12.1995 / 13:09:13 / cg" ! ! +!Diff3TextView class methodsFor:'public helpers'! + +emphasizeMergedDiff3Text:mergedText emphasize1:e1 emphasize2:e2 emphasizeSep:e3 + "given the merge()/rcsmerge() merged output (as created by 'cvs update'), + create & return a text object which contains the conflicts + highlighted. + CAVEAT: this is a highly specialized method - probably not the right place + for it here ..." + + |dIdx dEnd state s entry c list skip sep| + + list := OrderedCollection new. + + dIdx := 1. + dEnd := mergedText size + 1. + state := #initial. + [dIdx < dEnd] whileTrue:[ + dIdx == dEnd ifTrue:[ + "dummy cleanup entry" + entry := nil. + state := #initial. + ] ifFalse:[ + entry := mergedText at:dIdx. + dIdx := dIdx + 1. + ]. + + skip := false. + + entry notNil ifTrue:[ + sep := nil. + + (entry startsWith:'<<<<<<<') ifTrue:[ + state := 1. skip := true. sep := '----- your version ----'. + ] ifFalse:[ + (entry startsWith:'|||||||') ifTrue:[ + state := 2. skip := true. + ] ifFalse:[ + (entry startsWith:'=======') ifTrue:[ + state == 2 ifFalse:[ + state := 23 "/ on both 2 and 3 + ] ifTrue:[ + state := 3 "/ only in 3 + ]. + skip := true. + sep := '----- other version ----'. + ] ifFalse:[ + (entry startsWith:'>>>>>>>') ifTrue:[ + state := #initial. + skip := true. + sep := '------------------------'. + ] + ] + ] + ]. + + sep notNil ifTrue:[ + list add:(Text + string:sep + emphasis:e3). + ]. + + skip ifFalse:[ + state == #initial ifTrue:[ + list add:entry + ]. + state == 1 ifTrue:[ + e1 notNil ifTrue:[ + list add:(Text string:entry emphasis:e1) + ] ifFalse:[ + list add:entry + ] + ]. + (state == 3 or:[state == 23]) ifTrue:[ + e2 notNil ifTrue:[ + list add:(Text string:entry emphasis:e2) + ] ifFalse:[ + list add:entry + ] + ]. + ]. + ]. + ]. + + ^ list + + "Created: 9.9.1996 / 19:54:00 / cg" + "Modified: 9.9.1996 / 20:41:40 / cg" +! ! + !Diff3TextView methodsFor:'initialization'! initStyle @@ -233,8 +322,8 @@ "Modified: 13.12.1995 / 19:56:32 / cg" ! ! -!Diff3TextView class methodsFor:'documentation'! +!Diff3TextView class methodsFor:'documentation'! version -^ '$Header: /cvs/stx/stx/libtool/Attic/Diff3TxtV.st,v 1.3 1995-12-13 19:03:36 cg Exp $' +^ '$Header: /cvs/stx/stx/libtool/Attic/Diff3TxtV.st,v 1.4 1996-09-09 18:41:46 cg Exp $' ! !