src/eric7/WebBrowser/Bookmarks/NsHtmlWriter.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
17 class NsHtmlWriter(QObject): 17 class NsHtmlWriter(QObject):
18 """ 18 """
19 Class implementing a writer object to generate Netscape HTML bookmark 19 Class implementing a writer object to generate Netscape HTML bookmark
20 files. 20 files.
21 """ 21 """
22
22 indentSize = 4 23 indentSize = 4
23 24
24 def __init__(self): 25 def __init__(self):
25 """ 26 """
26 Constructor 27 Constructor
27 """ 28 """
28 super().__init__() 29 super().__init__()
29 30
30 def write(self, fileNameOrDevice, root): 31 def write(self, fileNameOrDevice, root):
31 """ 32 """
32 Public method to write an Netscape HTML bookmark file. 33 Public method to write an Netscape HTML bookmark file.
33 34
34 @param fileNameOrDevice name of the file to write (string) 35 @param fileNameOrDevice name of the file to write (string)
35 or device to write to (QIODevice) 36 or device to write to (QIODevice)
36 @param root root node of the bookmark tree (BookmarkNode) 37 @param root root node of the bookmark tree (BookmarkNode)
37 @return flag indicating success (boolean) 38 @return flag indicating success (boolean)
38 """ 39 """
40 f = fileNameOrDevice 41 f = fileNameOrDevice
41 else: 42 else:
42 f = QFile(fileNameOrDevice) 43 f = QFile(fileNameOrDevice)
43 if root is None or not f.open(QIODevice.OpenModeFlag.WriteOnly): 44 if root is None or not f.open(QIODevice.OpenModeFlag.WriteOnly):
44 return False 45 return False
45 46
46 self.__dev = f 47 self.__dev = f
47 return self.__write(root) 48 return self.__write(root)
48 49
49 def __write(self, root): 50 def __write(self, root):
50 """ 51 """
51 Private method to write an Netscape HTML bookmark file. 52 Private method to write an Netscape HTML bookmark file.
52 53
53 @param root root node of the bookmark tree (BookmarkNode) 54 @param root root node of the bookmark tree (BookmarkNode)
54 @return flag indicating success (boolean) 55 @return flag indicating success (boolean)
55 """ 56 """
56 self.__dev.write( 57 self.__dev.write(
57 "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n" 58 "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n"
58 "<!-- This is an automatically generated file.\n" 59 "<!-- This is an automatically generated file.\n"
59 " It will be read and overwritten.\n" 60 " It will be read and overwritten.\n"
60 " DO NOT EDIT! -->\n" 61 " DO NOT EDIT! -->\n"
61 "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;" 62 '<META HTTP-EQUIV="Content-Type" CONTENT="text/html;'
62 " charset=UTF-8\">\n" 63 ' charset=UTF-8">\n'
63 "<TITLE>Bookmarks</TITLE>\n" 64 "<TITLE>Bookmarks</TITLE>\n"
64 "<H1>Bookmarks</H1>\n" 65 "<H1>Bookmarks</H1>\n"
65 "\n" 66 "\n"
66 "<DL><p>\n") 67 "<DL><p>\n"
68 )
67 if root.type() == BookmarkNode.Root: 69 if root.type() == BookmarkNode.Root:
68 for child in root.children(): 70 for child in root.children():
69 self.__writeItem(child, self.indentSize) 71 self.__writeItem(child, self.indentSize)
70 else: 72 else:
71 self.__writeItem(root, self.indentSize) 73 self.__writeItem(root, self.indentSize)
72 self.__dev.write("</DL><p>\n") 74 self.__dev.write("</DL><p>\n")
73 return True 75 return True
74 76
75 def __writeItem(self, node, indent): 77 def __writeItem(self, node, indent):
76 """ 78 """
77 Private method to write an entry for a node. 79 Private method to write an entry for a node.
78 80
79 @param node reference to the node to be written (BookmarkNode) 81 @param node reference to the node to be written (BookmarkNode)
80 @param indent size of the indentation (integer) 82 @param indent size of the indentation (integer)
81 """ 83 """
82 if node.type() == BookmarkNode.Folder: 84 if node.type() == BookmarkNode.Folder:
83 self.__writeFolder(node, indent) 85 self.__writeFolder(node, indent)
84 elif node.type() == BookmarkNode.Bookmark: 86 elif node.type() == BookmarkNode.Bookmark:
85 self.__writeBookmark(node, indent) 87 self.__writeBookmark(node, indent)
86 elif node.type() == BookmarkNode.Separator: 88 elif node.type() == BookmarkNode.Separator:
87 self.__writeSeparator(indent) 89 self.__writeSeparator(indent)
88 90
89 def __writeSeparator(self, indent): 91 def __writeSeparator(self, indent):
90 """ 92 """
91 Private method to write a separator. 93 Private method to write a separator.
92 94
93 @param indent size of the indentation (integer) 95 @param indent size of the indentation (integer)
94 """ 96 """
95 self.__dev.write(" " * indent) 97 self.__dev.write(" " * indent)
96 self.__dev.write("<HR>\n") 98 self.__dev.write("<HR>\n")
97 99
98 def __writeBookmark(self, node, indent): 100 def __writeBookmark(self, node, indent):
99 """ 101 """
100 Private method to write a bookmark node. 102 Private method to write a bookmark node.
101 103
102 @param node reference to the node to be written (BookmarkNode) 104 @param node reference to the node to be written (BookmarkNode)
103 @param indent size of the indentation (integer) 105 @param indent size of the indentation (integer)
104 """ 106 """
105 added = ( 107 added = (
106 " ADD_DATE=\"{0}\"".format(node.added.toTime_t()) 108 ' ADD_DATE="{0}"'.format(node.added.toTime_t())
107 if node.added.isValid() else 109 if node.added.isValid()
108 "" 110 else ""
109 ) 111 )
110 modified = ( 112 modified = (
111 " LAST_MODIFIED=\"{0}\"".format(node.modified.toTime_t()) 113 ' LAST_MODIFIED="{0}"'.format(node.modified.toTime_t())
112 if node.modified.isValid() else 114 if node.modified.isValid()
113 "" 115 else ""
114 ) 116 )
115 visited = ( 117 visited = (
116 " LAST_VISIT=\"{0}\"".format(node.visited.toTime_t()) 118 ' LAST_VISIT="{0}"'.format(node.visited.toTime_t())
117 if node.visited.isValid() else 119 if node.visited.isValid()
118 "" 120 else ""
119 ) 121 )
120 122
121 self.__dev.write(" " * indent) 123 self.__dev.write(" " * indent)
122 self.__dev.write("<DT><A HREF=\"{0}\"{1}{2}{3}>{4}</A>\n".format( 124 self.__dev.write(
123 node.url, added, modified, visited, 125 '<DT><A HREF="{0}"{1}{2}{3}>{4}</A>\n'.format(
124 Utilities.html_uencode(node.title) 126 node.url, added, modified, visited, Utilities.html_uencode(node.title)
125 )) 127 )
126 128 )
129
127 if node.desc: 130 if node.desc:
128 self.__dev.write(" " * indent) 131 self.__dev.write(" " * indent)
129 self.__dev.write("<DD>{0}\n".format( 132 self.__dev.write(
130 Utilities.html_uencode("".join(node.desc.splitlines())))) 133 "<DD>{0}\n".format(
131 134 Utilities.html_uencode("".join(node.desc.splitlines()))
135 )
136 )
137
132 def __writeFolder(self, node, indent): 138 def __writeFolder(self, node, indent):
133 """ 139 """
134 Private method to write a bookmark node. 140 Private method to write a bookmark node.
135 141
136 @param node reference to the node to be written (BookmarkNode) 142 @param node reference to the node to be written (BookmarkNode)
137 @param indent size of the indentation (integer) 143 @param indent size of the indentation (integer)
138 """ 144 """
139 folded = "" if node.expanded else " FOLDED" 145 folded = "" if node.expanded else " FOLDED"
140 146
141 added = ( 147 added = (
142 " ADD_DATE=\"{0}\"".format(node.added.toTime_t()) 148 ' ADD_DATE="{0}"'.format(node.added.toTime_t())
143 if node.added.isValid() else 149 if node.added.isValid()
144 "" 150 else ""
145 ) 151 )
146 152
147 self.__dev.write(" " * indent) 153 self.__dev.write(" " * indent)
148 self.__dev.write("<DT><H3{0}{1}>{2}</H3>\n".format( 154 self.__dev.write(
149 folded, added, Utilities.html_uencode(node.title) 155 "<DT><H3{0}{1}>{2}</H3>\n".format(
150 )) 156 folded, added, Utilities.html_uencode(node.title)
151 157 )
158 )
159
152 if node.desc: 160 if node.desc:
153 self.__dev.write(" " * indent) 161 self.__dev.write(" " * indent)
154 self.__dev.write("<DD>{0}\n".format( 162 self.__dev.write("<DD>{0}\n".format("".join(node.desc.splitlines())))
155 "".join(node.desc.splitlines()))) 163
156
157 self.__dev.write(" " * indent) 164 self.__dev.write(" " * indent)
158 self.__dev.write("<DL><p>\n") 165 self.__dev.write("<DL><p>\n")
159 166
160 for child in node.children(): 167 for child in node.children():
161 self.__writeItem(child, indent + self.indentSize) 168 self.__writeItem(child, indent + self.indentSize)
162 169
163 self.__dev.write(" " * indent) 170 self.__dev.write(" " * indent)
164 self.__dev.write("</DL><p>\n") 171 self.__dev.write("</DL><p>\n")

eric ide

mercurial