bogoYAML は YAML をさらにシンプルにしたものです。 というか実装が面倒だったのでいい加減にやったものです。 bogoyaml.tar.bz2 (bogoYAML for D)
配列と連想配列と文字列限定のスカラが使えます。 あまり詳しくない定義は配布物の中の README をごらん下さい。 こんな YAML ファイルがあったとして、
--- # bogoYAML:0.1
-
hoge: aaa
fuga: bbb
-
hoge: 1
fuga: 2.3
gefu: "hoge\nhoge
hoge"
こんなふうに処理します。
YamlHolder y = yamlLoad("test_simple.yml");
assert("aaa" == y.get(0).get("hoge").str);
assert("bbb" == y.get(0).get("fuga").str);
assert(1 == y.get(1).get("hoge").integer);
assert(2.3 == y.get(1).get("fuga").decimal);
assert("hoge\nhoge\nhoge" == y.get(1).get("gefu").str);
ごく普通の OO チックな処理。 これだけではつまらんですので、 今回のような型が確定している場合は (この場合は char[][char[]][])
alias char[][char[]][] Cfg;
instance ToStatic(Cfg) ToStaticCfg;
Cfg cfg = ToStaticCfg.conv(y);
assert("aaa" == cfg[0]["hoge"]);
assert("bbb" == cfg[0]["fuga"]);
assert("1" == cfg[1]["hoge"]);
assert("2.3" == cfg[1]["fuga"]);
assert("hoge\nhoge\nhoge" == cfg[1]["gefu"]);
なんていう使い方もできます。 これでちょっと驚いてくれると嬉しいな。 実装はテンプレートメタプログラミングな感じです。
面倒なので紹介しませんでしたが、 D のネイティブ型からの変換や、ファイルのダンプもできます。
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。