この記事は、NetBSD Advent Calendar 2016の20日目の記事です。
はじめに
The pkgsrc guideを スマートフォンでオフラインで読みたいと思っていました。 今回は、The pkgsrc guideをEPUB3形式に変換することで、 スマートフォン上でも快適に読めるようにしました。
The pkgsrc guideはどのように書かれているのか
The pkgsrc guideは、pkgsrc/doc/guide/files
以下にXMLファイル
として管理されています。pkgsrc.xmlと言うファイルを見ると、
最初に以下のように書かれています。
<!DOCTYPE book PUBLIC "-//NetBSD//DTD DocBook XML V4.5-Based DocBook Extension//EN" [
DocBook XML 4.5と規格に沿って書かれていると言うことのようです。
DocBook XMLのファイルを、www.NetBSD.org の仕組みと同じものを利用して、HTML等に変換しています。
DocBook XSL 1.79.1には、DocBook XMLをEPUB3に変換するスタイルシートが
含まれています。
しかし、pkgsrc/textproc/docbook-xsl
では、
DocBook XMLをEPUB3に変換するのに必要なファイルはインストールされません。
pkgsrcはpkgsrc-2016Q4ブランチに向けてフリーズ中で変更はできませんので、 今回はpkgsrcの枠組みの外でEPUB3形式のファイルを作成してみたいと思います。
XSLTプロセッサーとしては、pkgsrc/textproc/libxslt
に
含まれているxsltproc
コマンドを使用します。
バラバラになっているXMLファイルを1つにまとめる
The pkgsrc guideは、複数のXMLファイルに分かれています。 最初にこれを1つにまとめないといけません。
$ ls -F files
CVS/ creating.xml getting.xml pkgsrc.xml
Makefile debug.xml gnome.xml platforms.xml
binary.xml devfaq.xml infr.design.xml plist.xml
build.xml editing.xml introduction.xml porting.xml
buildlink.xml examples.xml logs.xml regression.xml
bulk.xml faq.xml makefile.xml share/
chapters.ent files.xml options.xml submit.xml
components.xml fixes.xml pkginstall.xml tools.xml
configuring.xml ftp-layout.xml pkgsrc.ent using.xml
手作業で、xsltproc
コマンドで処理しても良いのですが、
この作業はpkgsrc/doc/guide
でHTMLファイルを生成する中で
既に行われていますので、その成果を流用してしまうことにします。
以下のようにHTML版等のThe pkgsrc guideを作成し、その作業中の
ファイルを流用します。
$ cd /usr/pkgsrc/doc/guide
$ make
こうすると、${WRKSRC}/default.xmlとして1つのXMLファイルに内容が
集約されます。
${WRKSRC}が自分の環境でどうなっているか確認するには、
以下のようにします。
$ cd /usr/pkgsrc/doc/guide
$ make show-vars VARNAMES=WRKSRC
/usr/tmp/pkgsrc/doc/guide/work/pkgsrc-guide-20161221
私は/etc/mk.conf
でカスタマイズしているので、
最下行のようになりました。
ですので、必要なファイルは、
/usr/tmp/pkgsrc/doc/guide/work/pkgsrc-guide-20161221/default.xml
です。
EPUB3の中身を生成してみる
docbook-xsl-1.79.1.tar.bz2を入手します。 普通のpkgsrcユーザーは既に持っているはずです。
$ ls `make show-vars VARNAMES=DISTDIR`/docbook-xsl*
/usr/distfiles/docbook-xsl-1.79.1.tar.bz2
これをどこか適当な場所に展開しておきます。
$ mkdir ~/tmp
$ cd ~/tmp
$ tar zxvf /usr/distfiles/docbook-xsl-1.79.1.tar.bz2
これで、~/tmp/docbook-xsl-1.79.1/epub3/
以下に、
DpcBook XMLをEPUB3に変換するファイルが用意できました。
実際にEPUB3の中身を生成してみます。
$ xsltproc --stringparam base.dir ebook1/ ./docbook-xsl-1.79.1/epub3/chunk.xsl /usr/tmp/pkgsrc/doc/guide/work/pkgsrc-guide-20161221/default.xml
Writing ebook1/OEBPS/bk01-toc.xhtml for book(the-pkgsrc-guide)
Writing ebook1/OEBPS/ch01s02.xhtml for sect1(overview)
Writing ebook1/OEBPS/ch01s03.xhtml for sect1(terminology)
Writing ebook1/OEBPS/ch01s04.xhtml for sect1(typography)
Writing ebook1/OEBPS/ch01.xhtml for chapter(introduction)
Writing ebook1/OEBPS/ch02s02.xhtml for sect1(uptodate)
(snip)
Writing ebook1/OEBPS/docbook-epub.css for book(the-pkgsrc-guide)
Generating EPUB package files.
WARNING: wrong metadata date format: '$NetBSD: pkgsrc.xml,v 1.30 2016/06/11 18:14:42 rillig Exp $' in element bookinfo/pubdate. It must be in one of these forms: YYYY, YYYY-MM, or YYYY-MM-DD.
Generating image list ...
Writing ebook1/OEBPS/package.opf for book(the-pkgsrc-guide)
Writing ebook1/OEBPS/../META-INF/container.xml for book(the-pkgsrc-guide)
Writing ebook1/OEBPS/../mimetype for book(the-pkgsrc-guide)
Generating NCX file ...
Writing ebook1/OEBPS/toc.ncx for book(the-pkgsrc-guide)
警告はありましたが、エラーはなく無事に生成できました。
成果物は、ebook1ディレクトリー内にできています。
$ find ebook1
ebook1
ebook1/OEBPS
ebook1/OEBPS/docbook-epub.css
ebook1/OEBPS/package.opf
ebook1/OEBPS/toc.ncx
ebook1/OEBPS/bk01-toc.xhtml
ebook1/OEBPS/ch01s02.xhtml
ebook1/OEBPS/ch01s03.xhtml
ebook1/OEBPS/ch01s04.xhtml
ebook1/OEBPS/ch01.xhtml
ebook1/OEBPS/ch02s02.xhtml
ebook1/OEBPS/ch02.xhtml
ebook1/OEBPS/ch03s02.xhtml
ebook1/OEBPS/ch03s03.xhtml
ebook1/OEBPS/ch03.xhtml
ebook1/OEBPS/ch04s02.xhtml
ebook1/OEBPS/using.html
ebook1/OEBPS/ch05s02.xhtml
(snip)
ebook1/OEBPS/apb.xhtml
ebook1/OEBPS/apcs02.xhtml
ebook1/OEBPS/apcs03.xhtml
ebook1/OEBPS/apcs04.xhtml
ebook1/OEBPS/apcs05.xhtml
ebook1/OEBPS/apc.xhtml
ebook1/OEBPS/apds02.xhtml
ebook1/OEBPS/apd.xhtml
ebook1/OEBPS/index.xhtml
ebook1/META-INF
ebook1/META-INF/container.xml
ebook1/mimetype
EPUB3ファイルにする
EPUB3形式のファイルは、この生成された内容をZIPアーカイブファイルに したものです。ZIpアーカイブファイルにするにも、いろいろ細かい仕様が あった気がしますが。今回は普通にZIPアーカイブファイルにしてみます。
$ cd ebook1
$ zip -r -X the-pkgsrc-guide.epub mimetype META-INF OEBPS
ここでできたthe-pkgsrc-guide.epubが最終成果物です。
www.NetBSD.orgの自分の領域に置いておきましたので、ご参考になさってください。
Android用のMoon+ Readerでは快適に読めました。
いずれ、The NetBSD guideも含め、PDFファイルやHTMLと同様に生成されるようにできればと思います。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。