The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl 
use strict;
use warnings;
use Encode;
use Encode::Locale;
use Digest::MD5 qw/md5_base64/;
use Getopt::Std;
use POSIX qw/strftime/;
use utf8;

my %opt;
getopt( 'ftcTo', \%opt );
$opt{t} ||= 'mobi';

if($opt{t} ne 'jekyll'){
    novel_to_any($opt{f}, $opt{t});
}else{
    novel_to_jekyll();
}


sub novel_to_any {
    my ($f, $type) = @_;
    $type ||='mobi';

    my $dst_file = $f;
    $dst_file=~s/[a-z0-9]+$/$type/;

    my ($writer,$book) = $f=~/([^\\\/]+?)-(.+?)\.[^.]+$/;

    `ebook-convert "$f" "$dst_file" --authors "$writer" --title "$book"`;
}


sub novel_to_jekyll {
    my ($writer,$book) = map { decode(locale => $_) } ($opt{f}=~/([^\\\/]+?)-(.+?)\.[^.]+$/);

    my $tags =  $opt{T} ? [ split ',', decode( locale => $opt{T} ) ] : []; 
    push @$tags , ($writer, $book);
    my $tag = join(", ", map { qq["$_"] } @$tags);
    my $category = decode(locale => $opt{c} ) || "";


    open my $fhr, '<:utf8', $opt{f};
    my $first_line = <$fhr>;
    my $o = $opt{o} ? $opt{o} : md5_base64(encode('utf8' => $first_line));
    $o=~s/[^a-z0-9A-Z]//g;

    my $day = strftime "%Y-%m-%d" , localtime;
    open my $fh, '>:utf8', "$day-$o.md";
    print $fh <<"__HEAD__";
---
layout: post
category: "$category"
title:  "$book"
tagline: "$writer"
tags: [ $tag ] 
---
{% include JB/setup %}

$first_line

__HEAD__

while(<$fhr>){
    s/>_</>_</g;
    s/= =/= =/g;
    s/^=/=/g;
    s/[\|]//g;
    s/\*/*/g;
    s/\[([^\]]+)\](?!\()/[$1]/g;
    print $fh $_;
}
close $fh;
close $fhr;
}