トップ «前の日記(2009-10-12) 最新 次の日記(2009-10-14)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|

ToDo:


2009-10-13

_ require 'yaml'

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 は literal や fold 形式の中に空白だけの行があると空白を落とす。
  • emitter は空白だけの行がある文字列を literal として出力する可能性がある。

のいずれかがバグ。調べてないけどたぶん普通に考えて前者。

とりあえず 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)

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

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
1.shinh(2014-05-24 01:31) 2.ょゎ(2014-05-24 01:31) 3.shinh(2014-05-24 01:31)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h