--- /dev/null
+#! /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()