]> www.wagner.pp.ru Git - fiction/Kate-the-Empress.git/blobdiff - Tex2fb2
Fix new perl warnings
[fiction/Kate-the-Empress.git] / Tex2fb2
diff --git a/Tex2fb2 b/Tex2fb2
index 30988082287d8c4345292a34f511a10b60ca4e66..9ed9dd93299d5c906fbac8ffe03bf9dbf4103947 100755 (executable)
--- a/Tex2fb2
+++ b/Tex2fb2
@@ -1,6 +1,7 @@
 #!/usr/bin/perl -CDS
 use utf8;
 use POSIX qw(strftime);
+use MIME::Base64;
 # char-level modes
 my $poetry = 0;
 my $verbatim = 0;
@@ -19,6 +20,7 @@ print "<FictionBook xmlns=\"http://www.gribuser.ru/xml/fictionbook/2.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>/) {
@@ -30,6 +32,15 @@ while (<F>) {
                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;
@@ -64,7 +75,7 @@ if ((/^$/ || $environ) && $buffer) {
 }
 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="";
@@ -72,7 +83,7 @@ if (/\\(part|chapter|section|subsection|subsubsection)\*?{(.*)}/) {
        pushsection($1,tag($2,"p"));
        next LINE;
 }
-if (/\\vspace{/) {
+if (/\\vspace\{/) {
        add_to_section("<empty-line />");
        next LINE;
 }
@@ -90,7 +101,7 @@ s/([^\\])%.*$/$1/;
 s/^%.*$//;
 # strip \sloppy
 s/\\sloppy\s+//g;
-s/\\sloppy{}//g;
+s/\\sloppy\{\}//g;
 s/\\sloppy([^\w])/$1/g;
 # strip extra space
 s/^\s+//;
@@ -117,7 +128,7 @@ if ($poetry) {
                $poetic_buffer=$_;
                next LINE;
        }
-       s/\\footnote{(.*)}/push_footnote($1)/e;
+       s/\\footnote\{(.*)\}/push_footnote($1)/e;
        s/\s*\\\\$//;
   $buffer.=tag($_,'v')."\n";
 } elsif ($verbatim) {
@@ -137,6 +148,7 @@ while (@sections) {
 print "</body>\n";
 ## print footnotes
 print "<body>\n$footnotes\n</body>" if $footnotes;
+print $pics;
 print "</FictionBook>";
 
 sub add_to_section {
@@ -194,9 +206,9 @@ sub tag {
 
 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 $_;
 }
@@ -207,3 +219,14 @@ sub push_footnote {
        $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;
+}