#!/usr/bin/perl -CDS
use utf8;
use POSIX qw(strftime);
+use MIME::Base64;
# char-level modes
my $poetry = 0;
my $verbatim = 0;
xmlns:l=\"http://www.w3.org/1999/xlink\">\n";
my $metadata = shift @ARGV;
open F,"<",$metadata;
+my $pics = "";
while (<F>) {
# Replace empty date with current date
if (/<date\s+\/>/ || /<date>\s*<\/date>/) {
my $ver = $1+time()/1E10;
$_=tag(sprintf("%g",$ver),"version")."\n";
}
+ # Если существует cover.png, добавляем coverpage
+ if (/<coverpage \/>/) {
+ $_="";
+ if (-f "cover.png") {
+ my $id = "cover_png";
+ $_ = "<coverpage>\n<image l:href=\"#$id\" />\n</coverpage>\n";
+ $pics .= mkbinary("cover.png",$id);
+ }
+ }
print $_;
}
close F;
}
next LINE if $environ;
# Section headings
-if (/\\(part|chapter|section|subsection|subsubsection)\*?{(.*)}/) {
+if (/\\(part|chapter|section|subsection|subsubsection)\*?\{(.*)\}/) {
if ($buffer) {
add_to_section(tag(flushbuffer($buffer),$poetry?"stanza":"p"));
$buffer="";
pushsection($1,tag($2,"p"));
next LINE;
}
-if (/\\vspace{/) {
+if (/\\vspace\{/) {
add_to_section("<empty-line />");
next LINE;
}
s/^%.*$//;
# strip \sloppy
s/\\sloppy\s+//g;
-s/\\sloppy{}//g;
+s/\\sloppy\{\}//g;
s/\\sloppy([^\w])/$1/g;
# strip extra space
s/^\s+//;
$poetic_buffer=$_;
next LINE;
}
- s/\\footnote{(.*)}/push_footnote($1)/e;
+ s/\\footnote\{(.*)\}/push_footnote($1)/e;
s/\s*\\\\$//;
$buffer.=tag($_,'v')."\n";
} elsif ($verbatim) {
print "</body>\n";
## print footnotes
print "<body>\n$footnotes\n</body>" if $footnotes;
+print $pics;
print "</FictionBook>";
sub add_to_section {
sub flushbuffer {
local $_ = shift;
- s/{\\(em|it|bf)(?:\s+|{})([^{}]+)}/<emphasis>$2<\/emphasis>/g;
- s/\\(emph|textit|textbf){([^{}]+)}/<emphasis>$2<\/emphasis>/g;
- s/\\footnote{(.*)}/push_footnote($1)/e;
+ s/\{\\(em|it|bf)(?:\s+|\{\})([^{}]+)\}/<emphasis>$2<\/emphasis>/g;
+ s/\\(emph|textit|textbf)\{([^{}]+)\}/<emphasis>$2<\/emphasis>/g;
+ s/\\footnote\{(.*)\}/push_footnote($1)/e;
s/[{}]//g;
return $_;
}
$footnotes.="<section id=\"$id\">".tag(shift,'p')."</section>\n";
return "<a l:href=\"#$id\" type=\"note\">$idseq</a>";
}
+
+sub mkbinary {
+ my ($filename,$id) = @_;
+ my $f;
+ open $f,"<",$filename;
+ binmode $f;
+ local $/;
+ my $data = encode_base64(<$f>);
+ return "<binary id=\"$id\" content-type=\"image/png\">$data</binary>\n";
+ close $f;
+}