Category xml.

なんか YAML の話とか読むと、ことごとく XML が比較されて貶されてて寂しい。

確かに XML ってちゃんと書かないと読みにくいし、名前空間とか意味不明だし、DOM とか面倒くさい。

全ての XMLYAML に置き換えられる的に書かれた YAML の紹介とかもあったりして、なんかアレだなぁって思った。例えば HTML より、YAML のほうが断然書きやすいとか、それは違うよって思った。いやそもそも HTMLXML じゃないからこの話にはあんまり関係ないんだけど。

というかどうも、YAMLXML を比べるのに違和感を感じて仕方がない。なんかうまく言葉に出来ないんだけど、用途が違うんだよなぁ……とはいえ用途が違う、YAML のほうが向いている分野に XML が使われている (例えば SOAP とか XML-RPC とか、そこらの設定ファイルとか) からこういう話になるんだろうけどさ……

だからといって XML は悪い!みたいな勘違いを見たくないよ……なぜなら俺は XML さんが好きだから!

適所適材てのをちゃんと考えたい。まぁ設定ファイルに XML なんて面倒くさすぎてやらないんだけど(w

  1. トップ
  2. xml
  3. XML と YAML

はてなの入力欄で動く xml-modeそれのナロー化 css-mode

バグバグだけどなんか今日はもうやる気しない。留年しそうなんだもん。一個単位数え間違えてた。これから軽く必死こいても、あがれる確立20%ぐらい。はぁーうまくいかない。

  • インデントしないエリアにバグ。閉じた直後の RET がおかしい。いままでずっと CDATA で囲ってたから気付かなかった。
  • css-mode の開き括弧直後の RET がおかしい。
  • 補完リストの位置がおかしい。offsetLeft がおかしいのか?
  • はてなのエリアだと右下の広げるやつを一回やっとかないと横に伸びる。はてなの JS とのコンフリクト

物好きの方がいたらどうぞ。eta.user.js

余計なことしなくていいよモード (謎) は M-x c RET

  1. トップ
  2. javascript
  3. GreaseMonkey スクリプトのデバッグが激しく面倒くさい
  1. トップ
  2. firefox
  3. GreaseMonkey スクリプトのデバッグが激しく面倒くさい
  1. トップ
  2. script
  3. GreaseMonkey スクリプトのデバッグが激しく面倒くさい
  1. トップ
  2. xml
  3. GreaseMonkey スクリプトのデバッグが激しく面倒くさい

ちゃんとエラークラス吐くバージョンがリリース。kiyoya さんのパッチ。

ruby extconf.rb --enable-error-handler して Makefile 作成。ちゃんと exslt もリンクさせるため、OBJS に /lib/libxml2.dll.a /lib/libexslt.dll.a /lib/libxslt.dll.a を追加。なんか知らんけど明示的に指定しないとリンクされなくて ld が怒る@cygwin (このバージョンに限らず)

XML::XSLT::XSLTError と、そのサブクラス XML::XSLT::ParsingError, XML::XSLT::TransformationError が追加される。変換用 XML ファイルのエラーなのか、XSLT ファイルのエラーなのかはわからなく。そのかわりエラー発生のタイミングが変わった。serve 時ではなく、xml= のときに出るようになった。だから問題ない。

エラーの message の意味がないっぽいので、--enable-error-handler 時には rb_raise 第2引数を STR2CSTR(rb_ary_to_s(rb_cvar_get(cXSLT, rb_intern("@@errors")))) とかにしたほうがいい感じ。--enable-error-handler は errors が定義されるのがキモイけど俺はそんなに気にならない。

第二引数を変えるだけだと以下のコードがダメ。

xslt = XML::XSLT.new()
xslt2 = XML::XSLT.new()
begin
xslt.xml = File.read("examples/fuzface.xml")
xslt.xsl = File.read("examples/fuzface.xsl")
out = xslt.serve()
print out;
rescue XML::XSLT::XSLTError => e
p XML::XSLT.class_eval("@@errors") #=> (1)
p e.message #=> (2)
end
p XML::XSLT.class_eval("@@errors") #=> (3)
begin
xslt2.xml = File.read("examples/fuzface.xml")
xslt2.xsl = File.read("examples/fuzface.xsl")
out = xslt2.serve()
print out;
rescue XML::XSLT::XSLTError => e
p e.message  #=> (4)
end

(3) で (2) のときと同じ (4) のとき前のエラーメッセージが紛れ込む。クラス変数使ってるからだろうけど、単純にインスタンス変数にしないのにはなんか理由があるんだろうからとりあえずそのままにして、

void xslt_raise(VALUE cError) {
#ifdef USE_ERROR_HANDLER
VALUE errors = rb_cvar_get(cXSLT, rb_intern("@@errors"));
VALUE error_str = rb_ary_to_s(errors);
rb_ary_clear(errors);
rb_raise(cError, STR2CSTR(error_str));
return;
#endif
rb_raise(cError, "");
}

とか作って経由させ、リセットさせてみる。XML::XSLT.errors は常に空の配列が返るようになって無意味になる。

ruby-xslt.0.9.1.error_message.patch

スレッドの切り替えってどういうタイミングなんだろう。

  1. トップ
  2. xslt
  3. ruby-xslt 0.9.1
  1. トップ
  2. ruby
  3. ruby-xslt 0.9.1
  1. トップ
  2. xml
  3. ruby-xslt 0.9.1