]> git.phdru.name Git - bookmarks_db.git/commitdiff
Recode hrefs (due to international domain names) to the current charset.
authorOleg Broytman <phd@phdru.name>
Mon, 11 Jul 2011 18:42:33 +0000 (18:42 +0000)
committerOleg Broytman <phd@phdru.name>
Mon, 11 Jul 2011 18:42:33 +0000 (18:42 +0000)
git-svn-id: file:///home/phd/archive/SVN/bookmarks_db/trunk@336 fdd5c36f-1aea-0310-aeeb-c58d7e2b6c23

Writers/bkmk_whtml.py
bkmk_objects.py
bkmk_parser.py

index 8b3cd13ebfd53229608b6610b6e5936978348e12..7f23fb90dcaac51beaec10d0baf7200f5275b051 100644 (file)
@@ -13,6 +13,7 @@ __license__ = "GNU GPL"
 __all__ = ['writer_html']
 
 
+from m_lib.defenc import default_encoding
 from bkmk_objects import Writer, BKMK_FORMAT, quote_title
 
 
@@ -48,7 +49,7 @@ class writer_html(Writer):
       self.outfile.write(ind_s*level + "</DL><p>\n")
 
    def bookmark(self, b, level):
-      self.outfile.write(ind_s*(level+1) + '<DT><A HREF="%s" ADD_DATE="%s"' % (b.href, b.add_date))
+      self.outfile.write(ind_s*(level+1) + '<DT><A HREF="%s" ADD_DATE="%s"' % (b.href.encode(default_encoding), b.add_date))
       if b.last_visit: self.outfile.write('LAST_VISIT="%s"' % b.last_visit)
       self.outfile.write('LAST_MODIFIED="%s"' % b.last_modified)
       if BKMK_FORMAT == "MOZILLA":
index 19595a1a94bae2ed7a4b59ff50d6d1563643d8fd..00e186c794b8f1a32220c94b69fd7424bc25aeb4 100644 (file)
@@ -16,8 +16,7 @@ __all__ = ['Folder', 'Bookmark', 'Ruler', 'Walker', 'Writer', 'Robot',
 ]
 
 
-import os, cgi
-from m_lib.defenc import default_encoding as DEFAULT_CHARSET
+import os
 
 BKMK_FORMAT = os.environ.get("BKMK_FORMAT", "MOZILLA")
 
@@ -58,6 +57,13 @@ class Bookmark:
 
    def __init__(self, href, add_date, last_visit=None, last_modified=None,
          keyword=None, comment='', icon_href=None, icon=None, charset=None):
+      if isinstance(href, str):
+         try:
+            href = href.decode('idna')
+         except UnicodeDecodeError: # Non-ascii href
+            href = href.decode('utf-8')
+      elif not isinstance(href, unicode):
+          raise TypeError("Bookmark's href must be str or unicode, not %r" % type(href))
       self.href = href
       self.add_date = add_date
       self.last_visit = last_visit
index 729c5b301b7cc9fe518ebaf0c3a59ef079deac38..9d5bc0feeeeb465c01a85e997638d6d4a5547342 100644 (file)
@@ -13,9 +13,10 @@ __license__ = "GNU GPL"
 __all__ = ['BkmkParser']
 
 
-import sys, os
+import os
+from m_lib.defenc import default_encoding
 from m_lib.net.www.html import HTMLParser
-from bkmk_objects import DEFAULT_CHARSET, Folder, Bookmark, Ruler
+from bkmk_objects import Folder, Bookmark, Ruler
 
 
 DEBUG = os.environ.has_key("BKMK_DEBUG")
@@ -49,8 +50,8 @@ class BkmkParser(HTMLParser):
 
    def handle_data(self, data):
       if data:
-         if self.charset and DEFAULT_CHARSET:
-            data = unicode(data, self.charset, "replace").encode(DEFAULT_CHARSET, "xmlcharrefreplace")
+         if self.charset and default_encoding:
+            data = unicode(data, self.charset, "replace").encode(default_encoding, "xmlcharrefreplace")
          self.accumulator += data
 
    # Mozilla - get charset
@@ -73,8 +74,8 @@ class BkmkParser(HTMLParser):
             pass
 
    def start_title(self, attrs):
-      if DEFAULT_CHARSET:
-         self.accumulator += '<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=%s">\n' % DEFAULT_CHARSET
+      if default_encoding:
+         self.accumulator += '<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=%s">\n' % default_encoding
       self.accumulator += "<TITLE>"
 
    def end_title(self):
@@ -128,7 +129,7 @@ class BkmkParser(HTMLParser):
       add_date = None
       last_visit = None
       last_modified = None
-      keyword = None
+      keyword = ''
       icon = None
       charset = None
 
@@ -151,7 +152,7 @@ class BkmkParser(HTMLParser):
 
       debug("Bookmark points to: `%s'" % href)
       bookmark = Bookmark(href, add_date, last_visit, last_modified,
-         keyword=keyword or '', icon=icon, charset=charset)
+         keyword=keyword, icon=icon, charset=charset)
       self.current_object = bookmark
       self.current_folder.append(bookmark)
       self.urls += 1