]> git.phdru.name Git - bookmarks_db.git/blobdiff - bkmk2db.py
Initial revision
[bookmarks_db.git] / bkmk2db.py
diff --git a/bkmk2db.py b/bkmk2db.py
new file mode 100755 (executable)
index 0000000..39ddea6
--- /dev/null
@@ -0,0 +1,143 @@
+#! /usr/local/bin/python -O
+"""
+   Convert Netscape Navigator's bookmarks.html to FLAD database
+
+   Written by BroytMann, Jun 1997 - Mar 1999. Copyright (C) 1997-1999 PhiloSoft Design
+"""
+
+import sys, os, stat, string
+from getopt import getopt
+
+import bkmk_parser
+from formatter import AbstractFormatter, NullWriter
+
+
+def run():
+   optlist, args = getopt(sys.argv[1:], "gits")
+
+   show_pbar = 1
+   to_text = 0
+   to_gf = 0
+   report_stats = 1
+
+   for _opt, _arg in optlist:
+      if _opt == '-g':
+         to_gf = 1
+      if _opt == '-i':
+         show_pbar = 0
+      if _opt == '-t':
+         to_text = 1
+      if _opt == '-s':
+         report_stats = 0
+   try:
+      del _opt, _arg
+   except NameError:
+      pass
+
+   if args:
+      if len(args) > 1:
+         sys.stderr.write("bkmk2db: too many arguments\n")
+         sys.exit(1)
+
+      filename = args[0]
+
+   else:
+      filename = 'bookmarks.html' # good name both for DOS (bookmark.htm) and UNIX
+
+   if show_pbar:
+      show_pbar = sys.stderr.isatty()
+
+   if show_pbar:
+      try:
+         from tty_pbar import ttyProgressBar
+      except ImportError:
+         show_pbar = 0
+
+   if show_pbar:
+      try:
+         size = os.stat(filename)[stat.ST_SIZE]
+      except:
+         print filename, ": no such file"
+         sys.exit(1)
+
+
+   fmt = AbstractFormatter(NullWriter())
+   if to_text:
+      parser = bkmk_parser.Bookmarks2Text(fmt)
+   elif to_gf:
+      parser = bkmk_parser.Bookmarks2Gadfly(fmt)
+   else:
+      parser = bkmk_parser.Bookmarks2Flad(fmt)
+
+
+   if report_stats:
+      str = "Converting " + filename + " to "
+      if to_text:
+         str = "text"
+      elif to_gf:
+         str = "GadFly database"
+      else:
+         str = "FLAD database"
+
+      sys.stdout.write("Converting %s to %s: " % (filename, str))
+      sys.stdout.flush()
+
+   if show_pbar:
+      pbar = ttyProgressBar(0, size)
+      lng = 0
+
+      # This is for DOS - it counts CRLF, which len() counts as 1 char!
+      if os.name == 'dos' or os.name == 'nt' :
+         dos_add = 1
+      else:
+         dos_add = 0 # UNIX' and Mac's len() counts CR or LF correct
+
+   try:
+      f = open(filename, 'r')
+   except IOError, msg:
+      print filename, ":", msg
+      sys.exit(1)
+
+   header = open("header", 'w')
+   line_no = 0
+
+   while 1:
+      line = f.readline()
+      if not line:
+         break
+
+      if show_pbar:
+         lng = lng + len(line) + dos_add
+         pbar.display(lng)
+
+      line = string.strip(line)
+      line_no = line_no + 1
+
+      try:
+         parser.feed(line)
+
+         if parser.outfile: # Write header until HTML parser start writing outfile
+            if header:
+               header.close()
+               header = None
+         else:
+            header.write(line + '\n')
+
+      except:
+         break # I need total number of lines; interpreter will print traceback on exit
+
+   if show_pbar:
+      del pbar
+
+   if report_stats:
+      print "Ok"
+      print line_no, "lines proceed"
+      print parser.urls_no, "urls found"
+      print parser.record_no, "records created"
+
+   parser.close()
+   f.close()
+
+
+if __name__ == '__main__':
+   run()