]> git.phdru.name Git - bookmarks_db.git/blobdiff - parse_html/bkmk_parse_html.py
Remove absolute directory ~/lib to make it portable
[bookmarks_db.git] / parse_html / bkmk_parse_html.py
index f42dab8d4de79b040b4638b5d8d7806aa519b5d2..862fa2b5b2fae79903a3440989fef0f41eec8ab4 100644 (file)
@@ -3,11 +3,8 @@
 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"
+__copyright__ = "Copyright (C) 1997-2012 PhiloSoft Design"
 __license__ = "GNU GPL"
 
 __all__ = ['parse_html', 'universal_charset']
@@ -29,25 +26,25 @@ else:
    parsers.append(bkmk_ph_beautifulsoup.parse_html)
 
 try:
-   from . import bkmk_ph_lxml
+   from . import bkmk_ph_html5
 except ImportError:
    pass
 else:
-    parsers.append(bkmk_ph_lxml.parse_html)
+   parsers.append(bkmk_ph_html5.parse_html)
 
 try:
-   from . import bkmk_ph_htmlparser
+   from . import bkmk_ph_lxml
 except ImportError:
    pass
 else:
-    parsers.append(bkmk_ph_htmlparser.parse_html)
+    parsers.append(bkmk_ph_lxml.parse_html)
 
 try:
-   from . import bkmk_ph_html5
+   from . import bkmk_ph_htmlparser
 except ImportError:
    pass
 else:
-   parsers.append(bkmk_ph_html5.parse_html)
+    parsers.append(bkmk_ph_htmlparser.parse_html)
 
 # ElementTidy often segfaults
 #try:
@@ -86,6 +83,9 @@ def recode_entities(title, charset):
    return ''.join(output)
 
 
+import os
+BKMK_DEBUG_HTML_PARSERS = os.environ.get("BKMK_DEBUG_HTML_PARSERS")
+
 def parse_html(filename, charset=None, log=None):
    if not parsers:
        return None
@@ -103,24 +103,36 @@ def parse_html(filename, charset=None, log=None):
          charsets.remove(charset)
       charsets.insert(0, charset)
 
+   if BKMK_DEBUG_HTML_PARSERS:
+      _parsers = []
    for p in parsers:
       parser = None
       for c in charsets:
          try:
             parser = p(filename, c, log)
-         except UnicodeEncodeError:
+         except UnicodeError:
             pass
          else:
-            break
-      if parser:
-         break
+            if parser:
+               if BKMK_DEBUG_HTML_PARSERS:
+                  if log: log("   Parser %s: ok" % p.__module__)
+                  _parsers.append((p, parser))
+               break
       else:
-         if log: log("Parser %s.%s failed, trying next one." % (p.__module__, p.__name__))
+         if log: log("   Parser %s: fail" % p.__module__)
+      if not BKMK_DEBUG_HTML_PARSERS and parser:
+         break
 
-   if not parser:
-       if log: log("All parser has failed.")
+   if BKMK_DEBUG_HTML_PARSERS:
+      if not _parsers:
+         if log: log("   All parsers have failed")
+         return None
+   elif not parser:
+       if log: log("   All parsers have failed")
        return None
 
+   if BKMK_DEBUG_HTML_PARSERS:
+      p, parser = _parsers[0]
    if log: log("   Using %s" % p.__module__)
 
    converted_title = title = parser.title