RFC-822風オレオレファイルフォーマット覚え書き

これは備忘録。

こんなことをやりたかった。

  • テキストファイルにテストデータを書いておき、テストアプリに流し込む。
  • 1ファイルに1テストデータ。
  • テストデータは非構造的。
  • テストデータだけでなく、ちょっとした設定情報もテキストファイルに含めたい。
  • ついでにコメントも書けるようにしたい。

テストアプリの実装と実行はWindows上で行っているので、最初はINIファイルを使うことを考えた。しかし非構造的なテストデータの扱いに困りそうだし、将来的にUnix環境に移植する可能性を視野にいれるとINIファイルの使用は微妙だったので、10秒で却下。別のフォーマットを探してみることに。

少し悩んでから『The Art of UNIX Programming』を眺めて、RFC 822風のオレオレフォーマットをこしらえることにした。で、何しろテスト用に自分で作って自分しか使わないので、フォーマットをガチガチに固めてしまうことにした。この辺り、どうしてもパーサをC89の範囲で書かないとマズイ事情があったことも影響している。

大体こんな感じ。

Config-Name: Config-Value
# Comment
Config-Name: Config-Value-First;Config-Value-Rest
Config-Name: Config-Value

Test-Data...
Test-Data...
  • ファイル先頭から最初の空行までに設定情報を書く。
  • 設定情報(Config-Name: Config-Value)は以下のようなフォーマットで書く。
/^[-a-zA-Z0-9]+: ([-a-zA-Z0-9_]+)(;\1)*[ \t]*$/
  • Config-NameとConfig-Valueには半角空白や水平タブを含まない。
  • Config-Valueに複数の値を書きたい場合は、各値を「;」で区切る。
  • RFC 822にはConfig-Value部分で改行する書き方があるが、今回はオミットする。つまりConfig-Valueの部分は1行にする。
  • エスケープ文字には対応しない。
  • /^#/な行はコメントと見なす。RFC 822本来のコメントは、コメントと認めない。
  • Test-Data中で/^#/な行をコメントと見なすかどうかは、テストデータの仕様に基づいて個別に対応する。