#!/usr/bin/perl -w use strict; use Palm::Memo; if ($#ARGV >= 1) { my ($inputfile, $outputdir, @usecategories) = @ARGV; # $inputfile = '/home/danlyke/.jpilot/MemoDB.pdb'; # $outputdir = './palmwiki/'; $outputdir .= '/' unless ($outputdir =~ /\/$/); my ($pdb) = new Palm::Memo; $pdb->Load($inputfile); my (@categories, $excludecategories, $usecategories); $excludecategories = {}; @categories = @{$pdb->{appinfo}{categories}}; $usecategories = join('|', map { s/([^\w])/\\$1/g; $_; } @usecategories); if ($#usecategories >= 0) { my ($i); foreach ($i = 0; $i <= $#categories; $i++) { $excludecategories->{$i} = 1 unless ($categories[$i]->{name} =~ /^($usecategories)$/i); } } my ($record, $pages,@pages); $pages = {}; foreach $record (@{$pdb->{records}}) { if (!defined($excludecategories->{$record->{category}})) { my ($text, $pagename); $text = $record->{data}; $pagename = $1 if ($text =~ /^(.*?)($|\n)/); if ($pagename) { push @pages,$pagename; my ($filename); $filename = $pagename; $filename =~ s/[^\w]/_/g; $pages->{$pagename}->{filename} = $filename.'.html'; $pages->{$pagename}->{text} = $text; } } } my ($pagename); while (($pagename, $record) = each %$pages) { my ($text) = $record->{text}; $text =~ s/\&/\&/g; $text =~ s/\/\>/g; $text =~ s/\"/\"/g; $text =~ s/\'/\'/g; $text =~ s/^(.*?)(\n?.*)$/\\\$1\<\/title\>\<\/head\> \\$1\>\<\/h1\>$2\<\/body\>\<\/html\>/xs; $text =~ s/\n\n+/\/sg; $text =~ s/\n/\/sg; my ($out); $out = ''; while ($text =~ s/^(.*?)\[(.*?)\]//s) { my ($t, $l,$page); $t = $1; $l = $2; foreach $page (@pages) { if ($page =~ /(^|\s)([A-Z]\w+[A-Z]\w+)($|\s)/) { my ($r); $t =~ s/(^|\s)([A-Z]\w+[A-Z]\w+)($|\s)/ $1\{$2}->{filename}\"\>$2\<\/a\>$3/x, } } $out .= $t; if ($pages->{$l}) { $out .= "{$l}->{filename}\">$l"; } else { $out .= "$2"; } } $out .= $text; open O, ">$outputdir/$record->{filename}" || die "Unable to open $outputdir/$record->{filename}\n"; print O $out; close O; } } else { print "Usage: palmmemowiki path/MemoDB.pdm outdirectory [memo categories]\n"; }