|
1 | 1 | #!/usr/bin/perl
|
2 |
| -my $name = ''; |
3 |
| -my ($sec, $min, $hr, $mday, $month, $year, $wday, $yday, $isdst) = localtime(time()); |
4 |
| -my $time = '00:00'; |
| 2 | +use strict; |
| 3 | +use warnings; |
5 | 4 |
|
6 |
| -$year += 1900; |
7 |
| -$month += 1; |
8 |
| - |
9 |
| -my @lines_raw; |
10 |
| -while(<>){ |
11 |
| - chomp; |
12 |
| - push @lines_raw, $_; |
13 |
| -} |
14 | 5 | my @lines;
|
15 |
| -for(my $i = 0; $i < @lines_raw; $i++){ |
16 |
| - if($lines_raw[$i] eq '' |
17 |
| - and length($lines_raw[$i+1]) |
18 |
| - and $lines_raw[$i+2] =~ /^\[[0-9]+:[0-9]+\]\s*$/) |
19 |
| - { |
20 |
| - push @lines, $lines_raw[$i + 1] . " " . $lines_raw[$i + 2]; |
21 |
| - $i += 2; |
22 |
| - } |
23 |
| - else |
24 |
| - { |
25 |
| - push @lines, $lines_raw[$i]; |
26 |
| - } |
| 6 | +while (<>){ |
| 7 | + s/\s+(\d)/\n$1/g; |
| 8 | + my @parts = split /\n/; |
| 9 | + push @lines, @parts; |
27 | 10 | }
|
28 | 11 |
|
| 12 | +# -------- |
| 13 | + |
| 14 | +sub parsewhen { |
| 15 | + # 09:42 |
| 16 | + my $w = $_[0]; |
| 17 | + die "parse when $w" unless /^(\d+):(\d+)\s*$/; |
| 18 | + return $1 * 60 + $2; |
| 19 | +} |
| 20 | + |
| 21 | +my($name, $emoji, $when); |
| 22 | +my $lastwhen = 0; |
| 23 | +my $offset = 0; |
| 24 | +my @formatted; |
| 25 | + |
29 | 26 | for(@lines){
|
30 |
| - if(/^$/){ |
31 |
| - next; |
32 |
| - } |
| 27 | + chomp; |
| 28 | + if(/^([A-Z].*)\s*(:.*:)/){ |
| 29 | + $name = $1; |
| 30 | + $emoji = $2; |
| 31 | + }elsif(/^\d+:\d+$/){ |
| 32 | + $when = $_; |
| 33 | + |
| 34 | + my $parsed = parsewhen($when); |
33 | 35 |
|
34 |
| - if(/(([a-zA-Z0-9_].*) )?\[([0-9]+:[0-9]+)\]\s*$/){ |
35 |
| - if (length($2)) { |
36 |
| - $name = $2; |
| 36 | + if($parsed < $lastwhen){ |
| 37 | + # assume next day |
| 38 | + $offset++; |
37 | 39 | }
|
38 |
| - $time = $3; |
39 |
| - next; |
40 |
| - } |
41 | 40 |
|
42 |
| - if($name eq ''){ |
43 |
| - die "empty name, text: $_"; |
| 41 | + $lastwhen = $parsed; |
| 42 | + |
| 43 | + }elsif(length){ |
| 44 | + s/^\s*//; |
| 45 | + |
| 46 | + my $msg = sprintf "%s:00: %s: %s", $when, $name, $_; |
| 47 | + push @formatted, { "msg" => $msg, offset => $offset }; |
44 | 48 | }
|
| 49 | +} |
| 50 | + |
| 51 | +# -------- |
| 52 | + |
| 53 | +sub getdate { |
| 54 | + my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(); |
| 55 | + return ($year + 1900, $mon + 1, $mday); |
| 56 | +} |
| 57 | + |
| 58 | +my ($y, $m, $d) = getdate(); # (2020, 10, 8); |
| 59 | +for(@formatted){ |
| 60 | + my $msg = $_->{msg}; |
| 61 | + my $localoffset = $_->{offset}; |
45 | 62 |
|
46 |
| - my $text = $_; |
47 |
| - printf("%04d-%02d-%02d %s:00: %s: %s\n", |
48 |
| - $year, $month, $mday, $time, $name, $text); |
| 63 | + # FIXME: wrong way round |
| 64 | + my $d_adj = $d + $offset - $localoffset; |
| 65 | + print "$y-$m-$d_adj $msg\n"; |
49 | 66 | }
|
0 commit comments