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扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。