Text Diff

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Text Diff

Luc Fabresse
Hi All,

 I tried to do a text diff using DiffMorph.
 But if compared strings contain CR character, the display seems not be accurate.
 Example:

s1 := 'ab', String space, String cr, 'd', String space, String cr, 'ef'.
s2 := 'ab', String cr, 'd', String cr, 'ef'. 

(DiffMorph 
from: s1
to: s2)
openInWindow.

  In this example, d (on line 2) is highlighted while it should not IMHO.
  I track this until (a DiffMorph uses a TextDiffBuilder):

  TextDiffBuilder>>buildPatchSequence
^Array streamContents: [ :stream |
self 
patchSequenceDoIfMatch: [ :string |
stream nextPut: #match -> (string copyWithout: Character cr) ]
ifInsert: [ :string | 
stream nextPut: #insert -> (string copyWithout: Character cr) ]
ifRemove: [ :string | 
stream nextPut: #remove -> (string copyWithout: Character cr) ] ]


 My question: why ignoring Character cr?
 Should we change it?

#Luc

Reply | Threaded
Open this post in threaded view
|

Re: Text Diff

Luc Fabresse
I forgot to say that using the following method version instead, I get the result I expected:

buildPatchSequence
"This method is only implemented for backwards compatibility and testing."
^Array streamContents: [ :stream |
self 
patchSequenceDoIfMatch: [ :string |
stream nextPut: #match -> string copy ]
ifInsert: [ :string | 
stream nextPut: #insert -> string copy ]
ifRemove: [ :string | 
stream nextPut: #remove -> string copy ] ]

#Luc



2012/10/18 Luc Fabresse <[hidden email]>
Hi All,

 I tried to do a text diff using DiffMorph.
 But if compared strings contain CR character, the display seems not be accurate.
 Example:

s1 := 'ab', String space, String cr, 'd', String space, String cr, 'ef'.
s2 := 'ab', String cr, 'd', String cr, 'ef'. 

(DiffMorph 
from: s1
to: s2)
openInWindow.

  In this example, d (on line 2) is highlighted while it should not IMHO.
  I track this until (a DiffMorph uses a TextDiffBuilder):

  TextDiffBuilder>>buildPatchSequence
^Array streamContents: [ :stream |
self 
patchSequenceDoIfMatch: [ :string |
stream nextPut: #match -> (string copyWithout: Character cr) ]
ifInsert: [ :string | 
stream nextPut: #insert -> (string copyWithout: Character cr) ]
ifRemove: [ :string | 
stream nextPut: #remove -> (string copyWithout: Character cr) ] ]


 My question: why ignoring Character cr?
 Should we change it?

#Luc