From 27cff350e9e5fb832185bc14dee35b5b8f942a81 Mon Sep 17 00:00:00 2001 From: dakkar Date: Wed, 9 Nov 2005 17:14:54 +0000 Subject: =?UTF-8?q?=20*=20passati=20i=20template=20a=20HTML4,=20altrimenti?= =?UTF-8?q?=20l'autocompletamento=20non=20va=20=20*=20aggiunto=20autocompl?= =?UTF-8?q?etamento=20per=20i=20nomi=20di=20tag=20=20*=20migliorato=20il?= =?UTF-8?q?=20caricatore=20da=20YAML=20=20*=20aggiunto=20un=20convertitore?= =?UTF-8?q?=20XBEL=20->=20YAML=20=20*=20aggiunto=20campo=20'tipo=20icona'?= =?UTF-8?q?=20=20*=20aggiunta=20funzionalit=C3=A0=20di=20edit=20e=20delete?= =?UTF-8?q?=20di=20link=20=20*=20dopo=20ogni=20update=20di=20un=20link,=20?= =?UTF-8?q?i=20tag=20non=20pi=C3=B9=20riferiti=20vengono=20cancellati=20?= =?UTF-8?q?=20*=20migliorato=20il=20recupero=20favicon,=20con=20tipo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/xbel2yaml.pl | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 script/xbel2yaml.pl (limited to 'script/xbel2yaml.pl') diff --git a/script/xbel2yaml.pl b/script/xbel2yaml.pl new file mode 100644 index 0000000..6cfb186 --- /dev/null +++ b/script/xbel2yaml.pl @@ -0,0 +1,77 @@ +#!/usr/bin/perl +use XML::SAX::ParserFactory; +use YAML; + +my $handler=XBEL::Handler->new(); +my $parser=XML::SAX::ParserFactory->parser(Handler=>$handler); +$parser->parse_uri($ARGV[0]); + +print Dump($handler->bookmarks()); + +package XBEL::Handler; +use base 'XML::SAX::Base'; +use Date::Parse; + +sub new { + my ($class)=@_; + return bless +{ + bookmarks=>[], + status=>'out', + tags=>[], + },$class; +} + +sub start_element { + my ($self,$el)=@_; + + if ($el->{LocalName} eq 'folder') { + $self->{status}='folder'; + push @{$self->{tags}},''; + } + elsif ($el->{LocalName} eq 'bookmark') { + $self->{status}='mark'; + my $mark={}; + $mark->{href}=$el->{Attributes}{'{}href'}{Value}; + $mark->{created}=convert_date($el->{Attributes}{'{}added'}{Value}); + $mark->{modified}=convert_date($el->{Attributes}{'{}modified'}{Value}); + $mark->{tags}=[@{$self->{tags}}]; # force a copy + push @{$self->{bookmarks}},$mark; + } + elsif ($el->{LocalName} eq 'title' and $self->{status} eq 'folder') { + $self->{status}='folder-title'; + } + elsif ($el->{LocalName} eq 'title' and $self->{status} eq 'mark') { + $self->{status}='mark-title'; + } +} + +sub end_element { + my ($self,$el)=@_; + + if ($el->{LocalName} eq 'folder') { + pop @{$self->{tags}}; + } + $self->{status}=''; +} + +sub characters { + my ($self,$data)=@_; + + if ($self->{status} eq 'mark-title') { + $self->{bookmarks}[-1]{description}.=$data->{Data}; + } + elsif ($self->{status} eq 'folder-title') { + $self->{tags}[-1].=$data->{Data}; + } +} + +sub convert_date { + return str2time($_[0]); +} + +sub bookmarks { + my ($self)=@_; + return $self->{bookmarks}; +} + +1; -- cgit v1.2.3