]> wagner.pp.ru Git - fiction/Kate-the-Empress.git/commitdiff
More or less finished fb2 generation
authorVictor Wagner <wagner@atlas-card.ru>
Wed, 13 Nov 2013 14:21:31 +0000 (18:21 +0400)
committerVictor Wagner <wagner@atlas-card.ru>
Wed, 13 Nov 2013 14:21:31 +0000 (18:21 +0400)
Makefile
Tex2fb2
fb2meta.xml
general.tex

index e8fe561bfd5d2f1c5d3d110ce4ccbc7a724b666f..c6aa90e0af2fcfa86b3995c841450e839308b002 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-all: Kate-the-Empress.pdf Kate-the-Empress.html Kate-the-Empress.epub
+all: Kate-the-Empress.pdf Kate-the-Empress.html Kate-the-Empress.epub Kate-the-Empress.fb2.zip
 
 Kate-the-Empress.pdf: $(wildcard *.tex)
        pdflatex book
@@ -12,6 +12,11 @@ Kate-the-Empress.html: onefile.tex
 Kate-the-Empress.epub: onefile.tex
        pandoc  -t epub --standalone -o $@ $+
 
+Kate-the-Empress.fb2.zip: onefile.zip
+       ./Tex2fb2 fb2meta.xml onefile.tex >Kate-the-Empress.fb2
+       zip Kate-the-Empress.fb2.zip Kate-the-Empress.fb2
+       rm Kate-the-Empress.fb2
+
 onefile.tex: joinfiles.awk $(wildcard *.tex)
        awk -f joinfiles.awk book.tex >  $@
 
diff --git a/Tex2fb2 b/Tex2fb2
index 693149fcdc401644ad80bda7cf08af16a61a47eb..929e9576444bef247c3bd5b14ef17ab39410c098 100755 (executable)
--- a/Tex2fb2
+++ b/Tex2fb2
@@ -5,13 +5,15 @@ my $poetry = 0;
 my $verbatim = 0;
 my @sections;
 my $buffer;
+my $idseq = 0; # sequentual number of footnotes
+my $footnotes="";
 #
 # TODO italic paragaphs
 # footnotes
 # epigraphs
 #
 # print fictionbook header
-print "<?xml version=\"1.0\" encoding=\"UTF-8\">\n";
+print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
 print "<FictionBook xmlns=\"http://www.gribuser.ru/xml/fictionbook/2.0\"
 xmlns:l=\"http://www.w3.org/1999/xlink\">\n";
 my $metadata = shift @ARGV;
@@ -20,7 +22,7 @@ while (<F>) {
        print $_;
 }
 close F;
-
+print "<body>\n";
 my $header =1;
 LINE:
 while (<>) {
@@ -46,17 +48,17 @@ if (/\\(begin|end){(\w+)}/) {
 next LINE if $header;
 if ((/^$/ || $environ) && $buffer) {
 #output on empty line (p or stanza) depending on poetry mode
-       add_to_section(tag($buffer,$poetry?"stanza":"p")."\n");
+       add_to_section(tag(flushbuffer($buffer),$poetry?"stanza":"p")."\n");
        $buffer="";
 }
 next LINE if $environ;
 # Section headings
 if (/\\(part|chapter|section|subsection|subsubsection)\*?{(.*)}/) {
        if ($buffer) {
-               add_to_section(tag($buffer,$poetry?"stanza":"p"));
+               add_to_section(tag(flushbuffer($buffer),$poetry?"stanza":"p"));
                $buffer="";
        }
-       pushsection($1,$2);
+       pushsection($1,tag($2,"p"));
        next LINE;
 }
 if (/\\vspace{/) {
@@ -103,7 +105,7 @@ if ($poetry) {
 }
 }
 if ($buffer) {
-       add_to_section(tag($buffer,"p"));
+       add_to_section(tag(flushbuffer($buffer),"p"));
        $buffer="";
 }
 
@@ -111,7 +113,8 @@ while (@sections) {
        flushsection();
 }
 print "</body>\n";
-## FIXME print footnotes
+## print footnotes
+print "<body id=\"notes\">\n$footnotes\n</body>" if $footnotes;
 print "</FictionBook>";
 
 sub add_to_section {
@@ -158,3 +161,19 @@ sub tag {
        return "" if $content =~ /^\s*$/s;
        return "<$name>$content</$name>";
 }
+
+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/[{}]//g;
+       return $_;
+}
+
+
+sub push_footnote {
+       my $id = "note_".(++$idseq);
+       $footnotes.="<section id=\"$id\">".tag(shift,'p')."</section>\n";
+       return "<a l:href=\"#$id\" type=\"note\">$idseq</a>";
+}
index 5755035ab148cbf58deca541912be44cbcb58739..613c30bef9aeaebe00725c640cce8d39f5ca6f98 100644 (file)
@@ -1,2 +1,31 @@
 <description>
-</descrition>
+<title-info>
+<genre>sf_fantasy</genre>
+<genre>sf_space</genre>
+<author><first-name>Виктор</first-name><last-name>Вагнер</last-name></author>
+<author><first-name>Ирина</first-name><last-name>Емельянова</last-name></author>
+<book-title>Императрица Кэт</book-title>
+<annotation>
+<p>Вдова трагически погибшего герцога, обвиненная в колдовстве, вынуждена
+бежать из Империи в земли Совета Магов. Через двадцать лет её сын
+возвращается в Империю чтобы шпагой завоевать себе достойное место в
+стране отцов. По дороге он встречается с девушкой-планетологом с Земли,
+изучающей эту низкоразвитую цивилизацию.</p><p> В дальнейшем герою предстоят
+морские сражения, дворцовые интриги и борьба со шпионами, женитьба на
+принцессе и опекунство наследника престола. Но внезапно планета
+оказывается полем битвы космической войны между Федерацией в которую
+входят и земляне, и другой сверхцивилизацией. С первым выстрелом войны
+герой лишается всего - жены, регенства, положения при дворе.</p><p>Потом
+партизанская война, рабство у негуманоидной сверхцивилизации,
+освобождение. И внезапно оказывается что судьба всей планеты зависит от
+него одного.</p>
+</annotation>
+<date value="2014-01-01">1994-2014</date>
+<coverpage />
+<lang>ru</lang>
+</title-info>
+<document-info>
+<program-used>Perl</program-used>
+<src-url>http://www.wagner.pp.ru/~vitus/fiction</src-url>
+</document-info>
+</description>
index 1acabd62954ced9d5c169a22b32dec6424b1fca1..ce3836f43bf6a3faa02fc12cd5111592baa95b71 100644 (file)
 и он смерил Кеалора внимательным взглядом.
 
 \begin{quote}
-{\sloppy \em «Арвид, обратите внимание на этого юношу. Он буквально в первый же день
+{\sloppy {\em «Арвид, обратите внимание на этого юношу. Он буквально в первый же день
 своего появления в пределах Империи сумел оказать нашему Дому настолько 
 значительные услуги, что мы сочли возможным открыть ему небольшой кредит, 
 который позволит ему в течение нескольких месяцев (по истечении которых он,
 несомненно, заслужит достаточную в финансовом смысле благосклонность Его
-Величества), вести жизнь, достойную имперского офицера.
+Величества), вести жизнь, достойную имперского офицера.}
 
 }
 \begin{flushright}