]> git.phdru.name Git - bookmarks_db.git/blobdiff - bkmk_parser.py
Fixed bugs related to keywords/positional parameters.
[bookmarks_db.git] / bkmk_parser.py
index 3f2182cf4c15e3f73631874d54aada5ff4ac55e0..729c5b301b7cc9fe518ebaf0c3a59ef079deac38 100644 (file)
@@ -1,13 +1,21 @@
-"""
-   Parser for Netscape Navigator's and Mozilla's bookmarks.html
+"""Parser for Netscape Navigator's and Mozilla's bookmarks.html
 
-   Written by Broytman. Copyright (C) 1997-2008 PhiloSoft Design
+This file is a part of Bookmarks database and Internet robot.
 """
 
+__version__ = "$Revision$"[11:-2]
+__revision__ = "$Id$"[5:-2]
+__date__ = "$Date$"[7:-2]
+__author__ = "Oleg Broytman <phd@phdru.name>"
+__copyright__ = "Copyright (C) 1997-2011 PhiloSoft Design"
+__license__ = "GNU GPL"
+
+__all__ = ['BkmkParser']
+
 
 import sys, os
 from m_lib.net.www.html import HTMLParser
-from bkmk_objects import Folder, Bookmark, Ruler
+from bkmk_objects import DEFAULT_CHARSET, Folder, Bookmark, Ruler
 
 
 DEBUG = os.environ.has_key("BKMK_DEBUG")
@@ -29,8 +37,6 @@ else:
    dump_names = debug
 
 
-DEFAULT_CHARSET = None
-
 class BkmkParser(HTMLParser):
    def __init__(self):
       HTMLParser.__init__(self)
@@ -38,17 +44,15 @@ class BkmkParser(HTMLParser):
       self.urls = 0
       self.objects = 0
 
-      self.charset = ""
+      self.charset = None
       self.recode = None
 
-
    def handle_data(self, data):
       if data:
-         if DEFAULT_CHARSET:
+         if self.charset and DEFAULT_CHARSET:
             data = unicode(data, self.charset, "replace").encode(DEFAULT_CHARSET, "xmlcharrefreplace")
          self.accumulator += data
 
-
    # Mozilla - get charset
    def do_meta(self, attrs):
       http_equiv = ""
@@ -67,17 +71,6 @@ class BkmkParser(HTMLParser):
             self.charset = content.split('=')[1]
          except IndexError:
             pass
-         else:
-            global DEFAULT_CHARSET
-            DEFAULT_CHARSET = sys.getdefaultencoding()
-            if DEFAULT_CHARSET == "ascii":
-               try:
-                  import locale
-               except ImportError:
-                  pass
-               else:
-                  DEFAULT_CHARSET = locale.getpreferredencoding()
-
 
    def start_title(self, attrs):
       if DEFAULT_CHARSET:
@@ -87,7 +80,6 @@ class BkmkParser(HTMLParser):
    def end_title(self):
       self.accumulator += "</TITLE>"
 
-
    # Start root folder
    def start_h1(self, attrs):
       root_folder = Folder()
@@ -106,7 +98,6 @@ class BkmkParser(HTMLParser):
       debug("Root folder name: `%s'" % accumulator)
       self.root_folder.name = accumulator
 
-
    # Start a folder
    def start_h3(self, attrs):
       last_modified = None
@@ -132,7 +123,6 @@ class BkmkParser(HTMLParser):
       debug("Folder name: `%s'" % accumulator)
       self.current_folder.name = accumulator
 
-
    # Start a bookmark
    def start_a(self, attrs):
       add_date = None
@@ -161,7 +151,7 @@ class BkmkParser(HTMLParser):
 
       debug("Bookmark points to: `%s'" % href)
       bookmark = Bookmark(href, add_date, last_visit, last_modified,
-         keyword or '', '', icon, charset)
+         keyword=keyword or '', icon=icon, charset=charset)
       self.current_object = bookmark
       self.current_folder.append(bookmark)
       self.urls += 1
@@ -175,7 +165,6 @@ class BkmkParser(HTMLParser):
       bookmark = self.current_folder[-1]
       bookmark.name = accumulator
 
-
    def flush(self):
       accumulator = self.accumulator
 
@@ -187,13 +176,11 @@ class BkmkParser(HTMLParser):
             current_object.comment += accumulator.strip()
             debug("Comment: `%s'" % current_object.comment)
 
-
    def start_dl(self, attrs):
       self.flush()
 
    do_dt = start_dl
 
-
    # End of folder
    def end_dl(self):
       self.flush()
@@ -209,19 +196,16 @@ class BkmkParser(HTMLParser):
          debug("FOLDER STACK is EMPTY!!! (2)")
       self.current_object = None
 
-
    def close(self):
       HTMLParser.close(self)
       if self.folder_stack:
          raise ValueError, "wrong folder stack: %s" % self.folder_stack
 
-
    def do_dd(self, attrs):
       pass
 
    do_p = do_dd
 
-
    # Start ruler
    def do_hr(self, attrs):
       self.flush()
@@ -230,17 +214,14 @@ class BkmkParser(HTMLParser):
       self.current_object = None
       self.objects += 1
 
-
    # BR in comment
    def do_br(self, attrs):
       self.accumulator += "<BR>"
 
-
    # Allow < in the text
    def unknown_starttag(self, tag, attrs):
       self.accumulator += "<%s>" % tag
 
-
    # Do not allow unknow end tags
    def unknown_endtag(self, tag):
       raise NotImplementedError("Unknow end tag `%s'" % tag)