From: Phil Pennock Date: Mon, 1 Apr 2013 20:07:41 +0000 (-0400) Subject: Generate ePub files of documentation. X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/c027f5ce4024679cf010976e6da8a01c8a08160e Generate ePub files of documentation. --- diff --git a/doc/doc-docbook/Makefile b/doc/doc-docbook/Makefile index 07eb322fa..a741585dc 100644 --- a/doc/doc-docbook/Makefile +++ b/doc/doc-docbook/Makefile @@ -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-info.xml +filter-epub.xml: filter.xml Pre-xml + ./Pre-xml -epub 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-info.xml +spec-epub.xml: spec.xml Pre-xml + ./Pre-xml -epub 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 : diff --git a/doc/doc-docbook/Pre-xml b/doc/doc-docbook/Pre-xml index 6c017e7c8..22b343d8d 100755 --- a/doc/doc-docbook/Pre-xml +++ b/doc/doc-docbook/Pre-xml @@ -36,7 +36,9 @@ # except when preceded by (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 () next; } + # Adjust dates to YYYY-MM-DD + + if ($epub && /^\s*]/) + { + print; + while () + { + 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 and which not. The latter get processed by the # function above. Items in get quoted unless they are also in