Generate ePub files of documentation.
authorPhil Pennock <pdp@exim.org>
Mon, 1 Apr 2013 20:07:41 +0000 (16:07 -0400)
committerPhil Pennock <pdp@exim.org>
Mon, 1 Apr 2013 20:49:58 +0000 (16:49 -0400)
doc/doc-docbook/Makefile
doc/doc-docbook/Pre-xml

index 07eb322fa3003e7778fa17b1bdc106ffacf34a33..a741585dc0f1ce0b145b3cbe774e4eb676660c2d 100644 (file)
@@ -5,6 +5,7 @@ notarget:;    @echo "** You must specify a target, in the form x.y, where x is '
              @echo "** One other possible target is 'exim.8'".
              exit 1
 
+EPUB_DOCBOOK= /usr/local/share/xsl/docbook/epub/docbook.xsl
 
 ############################# EVERYTHING ###############################
 #
@@ -12,8 +13,8 @@ notarget:;    @echo "** You must specify a target, in the form x.y, where x is '
 #
 ## removed info files as I cannot generate them -  spec.info filter.info
 ## removed html files as superceded by new website code
-everything:            spec.pdf        spec.ps         spec.txt \
-                               filter.pdf      filter.ps filter.txt \
+everything:            spec.pdf        spec.ps         spec.txt        spec.epub \
+                               filter.pdf      filter.ps       filter.txt      filter.epub \
                                exim.8
 
 ############################## MAN PAGE ################################
@@ -50,6 +51,9 @@ filter-txt.xml:  filter.xml Pre-xml
 filter-info.xml: filter.xml Pre-xml
                 ./Pre-xml -ascii -html <filter.xml >filter-info.xml
 
+filter-epub.xml: filter.xml Pre-xml
+                ./Pre-xml -epub <filter.xml >filter-epub.xml
+
 filter.fo:       filter-pr.xml MyStyle-filter-fo.xsl MyStyle-fo.xsl MyStyle.xsl
                 /bin/rm -rf filter.fo filter-pr.fo
                 xmlto -x MyStyle-filter-fo.xsl fo filter-pr.xml
@@ -111,6 +115,14 @@ filter.info:  filter-info.xml
              /bin/rm -rf exim_filtering.texi
              makeinfo -o filter.info filter.texinfo
 
+filter.epub:   filter-epub.xml
+       rm -rf book-filter
+       mkdir book-filter
+       xsltproc -o book-filter/ $(EPUB_DOCBOOK) filter-epub.xml
+       echo "application/epub+zip" > book-filter/mimetype
+       ( cd book-filter; zip -XqD ../filter.epub mimetype )
+       ( cd book-filter; zip -Xr9D ../filter.epub META-INF OEBPS )
+
 ########################################################################
 
 
@@ -129,6 +141,9 @@ spec-txt.xml:  spec.xml Pre-xml
 spec-info.xml: spec.xml Pre-xml
               ./Pre-xml -ascii -html -noindex <spec.xml >spec-info.xml
 
+spec-epub.xml: spec.xml Pre-xml
+                ./Pre-xml -epub <spec.xml >spec-epub.xml
+
 spec.fo:       spec-pr.xml MyStyle-spec-fo.xsl MyStyle-fo.xsl MyStyle.xsl \
                MyTitleStyle.xsl
               /bin/rm -rf spec.fo spec-pr.fo
@@ -191,6 +206,14 @@ spec.info:    spec-info.xml
              /bin/rm -rf the_exim_mta.texi
              makeinfo -o spec.info --no-split spec.texinfo
 
+spec.epub:   spec-epub.xml
+       rm -rf book-spec
+       mkdir book-spec
+       xsltproc -o book-spec/ $(EPUB_DOCBOOK) spec-epub.xml
+       echo "application/epub+zip" > book-spec/mimetype
+       ( cd book-spec; zip -XqD ../spec.epub mimetype )
+       ( cd book-spec; zip -Xr9D ../spec.epub META-INF OEBPS )
+
 ########################################################################
 
 
@@ -300,3 +323,4 @@ clean:; /bin/rm -rf exim.8 \
              *.info* *.texinfo *.texi
 
 ########################################################################
+# vim: set ts=4 :
index 6c017e7c8b0dca87716ab70febb42fc1986cb780..22b343d8db8b234b95ed28bf35b952f478ff6916 100755 (executable)
@@ -36,7 +36,9 @@
 #            except when preceded by <entry> (i.e. not in tables). The same is
 #            also done within a word of four or more upper-case letters (for
 #            compile-time options).
-
+#
+# -epub      Convert date formats to comply with epub specification
+#
 
 
 # The function that processes non-literal, non-monospaced text
@@ -71,11 +73,18 @@ if ($ascii)
 $s;
 }
 
+# Mapping needed for epub
+
+my %months = (
+  jan => '01', feb => '02', mar => '03', apr => '04', may => '05', jun => '06',
+  jul => '07', aug => '08', sep => '09', oct => '10', nov => '11', dec => '12',
+);
 
 # The main program
 
 $ascii     = 0;
 $bookinfo  = 0;
+$epub      = 0;
 $html      = 0;
 $inliteral = 0;
 $inliterallayout = 0;
@@ -91,6 +100,7 @@ foreach $arg (@ARGV)
   if    ($arg eq "-fi")       { $ligatures = 1; }
   elsif ($arg eq "-ascii")    { $ascii = 1; }
   elsif ($arg eq "-bookinfo") { $bookinfo = 1; }
+  elsif ($arg eq "-epub")     { $epub = 1; }
   elsif ($arg eq "-html")     { $html = 1; }
   elsif ($arg eq "-noindex")  { $noindex = 1; }
   elsif ($arg eq "-oneindex") { $oneindex = 1; }
@@ -141,6 +151,25 @@ while (<STDIN>)
     next;
     }
 
+  # Adjust dates to YYYY-MM-DD
+
+  if ($epub && /^\s*<date[\s>]/)
+    {
+    print;
+    while (<STDIN>)
+      {
+      last if /^\s*<\/date>/;
+
+      if (/^ \s* (\d{1,2}) \s+ ([a-zA-Z]{3}) \s+ (\d{4})/x)
+        {
+        die "Unknown month '$2'\n" unless exists $months{lc $2};
+        my $month = $months{lc $2};
+        s//$3-$month-$1/;
+        }
+      print;
+      }
+    }
+
   # A line that is not in a monospaced literal block; keep track of which
   # parts are in <literal> and which not. The latter get processed by the
   # function above. Items in <literal> get quoted unless they are also in