-#! /usr/local/bin/python -O
+#! /usr/bin/env python
"""
HTML Parser
- Written by BroytMann, Jun 2002 - May 2003. Copyright (C) 1997-2003 PhiloSoft Design
+ Written by BroytMann. Copyright (C) 1997-2007 PhiloSoft Design
"""
-
-import sys
-current_charset = sys.getdefaultencoding()
-DEFAULT_CHARSET = "windows-1251" # Stupid default for Russian Cyrillic
-
+from m_lib.defenc import default_encoding
+current_charset = default_encoding.replace("windows-", "cp")
+DEFAULT_CHARSET = "cp1251" # Stupid default for Russian Cyrillic
from HTMLParser import HTMLParseError
-from m_lib.www.html import HTMLParser as _HTMLParser
+from m_lib.net.www.html import HTMLParser as _HTMLParser
class HTMLHeadDone(Exception): pass
self.meta_charset = 0
self.title = ''
self.refresh = ''
+ self.icon = None
def end_head(self):
raise HTMLHeadDone()
self.title = self.accumulator
+ def do_link(self, attrs):
+ has_icon = False
+ href = None
+
+ for attrname, value in attrs:
+ if value:
+ value = value.strip().lower()
+ if (attrname == 'rel') and (value in ('icon', 'shortcut icon')):
+ has_icon = True
+ elif attrname == 'href':
+ href = value
+
+ if has_icon:
+ self.icon = href
+ else:
+ self.icon = None
+
+
import re
entity_re = re.compile("(&#[0-9]+;)")
def parse_html(filename, charset=None, log=None):
+ if charset:
+ try:
+ codecs.lookup(charset) # In case of unknown charset...
+ except (ValueError, LookupError):
+ charset = None # ...try charset from HTML
+
infile = open(filename, 'r')
parser = HTMLParser(charset)
title = parser.title
if not parser.charset:
- ascii = 1
- for c in title:
- if not (32 <= ord(c) <= 127): # non-ASCII character
- ascii = 0
- break
- if not ascii:
+ try:
+ unicode(title, "ascii")
+ except UnicodeDecodeError:
parser.charset = DEFAULT_CHARSET
+ if parser.charset:
+ parser.charset = parser.charset.replace("windows-", "cp").lower()
+
if parser.charset and (parser.charset <> current_charset):
try:
if parser.meta_charset:
if __name__ == '__main__':
- import sys
parser = parse_html(sys.argv[1])
print parser.charset
print parser.title
print parser.refresh
+ print parser.icon