ToDo:
YAML モジュールむずかしいぞ…
http://d.hatena.ne.jp/shinichiro_h/20090826#c1255355058
をなんとかしようとしてる。
まず parser か emitter にバグがあるのは確実。
require 'yaml' o = "-\n \n-" p o == YAML::load(YAML.dump(o))
が false を返すのだから。
のいずれかがバグ。調べてないけどたぶん普通に考えて前者。
とりあえず parser のバグ直すか…と ruby の中に入ってる syck のコード読んだんだけど… えっとこれ yacc で生成されてるんだよね なんでオリジナルの gram.y とか token.re とか入ってないの…
そして _why 失踪につきオリジナルのコードとかどこにあるかよくわからず。
というわけでそっちはとりあえず諦めた。
まぁなんにせよ修正は emitter 側でやった方がいい。 Ruby の修正が入るの待つより サーバだけ修正した方がいいからね。
で、まぁ…
class String def to_yaml_style :quote1 end end
とかしたら良いように思うのだけど、 全然 quote1 にしてくれません! なんかコードが複雑怪奇なんだけど、 複数行に渡ってると literal にするってのが優先されてる感じかなぁ。
あと YAML::Syck::Scalar#style= というメソッドもあるみたいだけど、 これをどう使うかとかはさっぱりわからない。
あとこの rdoc で何がわかるのだろう。
http://doc.okkez.net/191/view/method/Object/i/to_yaml_style
で、なんか syck を見つけた。
http://github.com/indeyets/syck
token.re 読んでたらなんとなくわかってきた… よしなおった!
diff --git a/lib/token.re b/lib/token.re index 9d9c855..4d16363 100644 --- a/lib/token.re +++ b/lib/token.re @@ -308,6 +308,7 @@ TAB = "\t" ; SPCTAB = ( SPC | TAB ) ; ENDSPC = ( SPC+ | LF ) ; YINDENT = LF TAB* ( SPC | LF )* ; +YINDENT2 = LF TAB* SPC* ; NULL = [\000] ; ANY = [\001-\377] ; ISEQO = "[" ; @@ -966,7 +967,7 @@ ScalarBlock2: /*!re2c -YINDENT { char *pacer; +YINDENT2 { char *pacer; char *tok = YYTOKEN; int indt_len = 0, nl_count = 0, fold_nl = 0, nl_begin = 0; GOBBLE_UP_YAML_INDENT( indt_len, tok );
でも parser 直しても意味ねー。
うーんどうやったら quote 文字列とかで出力してくれるかって話ですね…
(08:42)
パッチはちょっと修正して今のメンテナっぽい人にメールしておいた。
んなことより emitter ですね… 別の yaml ライブラリ使うかねえインストールするの面倒だけど…
(09:26)
前 | 2009年 10月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。