リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2006-05-31

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2006-05-31 Wed

* URL memo

- 図書館に関する調査・研究のページ “Current Awareness Portal” - E487 (No.83) - 分譲マンションで電子図書館が流行(韓国) - 2006年発行(E427~ ) - カレントアウェアネス -E (月2回刊): delicious users
韓国では,住宅建設基準などに関する規定により,300世帯以上の共同住宅を建設する場合には,図書館および読書振興法施行令で規定する「文庫」の設置義務がある。

* yaml+escape

Ruby の yaml ライブラリにて UTF-8 文字列出力の方式が、"\x7e\x..."
のようにエスケープして出力されるように変更になっていた。

cf. http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/41778?41585-41794
cf. http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/42205?41991-42252

これは、ext/syck/emitter.c の r1.12 (2005-09-13)でパーサの大幅な
変更が行われた際に導入されたものの模様。

void
syck_emitter_escape( SyckEmitter *e, char *src, long len )
{
    int i;
    for( i = 0; i < len; i++ )
    {
        if( (src[i] < 0x20) || (0x7E < src[i]) )

↑のように、決め打ちでASCIIの印字可能文字以外は全てエスケープする
ような方針になっている模様。

こいつは使いづらいので、直してほしいのだけれども。。。

void syck_emit_scalar( SyckEmitter *e, char *tag, enum scalar_style force_style, int force_indent, int force_width,
                       char keep_nl, char *str, long len )

の force_style に scalar_literal あたりを代入すれば大丈夫かとも思っ
たけど、どうやら、syck_scan_scalar 内にて、さらにASCII限定の印字可
能文字かどうかの判定ルーチンがあり(↓)、回避できなそう。。。

/*
 * Basic printable test for LATIN-1 characters.
 */
int
syck_scan_scalar( int req_width, char *cursor, long len )

        if ( ! ( cursor[i] == 0x9 ||
                 cursor[i] == 0xA ||
                 cursor[i] == 0xD ||
               ( cursor[i] >= 0x20 && cursor[i] <= 0x7E ) )
        ) {
            flags |= SCAN_NONPRINT;
        }
Referrer (Inside): [2006-06-05-2]