*** /usr/local/lib/ruby/gems/1.9.1/gems/htmlgrid-1.0.0/ext/htmlgrid/grid.c 2011-11-18 14:43:11.623268177 +0100 --- /usr/local/lib/ruby/gems/1.9.1/gems/htmlgrid-1.0.0/ext/htmlgrid/grid.c 2011-10-14 09:16:08.818860527 +0200 *************** *** 288,301 **** VALUE grid_cat_attribute(pair, string) VALUE pair, string; { ! VALUE val; char *key, *value; long len; val = rb_ary_entry(pair, 1); if(val == Qnil) return string; ! key = STR2CSTR(rb_ary_entry(pair, 0)); ! value = STR2CSTR(rb_funcall(val, rb_intern("to_s"), 0)); char attr[strlen(key) + strlen(value) + 5]; len = sprintf(attr, " %s=\"%s\"", key, value); return rb_str_cat(string, attr, len); --- 288,303 ---- VALUE grid_cat_attribute(pair, string) VALUE pair, string; { ! VALUE val, tmp1, tmp2; char *key, *value; long len; val = rb_ary_entry(pair, 1); if(val == Qnil) return string; ! tmp1 = rb_ary_entry(pair, 0); ! key = StringValuePtr(tmp1); ! tmp2 = rb_funcall(val, rb_intern("to_s"), 0); ! value = StringValuePtr(tmp2); char attr[strlen(key) + strlen(value) + 5]; len = sprintf(attr, " %s=\"%s\"", key, value); return rb_str_cat(string, attr, len); *************** *** 333,340 **** VALUE pair, attrs; { char* key; ! ! key = STR2CSTR(rb_ary_entry(pair, 0)); if( strcasecmp(key, "align") == 0 || strcasecmp(key, "class") == 0 || strcasecmp(key, "colspan") == 0 --- 335,343 ---- VALUE pair, attrs; { char* key; ! VALUE tmp; ! tmp = rb_ary_entry(pair, 0); ! key = StringValuePtr(tmp); if( strcasecmp(key, "align") == 0 || strcasecmp(key, "class") == 0 || strcasecmp(key, "colspan") == 0 *************** *** 367,372 **** --- 370,376 ---- long idx, cdx, xval, yval, spanplus, len; Data_Get_Struct(self, cGrid, cg); //attrs = rb_iv_get(self, "@attributes"); + //printf("getin grid_to_html\n"); result = rb_str_new2(""); grid_cat_starttag(result, "TABLE", cg->attributes); for(idx=0, yval=0; yval < cg->height; yval++) *************** *** 416,428 **** for(cdx=0; cdxcontent_count; cdx++) { item = cf->content[cdx]; if(rb_obj_class(item) == rb_cString) rb_str_concat(result, item); else if(rb_respond_to(item, id_to_html)) { VALUE item_html = rb_funcall(item, id_to_html, 1, cgi); ! if(rb_obj_is_kind_of(item_html, rb_cString) == Qtrue) rb_str_concat(result, item_html); } else if(rb_obj_is_kind_of(item, rb_eException) == Qtrue) { --- 420,444 ---- for(cdx=0; cdxcontent_count; cdx++) { item = cf->content[cdx]; + //item => ODDB::View::WelcomeHead + //printf("item.encoding = %s \n", StringValuePtr(item)); + //printf("item.encoding = %s \n", rb_enc_get(item)->name); if(rb_obj_class(item) == rb_cString) rb_str_concat(result, item); else if(rb_respond_to(item, id_to_html)) { VALUE item_html = rb_funcall(item, id_to_html, 1, cgi); ! if(rb_obj_is_kind_of(item_html, rb_cString) == Qtrue){ ! // koko ! //result = rb_str_force_encoding(result, "UTF-8"); ! //item_html = rb_str_force_encoding(item_html, "UTF-8"); ! //VALUE enc; ! //enc = rb_obj_encoding(result); ! //printf("encoding type "); ! //printf("%s %s\n", rb_enc_get(result)->name, rb_enc_get(item_html)->name); rb_str_concat(result, item_html); + //printf("4\n"); + } } else if(rb_obj_is_kind_of(item, rb_eException) == Qtrue) { *************** *** 441,452 **** --- 457,470 ---- else rb_str_concat(result, rb_funcall(item, id_to_s, 0)); } + //printf("10\n"); } grid_cat_endtag(result, cf->tag); } rb_str_cat(result, tr_close, 5); } rb_str_cat(result, "", 8); + //printf("end grid_to_html\n"); return result; } *************** *** 749,755 **** cField * cf; VALUE tagname; { ! strcpy(cf->tag, STR2CSTR(tagname)); } VALUE grid_add_tag(argc, argv, self) --- 767,773 ---- cField * cf; VALUE tagname; { ! strcpy(cf->tag, StringValuePtr(tagname)); } VALUE grid_add_tag(argc, argv, self)