117 lines
4.2 KiB
Python
Executable File
117 lines
4.2 KiB
Python
Executable File
from functions import *
|
|
from generator import *
|
|
from mainGUI import *
|
|
from PyQt5.QtGui import *
|
|
from PyQt5.QtWidgets import *
|
|
from PyQt5.QtCore import *
|
|
import sys
|
|
|
|
import os
|
|
import re
|
|
|
|
class MyWin(QtWidgets.QMainWindow):
|
|
def __init__(self, parent=None):
|
|
QtWidgets.QWidget.__init__(self, parent)
|
|
self.ui = Ui_MainWindow()
|
|
self.ui.setupUi(self)
|
|
|
|
shortcut = QShortcut(QKeySequence("Ctrl+Return"), self)
|
|
shortcut.activated.connect(self.ui.ProcessPushButton.click)
|
|
|
|
self.Pattern = ''
|
|
self.TestString = ''
|
|
|
|
self.ui.ProcessPushButton.clicked.connect(self.PatternChanged)
|
|
|
|
self.ui.RegexTextEdit.installEventFilter(self)
|
|
|
|
self.ui.SheetDockWidget.hide()
|
|
self.ui.RegexSheetPushButton.clicked.connect(self.Sheet)
|
|
self.SheetFlag = False
|
|
self.ui.CodeGeneratorPushButton.clicked.connect(self.CodeGenerator)
|
|
self.ui.AboutPushButton.hide()
|
|
|
|
self.ResultWidget = None
|
|
self.horizontalLayout_4 = None
|
|
self.ResultTag = None
|
|
self.ResultRange = None
|
|
self.ResultText = None
|
|
self.Info = []
|
|
self.Match = []
|
|
|
|
self.ui.NoMatchesLabel.hide()
|
|
|
|
self.resize(800, 600)
|
|
|
|
self.WindowWidthFlag = 0
|
|
self.WindowHeightFlag = 0
|
|
|
|
self.ColorList = ['rgb(198, 227, 255)','rgb(198, 233, 157)','rgb(245, 171, 165)','rgb(255, 191, 109)','rgb(193, 203, 235)','rgb(215, 253, 227)','rgb(227, 255, 172)','rgb(232, 141, 238)','rgb(207, 221, 103)','rgb(255, 172, 192)','rgb(132, 214, 238)']
|
|
|
|
self.GeneratedCode = Ui_MainWindow()
|
|
|
|
def UpdateInfo(self):
|
|
'''Visual display of search results'''
|
|
for i, v in enumerate(self.Info):
|
|
if 'Full match' in v[0]:
|
|
FullMatchTagUI(self.ui.scrollAreaWidgetContents, self.ui.verticalLayout_5, v[0])
|
|
color = self.ColorList[0]
|
|
else:
|
|
color = GenerateGroupColor(self.ColorList, v[0])
|
|
InfoUI(self.ResultWidget, self.horizontalLayout_4, self.ResultTag, self.ResultRange, self.ResultText, i, color, self.ui.scrollAreaWidgetContents, self.ui.verticalLayout_5, v)
|
|
SpacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Expanding)
|
|
self.ui.verticalLayout_5.addItem(SpacerItem)
|
|
def eventFilter(self, obj, event):
|
|
if obj is self.ui.RegexTextEdit and event.type() == QEvent.KeyPress:
|
|
if event.key() in (Qt.Key_Return, Qt.Key_Enter):
|
|
self.PatternChanged()
|
|
return True
|
|
return super().eventFilter(obj, event)
|
|
def PatternChanged(self):
|
|
'''Search for test text based on a pattern and display the results'''
|
|
clearLayout(self.ui.verticalLayout_5)
|
|
self.Info = []
|
|
self.Pattern = self.ui.RegexTextEdit.toPlainText()
|
|
self.TestString = self.ui.TestStringTextEdit.toPlainText()
|
|
self.Info = Process(self.TestString, self.Pattern, self.Info, self.ui.NoMatchesLabel)
|
|
self.ResultWidget, self.horizontalLayout_4, self.ResultTag, self.ResultRange, self.ResultText = PreprocessInfo(self.Info)
|
|
self.UpdateInfo()
|
|
ClearHighlight(self.ui.TestStringTextEdit, self.TestString)
|
|
for k, v in enumerate(self.Info):
|
|
hrange = HighlightRange(v[1])
|
|
if 'Full match' in v[0]:
|
|
Highlight(self.ui.TestStringTextEdit, QColor(198, 227, 255), hrange[0], hrange[1])
|
|
else:
|
|
color = GenerateGroupColor(self.ColorList, v[0])
|
|
r, g, b = strColorTolist(color)
|
|
Highlight(self.ui.TestStringTextEdit, QColor(r,g,b), hrange[0], hrange[1])
|
|
|
|
def Sheet(self):
|
|
'''Display regular expression cheat sheet'''
|
|
if not self.SheetFlag:
|
|
self.WindowWidthFlag = self.width()
|
|
self.WindowHeightFlag = self.height()
|
|
self.ui.SheetDockWidget.show()
|
|
self.SheetFlag = True
|
|
elif self.SheetFlag:
|
|
self.ui.SheetDockWidget.close()
|
|
self.adjustSize()
|
|
self.resize(self.WindowWidthFlag,self.WindowHeightFlag)
|
|
self.SheetFlag = False
|
|
|
|
def CodeGenerator(self):
|
|
'''The code for Python regular expression is generated in a new window'''
|
|
if not self.Pattern or not self.TestString:
|
|
self.ui.NoMatchesLabel.show()
|
|
else:
|
|
self.CodeGeneratorWindow = QtWidgets.QMainWindow()
|
|
self.gen_ui = Ui_CodeGenerator()
|
|
self.gen_ui.setupUi(self.CodeGeneratorWindow)
|
|
GetCode(self.gen_ui.textEdit, self.Pattern, self.TestString)
|
|
self.CodeGeneratorWindow.show()
|
|
|
|
if __name__ == '__main__':
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
myapp = MyWin()
|
|
myapp.show()
|
|
sys.exit(app.exec_()) |