目次 ↑
#!/bin/perl # # Convert XTMemo data text (Shift_JIS) to org-mode text file (UTF-8) # use strict; use warnings; use utf8; use Encode; my $RE_HEADER = qr{ \A ( \d{4} ) [/] ( \d{2} ) [/] ( \d{2} ) \s+ ( \d{2} [:] \d{2} ) \s* ( .+ [:] )? \s* ( .* ) \z }xms; my $RE_CONTENT = qr{ \A [\t] ( .* ) \z }xms; my $RE_SEPARATOR = qr{ \A \z }xms; print <<END_OF_FILE_HEADER; #+TITLE: XTMemo #+CATEGORY: XTMemo #+STARTUP: content #+TODO: #+FILETAGS: XTMemo END_OF_FILE_HEADER my $line_no = 0; while (my $line = <>) { $line_no++; Encode::from_to($line, "shiftjis", "utf8"); chomp $line; $line =~ s{\s*\z}{}xms; if ( $line =~ m{$RE_HEADER}xms ) { my ( $year, $month, $day, $hour_min, $tags, $title ) = ( $1, $2, $3, $4, $5, $6); if (defined $tags) { $tags =~ s{\s+}{_}xms; $tags = q{ :} . $tags; } else { $tags = q{}; } if (!defined $title or $title =~ m{\A \s* \z}xms) { $title = q{NOTITLE}; } print qq{\n* $title$tags\n}; print qq{ [$year-$month-$day $hour_min]\n}; } elsif ( $line =~ m{$RE_CONTENT}xms ) { my ( $content ) = ( $1 ); print q{ } . $content . qq{\n}; } elsif ( $line =~ m{$RE_SEPARATOR}xms ) { # do nothing } else { # default Encode::from_to($line, "utf8", "shiftjis"); warn(qq{Failed to parse [#$line_no]: $line\n}); } } # --- end of script ---