#!/usr/bin/perl -w use strict; use XML::Writer; # Small utility to parse Opera bookmark files. # Originally written in Python by Lars Marius Garshol # perl version - Briac Pilpré my $version = <>; die "Doesn't seem to be a Opera Hotlist\n" if $version !~ /^Opera/; chomp( $version ); my $xml = new XML::Writer(DATA_MODE=>1, DATA_INDENT=>1); $xml->xmlDecl(); $xml->doctype( 'xbel', '+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML', 'xbel.dtd'); $xml->startTag('xbel'); $xml->dataElement('desc', $version); while (<>){ next unless /\S/; chomp; if ( $_ eq '#FOLDER' || $_ eq '#URL' ){ my $node = $_; my $line; { local $/ = ""; # Paragraph mode $line = <>; } if ($node eq '#FOLDER'){ my $name = $1 if $line =~ /NAME=(.*)/; my $created = $1 if $line =~ /CREATED=(.*)/; $xml->startTag('folder'); $xml->dataElement('title', $name); } elsif ($node eq '#URL') { my $name = $1 if $line =~ /NAME=(.*)/; my $created = $1 if $line =~ /CREATED=(.*)/; my $order = $1 if $line =~ /ORDER=(.*)/; my $visited = $1 if $line =~ /VISITED=(.*)/; my $url = $1 if $line =~ /URL=(.*)/; $xml->startTag('bookmark', href => $url, added => $created, visited => $visited); $xml->dataElement('title', $name); $xml->endTag('bookmark'); } } elsif ( $_ eq '-'){ $xml->endTag('folder'); } } $xml->endTag('xbel');