The pkgsrc guideをEPUB3の電子書籍にしてみる

この記事は、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 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

Windows 11 Pro 24H2からSambaのguest ok = yesな共有フォルダーへアクセスする

Microsoft Windows 11 Proを動かしているマシンで、sambaでguest ok = yesにしている共有フォルダーにアクセスしていた。 Windows 11を24H2にアップデートしたところ、その共有フォルダーを開こうとすると、ログインを求められ、...