42 # 'font_family': font family (str) |
43 # 'font_family': font family (str) |
43 # 'font_size: point size (int) |
44 # 'font_size: point size (int) |
44 # 'font_bold: bold font (bool) |
45 # 'font_bold: bold font (bool) |
45 # 'font_italic: italic font (bool) |
46 # 'font_italic: italic font (bool) |
46 # 'font_underline: underlined font (bool) |
47 # 'font_underline: underlined font (bool) |
47 |
48 |
48 self.__subStyles = {} |
49 self.__subStyles = {} |
49 self.__subStylesInitialized = False |
50 self.__subStylesInitialized = False |
50 |
51 |
51 def loadAllDefaultSubStyles(self): |
52 def loadAllDefaultSubStyles(self): |
52 """ |
53 """ |
53 Public method to load the default sub-style definitions. |
54 Public method to load the default sub-style definitions. |
54 """ |
55 """ |
55 self.__subStyles = copy.deepcopy(self.defaultSubStyles) |
56 self.__subStyles = copy.deepcopy(self.defaultSubStyles) |
56 |
57 |
57 self.__subStylesInitialized = True |
58 self.__subStylesInitialized = True |
58 |
59 |
59 def loadDefaultSubStyles(self, style): |
60 def loadDefaultSubStyles(self, style): |
60 """ |
61 """ |
61 Public method to load the default sub-styles for a given base style. |
62 Public method to load the default sub-styles for a given base style. |
62 |
63 |
63 @param style style number |
64 @param style style number |
64 @type int |
65 @type int |
65 """ |
66 """ |
66 if style in self.defaultSubStyles: |
67 if style in self.defaultSubStyles: |
67 self.__subStyles[style] = copy.deepcopy( |
68 self.__subStyles[style] = copy.deepcopy(self.defaultSubStyles[style]) |
68 self.defaultSubStyles[style]) |
69 |
69 |
|
70 def loadSubstyles(self): |
70 def loadSubstyles(self): |
71 """ |
71 """ |
72 Public method to load the sub-styles from the settings file. |
72 Public method to load the sub-styles from the settings file. |
73 """ |
73 """ |
74 settings = Preferences.getSettings() |
74 settings = Preferences.getSettings() |
75 |
75 |
76 # Step 1: check if sub-styles were defined and saved |
76 # Step 1: check if sub-styles were defined and saved |
77 subStylesDefined = False |
77 subStylesDefined = False |
78 for baseStyle in self.baseStyles: |
78 for baseStyle in self.baseStyles: |
79 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
79 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
80 self.language(), baseStyle) |
80 self.language(), baseStyle |
|
81 ) |
81 subStylesDefined |= settings.contains(key) |
82 subStylesDefined |= settings.contains(key) |
82 # Step 2.1: load default sub-styles, if none were defined |
83 # Step 2.1: load default sub-styles, if none were defined |
83 if not subStylesDefined: |
84 if not subStylesDefined: |
84 self.loadAllDefaultSubStyles() |
85 self.loadAllDefaultSubStyles() |
85 |
86 |
86 # Step 2.2: load from settings file |
87 # Step 2.2: load from settings file |
87 else: |
88 else: |
88 self.__subStyles = {} |
89 self.__subStyles = {} |
89 for baseStyle in self.baseStyles: |
90 for baseStyle in self.baseStyles: |
90 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
91 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
91 self.language(), baseStyle) |
92 self.language(), baseStyle |
|
93 ) |
92 if settings.contains(key): |
94 if settings.contains(key): |
93 subStyleLength = int(settings.value(key)) |
95 subStyleLength = int(settings.value(key)) |
94 if subStyleLength: |
96 if subStyleLength: |
95 self.__subStyles[baseStyle] = {} |
97 self.__subStyles[baseStyle] = {} |
96 for subStyle in range(subStyleLength): |
98 for subStyle in range(subStyleLength): |
98 "Scintilla/{0}/style{1}/substyle{2}/" |
100 "Scintilla/{0}/style{1}/substyle{2}/" |
99 ).format(self.language(), baseStyle, subStyle) |
101 ).format(self.language(), baseStyle, subStyle) |
100 if settings.contains(substyleKey + "Description"): |
102 if settings.contains(substyleKey + "Description"): |
101 subStyleData = {} |
103 subStyleData = {} |
102 subStyleData["Description"] = settings.value( |
104 subStyleData["Description"] = settings.value( |
103 substyleKey + "Description", "") |
105 substyleKey + "Description", "" |
|
106 ) |
104 subStyleData["Words"] = settings.value( |
107 subStyleData["Words"] = settings.value( |
105 substyleKey + "Words", "") |
108 substyleKey + "Words", "" |
|
109 ) |
106 style = {} |
110 style = {} |
107 |
111 |
108 key = substyleKey + "fore" |
112 key = substyleKey + "fore" |
109 if settings.contains(key): |
113 if settings.contains(key): |
110 style["fore"] = int(settings.value(key)) |
114 style["fore"] = int(settings.value(key)) |
111 key = substyleKey + "paper" |
115 key = substyleKey + "paper" |
112 if settings.contains(key): |
116 if settings.contains(key): |
113 style["paper"] = int(settings.value(key)) |
117 style["paper"] = int(settings.value(key)) |
114 key = substyleKey + "eolfill" |
118 key = substyleKey + "eolfill" |
115 if settings.contains(key): |
119 if settings.contains(key): |
116 style["eolfill"] = Preferences.toBool( |
120 style["eolfill"] = Preferences.toBool( |
117 settings.value(key)) |
121 settings.value(key) |
|
122 ) |
118 key = substyleKey + "font_family" |
123 key = substyleKey + "font_family" |
119 if settings.contains(key): |
124 if settings.contains(key): |
120 style["font_family"] = settings.value(key) |
125 style["font_family"] = settings.value(key) |
121 key = substyleKey + "font_size" |
126 key = substyleKey + "font_size" |
122 if settings.contains(key): |
127 if settings.contains(key): |
123 style["font_size"] = ( |
128 style["font_size"] = int(settings.value(key)) |
124 int(settings.value(key)) |
|
125 ) |
|
126 key = substyleKey + "font_bold" |
129 key = substyleKey + "font_bold" |
127 if settings.contains(key): |
130 if settings.contains(key): |
128 style["font_bold"] = Preferences.toBool( |
131 style["font_bold"] = Preferences.toBool( |
129 settings.value(key)) |
132 settings.value(key) |
|
133 ) |
130 key = substyleKey + "font_italic" |
134 key = substyleKey + "font_italic" |
131 if settings.contains(key): |
135 if settings.contains(key): |
132 style["font_italic"] = Preferences.toBool( |
136 style["font_italic"] = Preferences.toBool( |
133 settings.value(key)) |
137 settings.value(key) |
|
138 ) |
134 key = substyleKey + "font_underline" |
139 key = substyleKey + "font_underline" |
135 if settings.contains(key): |
140 if settings.contains(key): |
136 style["font_underline"] = ( |
141 style["font_underline"] = Preferences.toBool( |
137 Preferences.toBool(settings.value(key)) |
142 settings.value(key) |
138 ) |
143 ) |
139 |
144 |
140 subStyleData["Style"] = style |
145 subStyleData["Style"] = style |
141 |
146 |
142 self.__subStyles[baseStyle][subStyle] = ( |
147 self.__subStyles[baseStyle][subStyle] = subStyleData |
143 subStyleData |
148 |
144 ) |
|
145 |
|
146 else: |
149 else: |
147 # initialize with default |
150 # initialize with default |
148 self.__subStyles[baseStyle][subStyle] = ( |
151 self.__subStyles[baseStyle][subStyle] = copy.deepcopy( |
149 copy.deepcopy(self.defaultSubStyles |
152 self.defaultSubStyles[baseStyle][subStyle] |
150 [baseStyle][subStyle]) |
|
151 ) |
153 ) |
152 |
154 |
153 self.__subStylesInitialized = True |
155 self.__subStylesInitialized = True |
154 |
156 |
155 def readSubstyles(self, editor): |
157 def readSubstyles(self, editor): |
156 """ |
158 """ |
157 Public method to load the sub-styles and configure the editor. |
159 Public method to load the sub-styles and configure the editor. |
158 |
160 |
159 @param editor reference to the editor object |
161 @param editor reference to the editor object |
160 @type QsciScintilla |
162 @type QsciScintilla |
161 """ |
163 """ |
162 subStyleBasesLength = editor.SendScintilla( |
164 subStyleBasesLength = editor.SendScintilla(editor.SCI_GETSUBSTYLEBASES, 0, None) |
163 editor.SCI_GETSUBSTYLEBASES, 0, None) |
|
164 if not subStyleBasesLength: |
165 if not subStyleBasesLength: |
165 # lexer does not support sub-styling |
166 # lexer does not support sub-styling |
166 return |
167 return |
167 |
168 |
168 self.loadSubstyles() |
169 self.loadSubstyles() |
169 |
170 |
170 # free existing sub-styles first |
171 # free existing sub-styles first |
171 editor.SendScintilla(editor.SCI_FREESUBSTYLES) |
172 editor.SendScintilla(editor.SCI_FREESUBSTYLES) |
172 subStyleBases = b"\00" * (subStyleBasesLength + 1) |
173 subStyleBases = b"\00" * (subStyleBasesLength + 1) |
173 editor.SendScintilla(editor.SCI_GETSUBSTYLEBASES, 0, subStyleBases) |
174 editor.SendScintilla(editor.SCI_GETSUBSTYLEBASES, 0, subStyleBases) |
174 distanceToSecondary = editor.SendScintilla( |
175 distanceToSecondary = editor.SendScintilla(editor.SCI_DISTANCETOSECONDARYSTYLES) |
175 editor.SCI_DISTANCETOSECONDARYSTYLES) |
176 |
176 |
|
177 subStyleBases = [b for b in bytearray(subStyleBases[:-1])] |
177 subStyleBases = [b for b in bytearray(subStyleBases[:-1])] |
178 if distanceToSecondary: |
178 if distanceToSecondary: |
179 subStyleBases.extend(b + distanceToSecondary |
179 subStyleBases.extend(b + distanceToSecondary for b in subStyleBases[:]) |
180 for b in subStyleBases[:]) |
|
181 for baseStyleNo in subStyleBases: |
180 for baseStyleNo in subStyleBases: |
182 if baseStyleNo in self.__subStyles: |
181 if baseStyleNo in self.__subStyles: |
183 subStylesData = self.__subStyles[baseStyleNo] |
182 subStylesData = self.__subStyles[baseStyleNo] |
184 subStyleLength = len(subStylesData) |
183 subStyleLength = len(subStylesData) |
185 subStyleStart = editor.SendScintilla( |
184 subStyleStart = editor.SendScintilla( |
186 editor.SCI_ALLOCATESUBSTYLES, baseStyleNo, subStyleLength) |
185 editor.SCI_ALLOCATESUBSTYLES, baseStyleNo, subStyleLength |
|
186 ) |
187 if subStyleStart < 0: |
187 if subStyleStart < 0: |
188 continue |
188 continue |
189 |
189 |
190 for subStyleIndex, subStyleKey in enumerate( |
190 for subStyleIndex, subStyleKey in enumerate( |
191 sorted(subStylesData.keys()) |
191 sorted(subStylesData.keys()) |
192 ): |
192 ): |
193 styleNo = subStyleStart + subStyleIndex |
193 styleNo = subStyleStart + subStyleIndex |
194 subStyle = subStylesData[subStyleKey] |
194 subStyle = subStylesData[subStyleKey] |
195 # set the words |
195 # set the words |
196 editor.SendScintilla( |
196 editor.SendScintilla( |
197 editor.SCI_SETIDENTIFIERS, |
197 editor.SCI_SETIDENTIFIERS, styleNo, subStyle["Words"].encode() |
198 styleNo, |
198 ) |
199 subStyle["Words"].encode()) |
199 |
200 |
|
201 # set the style |
200 # set the style |
202 style = subStyle["Style"] |
201 style = subStyle["Style"] |
203 color = ( |
202 color = ( |
204 QColor( |
203 QColor( |
205 style["fore"] >> 16 & 0xff, |
204 style["fore"] >> 16 & 0xFF, |
206 style["fore"] >> 8 & 0xff, |
205 style["fore"] >> 8 & 0xFF, |
207 style["fore"] & 0xff,) |
206 style["fore"] & 0xFF, |
208 if "fore" in style else |
207 ) |
209 self.color(baseStyleNo) |
208 if "fore" in style |
|
209 else self.color(baseStyleNo) |
210 ) |
210 ) |
211 self.setColor(color, styleNo) |
211 self.setColor(color, styleNo) |
212 |
212 |
213 color = ( |
213 color = ( |
214 QColor( |
214 QColor( |
215 style["paper"] >> 16 & 0xff, |
215 style["paper"] >> 16 & 0xFF, |
216 style["paper"] >> 8 & 0xff, |
216 style["paper"] >> 8 & 0xFF, |
217 style["paper"] & 0xff,) |
217 style["paper"] & 0xFF, |
218 if "paper" in style else |
218 ) |
219 self.paper(baseStyleNo) |
219 if "paper" in style |
|
220 else self.paper(baseStyleNo) |
220 ) |
221 ) |
221 self.setPaper(color, styleNo) |
222 self.setPaper(color, styleNo) |
222 |
223 |
223 eolFill = ( |
224 eolFill = ( |
224 style["eolfill"] |
225 style["eolfill"] |
225 if "eolfill" in style else |
226 if "eolfill" in style |
226 self.eolFill(baseStyleNo) |
227 else self.eolFill(baseStyleNo) |
227 ) |
228 ) |
228 self.setEolFill(eolFill, styleNo) |
229 self.setEolFill(eolFill, styleNo) |
229 |
230 |
230 font = self.font(baseStyleNo) |
231 font = self.font(baseStyleNo) |
231 if "font_family" in style: |
232 if "font_family" in style: |
232 font.setFamily(style["font_family"]) |
233 font.setFamily(style["font_family"]) |
233 if "font_size" in style: |
234 if "font_size" in style: |
234 font.setPointSize(style["font_size"]) |
235 font.setPointSize(style["font_size"]) |
237 if "font_italic" in style: |
238 if "font_italic" in style: |
238 font.setItalic(style["font_italic"]) |
239 font.setItalic(style["font_italic"]) |
239 if "font_underline" in style: |
240 if "font_underline" in style: |
240 font.setUnderline(style["font_underline"]) |
241 font.setUnderline(style["font_underline"]) |
241 self.setFont(font, styleNo) |
242 self.setFont(font, styleNo) |
242 |
243 |
243 def writeSubstyles(self): |
244 def writeSubstyles(self): |
244 """ |
245 """ |
245 Public method to save the sub-styles. |
246 Public method to save the sub-styles. |
246 """ |
247 """ |
247 if not self.__subStylesInitialized: |
248 if not self.__subStylesInitialized: |
248 return |
249 return |
249 |
250 |
250 settings = Preferences.getSettings() |
251 settings = Preferences.getSettings() |
251 |
252 |
252 # Step 1: remove all sub-style definitions first |
253 # Step 1: remove all sub-style definitions first |
253 for baseStyle in self.baseStyles: |
254 for baseStyle in self.baseStyles: |
254 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
255 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
255 self.language(), baseStyle) |
256 self.language(), baseStyle |
|
257 ) |
256 if settings.contains(key): |
258 if settings.contains(key): |
257 subStyleLength = int(settings.value(key)) |
259 subStyleLength = int(settings.value(key)) |
258 if subStyleLength: |
260 if subStyleLength: |
259 for subStyle in range(subStyleLength): |
261 for subStyle in range(subStyleLength): |
260 substyleKey = ( |
262 substyleKey = ("Scintilla/{0}/style{1}/substyle{2}/").format( |
261 "Scintilla/{0}/style{1}/substyle{2}/" |
263 self.language(), baseStyle, subStyle |
262 ).format(self.language(), baseStyle, subStyle) |
264 ) |
263 settings.remove(substyleKey) |
265 settings.remove(substyleKey) |
264 |
266 |
265 # Step 2: save the defined sub-styles |
267 # Step 2: save the defined sub-styles |
266 for baseStyle in self.baseStyles: |
268 for baseStyle in self.baseStyles: |
267 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
269 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
268 self.language(), baseStyle) |
270 self.language(), baseStyle |
|
271 ) |
269 settings.setValue(key, len(self.__subStyles[baseStyle])) |
272 settings.setValue(key, len(self.__subStyles[baseStyle])) |
270 for subStyleIndex, subStyle in enumerate( |
273 for subStyleIndex, subStyle in enumerate( |
271 sorted(self.__subStyles[baseStyle].keys()) |
274 sorted(self.__subStyles[baseStyle].keys()) |
272 ): |
275 ): |
273 substyleKey = "Scintilla/{0}/style{1}/substyle{2}/".format( |
276 substyleKey = "Scintilla/{0}/style{1}/substyle{2}/".format( |
274 self.language(), baseStyle, subStyleIndex) |
277 self.language(), baseStyle, subStyleIndex |
|
278 ) |
275 subStyleData = self.__subStyles[baseStyle][subStyle] |
279 subStyleData = self.__subStyles[baseStyle][subStyle] |
276 |
280 |
277 if ( |
281 if not subStyleData["Description"] and not subStyleData["Words"]: |
278 not subStyleData["Description"] and |
|
279 not subStyleData["Words"] |
|
280 ): |
|
281 # invalid or incomplete sub-style definition |
282 # invalid or incomplete sub-style definition |
282 continue |
283 continue |
283 |
284 |
284 settings.setValue(substyleKey + "Description", |
285 settings.setValue( |
285 subStyleData["Description"]) |
286 substyleKey + "Description", subStyleData["Description"] |
286 settings.setValue(substyleKey + "Words", |
287 ) |
287 subStyleData["Words"]) |
288 settings.setValue(substyleKey + "Words", subStyleData["Words"]) |
288 |
289 |
289 style = subStyleData["Style"] |
290 style = subStyleData["Style"] |
290 if "fore" in style: |
291 if "fore" in style: |
291 color = style["fore"] |
292 color = style["fore"] |
292 else: |
293 else: |
293 col = self.color(baseStyle) |
294 col = self.color(baseStyle) |
310 settings.setValue(substyleKey + "font_bold", bold) |
311 settings.setValue(substyleKey + "font_bold", bold) |
311 italic = style.get("font_italic", font.italic()) |
312 italic = style.get("font_italic", font.italic()) |
312 settings.setValue(substyleKey + "font_italic", italic) |
313 settings.setValue(substyleKey + "font_italic", italic) |
313 underline = ( |
314 underline = ( |
314 style["font_underline"] |
315 style["font_underline"] |
315 if "font_underline" in style else |
316 if "font_underline" in style |
316 font.underline() |
317 else font.underline() |
317 ) |
318 ) |
318 settings.setValue(substyleKey + "font_underline", underline) |
319 settings.setValue(substyleKey + "font_underline", underline) |
319 |
320 |
320 def hasSubstyles(self): |
321 def hasSubstyles(self): |
321 """ |
322 """ |
322 Public method to indicate the support of sub-styles. |
323 Public method to indicate the support of sub-styles. |
323 |
324 |
324 @return flag indicating sub-styling support |
325 @return flag indicating sub-styling support |
325 @rtype bool |
326 @rtype bool |
326 """ |
327 """ |
327 return True |
328 return True |
328 |
329 |
329 def getBaseStyles(self): |
330 def getBaseStyles(self): |
330 """ |
331 """ |
331 Public method to get the list of supported base styles. |
332 Public method to get the list of supported base styles. |
332 |
333 |
333 @return list of base styles |
334 @return list of base styles |
334 @rtype list of int |
335 @rtype list of int |
335 """ |
336 """ |
336 return self.baseStyles[:] |
337 return self.baseStyles[:] |
337 |
338 |
338 def substylesCount(self, style): |
339 def substylesCount(self, style): |
339 """ |
340 """ |
340 Public method to get the number of defined sub-styles. |
341 Public method to get the number of defined sub-styles. |
341 |
342 |
342 @param style base style number |
343 @param style base style number |
343 @type int |
344 @type int |
344 @return number of defined sub-styles |
345 @return number of defined sub-styles |
345 @rtype int |
346 @rtype int |
346 """ |
347 """ |
347 count = (len(self.__subStyles[style]) if style in self.__subStyles |
348 count = len(self.__subStyles[style]) if style in self.__subStyles else 0 |
348 else 0) |
349 |
349 |
|
350 return count |
350 return count |
351 |
351 |
352 def setSubstyleDescription(self, description, style, substyle): |
352 def setSubstyleDescription(self, description, style, substyle): |
353 """ |
353 """ |
354 Public method to set the description for a sub-style. |
354 Public method to set the description for a sub-style. |
355 |
355 |
356 @param description description to be set |
356 @param description description to be set |
357 @type str |
357 @type str |
358 @param style base style number |
358 @param style base style number |
359 @type int |
359 @type int |
360 @param substyle sub-style number |
360 @param substyle sub-style number |
361 @type int |
361 @type int |
362 """ |
362 """ |
363 if style in self.__subStyles and substyle in self.__subStyles[style]: |
363 if style in self.__subStyles and substyle in self.__subStyles[style]: |
364 self.__subStyles[style][substyle]["Description"] = ( |
364 self.__subStyles[style][substyle]["Description"] = description.strip() |
365 description.strip() |
365 |
366 ) |
|
367 |
|
368 def substyleDescription(self, style, substyle): |
366 def substyleDescription(self, style, substyle): |
369 """ |
367 """ |
370 Public method to get the description of a sub-style. |
368 Public method to get the description of a sub-style. |
371 |
369 |
372 @param style base style number |
370 @param style base style number |
373 @type int |
371 @type int |
374 @param substyle sub-style number |
372 @param substyle sub-style number |
375 @type int |
373 @type int |
376 @return sub-style description |
374 @return sub-style description |
377 @rtype str |
375 @rtype str |
378 """ |
376 """ |
379 desc = ( |
377 desc = ( |
380 self.__subStyles[style][substyle]["Description"].strip() |
378 self.__subStyles[style][substyle]["Description"].strip() |
381 if (style in self.__subStyles and |
379 if (style in self.__subStyles and substyle in self.__subStyles[style]) |
382 substyle in self.__subStyles[style]) else |
380 else "" |
383 "" |
|
384 ) |
381 ) |
385 |
382 |
386 return desc |
383 return desc |
387 |
384 |
388 def setSubstyleWords(self, words, style, substyle): |
385 def setSubstyleWords(self, words, style, substyle): |
389 """ |
386 """ |
390 Public method to set the words for a sub-style. |
387 Public method to set the words for a sub-style. |
391 |
388 |
392 @param words words to be set separated by white-space |
389 @param words words to be set separated by white-space |
393 @type str |
390 @type str |
394 @param style base style number |
391 @param style base style number |
395 @type int |
392 @type int |
396 @param substyle sub-style number |
393 @param substyle sub-style number |
397 @type int |
394 @type int |
398 """ |
395 """ |
399 if style in self.__subStyles and substyle in self.__subStyles[style]: |
396 if style in self.__subStyles and substyle in self.__subStyles[style]: |
400 self.__subStyles[style][substyle]["Words"] = words.strip() |
397 self.__subStyles[style][substyle]["Words"] = words.strip() |
401 |
398 |
402 def substyleWords(self, style, substyle): |
399 def substyleWords(self, style, substyle): |
403 """ |
400 """ |
404 Public method to get the words of a sub-style. |
401 Public method to get the words of a sub-style. |
405 |
402 |
406 @param style base style number |
403 @param style base style number |
407 @type int |
404 @type int |
408 @param substyle sub-style number |
405 @param substyle sub-style number |
409 @type int |
406 @type int |
410 @return white-space separated word list |
407 @return white-space separated word list |
411 @rtype str |
408 @rtype str |
412 """ |
409 """ |
413 words = ( |
410 words = ( |
414 self.__subStyles[style][substyle]["Words"].strip() |
411 self.__subStyles[style][substyle]["Words"].strip() |
415 if (style in self.__subStyles and |
412 if (style in self.__subStyles and substyle in self.__subStyles[style]) |
416 substyle in self.__subStyles[style]) else |
413 else "" |
417 "" |
|
418 ) |
414 ) |
419 |
415 |
420 return words |
416 return words |
421 |
417 |
422 def setSubstyleColor(self, color, style, substyle): |
418 def setSubstyleColor(self, color, style, substyle): |
423 """ |
419 """ |
424 Public method to set the foreground color of a sub-style. |
420 Public method to set the foreground color of a sub-style. |
425 |
421 |
426 @param color foreground color to be set |
422 @param color foreground color to be set |
427 @type QColor |
423 @type QColor |
428 @param style base style number |
424 @param style base style number |
429 @type int |
425 @type int |
430 @param substyle sub-style number |
426 @param substyle sub-style number |
432 """ |
428 """ |
433 if style in self.__subStyles and substyle in self.__subStyles[style]: |
429 if style in self.__subStyles and substyle in self.__subStyles[style]: |
434 self.__subStyles[style][substyle]["Style"]["fore"] = ( |
430 self.__subStyles[style][substyle]["Style"]["fore"] = ( |
435 color.red() << 16 | color.green() << 8 | color.blue() |
431 color.red() << 16 | color.green() << 8 | color.blue() |
436 ) |
432 ) |
437 |
433 |
438 def substyleColor(self, style, substyle): |
434 def substyleColor(self, style, substyle): |
439 """ |
435 """ |
440 Public method to get the sub-style foreground color. |
436 Public method to get the sub-style foreground color. |
441 |
437 |
442 @param style base style number |
438 @param style base style number |
443 @type int |
439 @type int |
444 @param substyle sub-style number |
440 @param substyle sub-style number |
445 @type int |
441 @type int |
446 @return foreground color |
442 @return foreground color |
447 @rtype QColor |
443 @rtype QColor |
448 """ |
444 """ |
449 color = self.color(style) |
445 color = self.color(style) |
450 |
446 |
451 if style in self.__subStyles and substyle in self.__subStyles[style]: |
447 if style in self.__subStyles and substyle in self.__subStyles[style]: |
452 styleData = self.__subStyles[style][substyle]["Style"] |
448 styleData = self.__subStyles[style][substyle]["Style"] |
453 if "fore" in styleData: |
449 if "fore" in styleData: |
454 color = QColor( |
450 color = QColor( |
455 styleData["fore"] >> 16 & 0xff, |
451 styleData["fore"] >> 16 & 0xFF, |
456 styleData["fore"] >> 8 & 0xff, |
452 styleData["fore"] >> 8 & 0xFF, |
457 styleData["fore"] & 0xff, |
453 styleData["fore"] & 0xFF, |
458 ) |
454 ) |
459 |
455 |
460 return color |
456 return color |
461 |
457 |
462 def setSubstylePaper(self, color, style, substyle): |
458 def setSubstylePaper(self, color, style, substyle): |
463 """ |
459 """ |
464 Public method to set the background color of a sub-style. |
460 Public method to set the background color of a sub-style. |
465 |
461 |
466 @param color background color to be set |
462 @param color background color to be set |
467 @type QColor |
463 @type QColor |
468 @param style base style number |
464 @param style base style number |
469 @type int |
465 @type int |
470 @param substyle sub-style number |
466 @param substyle sub-style number |
472 """ |
468 """ |
473 if style in self.__subStyles and substyle in self.__subStyles[style]: |
469 if style in self.__subStyles and substyle in self.__subStyles[style]: |
474 self.__subStyles[style][substyle]["Style"]["paper"] = ( |
470 self.__subStyles[style][substyle]["Style"]["paper"] = ( |
475 color.red() << 16 | color.green() << 8 | color.blue() |
471 color.red() << 16 | color.green() << 8 | color.blue() |
476 ) |
472 ) |
477 |
473 |
478 def substylePaper(self, style, substyle): |
474 def substylePaper(self, style, substyle): |
479 """ |
475 """ |
480 Public method to get the sub-style background color. |
476 Public method to get the sub-style background color. |
481 |
477 |
482 @param style base style number |
478 @param style base style number |
483 @type int |
479 @type int |
484 @param substyle sub-style number |
480 @param substyle sub-style number |
485 @type int |
481 @type int |
486 @return background color |
482 @return background color |
487 @rtype QColor |
483 @rtype QColor |
488 """ |
484 """ |
489 color = self.paper(style) |
485 color = self.paper(style) |
490 |
486 |
491 if style in self.__subStyles and substyle in self.__subStyles[style]: |
487 if style in self.__subStyles and substyle in self.__subStyles[style]: |
492 styleData = self.__subStyles[style][substyle]["Style"] |
488 styleData = self.__subStyles[style][substyle]["Style"] |
493 if "paper" in styleData: |
489 if "paper" in styleData: |
494 color = QColor( |
490 color = QColor( |
495 styleData["paper"] >> 16 & 0xff, |
491 styleData["paper"] >> 16 & 0xFF, |
496 styleData["paper"] >> 8 & 0xff, |
492 styleData["paper"] >> 8 & 0xFF, |
497 styleData["paper"] & 0xff, |
493 styleData["paper"] & 0xFF, |
498 ) |
494 ) |
499 |
495 |
500 return color |
496 return color |
501 |
497 |
502 def setSubstyleEolFill(self, eolFill, style, substyle): |
498 def setSubstyleEolFill(self, eolFill, style, substyle): |
503 """ |
499 """ |
504 Public method to set the eolfill flag of a sub-style. |
500 Public method to set the eolfill flag of a sub-style. |
505 |
501 |
506 @param eolFill eolfill flag to be set |
502 @param eolFill eolfill flag to be set |
507 @type bool |
503 @type bool |
508 @param style base style number |
504 @param style base style number |
509 @type int |
505 @type int |
510 @param substyle sub-style number |
506 @param substyle sub-style number |
511 @type int |
507 @type int |
512 """ |
508 """ |
513 if style in self.__subStyles and substyle in self.__subStyles[style]: |
509 if style in self.__subStyles and substyle in self.__subStyles[style]: |
514 self.__subStyles[style][substyle]["Style"]["eolfill"] = ( |
510 self.__subStyles[style][substyle]["Style"]["eolfill"] = eolFill |
515 eolFill |
511 |
516 ) |
|
517 |
|
518 def substyleEolFill(self, style, substyle): |
512 def substyleEolFill(self, style, substyle): |
519 """ |
513 """ |
520 Public method to get the eolfill flag. |
514 Public method to get the eolfill flag. |
521 |
515 |
522 @param style base style number |
516 @param style base style number |
523 @type int |
517 @type int |
524 @param substyle sub-style number |
518 @param substyle sub-style number |
525 @type int |
519 @type int |
526 @return eolfill flag |
520 @return eolfill flag |
527 @rtype bool |
521 @rtype bool |
528 """ |
522 """ |
529 eolFill = self.eolFill(style) |
523 eolFill = self.eolFill(style) |
530 |
524 |
531 if style in self.__subStyles and substyle in self.__subStyles[style]: |
525 if style in self.__subStyles and substyle in self.__subStyles[style]: |
532 styleData = self.__subStyles[style][substyle]["Style"] |
526 styleData = self.__subStyles[style][substyle]["Style"] |
533 eolFill = styleData.get("eolfill", self.eolFill(style)) |
527 eolFill = styleData.get("eolfill", self.eolFill(style)) |
534 |
528 |
535 return eolFill |
529 return eolFill |
536 |
530 |
537 def setSubstyleFont(self, font, style, substyle): |
531 def setSubstyleFont(self, font, style, substyle): |
538 """ |
532 """ |
539 Public method to set the font of a sub-style. |
533 Public method to set the font of a sub-style. |
540 |
534 |
541 @param font font to be set |
535 @param font font to be set |
542 @type QFont |
536 @type QFont |
543 @param style base style number |
537 @param style base style number |
544 @type int |
538 @type int |
545 @param substyle sub-style number |
539 @param substyle sub-style number |
546 @type int |
540 @type int |
547 """ |
541 """ |
548 if style in self.__subStyles and substyle in self.__subStyles[style]: |
542 if style in self.__subStyles and substyle in self.__subStyles[style]: |
549 self.__subStyles[style][substyle]["Style"]["font_family"] = ( |
543 self.__subStyles[style][substyle]["Style"]["font_family"] = font.family() |
550 font.family() |
544 self.__subStyles[style][substyle]["Style"]["font_size"] = font.pointSize() |
551 ) |
545 self.__subStyles[style][substyle]["Style"]["font_bold"] = font.bold() |
552 self.__subStyles[style][substyle]["Style"]["font_size"] = ( |
546 self.__subStyles[style][substyle]["Style"]["font_italic"] = font.italic() |
553 font.pointSize() |
547 self.__subStyles[style][substyle]["Style"][ |
554 ) |
548 "font_underline" |
555 self.__subStyles[style][substyle]["Style"]["font_bold"] = ( |
549 ] = font.underline() |
556 font.bold() |
550 |
557 ) |
|
558 self.__subStyles[style][substyle]["Style"]["font_italic"] = ( |
|
559 font.italic() |
|
560 ) |
|
561 self.__subStyles[style][substyle]["Style"]["font_underline"] = ( |
|
562 font.underline() |
|
563 ) |
|
564 |
|
565 def substyleFont(self, style, substyle): |
551 def substyleFont(self, style, substyle): |
566 """ |
552 """ |
567 Public method to get the sub-style font. |
553 Public method to get the sub-style font. |
568 |
554 |
569 @param style base style number |
555 @param style base style number |
570 @type int |
556 @type int |
571 @param substyle sub-style number |
557 @param substyle sub-style number |
572 @type int |
558 @type int |
573 @return font |
559 @return font |
574 @rtype QFont |
560 @rtype QFont |
575 """ |
561 """ |
576 font = self.font(style) |
562 font = self.font(style) |
577 |
563 |
578 if style in self.__subStyles and substyle in self.__subStyles[style]: |
564 if style in self.__subStyles and substyle in self.__subStyles[style]: |
579 styleData = self.__subStyles[style][substyle]["Style"] |
565 styleData = self.__subStyles[style][substyle]["Style"] |
580 if "font_family" in styleData: |
566 if "font_family" in styleData: |
581 font.setFamily(styleData["font_family"]) |
567 font.setFamily(styleData["font_family"]) |
582 if "font_size" in styleData: |
568 if "font_size" in styleData: |
585 font.setBold(styleData["font_bold"]) |
571 font.setBold(styleData["font_bold"]) |
586 if "font_italic" in styleData: |
572 if "font_italic" in styleData: |
587 font.setItalic(styleData["font_italic"]) |
573 font.setItalic(styleData["font_italic"]) |
588 if "font_underline" in styleData: |
574 if "font_underline" in styleData: |
589 font.setUnderline(styleData["font_underline"]) |
575 font.setUnderline(styleData["font_underline"]) |
590 |
576 |
591 return font |
577 return font |
592 |
578 |
593 def substyleDefaultDescription(self, style, substyle): |
579 def substyleDefaultDescription(self, style, substyle): |
594 """ |
580 """ |
595 Public method to get the default description of a sub-style. |
581 Public method to get the default description of a sub-style. |
596 |
582 |
597 @param style base style number |
583 @param style base style number |
598 @type int |
584 @type int |
599 @param substyle sub-style number |
585 @param substyle sub-style number |
600 @type int |
586 @type int |
601 @return sub-style default description |
587 @return sub-style default description |
602 @rtype str |
588 @rtype str |
603 """ |
589 """ |
604 description = "" |
590 description = "" |
605 |
591 |
606 if ( |
592 if style in self.defaultSubStyles and substyle in self.defaultSubStyles[style]: |
607 style in self.defaultSubStyles and |
|
608 substyle in self.defaultSubStyles[style] |
|
609 ): |
|
610 substyleData = self.defaultSubStyles[style][substyle] |
593 substyleData = self.defaultSubStyles[style][substyle] |
611 description = substyleData["Description"].strip() |
594 description = substyleData["Description"].strip() |
612 |
595 |
613 return description |
596 return description |
614 |
597 |
615 def substyleDefaultWords(self, style, substyle): |
598 def substyleDefaultWords(self, style, substyle): |
616 """ |
599 """ |
617 Public method to get the default words of a sub-style. |
600 Public method to get the default words of a sub-style. |
618 |
601 |
619 @param style base style number |
602 @param style base style number |
620 @type int |
603 @type int |
621 @param substyle sub-style number |
604 @param substyle sub-style number |
622 @type int |
605 @type int |
623 @return white-space separated default word list |
606 @return white-space separated default word list |
624 @rtype str |
607 @rtype str |
625 """ |
608 """ |
626 words = "" |
609 words = "" |
627 |
610 |
628 if ( |
611 if style in self.defaultSubStyles and substyle in self.defaultSubStyles[style]: |
629 style in self.defaultSubStyles and |
|
630 substyle in self.defaultSubStyles[style] |
|
631 ): |
|
632 substyleData = self.defaultSubStyles[style][substyle] |
612 substyleData = self.defaultSubStyles[style][substyle] |
633 words = substyleData["Words"].strip() |
613 words = substyleData["Words"].strip() |
634 |
614 |
635 return words |
615 return words |
636 |
616 |
637 def substyleDefaultColor(self, style, substyle): |
617 def substyleDefaultColor(self, style, substyle): |
638 """ |
618 """ |
639 Public method to get the sub-style default foreground color. |
619 Public method to get the sub-style default foreground color. |
640 |
620 |
641 @param style base style number |
621 @param style base style number |
642 @type int |
622 @type int |
643 @param substyle sub-style number |
623 @param substyle sub-style number |
644 @type int |
624 @type int |
645 @return default foreground color |
625 @return default foreground color |
646 @rtype QColor |
626 @rtype QColor |
647 """ |
627 """ |
648 color = self.defaultColor(style) |
628 color = self.defaultColor(style) |
649 |
629 |
650 if ( |
630 if style in self.defaultSubStyles and substyle in self.defaultSubStyles[style]: |
651 style in self.defaultSubStyles and |
|
652 substyle in self.defaultSubStyles[style] |
|
653 ): |
|
654 styleData = self.defaultSubStyles[style][substyle]["Style"] |
631 styleData = self.defaultSubStyles[style][substyle]["Style"] |
655 if "fore" in styleData: |
632 if "fore" in styleData: |
656 color = QColor( |
633 color = QColor( |
657 styleData["fore"] >> 16 & 0xff, |
634 styleData["fore"] >> 16 & 0xFF, |
658 styleData["fore"] >> 8 & 0xff, |
635 styleData["fore"] >> 8 & 0xFF, |
659 styleData["fore"] & 0xff, |
636 styleData["fore"] & 0xFF, |
660 ) |
637 ) |
661 |
638 |
662 return color |
639 return color |
663 |
640 |
664 def substyleDefaultPaper(self, style, substyle): |
641 def substyleDefaultPaper(self, style, substyle): |
665 """ |
642 """ |
666 Public method to get the sub-style default background color. |
643 Public method to get the sub-style default background color. |
667 |
644 |
668 @param style base style number |
645 @param style base style number |
669 @type int |
646 @type int |
670 @param substyle sub-style number |
647 @param substyle sub-style number |
671 @type int |
648 @type int |
672 @return default background color |
649 @return default background color |
673 @rtype QColor |
650 @rtype QColor |
674 """ |
651 """ |
675 color = self.defaultPaper(style) |
652 color = self.defaultPaper(style) |
676 |
653 |
677 if ( |
654 if style in self.defaultSubStyles and substyle in self.defaultSubStyles[style]: |
678 style in self.defaultSubStyles and |
|
679 substyle in self.defaultSubStyles[style] |
|
680 ): |
|
681 styleData = self.defaultSubStyles[style][substyle]["Style"] |
655 styleData = self.defaultSubStyles[style][substyle]["Style"] |
682 if "paper" in styleData: |
656 if "paper" in styleData: |
683 color = QColor( |
657 color = QColor( |
684 styleData["paper"] >> 16 & 0xff, |
658 styleData["paper"] >> 16 & 0xFF, |
685 styleData["paper"] >> 8 & 0xff, |
659 styleData["paper"] >> 8 & 0xFF, |
686 styleData["paper"] & 0xff, |
660 styleData["paper"] & 0xFF, |
687 ) |
661 ) |
688 |
662 |
689 return color |
663 return color |
690 |
664 |
691 def substyleDefaultEolFill(self, style, substyle): |
665 def substyleDefaultEolFill(self, style, substyle): |
692 """ |
666 """ |
693 Public method to get the default eolfill flag. |
667 Public method to get the default eolfill flag. |
694 |
668 |
695 @param style base style number |
669 @param style base style number |
696 @type int |
670 @type int |
697 @param substyle sub-style number |
671 @param substyle sub-style number |
698 @type int |
672 @type int |
699 @return default eolfill flag |
673 @return default eolfill flag |
700 @rtype bool |
674 @rtype bool |
701 """ |
675 """ |
702 eolFill = self.defaultEolFill(style) |
676 eolFill = self.defaultEolFill(style) |
703 |
677 |
704 if ( |
678 if style in self.defaultSubStyles and substyle in self.defaultSubStyles[style]: |
705 style in self.defaultSubStyles and |
|
706 substyle in self.defaultSubStyles[style] |
|
707 ): |
|
708 styleData = self.defaultSubStyles[style][substyle]["Style"] |
679 styleData = self.defaultSubStyles[style][substyle]["Style"] |
709 eolFill = styleData.get("eolfill", self.defaultEolFill(style)) |
680 eolFill = styleData.get("eolfill", self.defaultEolFill(style)) |
710 |
681 |
711 return eolFill |
682 return eolFill |
712 |
683 |
713 def substyleDefaultFont(self, style, substyle): |
684 def substyleDefaultFont(self, style, substyle): |
714 """ |
685 """ |
715 Public method to get the default sub-style font. |
686 Public method to get the default sub-style font. |
716 |
687 |
717 @param style base style number |
688 @param style base style number |
718 @type int |
689 @type int |
719 @param substyle sub-style number |
690 @param substyle sub-style number |
720 @type int |
691 @type int |
721 @return default font |
692 @return default font |
722 @rtype QFont |
693 @rtype QFont |
723 """ |
694 """ |
724 font = self.defaultFont(style) |
695 font = self.defaultFont(style) |
725 |
696 |
726 if ( |
697 if style in self.defaultSubStyles and substyle in self.defaultSubStyles[style]: |
727 style in self.defaultSubStyles and |
|
728 substyle in self.defaultSubStyles[style] |
|
729 ): |
|
730 styleData = self.defaultSubStyles[style][substyle]["Style"] |
698 styleData = self.defaultSubStyles[style][substyle]["Style"] |
731 if "font_family" in styleData: |
699 if "font_family" in styleData: |
732 font.setFamily(styleData["font_family"]) |
700 font.setFamily(styleData["font_family"]) |
733 if "font_size" in styleData: |
701 if "font_size" in styleData: |
734 font.setPointSize(styleData["font_size"]) |
702 font.setPointSize(styleData["font_size"]) |
758 "Words": "", |
726 "Words": "", |
759 "Style": {}, |
727 "Style": {}, |
760 } |
728 } |
761 else: |
729 else: |
762 subStyle = -1 |
730 subStyle = -1 |
763 |
731 |
764 return subStyle |
732 return subStyle |
765 |
733 |
766 def delSubstyle(self, style, substyle): |
734 def delSubstyle(self, style, substyle): |
767 """ |
735 """ |
768 Public method to delete a given sub-style definition. |
736 Public method to delete a given sub-style definition. |
769 |
737 |
770 @param style base style number |
738 @param style base style number |
771 @type int |
739 @type int |
772 @param substyle sub-style number |
740 @param substyle sub-style number |
773 @type int |
741 @type int |
774 @return flag indicating successful deletion |
742 @return flag indicating successful deletion |
775 @rtype bool |
743 @rtype bool |
776 """ |
744 """ |
777 ok = False |
745 ok = False |
778 |
746 |
779 if style in self.__subStyles and substyle in self.__subStyles[style]: |
747 if style in self.__subStyles and substyle in self.__subStyles[style]: |
780 del self.__subStyles[style][substyle] |
748 del self.__subStyles[style][substyle] |
781 ok = True |
749 ok = True |
782 |
750 |
783 return ok |
751 return ok |
784 |
752 |
785 def hasSubstyle(self, style, substyle): |
753 def hasSubstyle(self, style, substyle): |
786 """ |
754 """ |
787 Public method to test for a given sub-style definition. |
755 Public method to test for a given sub-style definition. |
788 |
756 |
789 @param style base style number |
757 @param style base style number |
790 @type int |
758 @type int |
791 @param substyle sub-style number |
759 @param substyle sub-style number |
792 @type int |
760 @type int |
793 @return flag indicating the existence of a sub-style definition |
761 @return flag indicating the existence of a sub-style definition |
794 @rtype bool |
762 @rtype bool |
795 """ |
763 """ |
796 return (style in self.__subStyles and |
764 return style in self.__subStyles and substyle in self.__subStyles[style] |
797 substyle in self.__subStyles[style]) |
765 |
798 |
|
799 def isBaseStyle(self, style): |
766 def isBaseStyle(self, style): |
800 """ |
767 """ |
801 Public method to test, if a given style may have sub-styles. |
768 Public method to test, if a given style may have sub-styles. |
802 |
769 |
803 @param style base style number |
770 @param style base style number |
804 @type int |
771 @type int |
805 @return flag indicating that the style may have sub-styles |
772 @return flag indicating that the style may have sub-styles |
806 @rtype bool |
773 @rtype bool |
807 """ |
774 """ |