diff options
author | Dirk Meyer <dinoex@FreeBSD.org> | 2011-11-19 12:35:04 +0000 |
---|---|---|
committer | Dirk Meyer <dinoex@FreeBSD.org> | 2011-11-19 12:35:04 +0000 |
commit | 4a7332689ec85f4b1a6d391bd5770946d649da2c (patch) | |
tree | fffa275d5f7fd7b737f6dfc5ae516be53207b21a /graphics/ruby-gd | |
parent | de362c1688d52731432f9ab329e8a304dce57d73 (diff) | |
download | ports-4a7332689ec85f4b1a6d391bd5770946d649da2c.tar.gz ports-4a7332689ec85f4b1a6d391bd5770946d649da2c.zip |
Notes
Diffstat (limited to 'graphics/ruby-gd')
-rw-r--r-- | graphics/ruby-gd/Makefile | 15 | ||||
-rw-r--r-- | graphics/ruby-gd/files/patch-ruby19 | 1160 | ||||
-rw-r--r-- | graphics/ruby-gd/pkg-descr | 2 |
3 files changed, 1165 insertions, 12 deletions
diff --git a/graphics/ruby-gd/Makefile b/graphics/ruby-gd/Makefile index ca5428f111fc..7dc206527271 100644 --- a/graphics/ruby-gd/Makefile +++ b/graphics/ruby-gd/Makefile @@ -5,14 +5,13 @@ # $FreeBSD$ # -PORTNAME= GD -PORTVERSION= 0.7.4 -PORTREVISION= 9 +PORTNAME= gd +PORTVERSION= 0.8.0 CATEGORIES= graphics ruby MASTER_SITES= http://www.daifukuya.com/archive/kagemai/lib/ PKGNAMEPREFIX= ${RUBY_PKGNAMEPREFIX} PKGNAMESUFFIX= ${PKGNAMESUFFIX_XPM} -DISTNAME= ruby-${PORTNAME}-${PORTVERSION} +DISTNAME= ruby-GD-0.7.4 DIST_SUBDIR= ruby MAINTAINER= dinoex@FreeBSD.org @@ -36,10 +35,6 @@ LIB_DEPENDS+= gd.4:${PORTSDIR}/graphics/gd .include <bsd.port.pre.mk> -.if ${RUBY_VER} == 1.9 -BROKEN= does not work with ruby 1.9 -.endif - # Hmm, GREP and TRUE seem to be defined in the bsd.port.post.mk stage. .if exists(${LOCALBASE}/bin/gd2topng) WITH_X11_CHECK!= ldd ${LOCALBASE}/bin/gd2topng | grep -w 'libX11\.so' || true @@ -68,11 +63,7 @@ DOCS_JA= readme.ja \ post-patch: ${RUBY} -i -pe 'sub %r:/win98/windows/FONTS:, "${LOCALBASE}/lib/X11/fonts/TrueType"' ${WRKSRC}/sample/gdtestttf.rb -.if defined(WITH_GD1) - ${RUBY} -i -pe 'sub %r:%%GD%%:, "gd1"' ${WRKSRC}/extconf.rb -.else ${RUBY} -i -pe 'sub %r:%%GD%%:, "gd"' ${WRKSRC}/extconf.rb -.endif post-install: .if !defined(NOPORTEXAMPLES) diff --git a/graphics/ruby-gd/files/patch-ruby19 b/graphics/ruby-gd/files/patch-ruby19 new file mode 100644 index 000000000000..5b0dbf599d71 --- /dev/null +++ b/graphics/ruby-gd/files/patch-ruby19 @@ -0,0 +1,1160 @@ +diff -ur ../ruby-GD-0.7.4/Changes Spakman-ruby-gd-c0b03fc/Changes +--- ../ruby-GD-0.7.4/Changes 2001-05-30 16:14:17.000000000 +0200 ++++ Spakman-ruby-gd-c0b03fc/Changes 2011-03-15 08:52:04.000000000 +0100 +@@ -1,3 +1,9 @@ ++= Changes from 0.7.4 ++ ++* GD.c: added ++ GD::Image.newFromGif, GD::Image.new_from_gif, GD::Image#gif, GD::Image#gifStr. ++* doc/manual.rd: documentation update. ++ + = Changes from 0.7.3 + + * doc/gd-intro_ja.html, doc/imgs/* : removed. +diff -ur ../ruby-GD-0.7.4/GD.c Spakman-ruby-gd-c0b03fc/GD.c +--- ../ruby-GD-0.7.4/GD.c 2011-11-19 12:44:22.000000000 +0100 ++++ Spakman-ruby-gd-c0b03fc/GD.c 2011-03-15 08:52:04.000000000 +0100 +@@ -10,8 +10,11 @@ + $Revision: 1.6.2.3 $ + **************************************************************/ + #include "ruby.h" +-#include "rubyio.h" +-#include "version.h" ++#if defined(HAVE_RUBY_IO_H) ++ #include "ruby/io.h" ++#else /* seems like Ruby < 1.9 */ ++ #include "rubyio.h" ++#endif + + #include "gd.h" + #include "gdfontg.h" /* giant */ +@@ -20,6 +23,22 @@ + #include "gdfonts.h" /* small */ + #include "gdfontt.h" /* tiny */ + ++/* Is this the best way to do this sort of thing? ++ * It feels kind of wrong, but I'm not sure of the (Ruby)C way. ++ * Any opinions on the style will be gratefully received! */ ++ ++#if defined(HAVE_RUBY_IO_H) /* seems like Ruby > 1.8 */ ++ #define FPTR_TYPE rb_io_t ++ #define FILE_POINTER_FOR_CREATE_FROM rb_io_stdio_file(fptr) ++ #define FPTR_PATH (char*)fptr->pathv ++ #define SECOND_FILE_POINTER rb_io_stdio_file(fptr) ++#else ++ #define FPTR_TYPE OpenFile ++ #define FILE_POINTER_FOR_CREATE_FROM fptr->f ++ #define FPTR_PATH fptr->path ++ #define SECOND_FILE_POINTER (fptr->f2) ? fptr->f2 : fptr->f ++#endif ++ + extern VALUE rb_io_binmode(VALUE io); + extern gdImagePtr gdImageCreateFromXpm(char* ); + +@@ -62,19 +81,19 @@ + VALUE klass, fname; + { + VALUE f; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(fname, T_STRING); + +- f = rb_file_open(STR2CSTR(fname), "r"); ++ f = rb_file_open(StringValuePtr(fname), "r"); + rb_io_binmode(f); + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromPng(fptr->f); ++ iptr = gdImageCreateFromPng(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid PNG File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid PNG File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -84,7 +103,49 @@ + img_from_png(klass, f) + VALUE klass, f; + { +- OpenFile *fptr; ++ FPTR_TYPE *fptr; ++ gdImagePtr iptr; ++ ++ Check_Type(f, T_FILE); ++ rb_io_binmode(f); ++ GetOpenFile(f, fptr); ++ rb_io_check_readable(fptr); ++ ++ iptr = gdImageCreateFromPng(FILE_POINTER_FOR_CREATE_FROM); ++ if (!iptr) ++ rb_raise(rb_eArgError, "%s is not a valid PNG File", FPTR_PATH); ++ ++ return Data_Wrap_Struct(klass,0,free_img,iptr); ++} ++ ++#ifdef ENABLE_GD_2_0 ++static VALUE ++img_from_giffname(klass, fname) ++ VALUE klass, fname; ++{ ++ VALUE f; ++ FPTR_TYPE *fptr; ++ gdImagePtr iptr; ++ ++ Check_Type(fname, T_STRING); ++ ++ f = rb_file_open(StringValuePtr(fname), "r"); ++ rb_io_binmode(f); ++ GetOpenFile(f, fptr); ++ rb_io_check_readable(fptr); ++ ++ iptr = gdImageCreateFromGif(FILE_POINTER_FOR_CREATE_FROM); ++ if (!iptr) ++ rb_raise(rb_eArgError, "%s is not a valid GIF File", FPTR_PATH); ++ ++ return Data_Wrap_Struct(klass,0,free_img,iptr); ++} ++ ++static VALUE ++img_from_gif(klass, f) ++ VALUE klass, f; ++{ ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(f, T_FILE); +@@ -92,31 +153,32 @@ + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromPng(fptr->f); ++ iptr = gdImageCreateFromGif(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid PNG File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid GIF File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } ++#endif /* ENABLE_GD_2_0 */ + + static VALUE + img_from_gdfname(klass, fname) + VALUE klass, fname; + { + VALUE f; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(fname, T_STRING); + +- f = rb_file_open(STR2CSTR(fname), "r"); ++ f = rb_file_open(StringValuePtr(fname), "r"); + rb_io_binmode(f); + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromGd(fptr->f); ++ iptr = gdImageCreateFromGd(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Gd File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Gd File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -125,7 +187,7 @@ + img_from_gd(klass, f) + VALUE klass, f; + { +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(f, T_FILE); +@@ -133,9 +195,9 @@ + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromGd(fptr->f); ++ iptr = gdImageCreateFromGd(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Gd File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Gd File", FPTR_PATH); + return Data_Wrap_Struct(klass,0,free_img,iptr); + } + +@@ -144,19 +206,19 @@ + VALUE klass, fname; + { + VALUE f; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(fname, T_STRING); + +- f = rb_file_open(STR2CSTR(fname), "r"); ++ f = rb_file_open(StringValuePtr(fname), "r"); + rb_io_binmode(f); + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromGd2(fptr->f); ++ iptr = gdImageCreateFromGd2(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Gd2 File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Gd2 File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -165,7 +227,7 @@ + img_from_gd2(klass, f) + VALUE klass, f; + { +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(f, T_FILE); +@@ -173,9 +235,9 @@ + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromGd2(fptr->f); ++ iptr = gdImageCreateFromGd2(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Gd2 File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Gd2 File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -185,20 +247,20 @@ + VALUE klass, fname, srcx, srcy, w, h; + { + VALUE f; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(fname, T_STRING); + +- f = rb_file_open(STR2CSTR(fname), "r"); ++ f = rb_file_open(StringValuePtr(fname), "r"); + rb_io_binmode(f); + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromGd2Part(fptr->f, NUM2INT(srcx), ++ iptr = gdImageCreateFromGd2Part(FILE_POINTER_FOR_CREATE_FROM, NUM2INT(srcx), + NUM2INT(srcy), NUM2INT(w), NUM2INT(h)); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Gd2 File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Gd2 File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -207,7 +269,7 @@ + img_from_gd2_part(klass, f, srcx, srcy, w, h) + VALUE klass, f, srcx, srcy, w, h; + { +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(f, T_FILE); +@@ -215,10 +277,10 @@ + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromGd2Part(fptr->f, NUM2INT(srcx), ++ iptr = gdImageCreateFromGd2Part(FILE_POINTER_FOR_CREATE_FROM, NUM2INT(srcx), + NUM2INT(srcy), NUM2INT(w), NUM2INT(h)); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Gd2 File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Gd2 File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -228,7 +290,7 @@ + img_from_xbm(klass, f) + VALUE klass, f; + { +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(f, T_FILE); +@@ -236,9 +298,9 @@ + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromXbm(fptr->f); ++ iptr = gdImageCreateFromXbm(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Xbm File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Xbm File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -248,19 +310,19 @@ + VALUE klass, fname; + { + VALUE f; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(fname, T_STRING); + +- f = rb_file_open(STR2CSTR(fname), "r"); ++ f = rb_file_open(StringValuePtr(fname), "r"); + rb_io_binmode(f); + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromXbm(fptr->f); ++ iptr = gdImageCreateFromXbm(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Xbm File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Xbm File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -270,7 +332,7 @@ + img_from_xpm(klass, f) + VALUE klass, f; + { +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(f, T_FILE); +@@ -281,7 +343,7 @@ + /* need cast, and the argument is char* type */ + iptr = (gdImagePtr)gdImageCreateFromXpm(fptr->path); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid XPM File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid XPM File", (char*)fptr->path); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -291,12 +353,12 @@ + VALUE klass, fname; + { + VALUE f; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(fname, T_STRING); + +- f = rb_file_open(STR2CSTR(fname), "r"); ++ f = rb_file_open(StringValuePtr(fname), "r"); + rb_io_binmode(f); + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); +@@ -304,7 +366,7 @@ + /* need cast, and the argument is char* type */ + iptr = (gdImagePtr)gdImageCreateFromXpm(fptr->path); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid XPM File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid XPM File", (char*)fptr->path); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -316,7 +378,7 @@ + img_from_jpeg(klass, f) + VALUE klass, f; + { +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(f, T_FILE); +@@ -324,9 +386,9 @@ + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromJpeg(fptr->f); ++ iptr = gdImageCreateFromJpeg(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Jpeg File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Jpeg File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -336,19 +398,19 @@ + VALUE klass, fname; + { + VALUE f; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr iptr; + + Check_Type(fname, T_STRING); + +- f = rb_file_open(STR2CSTR(fname), "r"); ++ f = rb_file_open(StringValuePtr(fname), "r"); + rb_io_binmode(f); + GetOpenFile(f, fptr); + rb_io_check_readable(fptr); + +- iptr = gdImageCreateFromJpeg(fptr->f); ++ iptr = gdImageCreateFromJpeg(FILE_POINTER_FOR_CREATE_FROM); + if (!iptr) +- rb_raise(rb_eArgError, "%s is not a valid Jpeg File", fptr->path); ++ rb_raise(rb_eArgError, "%s is not a valid Jpeg File", FPTR_PATH); + + return Data_Wrap_Struct(klass,0,free_img,iptr); + } +@@ -375,12 +437,12 @@ + + Check_Type(hex, T_STRING); + +- if (RSTRING(hex)->len != 7) +- rb_raise(rb_eArgError, "Invalid format: %s", RSTRING(hex)->ptr); ++ if (RSTRING_LEN(hex) != 7) ++ rb_raise(rb_eArgError, "Invalid format: %s", RSTRING_PTR(hex)); + +- rstr = rb_str_new(RSTRING(hex)->ptr + 1, 2); +- gstr = rb_str_new(RSTRING(hex)->ptr + 3, 2); +- bstr = rb_str_new(RSTRING(hex)->ptr + 5, 2); ++ rstr = rb_str_new(RSTRING_PTR(hex) + 1, 2); ++ gstr = rb_str_new(RSTRING_PTR(hex) + 3, 2); ++ bstr = rb_str_new(RSTRING_PTR(hex) + 5, 2); + + ret_ary = rb_ary_new(); + +@@ -416,9 +478,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorAllocate(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2))); ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2))); + return INT2FIX(c); + } + +@@ -489,9 +551,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorResolve(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2))); ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2))); + + return INT2FIX(c); + } +@@ -552,9 +614,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorClosest(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2))); ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2))); + return INT2FIX(c); + } + +@@ -614,9 +676,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorClosestHWB(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2))); ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2))); + return INT2FIX(c); + } + +@@ -674,9 +736,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorExact(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2))); ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2))); + return INT2FIX(c); + } + +@@ -956,11 +1018,11 @@ + Data_Get_Struct(img, gdImage, im); + + poly_req(ply); +- len = ply->len/2; ++ len = RARRAY_LEN(ply)/2; + pnt = ALLOCA_N(gdPoint, len); + for (i=0; i<len; i++) { +- pnt[i].x = NUM2INT(ply->ptr[i*2]); +- pnt[i].y = NUM2INT(ply->ptr[i*2+1]); ++ pnt[i].x = NUM2INT(RARRAY_PTR(ply)[i*2]); ++ pnt[i].y = NUM2INT(RARRAY_PTR(ply)[i*2+1]); + } + + gdImagePolygon(im, pnt, len, NUM2INT(c)); +@@ -981,11 +1043,11 @@ + Data_Get_Struct(img, gdImage, im); + + poly_req(ply); +- len = ply->len/2; ++ len = RARRAY_LEN(ply)/2; + pnt = ALLOCA_N(gdPoint, len); + for (i=0; i<len; i++) { +- pnt[i].x = NUM2INT(ply->ptr[i*2]); +- pnt[i].y = NUM2INT(ply->ptr[i*2+1]); ++ pnt[i].x = NUM2INT(RARRAY_PTR(ply)[i*2]); ++ pnt[i].y = NUM2INT(RARRAY_PTR(ply)[i*2+1]); + } + + gdImageFilledPolygon(im, pnt, len, NUM2INT(c)); +@@ -1156,7 +1218,7 @@ + font_req(fnt); + Data_Get_Struct(fnt, gdFont, f); + +- gdImageString(im,f,NUM2INT(x),NUM2INT(y),RSTRING(str)->ptr,NUM2INT(c)); ++ gdImageString(im,f,NUM2INT(x),NUM2INT(y),(unsigned char*)RSTRING_PTR(str),NUM2INT(c)); + + return img; + } +@@ -1173,7 +1235,7 @@ + font_req(fnt); + Data_Get_Struct(fnt, gdFont, f); + +- gdImageStringUp(im,f,NUM2INT(x),NUM2INT(y),RSTRING(str)->ptr,NUM2INT(c)); ++ gdImageStringUp(im,f,NUM2INT(x),NUM2INT(y),(unsigned char*)RSTRING_PTR(str),NUM2INT(c)); + + return img; + } +@@ -1191,15 +1253,15 @@ + Check_Type(fontname, T_STRING); + Check_Type(string, T_STRING); + +- msg = gdImageStringFT(NULL, ++ msg = gdImageStringTTF(NULL, + &brect[0], + NUM2INT(fgcolor), +- RSTRING(fontname)->ptr, ++ RSTRING_PTR(fontname), + NUM2DBL(ptsize), + NUM2DBL(angle), + NUM2INT(x), + NUM2INT(y), +- RSTRING(string)->ptr); ++ RSTRING_PTR(string)); + for (i=0; i<8; i++) { + rb_ary_push(ary, INT2FIX(brect[i])); + } +@@ -1223,15 +1285,15 @@ + Check_Type(string, T_STRING); + + Data_Get_Struct(img, gdImage, im); +- msg = gdImageStringFT(im, ++ msg = gdImageStringTTF(im, + &brect[0], + NUM2INT(fgcolor), +- RSTRING(fontname)->ptr, ++ RSTRING_PTR(fontname), + NUM2DBL(ptsize), + NUM2DBL(angle), + NUM2INT(x), + NUM2INT(y), +- RSTRING(string)->ptr); ++ RSTRING_PTR(string)); + for (i=0; i<8; i++) { + rb_ary_push(ary, INT2FIX(brect[i])); + } +@@ -1258,12 +1320,12 @@ + msg = gdImageStringFT(NULL, + &brect[0], + NUM2INT(fgcolor), +- RSTRING(fontname)->ptr, ++ RSTRING_PTR(fontname), + NUM2DBL(ptsize), + NUM2DBL(angle), + NUM2INT(x), + NUM2INT(y), +- RSTRING(string)->ptr); ++ RSTRING_PTR(string)); + for (i=0; i<8; i++) { + rb_ary_push(ary, INT2FIX(brect[i])); + } +@@ -1290,12 +1352,12 @@ + msg = gdImageStringFT(im, + &brect[0], + NUM2INT(fgcolor), +- RSTRING(fontname)->ptr, ++ RSTRING_PTR(fontname), + NUM2DBL(ptsize), + NUM2DBL(angle), + NUM2INT(x), + NUM2INT(y), +- RSTRING(string)->ptr); ++ RSTRING_PTR(string)); + for (i=0; i<8; i++) { + rb_ary_push(ary, INT2FIX(brect[i])); + } +@@ -1320,10 +1382,10 @@ + Data_Get_Struct(fnt, gdFont, f); + + if (TYPE(ch) == T_STRING) { +- if (RSTRING(ch)->len != 1) { +- rb_raise(rb_eArgError, "string must be 1 byte(%d bytes)", RSTRING(ch)->len); ++ if (RSTRING_LEN(ch) != 1) { ++ rb_raise(rb_eArgError, "string must be 1 byte(%ld bytes)", RSTRING_LEN(ch)); + } +- ci = RSTRING(ch)->ptr[0]; ++ ci = RSTRING_PTR(ch)[0]; + } + else { + ci = NUM2INT(ch); +@@ -1346,10 +1408,10 @@ + Data_Get_Struct(fnt, gdFont, f); + + if (TYPE(ch) == T_STRING) { +- if (RSTRING(ch)->len != 1) { +- rb_raise(rb_eArgError, "string must be 1 byte(%d bytes)", RSTRING(ch)->len); ++ if (RSTRING_LEN(ch) != 1) { ++ rb_raise(rb_eArgError, "string must be 1 byte(%ld bytes)", RSTRING_LEN(ch)); + } +- ci = RSTRING(ch)->ptr[0]; ++ ci = RSTRING_PTR(ch)[0]; + } + else { + ci = NUM2INT(ch); +@@ -1455,7 +1517,7 @@ + VALUE img, out; + { + gdImagePtr im; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + FILE *f; + + Data_Get_Struct(img, gdImage, im); +@@ -1463,8 +1525,8 @@ + rb_io_binmode(out); + GetOpenFile(out, fptr); + rb_io_check_writable(fptr); +- f = (fptr->f2) ? fptr->f2 : fptr->f; + ++ f = SECOND_FILE_POINTER; + gdImagePng(im, f); + + return img; +@@ -1492,12 +1554,53 @@ + return imageString; + } + ++ ++#ifdef ENABLE_GD_2_0 ++static VALUE ++img_gif(img, out) ++ VALUE img, out; ++{ ++ gdImagePtr im; ++ FPTR_TYPE *fptr; ++ FILE *f; ++ ++ Data_Get_Struct(img, gdImage, im); ++ Check_Type(out, T_FILE); ++ rb_io_binmode(out); ++ GetOpenFile(out, fptr); ++ rb_io_check_writable(fptr); ++ f = rb_io_stdio_file(fptr); ++ ++ gdImageGif(im, f); ++ ++ return img; ++} ++ ++static VALUE ++img_gif_str(img) ++ VALUE img; ++{ ++ int size; ++ void *ptr; ++ gdImagePtr im; ++ VALUE imageString; ++ ++ Data_Get_Struct(img, gdImage, im); ++ ptr = gdImageGifPtr(im, &size); ++ imageString = rb_str_new(ptr, size); ++ gdFree(ptr); ++ ++ return imageString; ++} ++#endif /* ENABLE_GD_2_0 */ ++ ++ + static VALUE + img_gd(img, out) + VALUE img, out; + { + gdImagePtr im; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + FILE *f; + + Data_Get_Struct(img, gdImage, im); +@@ -1505,7 +1608,7 @@ + rb_io_binmode(out); + GetOpenFile(out, fptr); + rb_io_check_writable(fptr); +- f = (fptr->f2) ? fptr->f2 : fptr->f; ++ f = SECOND_FILE_POINTER; + + gdImageGd(im, f); + +@@ -1516,7 +1619,7 @@ + img_gd2(img, out, cs, fmt) + VALUE img, out, cs, fmt; + { +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + gdImagePtr im; + FILE *f; + +@@ -1524,7 +1627,7 @@ + rb_io_binmode(out); + GetOpenFile(out, fptr); + rb_io_check_writable(fptr); +- f = (fptr->f2) ? fptr->f2 : fptr->f; ++ f = SECOND_FILE_POINTER; + + Data_Get_Struct(img, gdImage, im); + gdImageGd2(im, f, NUM2INT(cs), NUM2INT(fmt)); +@@ -1539,7 +1642,7 @@ + VALUE img, out, quality; + { + gdImagePtr im; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + FILE *f; + + Data_Get_Struct(img, gdImage, im); +@@ -1549,7 +1652,7 @@ + rb_io_binmode(out); + GetOpenFile(out, fptr); + rb_io_check_writable(fptr); +- f = (fptr->f2) ? fptr->f2 : fptr->f; ++ f = SECOND_FILE_POINTER; + + gdImageJpeg(im, f, FIX2INT(quality)); + +@@ -1584,7 +1687,7 @@ + VALUE img, out, fg; + { + gdImagePtr im; +- OpenFile *fptr; ++ FPTR_TYPE *fptr; + FILE *f; + + Data_Get_Struct(img, gdImage, im); +@@ -1594,7 +1697,7 @@ + rb_io_binmode(out); + GetOpenFile(out, fptr); + rb_io_check_writable(fptr); +- f = (fptr->f2) ? fptr->f2 : fptr->f; ++ f = SECOND_FILE_POINTER; + + gdImageWBMP(im, FIX2INT(fg), f); + +@@ -1640,9 +1743,9 @@ + NUM2INT(dx); + NUM2INT(dy); + +- if (RARRAY(ply)->len > 0) { +- x = rb_ary_entry(ply, RARRAY(ply)->len - 2); +- y = rb_ary_entry(ply, RARRAY(ply)->len - 1); ++ if (RARRAY_LEN(ply) > 0) { ++ x = rb_ary_entry(ply, RARRAY_LEN(ply) - 2); ++ y = rb_ary_entry(ply, RARRAY_LEN(ply) - 1); + rb_ary_push(ply, INT2NUM(NUM2INT(x) + NUM2INT(dx))); + rb_ary_push(ply, INT2NUM(NUM2INT(y) + NUM2INT(dy))); + } else { +@@ -1657,7 +1760,7 @@ + { + int i = NUM2INT(idx); + +- if (RARRAY(ply)->len < idx) return Qnil; ++ if (RARRAY_LEN(ply) < idx) return Qnil; + i *= 2; + + return rb_assoc_new(rb_ary_entry(ply, i), rb_ary_entry(ply, i+1)); +@@ -1695,7 +1798,7 @@ + ply_length(ply) + VALUE ply; + { +- return INT2FIX(RARRAY(ply)->len / 2); ++ return INT2FIX(RARRAY_LEN(ply) / 2); + } + + static VALUE +@@ -1703,10 +1806,10 @@ + struct RArray *ply; + { + int i; +- VALUE ary = rb_ary_new2(ply->len/2); ++ VALUE ary = rb_ary_new2(RARRAY_LEN(ply)/2); + +- for (i = 0; i<ply->len; i+=2) { +- rb_ary_push(ary, rb_assoc_new(ply->ptr[i], ply->ptr[i+1])); ++ for (i = 0; i<RARRAY_LEN(ply); i+=2) { ++ rb_ary_push(ary, rb_assoc_new(RARRAY_PTR(ply)[i], RARRAY_PTR(ply)[i+1])); + } + return ary; + } +@@ -1718,18 +1821,18 @@ + int i, l, t, r, b; + int nx, ny; + +- if (ply->len == 0) { ++ if (RARRAY_LEN(ply) == 0) { + l = t = r = b = 0; + } + else { +- l = r = NUM2INT(ply->ptr[0]); +- t = b = NUM2INT(ply->ptr[1]); ++ l = r = NUM2INT(RARRAY_PTR(ply)[0]); ++ t = b = NUM2INT(RARRAY_PTR(ply)[1]); + } +- for (i = 2; i<ply->len; i+=2) { +- nx = NUM2INT(ply->ptr[i]); ++ for (i = 2; i<RARRAY_LEN(ply); i+=2) { ++ nx = NUM2INT(RARRAY_PTR(ply)[i]); + if (nx < l) l = nx; + if (nx > r) r = nx; +- ny = NUM2INT(ply->ptr[i+1]); ++ ny = NUM2INT(RARRAY_PTR(ply)[i+1]); + if (ny < t) t = ny; + if (ny > b) b = ny; + } +@@ -1746,11 +1849,11 @@ + x = NUM2INT(vx); + y = NUM2INT(vy); + +- for (i = 0; i<ply->len; i+=2) { +- c = NUM2INT(ply->ptr[i]) + x; +- ply->ptr[i] = INT2FIX(c); +- c = NUM2INT(ply->ptr[i+1]) + y; +- ply->ptr[i+1] = INT2FIX(c); ++ for (i = 0; i<RARRAY_LEN(ply); i+=2) { ++ c = NUM2INT(RARRAY_PTR(ply)[i]) + x; ++ RARRAY_PTR(ply)[i] = INT2FIX(c); ++ c = NUM2INT(RARRAY_PTR(ply)[i+1]) + y; ++ RARRAY_PTR(ply)[i+1] = INT2FIX(c); + } + + return (VALUE)ply; +@@ -1773,18 +1876,18 @@ + int i, l, t, r, b; + int nx, ny; + +- if (ply->len == 0) { ++ if (RARRAY_LEN(ply) == 0) { + l = t = r = b = 0; + } + else { +- l = r = NUM2INT(ply->ptr[0]); +- t = b = NUM2INT(ply->ptr[1]); ++ l = r = NUM2INT(RARRAY_PTR(ply)[0]); ++ t = b = NUM2INT(RARRAY_PTR(ply)[1]); + } +- for (i = 2; i<ply->len; i+=2) { +- nx = NUM2INT(ply->ptr[i]); ++ for (i = 2; i<RARRAY_LEN(ply); i+=2) { ++ nx = NUM2INT(RARRAY_PTR(ply)[i]); + if (nx < l) l = nx; + if (nx > r) r = nx; +- ny = NUM2INT(ply->ptr[i+1]); ++ ny = NUM2INT(RARRAY_PTR(ply)[i+1]); + if (ny < t) t = ny; + if (ny > b) b = ny; + } +@@ -1809,14 +1912,14 @@ + rb_raise(rb_eArgError, "wrong # of arguments (%d for 4 or 8)", argc); + } + +- for (i = 0; i<ply->len; i+=2) { +- c = NUM2INT(ply->ptr[i]); ++ for (i = 0; i<RARRAY_LEN(ply); i+=2) { ++ c = NUM2INT(RARRAY_PTR(ply)[i]); + c = (c-sx)*xmag+dx; +- ply->ptr[i] = INT2FIX(c); ++ RARRAY_PTR(ply)[i] = INT2FIX(c); + +- c = NUM2INT(ply->ptr[i+1]); ++ c = NUM2INT(RARRAY_PTR(ply)[i+1]); + c = (c-sy)*ymag+dy; +- ply->ptr[i+1] = INT2FIX(c); ++ RARRAY_PTR(ply)[i+1] = INT2FIX(c); + } + + return (VALUE)ply; +@@ -1829,11 +1932,11 @@ + int i; + VALUE x, y; + +- for (i = 0; i < RARRAY(ply)->len / 2; i++) { ++ for (i = 0; i < RARRAY_LEN(ply) / 2; i++) { + /* x = rb_ary_entry(ply, i * 2); + y = rb_ary_entry(ply, i * 2 + 1);*/ +- x = RARRAY(ply)->ptr[i * 2]; +- y = RARRAY(ply)->ptr[i * 2 + 1]; ++ x = RARRAY_PTR(ply)[i * 2]; ++ y = RARRAY_PTR(ply)[i * 2 + 1]; + ply_set_pt(ply, INT2NUM(i), + INT2NUM(NUM2DBL(a) * NUM2INT(x) + NUM2DBL(c) * NUM2INT(y) + NUM2INT(tx)), + INT2NUM(NUM2DBL(b) * NUM2INT(x) + NUM2DBL(d) * NUM2INT(y) + NUM2INT(ty))); +@@ -1883,7 +1986,7 @@ + struct RString *name; + { + Check_Type(name, T_STRING); +- return fnt_new(name->ptr); ++ return fnt_new(RSTRING_PTR(name)); + } + + static VALUE +@@ -1975,9 +2078,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorAllocateAlpha(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2)), ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2)), + NUM2INT(a)); + return INT2NUM(c); + } +@@ -2037,9 +2140,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorResolveAlpha(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2)), ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2)), + NUM2INT(a)); + return INT2NUM(c); + } +@@ -2098,9 +2201,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorClosestAlpha(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2)), ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2)), + NUM2INT(a)); + return INT2NUM(c); + } +@@ -2160,9 +2263,9 @@ + + ary = hex2triplet(rgbstr); + c = gdImageColorExactAlpha(im, +- NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2)), ++ NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2)), + NUM2INT(a)); + return INT2NUM(c); + } +@@ -2226,9 +2329,9 @@ + int c; + VALUE ary; + ary = hex2triplet(rgbstr); +- c = gdTrueColor(NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2))); ++ c = gdTrueColor(NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2))); + + return INT2NUM(c); + } +@@ -2280,9 +2383,9 @@ + int c; + VALUE ary; + ary = hex2triplet(rgbstr); +- c = gdTrueColorAlpha(NUM2INT(*(RARRAY(ary)->ptr)), +- NUM2INT(*(RARRAY(ary)->ptr+1)), +- NUM2INT(*(RARRAY(ary)->ptr+2)), ++ c = gdTrueColorAlpha(NUM2INT(*(RARRAY_PTR(ary))), ++ NUM2INT(*(RARRAY_PTR(ary)+1)), ++ NUM2INT(*(RARRAY_PTR(ary)+2)), + NUM2INT(a)); + return INT2NUM(c); + } +@@ -2426,7 +2529,10 @@ + rb_define_singleton_method(cImage, "newPalette", img_s_new, 2); + rb_define_singleton_method(cImage, "newFromPng", img_from_png, 1); + rb_define_singleton_method(cImage, "new_from_png", img_from_pngfname, 1); +- ++#ifdef ENABLE_GD_2_0 ++ rb_define_singleton_method(cImage, "newFromGif", img_from_gif, 1); ++ rb_define_singleton_method(cImage, "new_from_gif", img_from_giffname, 1); ++#endif /* ENABLE_GD_2_0 */ + rb_define_singleton_method(cImage, "newFromXbm", img_from_xbm, 1); + rb_define_singleton_method(cImage, "new_from_xbm", img_from_xbmfname, 1); + +@@ -2508,9 +2614,7 @@ + #endif + + #ifdef HAVE_GDIMAGESTRINGFT +- rb_define_singleton_method(cImage, "stringTTF", img_s_string_ft, 7); + rb_define_singleton_method(cImage, "stringFT", img_s_string_ft, 7); +- rb_define_method(cImage, "stringTTF", img_string_ft, 7); + rb_define_method(cImage, "stringFT", img_string_ft, 7); + #endif + +@@ -2528,6 +2632,10 @@ + + rb_define_method(cImage, "png", img_png, 1); + rb_define_method(cImage, "pngStr", img_png_str, 0); ++#ifdef ENABLE_GD_2_0 ++ rb_define_method(cImage, "gif", img_gif, 1); ++ rb_define_method(cImage, "gifStr", img_gif_str, 0); ++#endif /* ENABLE_GD_2_0 */ + rb_define_method(cImage, "gd2", img_gd2, 3); + rb_define_method(cImage, "gd", img_gd, 1); + +Only in Spakman-ruby-gd-c0b03fc/: Rakefile +Only in ../ruby-GD-0.7.4/: Spakman-ruby-gd-c0b03fc +diff -ur ../ruby-GD-0.7.4/doc/manual.rd Spakman-ruby-gd-c0b03fc/doc/manual.rd +--- ../ruby-GD-0.7.4/doc/manual.rd 2001-05-30 16:14:17.000000000 +0200 ++++ Spakman-ruby-gd-c0b03fc/doc/manual.rd 2011-03-15 08:52:04.000000000 +0100 +@@ -165,6 +165,16 @@ + creates a new PNG image instance from ((|filename|)). ((|filename|)) + is a String object which specifies the location of the image file. + ++--- GD::Image.newFromGif(file) ++ ++creates a new image instance from GIF file. ((|file|)) is a File ++object. ++ ++--- GD::Image.new_from_gif(filename) ++ ++creates a new GIF image instance from ((|filename|)). ((|filename|)) ++is a String object which specifies the location of the image file. ++ + --- GD::Image.newFromXbm(file) + + creates a new image instance from Xbm file. ((|file|)) is a File +@@ -619,6 +629,16 @@ + especially useful when you want to transmit an image ((*directly*)) to + an user(i.e, without first writing it to a file). + ++--- GD::Image#gif(file) ++ ++Outputs the image to the specified ((|file|)) in GIF format. ++ ++--- GD::Image#gifStr(file) ++ ++Outputs the image in GIF format as String object. This method will be ++especially useful when you want to transmit an image ((*directly*)) to ++an user(i.e, without first writing it to a file). ++ + --- GD::Image#wbmp(fg_color, file) + (gd-1.8 or later) + +diff -ur ../ruby-GD-0.7.4/extconf.rb Spakman-ruby-gd-c0b03fc/extconf.rb +--- ../ruby-GD-0.7.4/extconf.rb 2011-11-19 12:44:22.000000000 +0100 ++++ Spakman-ruby-gd-c0b03fc/extconf.rb 2011-03-15 08:52:04.000000000 +0100 +@@ -22,9 +22,13 @@ + $libs = lib_ary.join " " + end + +-dir_config("gd", "/usr/local/include", "/usr/loca/lib") ++dir_config("gd", "/usr/local/include", "/usr/local/lib") + ++have_header('ruby/io.h') + ++if have_type("rb_io_t", ["ruby.h", "rubyio.h"]) ++ have_struct_member("rb_io_t", "fd", ["ruby.h", "rubyio.h"]) ++end + + if with_config("xpm") + dir_config("X11", "/usr/X11R6/include", "/usr/X11R6/lib") +Only in ../ruby-GD-0.7.4/: extconf.rb.orig +diff -ur ../ruby-GD-0.7.4/readme.en Spakman-ruby-gd-c0b03fc/readme.en +--- ../ruby-GD-0.7.4/readme.en 2001-05-30 16:14:17.000000000 +0200 ++++ Spakman-ruby-gd-c0b03fc/readme.en 2011-03-15 08:52:04.000000000 +0100 +@@ -1,7 +1,7 @@ + = Ruby/GD 0.7.4 + + An extension library to use Thomas Boutell's gd graphics library from +-Ruby. You can create PNG or JPEG images with your Ruby script. ++Ruby. You can create PNG, GIF or JPEG images with your Ruby script. + + Ruby/GD requires gd library with PNG support(i.e. the version 1.6 or + later). See 'doc/INSTALL.en' for detail. +@@ -13,6 +13,10 @@ + by Yukihiro "matz" Matsumoto (matz@ruby-lang.org). From this release + of 0.7.0, Ruby/GD is maintained by Ryuichi Tamura (tam@kais.kyoto-u.ac.jp). + ++== Changes from the version 0.7.4 ++ ++* restored GIF I/O, provided by the gd-2.0.28 or later. ++ + == Changes from the version 0.6.2 + + * GIF I/O are no longer supported. You can use PNG I/O instead. +@@ -45,7 +49,7 @@ + + == Licence + +-Ruby Libraru Licence ++Ruby Library Licence + + == Maintainer + +diff -ur ../ruby-GD-0.7.4/readme.ja Spakman-ruby-gd-c0b03fc/readme.ja +--- ../ruby-GD-0.7.4/readme.ja 2001-05-30 16:14:17.000000000 +0200 ++++ Spakman-ruby-gd-c0b03fc/readme.ja 2011-03-15 08:52:04.000000000 +0100 +@@ -1,7 +1,7 @@ + = Ruby/GD 0.7.4 + + Thomas Boutell氏によるgdライブラリをRubyから利用するための拡張ライブラ +-リです.PNGやJPEGフォーマットのイメージを手軽に作成することができます. ++リです.PNGやGIF,JPEGフォーマットのイメージを手軽に作成することができます. + + Ruby/GDはもともと"GD"の名称で まつもと ゆきひろ氏(matz@ruby-lang.org) + によって開発およびメンテナンスが行われてきました.その後,本家gdの機能 +@@ -14,6 +14,13 @@ + 最新版は http://kirara.prec.kyoto-u.ac.jp/~tam/GD/ より入手することが + できます. + ++== 0.7.4からの主な変更点 ++ ++* GIFサポートの再開 ++ ++gdライブラリは2.0.28以降,GIFイメージの入出力を再度利用できるように ++なりました.これに従って,Ruby/GDもGIFに関するサポートを再開させました. ++ + == 旧バージョン(旧称:GD-0.6.2.tar.gz)からの主な変更点 + + * GIFサポートの打ち切り +Only in Spakman-ruby-gd-c0b03fc/: ruby-gd.gemspec diff --git a/graphics/ruby-gd/pkg-descr b/graphics/ruby-gd/pkg-descr index 2d47432d289b..ba3291b2161f 100644 --- a/graphics/ruby-gd/pkg-descr +++ b/graphics/ruby-gd/pkg-descr @@ -3,3 +3,5 @@ Ruby/GD is an extension library to use Thomas Boutell's gd library Author: Matsumoto Yukihiro <matz@ruby-lang.org> (original author) Ryuichi Tamura <tam@kais.kyoto-u.ac.jp> (current maintainer) +WWW: http://rubyforge.org/projects/ruby-gd/ +WWW: https://github.com/Spakman/ruby-gd |