Open gemmaro opened 3 years ago
LaTeX出力はいぜん雑なもの(真面目に構文解析しないもの)を作ったことがあるのですが、ちゃんとやるのであれば構文解析器からいったんAST(抽象構文木)を構築するようにして、それを元にHTMLやLaTeXを生成するしくみにするべきかと思っています。 その場合、現在のaozora2htmlはASTを作らずに直接出力する方法なので、そこから改造するか、別実装にするかになります。
課題としてはASTの作り方を考える必要があります。とりわけ青空文庫記法はルビの|
を省略した場合のルビ記法の扱いがちょっと難しそうでした。
おっしゃる通り、もし複数のフォーマットへの変換を用意するのであれば、一度ASTに変換されているとよいと思います。
その場合、現在のaozora2htmlはASTを作らずに直接出力する方法なので、そこから改造するか、別実装にするかになります。
まだaozora2htmlの実装を読み込めていないこともあって、どちらの方法を採るべきかについては考え中です。前者としてaozora2htmlを変更すると実装の見通しが良くなりそうですが、一方で全体のDOMを構築しない方式(現状?)にもメリットはありそうです。
なお、後者としては以下の条件を満たすRustで別実装を作ろうとしていました。(最近は着手できていませんが……。)
おおおー、それは素晴らしいですね!!>Rustで別実装 であればきっとASTを作ったほうがいいかと思います。
Shift_JISの読み込みが行えるのは要件としてほぼ必須かと思いますが、Rustなら普通にencoding_rsとかの変換器を使って内部ではUTF-8で扱うのでいいかと思います(aozora2htmlでもそうしたいですね…)。
なお、構文解析器としてはPEG.jsによる試験的なサンプルが https://github.com/aozorahack/aozora-parser.js/blob/master/aozora-parser.pegjs にあります(もうご存知かもしれませんが)。いろいろ足りてなさそうですが、参考にはなるかと思います。
現在XHTML出力が可能ですが、こちらに加えてLaTeXへの出力ができると、印刷して読む用途に便利だと思います。 (このプログラムの名前が
aozora2html
のため、やや範囲を外れているきらいはあるかもしれません。)出力されるLaTeX文書ファイルやコマンドラインオプションなどについての、大まかな仕様案は次の通りです:
tate
book
--output-format FORMAT
を追加FORMAT
にはxhtml
(初期値)、latex
を指定することができる--use-jisx0213
,--use-unicode
と--output-format latex
は併用不可なお、初期値で
--output-format xhtml
が使用されるため、従来のコマンドの動作は変化しません。予想される作業工程は次の通りです:
sample/chukiichiran_kinyurei.{txt,html}
を参考にsample/chukiichiran_kinyurei.tex
を編集して作成sample/chukiichiran_kinyurei.txt
を--output-format latex
指定で変換した結果がsample/chukiichiran_kinyurei.tex
と等しくなるようなテストを追加 ...a