1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the writer class for writing a highlighting styles XML |
|
8 file. |
|
9 """ |
|
10 |
|
11 import time |
|
12 |
|
13 from .XMLStreamWriterBase import XMLStreamWriterBase |
|
14 from .Config import highlightingStylesFileFormatVersion |
|
15 |
|
16 import Preferences |
|
17 |
|
18 |
|
19 class HighlightingStylesWriter(XMLStreamWriterBase): |
|
20 """ |
|
21 Class implementing the writer class for writing a highlighting styles XML |
|
22 file. |
|
23 """ |
|
24 def __init__(self, device, lexers): |
|
25 """ |
|
26 Constructor |
|
27 |
|
28 @param device reference to the I/O device to write to (QIODevice) |
|
29 @param lexers list of lexer objects for which to export the styles |
|
30 """ |
|
31 XMLStreamWriterBase.__init__(self, device) |
|
32 |
|
33 self.lexers = lexers |
|
34 self.email = Preferences.getUser("Email") |
|
35 |
|
36 def writeXML(self): |
|
37 """ |
|
38 Public method to write the XML to the file. |
|
39 """ |
|
40 XMLStreamWriterBase.writeXML(self) |
|
41 |
|
42 self.writeDTD( |
|
43 '<!DOCTYPE HighlightingStyles SYSTEM' |
|
44 ' "HighlightingStyles-{0}.dtd">'.format( |
|
45 highlightingStylesFileFormatVersion)) |
|
46 |
|
47 # add some generation comments |
|
48 self.writeComment(" Eric highlighting styles ") |
|
49 self.writeComment( |
|
50 " Saved: {0}".format(time.strftime('%Y-%m-%d, %H:%M:%S'))) |
|
51 self.writeComment(" Author: {0} ".format(self.email)) |
|
52 |
|
53 # add the main tag |
|
54 self.writeStartElement("HighlightingStyles") |
|
55 self.writeAttribute("version", highlightingStylesFileFormatVersion) |
|
56 |
|
57 for lexer in self.lexers: |
|
58 self.writeStartElement("Lexer") |
|
59 self.writeAttribute("name", lexer.language()) |
|
60 for description, style, substyle in lexer.getStyles(): |
|
61 self.writeStartElement("Style") |
|
62 self.writeAttribute("style", str(style)) |
|
63 self.writeAttribute("substyle", str(substyle)) |
|
64 self.writeAttribute("color", |
|
65 lexer.color(style, substyle).name()) |
|
66 self.writeAttribute("paper", |
|
67 lexer.paper(style, substyle).name()) |
|
68 self.writeAttribute("font", |
|
69 lexer.font(style, substyle).toString()) |
|
70 self.writeAttribute("eolfill", |
|
71 str(lexer.eolFill(style, substyle))) |
|
72 self.writeStartElement("Description") |
|
73 self.writeCharacters(description) |
|
74 self.writeEndElement() # Description |
|
75 if substyle >= 0: |
|
76 self.writeStartElement("Words") |
|
77 self.writeCharacters(lexer.words(style, substyle).strip()) |
|
78 self.writeEndElement() # Words |
|
79 self.writeEndElement() # Style |
|
80 self.writeEndElement() # Lexer |
|
81 |
|
82 self.writeEndElement() # HighlightingStyles |
|
83 self.writeEndDocument() |
|