eric6/Preferences/HighlightingStylesFile.py

Fri, 29 Jan 2021 19:31:47 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 29 Jan 2021 19:31:47 +0100
branch
jsonfiles
changeset 8028
a4f1b68c0737
parent 8026
d3eacdbcb18b
child 8103
338fe0064e5a
permissions
-rw-r--r--

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"]

eric ide

mercurial