'''A suggested first step'''
Is it possible to read the Python code and to establish what the algo is in plain words?
ex: Step one: define the variable
-----
/def diff(s1, s2) :
from difflib import SequenceMatcher
s1 = s1.replace('&', '&')
s1 = s1.replace('<', '<')
s2 = s2.replace('&', '&')
s2 = s2.replace('<', '<')
seq1 = s1.splitlines()
seq2 = s2.splitlines()
seqobj = SequenceMatcher(None, seq1, seq2)
linematch = seqobj.get_matching_blocks()
if len(seq1) == len(seq2) \
and linematch[0] == (0, 0, len(seq1)) : # No differences.
return 'No differences.'
lastmatch = (0, 0)
end = (len(seq1), len(seq2))
result = "
\n"
for match in linematch : # Print all differences.
if lastmatch == match[0:2] : # Starts of pages identical.
lastmatch = (match[0] + match[2], match[1] + match[2])
continue
result = result \
+ "" \
+ "Line " + str(lastmatch[0] + 1) + ", removed:" \
+ " | " \
+ "Line " + str(lastmatch[1] + 1) + ", added:" \
+ " |
\n"
leftpane = ''
rightpane = ''
linecount = max(match[0] - lastmatch[0], match[1] - lastmatch[1])
for line in range(linecount) :
if line < match[0] - lastmatch[0] :
if line > 0 :
leftpane += '\n'
leftpane += seq1[lastmatch[0] + line]
if line < match[1] - lastmatch[1] :
if line > 0 :
rightpane += '\n'
rightpane += seq2[lastmatch[1] + line]
charobj = SequenceMatcher(None, leftpane, rightpane)
charmatch = charobj.get_matching_blocks()
if leftpane == '' and rightpane == '' :
ratio = 1.0
else :
ratio = charobj.ratio()
if ratio < 0.5 : # Insufficient similarity.
if len(leftpane) != 0 :
leftresult = "" + leftpane + ""
else :
leftresult = ''
if len(rightpane) != 0 :
rightresult = "" + rightpane + ""
else :
rightresult = ''
else : # Some similarities; markup changes.
charlast = (0, 0)
charend = (len(leftpane), len(rightpane))
leftresult = ''
rightresult = ''
for thismatch in charmatch :
if thismatch[0] - charlast[0] != 0 :
leftresult = leftresult \
+ "" \
+ leftpane[charlast[0]:thismatch[0]] \
+ ""
if thismatch[1] - charlast[1] != 0 :
rightresult = rightresult \
+ "" \
+ rightpane[charlast[1]:thismatch[1]] \
+ ""
leftresult = leftresult \
+ leftpane[thismatch[0]:thismatch[0] + thismatch[2]]
rightresult = rightresult \
+ rightpane[thismatch[1]:thismatch[1] + thismatch[2]]
charlast = (thismatch[0] + thismatch[2], thismatch[1] + thismatch[2])
leftpane = leftresult.replace('\n', '
\n')
rightpane = rightresult.replace('\n', '
\n')
result = result \
+ "" \
+ leftpane \
+ " | " \
+ rightpane \
+ " |
\n"
lastmatch = (match[0] + match[2], match[1] + match[2])
result = result + '
\n'
return result
import sys
file1 = file(sys.argv[1])
file2 = file(sys.argv[2])
str1 = file1.read()
str2 = file2.read()
file1.close()
file2.close()
print diff(str1, str2)
----
''What on '''earth''' is the use of this page? -[jcw]''
''Don't you know??? [There is a huge need for a diffs module!]''