Fri, 29 Jan 2021 19:31:47 +0100
Highlighting Styles: changed the import/export logic to allow the selection of lexers to be imported/exported.
8022
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a class representing the highlighting styles JSON file. |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | import json |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import time |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | from PyQt5.QtCore import QObject |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | from E5Gui import E5MessageBox |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | from E5Gui.E5OverrideCursor import E5OverridenCursor |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | import Preferences |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | class HighlightingStylesFile(QObject): |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | Class representing the highlighting styles JSON file. |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | def __init__(self, parent: QObject = None): |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | Constructor |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | @param parent reference to the parent object (defaults to None) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | @type QObject (optional) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | super(HighlightingStylesFile, self).__init__(parent) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | def writeFile(self, filename: str, lexers: list) -> bool: |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | Public method to write the highlighting styles data to a highlighting |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | styles JSON file. |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | @param filename name of the highlighting styles file |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | @type str |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | @param lexers list of lexers for which to export the styles |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | @type list of PreferencesLexer |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | @return flag indicating a successful write |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | @rtype bool |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | stylesDict = {} |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | # step 0: header |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | stylesDict["header"] = { |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | "comment": "eric highlighting styles file", |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | "saved": time.strftime('%Y-%m-%d, %H:%M:%S'), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | "author": Preferences.getUser("Email"), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | } |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | # step 1: add the lexer style data |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | stylesDict["lexers"] = [] |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | for lexer in lexers: |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | lexerDict = { |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | "name": lexer.language(), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | "styles": [], |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | } |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | for description, style, substyle in lexer.getStyles(): |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | lexerDict["styles"].append({ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | "description": description, |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | "style": style, |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | "substyle": substyle, |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | "color": lexer.color(style, substyle).name(), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | "paper": lexer.paper(style, substyle).name(), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | "font": lexer.font(style, substyle).toString(), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | "eolfill": lexer.eolFill(style, substyle), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | "words": lexer.words(style, substyle).strip(), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | }) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | stylesDict["lexers"].append(lexerDict) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | try: |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | jsonString = json.dumps(stylesDict, indent=2) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | with open(filename, "w") as f: |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | f.write(jsonString) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | except (TypeError, EnvironmentError) as err: |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | with E5OverridenCursor(): |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | E5MessageBox.critical( |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | None, |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | self.tr("Export Highlighting Styles"), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | self.tr( |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | "<p>The highlighting styles file <b>{0}</b> could not" |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | " be written.</p><p>Reason: {1}</p>" |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | ).format(filename, str(err)) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | ) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | return False |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | return True |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | |
8028
a4f1b68c0737
Highlighting Styles: changed the import/export logic to allow the selection of lexers to be imported/exported.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8026
diff
changeset
|
92 | def readFile(self, filename: str) -> list: |
8022
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | Public method to read the highlighting styles data from a highlighting |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | styles JSON file. |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | @param filename name of the highlighting styles file |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | @type str |
8026
d3eacdbcb18b
Changed the highlighting styles import logic thus, that the imported styles are applied in the configuration page.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8022
diff
changeset
|
99 | @return list of read lexer style definitions |
d3eacdbcb18b
Changed the highlighting styles import logic thus, that the imported styles are applied in the configuration page.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8022
diff
changeset
|
100 | @rtype list of dict |
8022
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | """ |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | try: |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | with open(filename, "r") as f: |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | jsonString = f.read() |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | stylesDict = json.loads(jsonString) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | except (EnvironmentError, json.JSONDecodeError) as err: |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | E5MessageBox.critical( |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | None, |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | self.tr("Import Highlighting Styles"), |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | self.tr( |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | "<p>The highlighting styles file <b>{0}</b> could not be" |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | " read.</p><p>Reason: {1}</p>" |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | ).format(filename, str(err)) |
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | ) |
8026
d3eacdbcb18b
Changed the highlighting styles import logic thus, that the imported styles are applied in the configuration page.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8022
diff
changeset
|
115 | return [] |
8022
2da0139f4f91
Implemented the JSON based highlighting styles files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | |
8026
d3eacdbcb18b
Changed the highlighting styles import logic thus, that the imported styles are applied in the configuration page.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8022
diff
changeset
|
117 | return stylesDict["lexers"] |