Perl to Goしようと思ったら結構既出だった
この記事はEWB アドベントカレンダー2019の19日目の記事です。
この一連の記事の最終的な目標は現代のTeXLive環境で動作するEWBを Invent*1することだというのは初めて書く気もします。アドベントカレンダー中には終わりませんが、長期的にはできるといいな。
さて、EWBを構成するツールはどれもこれもJavaかEmacsLispだと思っていたら、 そこそこPerlスクリプトがあることが過去の記事で判明したワケです。 Perl5が動かない現代的環境はほぼ無いので、これらはそのまま持ってきても 大体の環境で動作してくれるはずです。でも、気軽に達成感が得られそうな手段を放置するのはなんかアレだし、モチベーションアップのために手作業のあたたかみのある車輪を手に入れたい。
一般的な話として、「かつてPerlで書き捨てたスクリプトをGoに直したい」欲求は 多いようで、様々な記事が見つかります*2。例えば
のような。
あと19日が1時間もない状態でこの記事を書きはじめたので、ザッと見ていきましょう。
gettoc
サルベージしたスクリプト群からgettocの登場です。
読みこむewbファイルを登録したファイルを元に、Table of Contentsを作るという目的のツールですね。も読み込んだファイルの見出しからtocを生成してくれますが、
こちらはいつ使うんだ、という。各トリガなどの読み込みをしてEWBファイルとしての目次を出力します。\tableofcontents
でtexの処理になると、nitianの仕事になってしまうので、この独自tocを使っていくようです。
方針としては
- init処理 -> os/flagでやればよさそう
- トリガリスト取得 -> 読み込んだファイル中のトリガをstringのリストにする
- ファイル処理 -> メモリ容量を超越する超巨大ファイルは後で考えるとしてとりあえずio/utilかな
- 見出し文字列をファイルから取得 -> 一先ずreadLine()あたりで良さそう。少なくとも見出しは行頭スタートで見出しになる程度の文字数しかないと仮定すれば。
- 出力用ハードコード文字列 -> text/templateで別にした方が取り回しがいい?
といった感じですね。その後で元にないお節介機能を加えるなら、巨大ファイル対策、並列化、パスのOS間差異吸収あたりでしょうか。
Next
やっていきをしたいんですが、1日は24時間しかない。 尻切れトンボな25日目にならないようにはしたい。したいが。