Thu, 27 Jun 2013 19:51:57 +0200
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
2747
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de> |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | import json |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | import sys |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | def printerr(string): |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | sys.stderr.write(string) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | sys.stderr.flush() |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | def rxValidate(regexp, options): |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | """ |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | Function to validate the given regular expression. |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | @param regexp regular expression to validate (string) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | @param options list of options (list of string) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | @return tuple of flag indicating validity (boolean), error |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | string (string) and error offset (integer) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | """ |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | try: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | from PyQt5.QtCore import QRegularExpression |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | rxOptions = QRegularExpression.NoPatternOption |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | if "CaseInsensitiveOption" in options: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | rxOptions |= QRegularExpression.CaseInsensitiveOption |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | if "MultilineOption" in options: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | rxOptions |= QRegularExpression.MultilineOption |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | if "DotMatchesEverythingOption" in options: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | rxOptions |= QRegularExpression.DotMatchesEverythingOption |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | if "ExtendedPatternSyntaxOption" in options: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | rxOptions |= QRegularExpression.ExtendedPatternSyntaxOption |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | if "InvertedGreedinessOption" in options: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | rxOptions |= QRegularExpression.InvertedGreedinessOption |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | if "UseUnicodePropertiesOption" in options: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | rxOptions |= QRegularExpression.UseUnicodePropertiesOption |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | if "DontCaptureOption" in options: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | rxOptions |= QRegularExpression.DontCaptureOption |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | error = "" |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | errorOffset = -1 |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | re = QRegularExpression(regexp, rxOptions) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | valid = re.isValid() |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | if not valid: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | error = re.errorString() |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | errorOffset = re.patternErrorOffset() |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | except ImportError: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | valid = False |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | error = "ImportError" |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | errorOffset = 0 |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | return valid, error, errorOffset |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | if __name__ == "__main__": |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | while True: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | commandStr = sys.stdin.readline() |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | try: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | commandDict = json.loads(commandStr) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | responseDict = {"error": ""} |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | printerr(str(commandDict)) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | if "command" in commandDict: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | command = commandDict["command"] |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | if command == "exit": |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | break |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | elif command == "available": |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | try: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | import PyQt5 # __IGNORE_WARNING__ |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | responseDict["available"] = True |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | except ImportError: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | responseDict["available"] = False |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | elif command == "validate": |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | valid, error, errorOffset = rxValidate(commandDict["regexp"], |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | commandDict["options"]) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | responseDict["valid"] = valid |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | responseDict["errorMessage"] = error |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | responseDict["errorOffset"] = errorOffset |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | except ValueError as err: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | responseDict = {"error": str(err)} |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | except Exception as err: |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | responseDict = {"error": str(err)} |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | responseStr = json.dumps(responseDict) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | sys.stdout.write(responseStr) |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | sys.stdout.flush() |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | |
68b920f307ff
Started to rework the QRegularExpression wizard because PyQt4 and PyQt5 cannot be mixed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | sys.exit(0) |