読者です 読者をやめる 読者になる 読者になる

プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

TeX→HTML変換ツールLamuriyan現状報告:\write,\immediateがわからない。

Lamuriyan

 時々、TeX変換ツールのWikiから人が来ているので現状報告しておきます。Lamuriyanで使うソースコードをシンタックスハイライトする為のプログラムNHLightは一応完成とし、再び開発し始めました。(まだ実は完成していないんだけど…。対応言語はJoJoに増やします。)
 で、半年近く前の当時の予定が分からなくなって困っていますが、とりあえず今後のLamuriyanのTODOはこんな感じになっています。


  1. 仮本部の内容を増やす
  2. JavaDocを書く
  3. NHLightを組み込む(完了)
  4. IO関連の操作コマンドを作る
  5. 外部に見せるAPIの整理




 問題はIO関連のコマンド\newwrite,\openout,\write,\closeout,\newin,\openin,\closein,\immediateあたりの意味がさっぱりわかんないところ。これないとauxファイルとかの操作できないから、作らないといけないんだけど、どういう実装すれば良いのかよく分からない。
 私が調べた範囲では、TeX処理系は数字でストリームを管理しているらしい。\newwriteとか、\newinとかは使ってないストリームの番号を割り当てる作業をしているのだろうか? Lamuriyan処理系はコマンド(\hogehogeとか)の中身はObjectでやりとりしているので、数値で管理しなくてもInputStreamやOutputStreamをやりとりしても良いんだけど。
 で、\openout 数値={ファイル名}で、実際に数値のストリーム番号でファイルを開く処理をして、\closeout 数値 で閉じるらしい。書き込みは\write 数値 {内容}らしい。
 まぁ、ここまでは何となく分かった。実装も何となく出来るだろう。本当に分からないのは


 immediate


 これ。マジ意味分からん。マクロを実行した時点で即座にファイルに書き込みする為にあるみたいだけどさ、\writeってマクロ実行した時点で書き込まないの?じゃぁ、いつこれ動作するの?これの必要性理解できていないと、\writeの挙動も理解できていないって事だよね。

 いや、私も一応調べてみてはいるんですよ? \writeはページが出力されるまで待機するから速攻で書き出したいときは\immediateが必要程度の説明は出来るんですが、やっぱり意味が分からない。待機って言うのはどういうこと?バッファに書き込むけどフラッシュはしないって事なら別に\immediateは必要なさそうだし。誰か助けてください。(>_<)