+++ /dev/null
-"""HTML Parser using html5
-
-This file is a part of Bookmarks database and Internet robot.
-"""
-
-__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2010-2012 PhiloSoft Design"
-__license__ = "GNU GPL"
-
-__all__ = ['parse_html']
-
-
-from html5lib import HTMLParser as HTML5Parser
-from .bkmk_ph_util import HTMLParser
-
-
-def parse_html(filename, charset=None, log=None):
- parser = HTML5Parser()
- fp = open(filename)
- parser._parse(fp, encoding=charset, parseMeta=bool(charset))
- fp.close()
- html_tree = parser.tree.getDocument()
-
- for node in html_tree.childNodes:
- if (node.name == 'html') and (node.type != 3): # Skip DocType element
- html = node
- break
- else:
- html = None
-
- if not html:
- return None
-
- for node in html.childNodes:
- if node.name == 'head':
- head = node
- break
- else:
- head = None
-
- meta_charset = False
- title = None
- refresh = None
- icon = None
-
- if head:
- for node in head.childNodes:
- if node.name == 'title':
- if node.childNodes:
- title = node.childNodes[0].value
- break
- else:
- title = ''
-
- if title is None:
- return None
-
- for node in head.childNodes:
- if node.name == 'meta' and \
- ('http-equiv' in node.attributes) and \
- (node.attributes['http-equiv'] == 'content-type'):
- meta_content = node.attributes['content']
- if meta_content:
- try:
- meta_charset = \
- meta_content.lower().split('charset=')[1].split(';')[0]
- except IndexError:
- meta_charset = False
- else:
- break
-
- if not charset:
- charset = parser.tokenizer.stream.charEncoding[0]
-
- if charset or meta_charset:
- title = title.encode(charset or meta_charset)
-
- for node in head.childNodes:
- if node.name == 'meta' and \
- ('http-equiv' in node.attributes) and \
- (node.attributes['http-equiv'] == 'refresh'):
- refresh = node.attributes['content']
- break
-
- for node in head.childNodes:
- if node.name == 'link' and \
- ('rel' in node.attributes) and \
- (node.attributes['rel'] in ('icon', 'shortcut icon')):
- icon = node.attributes['href']
- break
-
- else:
- for node in html.childNodes:
- if node.name == 'title':
- if node.childNodes:
- title = node.childNodes[0].value
- break
- else:
- title = ''
-
- if title is None:
- return None
-
- return HTMLParser(charset, meta_charset, title, refresh, icon)