Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/lxml/html/_html5builder.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:26e78fe6e8c4 |
---|---|
1 """ | |
2 Legacy module - don't use in new code! | |
3 | |
4 html5lib now has its own proper implementation. | |
5 | |
6 This module implements a tree builder for html5lib that generates lxml | |
7 html element trees. This module uses camelCase as it follows the | |
8 html5lib style guide. | |
9 """ | |
10 | |
11 from html5lib.treebuilders import _base, etree as etree_builders | |
12 from lxml import html, etree | |
13 | |
14 | |
15 class DocumentType(object): | |
16 | |
17 def __init__(self, name, publicId, systemId): | |
18 self.name = name | |
19 self.publicId = publicId | |
20 self.systemId = systemId | |
21 | |
22 class Document(object): | |
23 | |
24 def __init__(self): | |
25 self._elementTree = None | |
26 self.childNodes = [] | |
27 | |
28 def appendChild(self, element): | |
29 self._elementTree.getroot().addnext(element._element) | |
30 | |
31 | |
32 class TreeBuilder(_base.TreeBuilder): | |
33 documentClass = Document | |
34 doctypeClass = DocumentType | |
35 elementClass = None | |
36 commentClass = None | |
37 fragmentClass = Document | |
38 | |
39 def __init__(self, *args, **kwargs): | |
40 html_builder = etree_builders.getETreeModule(html, fullTree=False) | |
41 etree_builder = etree_builders.getETreeModule(etree, fullTree=False) | |
42 self.elementClass = html_builder.Element | |
43 self.commentClass = etree_builder.Comment | |
44 _base.TreeBuilder.__init__(self, *args, **kwargs) | |
45 | |
46 def reset(self): | |
47 _base.TreeBuilder.reset(self) | |
48 self.rootInserted = False | |
49 self.initialComments = [] | |
50 self.doctype = None | |
51 | |
52 def getDocument(self): | |
53 return self.document._elementTree | |
54 | |
55 def getFragment(self): | |
56 fragment = [] | |
57 element = self.openElements[0]._element | |
58 if element.text: | |
59 fragment.append(element.text) | |
60 fragment.extend(element.getchildren()) | |
61 if element.tail: | |
62 fragment.append(element.tail) | |
63 return fragment | |
64 | |
65 def insertDoctype(self, name, publicId, systemId): | |
66 doctype = self.doctypeClass(name, publicId, systemId) | |
67 self.doctype = doctype | |
68 | |
69 def insertComment(self, data, parent=None): | |
70 if not self.rootInserted: | |
71 self.initialComments.append(data) | |
72 else: | |
73 _base.TreeBuilder.insertComment(self, data, parent) | |
74 | |
75 def insertRoot(self, name): | |
76 buf = [] | |
77 if self.doctype and self.doctype.name: | |
78 buf.append('<!DOCTYPE %s' % self.doctype.name) | |
79 if self.doctype.publicId is not None or self.doctype.systemId is not None: | |
80 buf.append(' PUBLIC "%s" "%s"' % (self.doctype.publicId, | |
81 self.doctype.systemId)) | |
82 buf.append('>') | |
83 buf.append('<html></html>') | |
84 root = html.fromstring(''.join(buf)) | |
85 | |
86 # Append the initial comments: | |
87 for comment in self.initialComments: | |
88 root.addprevious(etree.Comment(comment)) | |
89 | |
90 # Create the root document and add the ElementTree to it | |
91 self.document = self.documentClass() | |
92 self.document._elementTree = root.getroottree() | |
93 | |
94 # Add the root element to the internal child/open data structures | |
95 root_element = self.elementClass(name) | |
96 root_element._element = root | |
97 self.document.childNodes.append(root_element) | |
98 self.openElements.append(root_element) | |
99 | |
100 self.rootInserted = True |