Skip to content

Commit 7d82cbe

Browse files
committed
Initial commit
Adding files to repo
1 parent 477a568 commit 7d82cbe

File tree

7 files changed

+180
-2
lines changed

7 files changed

+180
-2
lines changed

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,9 @@
1-
# amdiff-ascii-diff-tool
2-
ASCII text diff tool written in Python3 using PyQt5
1+
# amdiff
2+
3+
ASCII diff tool written in Python 3 using PyQt<br>
4+
5+
pip install pyqt5<br>
6+
7+
<img src="https://raw.githubusercontent.com/AlexMartin17/amdiff-ascii-diff-tool/master/img/mainui.JPG">
8+
<img src="https://raw.githubusercontent.com/AlexMartin17/PyTicTacToe-Graphical/master/img/files.JPG">
9+
<img src="https://raw.githubusercontent.com/AlexMartin17/PyTicTacToe-Graphical/master/img/differenceui.JPG">

diff.py.py

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
from PyQt5 import QtCore, QtGui, QtWidgets
2+
import difflib
3+
import os
4+
import sys
5+
6+
class MainUI():
7+
def setupUi(self, MainWindow):
8+
MainWindow.setObjectName("MainWindow")
9+
MainWindow.resize(497, 224)
10+
MainWindow.setMinimumSize(QtCore.QSize(497, 224))
11+
MainWindow.setMaximumSize(QtCore.QSize(497, 224))
12+
self.openfiledialog = QtWidgets.QFileDialog(MainWindow)
13+
self.pushButton = QtWidgets.QPushButton(MainWindow)
14+
self.pushButton.setGeometry(QtCore.QRect(80, 110, 93, 28))
15+
self.pushButton.setObjectName("pushButton")
16+
self.pushButton.clicked.connect(self.openFileNameDialog)
17+
self.pushButton_2 = QtWidgets.QPushButton(MainWindow)
18+
self.pushButton_2.setGeometry(QtCore.QRect(320, 110, 93, 28))
19+
self.pushButton_2.setObjectName("pushButton_2")
20+
self.pushButton_2.clicked.connect(self.openFileNameDialog2)
21+
self.pushButton_3 = QtWidgets.QPushButton(MainWindow)
22+
self.pushButton_3.setGeometry(QtCore.QRect(200, 170, 93, 28))
23+
self.pushButton_3.setObjectName("pushButton_3")
24+
self.pushButton_3.clicked.connect(self.difference)
25+
self.lineEdit = QtWidgets.QLineEdit(MainWindow)
26+
self.lineEdit.setGeometry(QtCore.QRect(40, 70, 181, 22))
27+
self.lineEdit.setObjectName("lineEdit")
28+
self.lineEdit_2 = QtWidgets.QLineEdit(MainWindow)
29+
self.lineEdit_2.setGeometry(QtCore.QRect(270, 70, 181, 22))
30+
self.lineEdit_2.setObjectName("lineEdit_2")
31+
32+
self.retranslateUi(MainWindow)
33+
QtCore.QMetaObject.connectSlotsByName(MainWindow)
34+
35+
def retranslateUi(self, MainWindow):
36+
_translate = QtCore.QCoreApplication.translate
37+
MainWindow.setWindowTitle(_translate("MainWindow", "amdiff"))
38+
self.pushButton.setText(_translate("MainWindow", "Browse"))
39+
self.pushButton_2.setText(_translate("MainWindow", "Browse"))
40+
self.pushButton_3.setText(_translate("MainWindow", "Diff"))
41+
42+
def openFileNameDialog(self):
43+
self.openfiledialog.setNameFilter("Any ascii file (*)");
44+
self.openfiledialog.setDirectory(os.path.dirname(os.path.realpath(__file__)))
45+
if self.openfiledialog.exec():
46+
actualfile = self.openfiledialog.selectedFiles();
47+
self.lineEdit.setText(actualfile[0])
48+
49+
def openFileNameDialog2(self):
50+
self.openfiledialog.setNameFilter("Any ascii file (*)");
51+
self.openfiledialog.setDirectory(os.path.dirname(os.path.realpath(__file__)))
52+
if self.openfiledialog.exec():
53+
actualfile = self.openfiledialog.selectedFiles();
54+
self.lineEdit_2.setText(actualfile[0])
55+
56+
def difflib_parser(self, a, b):
57+
difflib_matcher = difflib.SequenceMatcher(None, a, b)
58+
def process_tag(tag, i1, i2, j1, j2):
59+
if tag == 'replace':
60+
return '<span style="text-decoration:line-through;background-color:#ff94d0;">' + difflib_matcher.a[i1:i2] + '</span> -> <span style="background-color:#60f516;">' + difflib_matcher.b[j1:j2] + '</span>'
61+
if tag == 'delete':
62+
return '<span style="background-color:#ff94d0;">-' + difflib_matcher.a[i1:i2] + '</span>'
63+
if tag == 'equal':
64+
return difflib_matcher.a[i1:i2]
65+
if tag == 'insert':
66+
return '<span style="background-color:#60f516;">+' + difflib_matcher.b[j1:j2] + '</span>'
67+
return ''.join(process_tag(*t) for t in difflib_matcher.get_opcodes())
68+
69+
def difference(self):
70+
global file1, diff
71+
72+
file1 = self.lineEdit.text()
73+
file2 = self.lineEdit_2.text()
74+
path = os.path.dirname(os.path.realpath(__file__))
75+
diff = f"{path}/temp.txt"
76+
77+
with open(file1, "r") as tmp_file1:
78+
o = tmp_file1.readlines()
79+
with open(file2, "r") as tmp_file2:
80+
d = tmp_file2.readlines()
81+
with open(diff, "w") as diff_file:
82+
for x in range(len(o)):
83+
diff_file.write(self.difflib_parser(o[x],d[x]))
84+
85+
tmp_file1.close()
86+
tmp_file2.close()
87+
diff_file.close()
88+
Window.show()
89+
w.display_diff()
90+
91+
class DifferenceUI(MainUI):
92+
def __init__(self):
93+
super().__init__()
94+
95+
def setupUi(self, MainWindow):
96+
MainWindow.setObjectName("MainWindow")
97+
MainWindow.resize(1497, 890)
98+
MainWindow.setMinimumSize(QtCore.QSize(1497, 890))
99+
MainWindow.setMaximumSize(QtCore.QSize(1497, 890))
100+
self.centralwidget = QtWidgets.QWidget(MainWindow)
101+
self.centralwidget.setObjectName("centralwidget")
102+
font = QtGui.QFont()
103+
font.setPointSize(10)
104+
font.setFamily("Trebuched MS")
105+
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
106+
self.textEdit.setFont(font)
107+
self.textEdit.setGeometry(QtCore.QRect(10, 10, 731, 821))
108+
self.textEdit.setObjectName("textEdit")
109+
self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget)
110+
self.textEdit_2.setFont(font)
111+
self.textEdit_2.setGeometry(QtCore.QRect(750, 10, 731, 821))
112+
self.textEdit_2.setObjectName("textEdit_2")
113+
MainWindow.setCentralWidget(self.centralwidget)
114+
self.menubar = QtWidgets.QMenuBar(MainWindow)
115+
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
116+
self.menubar.setObjectName("menubar")
117+
MainWindow.setMenuBar(self.menubar)
118+
self.statusbar = QtWidgets.QStatusBar(MainWindow)
119+
self.statusbar.setObjectName("statusbar")
120+
MainWindow.setStatusBar(self.statusbar)
121+
122+
self.retranslateUi(MainWindow)
123+
QtCore.QMetaObject.connectSlotsByName(MainWindow)
124+
125+
def display_diff(self):
126+
global file1, diff
127+
128+
with open(file1, "r") as tmp_file1:
129+
o = tmp_file1.readlines()
130+
for x in range(len(o)):
131+
self.textEdit.append(o[x])
132+
self.textEdit_2.toHtml()
133+
tmp_file1.close()
134+
135+
with open(diff, "r") as tmp_diff:
136+
d = tmp_diff.readlines()
137+
for x in range(len(d)):
138+
self.textEdit_2.append(d[x])
139+
self.textEdit_2.toHtml()
140+
tmp_diff.close()
141+
142+
def retranslateUi(self, MainWindow):
143+
_translate = QtCore.QCoreApplication.translate
144+
MainWindow.setWindowTitle(_translate("MainWindow", "Difference"))
145+
146+
if __name__ == "__main__":
147+
app = QtWidgets.QApplication(sys.argv)
148+
MainWindow = QtWidgets.QMainWindow()
149+
ui = MainUI()
150+
ui.setupUi(MainWindow)
151+
MainWindow.show()
152+
ui.retranslateUi(MainWindow)
153+
Window = QtWidgets.QMainWindow()
154+
w = DifferenceUI()
155+
w.setupUi(Window)
156+
w.retranslateUi(Window)
157+
sys.exit(app.exec_())

examplefile1.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Diff tool written in Python3 using PyQt5
2+
Examples:
3+
4+
Equal line
5+
Added line
6+
Modified line
7+
Removed line

examplefile2.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Diff tool written in Python3 using PyQt5
2+
Examples:
3+
4+
Equal line
5+
Added lineLine
6+
Modified LINE
7+
Removed

img/differenceui.JPG

36 KB
Loading

img/files.JPG

28.2 KB
Loading

img/mainui.JPG

17.5 KB
Loading

0 commit comments

Comments
 (0)