Line # Revision Author
1 167 dpavlin #!/usr/bin/perl -w
2
3 # brayar2mt.pl
4 #
5 # 08/27/2006 04:25:34 PM CEST Dobrica Pavlinusic <dpavlin@rot13.org>
6
7 use strict;
8 use File::Find;
9 use File::Slurp;
10 use POSIX qw/strftime/;
11 use Encode qw/from_to/;
12
13 my $blog;
14
15 sub time2date {
16 my $t = shift || die "no time?";
17 return strftime('%m/%d/%Y %r', localtime($t));
18 }
19
20 find({ wanted => sub {
21 my $p = $_;
22
23 $p =~ s!^\./!!;
24
25 return unless ($p =~ m!^(\w+/)?(\d+)\.(txt|comments)$!);
26 return unless (-s $p);
27
28 my ($category,$nr,$type) = ($1,$2, $3);
29
30 warn "## $p\n";
31
32 my $body = read_file($p) || die "can't read $p: $!";
33
34 my $title = $1 if ($body =~ s/^(.+?)[\n\r]+//s || die "can't find title in $body");
35
36 my $date = time2date( (stat($p))[9] ); # mtime
37
38 $category ||= '';
39 $category =~ s!/!!g;
40
41 warn "$category | $nr | $type | $date | $title\n";
42
43 if ($type eq 'txt') {
44
45 my $post = qq{--------
46 AUTHOR: dpavlin
47 TITLE: $title
48 STATUS: Publish
49 ALLOW COMMENTS: 1
50 CONVERT BREAKS: __default__
51 ALLOW PINGS: 1
52 } . ( $category ? "CATEGORY: $category\n" : '' ) . qq{
53 DATE: $date
54 -----
55 BODY:
56 $body
57 -----
58 };
59
60 $blog->{$nr}->{post} = $post;
61 } elsif ($type eq 'comments') {
62
63 foreach my $c (split(/\n-----\n/, $body)) {
64 my $comment;
65 foreach my $l (split(/\n/, $c)) {
66 my ($k,$v) = split(/:\s+/, $l);
67 $comment->{$k} = $v;
68 }
69
70 $date = time2date( $comment->{epoch} ) if ($comment->{epoch});
71
72 $blog->{$nr}->{post} .= qq{COMMENT:
73 AUTHOR: $comment->{author}
74 URL: $comment->{url}
75 DATE: $date
76 $comment->{content}
77 -----
78 };
79 }
80
81 } else {
82 die "unknown type $type\n";
83 }
84
85 }, follow => 1, no_chdir => 1}, '.');
86
87 foreach my $nr (sort { $a <=> $b } keys %$blog) {
88 my $post = $blog->{$nr}->{post};
89 from_to($post, 'iso-8859-2', 'utf-8');
90 print "$post\n";
91 }
92 print "--------\n";
93
94