Chienomi

PureBuilder Simply 1.8

開発::util

概要

PureBuilder Simplyはちょいちょいアップデートされており、今回は100行近い入れ替えがあった大きめのアップデートになる。

今回のアップデートのメインは、Pandoc 2.8の新機能を使っていることである。

Pandoc 2.8ではテンプレート機能の大幅な拡張が行われた (それでも依然として、変数に対する条件式は存在しないが)。 日本語ドキュメントには反映されていないので、英語の公式ドキュメントを読むこと

変更点

Pandocに新しく入った--default--metadata-fileのオプションを使うようになった。

このために、Pandocのコマンドラインオプションとして与えられていたものがそれぞれYAMLファイルに書き出されるようになった。 従来、全てのメタデータ変数をコマンドラインオプションで与えていたのだが、それがなくなった形だ。

これに伴う非互換変更として、.pbsimply.yaml内のpandoc_additional_optionsがコマンドラインオプションの配列ではなく、デフォルトファイルとして使用するハッシュになった。 なにをどのように書くべきかについては公式ドキュメントを参照してほしい

また、新たにtimestamp_strという変数が追加された。そのほか、いくつかの変更が未反映だったので、反映することになった。

内部的には、--metadata-fileよりもドキュメントファイル内のメタデータが優先されてしまうため、処理中のドキュメントはメタデータを削除したファイルが作られるようになった。

また、より大幅に変更されたのがACCSである。 (1.8.0はACCSがちゃんと動作しない) ACCSは従来「超簡易版Pandoc生成」みたいなことをしていたのだが、pbsimply-pandoc.rbと挙動が少し違うため、従来ACCSでしていた処理もpbsimply-pandoc.rbに含めるようにして、 ACCSはPandocではなくPureBuilder Simply Pandocをコールする仕組みに変更した。

このため、ACCSのコードは大幅に短くなった。 これに合わせてPureBuilder Simply Pandocにはいままで-fしかなかったコマンドラインオプションが4つほど追加され、ACCSは-Aオプションつきで呼び出すようになった。

意図

PureBuilder SimplyはPandocに依存しており、Pandocなしには成立しない。

だが、機能的に劣ってもPandocなしで処理できる機能も提供したいという考えがあり、これらの値が外に出せるという魅力は大きい。 また、この方が思わぬバグに遭遇するリスクが下がる。

困った話

従来、コマンドラインオプションで与えていたので問題なかったのだが、--metadata-fileはドキュメント内のメタデータより優先度が低いため、メタデータを除去したドキュメントを用意する必要があった。

それで済めばよかったのだが、ReSTの場合、Pandocはドキュメント内にメタデータ(docinfo)がなければ、最初の見出しをタイトルにする、という仕様であり、このためにタイトルだけはコマンドラインオプションとして与えている。